강의

멘토링

로드맵

Inflearn brand logo image

인프런 커뮤니티 질문&답변

qnekqnek님의 프로필 이미지
qnekqnek

작성한 질문수

[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)

예시문제 작업형2(ver. 2025) 🆕

시험환경 ver.2025 작업형2 RMSE

작성

·

131

0

화면_작업2유형.jpg.webp

안녕하세요. 이번에 올라온 2유형 문제를 풀어보았는데요.

<작성한 코드>

import pandas as pd

train = pd.read_csv("data/customer_train.csv")

test = pd.read_csv("data/customer_test.csv")

# 사용자 코딩

pd.set_option('display.max_columns', None)

# 전처리

target = train.pop('총구매액')

train['환불금액'] = train['환불금액'].fillna(0)

test['환불금액'] = test['환불금액'].fillna(0)

# [선택2] 원핫 인코딩 (카테고리가 다르면 합쳐서 진행 필요함)

df = pd.concat([train, test])

df = pd.get_dummies(df)

# 다시 분리

train = df.iloc[:len(train)]

test = df.iloc[len(train):]

print(train.shape, test.shape)

# 검증용 데이터

from sklearn.model_selection import train_test_split

X_tr, X_val, y_tr, y_val = train_test_split(train, target, test_size=0.2, random_state = 0)

print(X_tr.shape, X_val.shape, y_tr.shape, y_val.shape)

# 모델 학습 및 평가

from sklearn.ensemble import RandomForestRegressor

model = RandomForestRegressor()

model.fit(X_tr, y_tr)

pred = model.predict(X_val)

from sklearn.metrics import root_mean_squared_error

print("RMSE:",root_mean_squared_error(y_val, pred))

# 제출

pred = model.predict(test)

submit = pd.DataFrame({'pred': pred})

submit.to_csv('result.csv', index=False)

print(pd.read_csv('result.csv'))

 

 

결측치를 0으로 채우고 train,test 합쳐서 원핫인코딩 후 랜덤포레스트회귀 모델사용 RMSE 평가지표 값이 나왔는데 강사님 수치랑 너무 크게 차이가 나서요. 이렇게 많이 차이 나도 괜찮은건가요? 작을수록 좋은거이긴 하지만 강사님이랑 너무나 다른 값이 나와서 제가 작성한 코드와 화면 출력하여서 틀린부분이 있는지 문의 드립니다.

답변 2

0

퇴근후딴짓님의 프로필 이미지
퇴근후딴짓
지식공유자

데이터가 또 수정되었네요 숫자가 너무 커서 저도 좀 이상했는데 데이터가 변경되어 그렇습니다.

qnekqnek님의 프로필 이미지
qnekqnek
질문자

네 감사합니다 ^^
제가 하나 여쭤볼게 있는데요.

  1. object형 컬럼만 단순 drop 후 평가(baseline)

  2. label인코더 전처리 후 평가

  3. 원핫인코더 전처리 후 평가

이렇게 세가지로 학습시켜보고 제일 나은 평가지표로 선택해서 제출하면 되는거 맞는거죠? ^^

0

안녕하세요, 인프런 AI 인턴입니다. qnekqnek님께서 작성하신 코드에 대해 리뷰해 드리겠습니다.

qnekqnek님이 작성하신 코드에서 사용한 전처리 및 모델 학습 과정은 기본적으로 올바른 방향을 따르고 있습니다. 그러나, RMSE 값이 예상보다 크게 차이 나고 있다면, 다음과 같은 사항들을 점검해 보시는 것이 좋겠습니다.

  1. 데이터 분할 및 인코딩:

    • train과 test 데이터의 병합 후 원핫 인코딩을 진행하고 다시 분리하는 과정에서 컬럼 정렬이나 인코딩의 범위가 정확히 조정되었는지 확인이 필요합니다. 이는 train과 test 데이터의 컬럼이 동일해야만 모델이 정확히 작동할 수 있기 때문입니다.
  2. 모델 및 유사데이터 설정:

    • 강사님과 RMSE 값이 크게 다르다면, 데이터의 전처리 방법 외에도 랜덤 포레스트의 파라미터나 랜덤 시드 설정도 확인해 보세요. RandomForestRegressorrandom_state를 추가하면 더욱 일관된 결과를 얻을 수 있습니다. 예를 들어: model = RandomForestRegressor(random_state=0)
  3. 평가지표 계산:

    • root_mean_squared_error라는 함수명이 스크립트에 등장하지만, 실제로는 sklearn.metrics에서 제공되지 않는 것으로 보입니다. RMSE를 계산하려면 mean_squared_error 함수를 사용할 수 있으며, 이를 제곱근으로 변환하면 됩니다.
   from sklearn.metrics import mean_squared_error
   rmse = mean_squared_error(y_val, pred, squared=False)
   print("RMSE:", rmse)
  1. 결과 값 확인:
    • 출력된 RMSE 값이 크게 다른 경우, 가장 기본적인 데이터 전처리 과정 및 매개변수를 검토하는 것이 중요합니다. 또한, 강사님의 결과와 비교할 때, 사용한 데이터셋이 동일한지 확인하는 것도 권장됩니다.

이와 같은 사항들을 점검해 보신 후에도 문제 해결이 어렵다면, 데이터 및 코드 전반을 다시 한번 살펴보시는 것을 추천드립니다.

추가적으로 비슷한 문제를 다룬 게시글을 추천 드립니다:
- 예시문제 작업형2 신버전

게시글에서는 기본적인 모델링을 포함해 다양한 범위의 머신러닝 활용 방법이 포함되어 있습니다. 질문자님의 코드와 유사한 코드를 참조하며 비교하시기 바랍니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

qnekqnek님의 프로필 이미지
qnekqnek

작성한 질문수

질문하기