강의

멘토링

커뮤니티

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

김호범님의 프로필 이미지
김호범

작성한 질문수

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

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

예시문제 작업형 2(ver. 2025) rmse 문의드립니다.

해결된 질문

작성

·

31

0

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

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

train = train.drop('회원ID', axis=1)

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

test_id = test.pop('회원ID')

cols = train.select_dtypes(include ='O').columns

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

from sklearn.preprocessing import LabelEncoder

for col in cols:

le = LabelEncoder()

# train[col] = le.fit_transform(train[col])

# test[col] = le.transform(test[col])

df[col] = le.fit_transform(df[col])

# df = pd.get_dummies(df[cols])

train = df[:len(train)]

test = df[len(train):]

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, max_depth=5, n_estimators=500)

# rf.fit(X_tr,y_tr)

# pred = rf.predict(X_val)

from xgboost import XGBRegressor

xgb = XGBRegressor(random_state=0, max_depth=5, n_estimators=400, learning_rate=0.01)

xgb.fit(X_tr, y_tr)

pred = xgb.predict(X_val)

from sklearn.metrics import mean_squared_error, r2_score

mse = mean_squared_error(y_val, pred)

rmse = mse**(1/2)

r2 = r2_score(y_val, pred)

print(mse, rmse, r2)

 

이렇게 작성했을때 이렇게 나오는데 잘된게 맞는건지 아닌건지 모르겠습니다. 선생님께서는 레이블 인코딩했을때 rmse가 813.22가 나오셨다는데 왜이렇게 차이가 많이나는지 모르겠습니다.

672765.0076766363 820.2225354601252 0.7020188276193622

답변 2

0

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

안녕하세요 결론 문제 없음

 

제 결과와 대략 +- 5% 이내면 큰 문제 없다고 봐주세요

  • xgb가 워닝을 잘 출력해서 lightgbm을 추천합니다.

  • root_mean_squared_error 평가지표가 버전업이 되면서 사용가능하니 사이킷런에서 불러와서 사용하면 됩니다.

0

안녕하세요, 인프런 AI 인턴입니다. 김호범님께서 작성하신 코드를 살펴보겠습니다.

제공해주신 코드는 전반적으로 잘 구성되어 있으며, 크게 문제가 되는 부분은 없어 보입니다. 다만, RMSE 값에서 차이가 발생하는 이유를 몇 가지 관점에서 점검해 보셔야 할 것 같습니다.

  1. 데이터 전처리:

    • 환불금액 결측치를 중앙값으로 채우신 것은 일반적인 방법이지만, 데이터의 분포를 고려했을 때 평균이나 다른 방식이 더 적합할 수도 있습니다.
    • 범주형 데이터의 레이블 인코딩 과정에서, 학습 및 테스트 데이터 모두에 정확히 동일한 인코딩이 적용되었는지 확인이 필요합니다. 아주 작은 차이도 RMSE에 영향을 줄 수 있습니다.
  2. 모델 하이퍼파라미터 및 구성:

    • XGBRegressor의 하이퍼파라미터 세부 설정에 따라 결과가 달라질 수 있습니다. 예를 들어, learning_rate, max_depth, n_estimators값이 신중히 설정되었는지 확인해 보세요.
    • random_state가 동일하게 설정되어 있는지, 모든 모델 구성 요소에 걸쳐 일관되게 적용되는지 점검해 보세요.
  3. 평가지표:

    • mean_squared_error를 통해 RMSE를 산출하신 방법은 옳습니다.
    • r2_score를 추가로 확인하여 설명력을 파악하신 점은 유익합니다.

참고: 유사한 질문의 해결 방법

아래는 유사한 질문 해결에 도움이 될 수 있는 링크입니다:

이와 같은 요소들을 하나씩 검토하신다면, 결과에 한층 더 정확한 결과 및 근접한 RMSE 수치를 얻을 수 있을 것입니다.

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

김호범님의 프로필 이미지
김호범

작성한 질문수

질문하기