강의

멘토링

로드맵

Inflearn brand logo image

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

smrudsla님의 프로필 이미지
smrudsla

작성한 질문수

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

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

예제 작업형2 관련 질문드립니다.

해결된 질문

작성

·

46

0

아래와 같이 코드를 작성했는데, rmse값이 선생님께서 푸신거랑 다르게 너무 작게 나와서 질문드려요.
제가 봤을 땐 선생님이 작성하신 코드랑 똑같이 한 것 같은데..
어떤 부분에서 달라진 건가요?
제가 어디서 실수한지 모르겠습니다

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)
pd.set_option('display.float_format','{:.10f}'.format)

# 총구매액 예측 -> 회귀. RandomForestRegressor & predict
# root_mean_squared_error
# csv파일명 : result.csv / 타겟 칼럼명 : pred (2482개!)

# EDA

# 데이터전처리

# 환불금액 결측치 0으로 처리
train['환불금액'] = train['환불금액'].fillna(0)
test['환불금액'] = test['환불금액'].fillna(0)

# 레이블 인코딩
from sklearn.preprocessing import LabelEncoder
lb = LabelEncoder()
cols = train.select_dtypes(include = 'O').columns

for col in cols:
	train[col] = lb.fit_transform(train[col])	
	test[col] = lb.transform(test[col])

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

# 데이터분할
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)

# 모델학습 및 평가
from sklearn.ensemble import RandomForestRegressor
rf = RandomForestRegressor(random_state = 0, n_estimators = 400)
rf.fit(X_tr,y_tr)
pred = rf.predict(X_val)

from sklearn.metrics import root_mean_squared_error
print(root_mean_squared_error(y_val, pred))

# 베이스라인 : 808.1092610336881
# n_estimators = 400 : 793.0646436460113

# 결과 계산 및 제출
pred = rf.predict(test)

result = pd.DataFrame({'pred': pred})
result.to_csv('result.csv', index = False)
submit = pd.read_csv('result.csv')
print(submit)

답변 2

1

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

정상입니다 🙂

문제가 전혀없고 저보다 성능이 좋네요!

 

화이팅!!

1

안녕하세요, 인프런 AI 인턴입니다. smrudsla님께서 작성하신 코드의 RMSE 값이 기대했던 것과 다르게 나오는 이유를 확인하기 위해 몇 가지 점검할 사항을 알려드리겠습니다.

  1. 모델 하이퍼파라미터:

    • RandomForestRegressor의 n_estimators 값을 400으로 설정하셨습니다. 다른 하이퍼파라미터의 기본값은 그대로 두셨는지 확인이 필요합니다. 예를 들어 max_depth, max_features, min_samples_split 등 다른 파라미터 값들이 결과에 영향을 줄 수 있습니다.
  2. 데이터 전처리:

    • 레이블 인코딩을 진행하셨지만, 문제는 LabelEncoder가 적절히 동작했는지 확인해보는 것입니다. train 데이터와 test 데이터의 카테고리 범위 및 작품이 동일해야 합니다.
    • 특히 인코딩 후 traintest 데이터의 컬럼 수가 원하는 대로 일치하는지 확인해 보세요.
  3. 평가 지표 함수:

    • 코드에서 사용한 root_mean_squared_error는 기본 제공되는 함수가 아닙니다. 일반적으로 sklearn.metrics.mean_squared_error로부터 RMSE를 계산할 수 있습니다. 아래 코드를 참고하세요:
    from sklearn.metrics import mean_squared_error
    rmse = mean_squared_error(y_val, pred, squared=False)
    print("RMSE:", rmse)
    
  4. 데이터의 일관성:

    • train_test_split 전에 데이터가 정상적으로 정리되었는지 확인합니다. target 컬럼 외 모든 컬럼이 모델 입력 변수로 적절히 준비되어 있는지 확인 바랍니다.
  5. 결과 비교:

    • 강사님과 RMSE 값의 차이가 있다면, 사용하는 데이터셋 자체가 동일한지 점검해보세요. 데이터셋 내 결측치 처리 이후의 데이터 차원이 동일해야 하며 같은 데이터로 평가되어야 합니다.

이와 같은 점들을 하나씩 검토해보시길 권장합니다. 혹여 다른 문제가 지속된다면, 다음의 유사한 문제를 다룬 게시물을 참고해주세요:

이 게시물에서는 유사한 문제에서 RMSE와 모델 검증 과정을 다루고 있습니다.

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

smrudsla님의 프로필 이미지
smrudsla

작성한 질문수

질문하기