인프런 커뮤니티 질문&답변
모의문제 작업형 2 코드 ㅠㅠㅠ 제가 작성한 코드에 어디에 문제가 있는것일까요?
해결된 질문
작성
·
61
0
import pandas as pd
train = pd.read_csv("data/customer_train.csv")
test = pd.read_csv("data/customer_test.csv")
#
print(train.shape, test.shape)
#결측치 채우기
train['환불금액']=train['환불금액'].fillna(train['환불금액'].median())
test['환불금액']=test['환불금액'].fillna(test['환불금액'].median())
# print(train.isnull().sum())
#범주형컬럼 카테고리 수 확인하기
cols=train.select_dtypes(include="O").columns
print(cols)
for col in cols:
same=set(train[col].unique())==set(test[col].unique())
print(col,same)
train=train.drop('회원ID',axis=1)
test=test.drop('회원ID',axis=1)
target=train.pop("총구매액")
mid=len(train)
#데이터 합치고 인코딩 후 다시 분할하기
df=pd.concat([train,test],axis=0)
print(df)
#라벨인코딩하기
from sklearn.preprocessing import LabelEncoder
le=LabelEncoder()
for col in cols:
df[col]= le.fit_transform(df[col])
# print(df.head(8))
#다시 나누기
train=df.iloc[:mid].copy()
test=df.iloc[mid:].copy()
print(train.shape, test.shape)
#민맥스스케일링(추후)
#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=100)
# #모델구축(1) #707.539
# from sklearn.ensemble import RandomForestRegressor
# model=RandomForestRegressor(random_state=100)
# model.fit(X_tr, y_tr)
# pred=model.predict(X_val)
#모델구축(2) 705.1955
import lightgbm as lgb
model=lgb.LGBMRegressor(random_state=0, verbose=-1)
model.fit(X_tr, y_tr)
pred=model.predict(X_val)
#성능평가RMSE
from sklearn.metrics import root_mean_squared_error
print(root_mean_squared_error(y_val, pred))
성능평가한 값이 선생님 결과랑 터무니없이 차이가 많이 나네요 ㅠㅠ어디가 잘못된걸까요
답변 3
0
질문의 이유를 찾았습니다.
제가 영상에 빠르게 자막처리 할게요
랜포 800대 점수가 나오는 것이 정상입니다.
(lightgbm 700대)
작업형2가 새로 나오면서 주최측에서 안내 없이 데이터를 3번이나 변경하다보니 그 사이 촬영이 되어 그렇습니다.
0
0
안녕하세요, 인프런 AI 인턴입니다. 이선희님.
작성하신 코드를 검토해보니, 기본적인 데이터 전처리 및 모델 학습 과정이 잘 구성되어 있습니다. 하지만 성능(RMSE)이 선생님 결과와 크게 차이가 나는 경우는 다음 사항들을 점검해보시면 좋을 것 같습니다.
1. 데이터 전처리 관련 사항
fillna로 결측치를 채우실 때,train과test에서 같은 중간값으로 채우시는 게 문제가 될 수는 없습니다만, 전체 데이터의 분포에 따라 달라질 수 있습니다. 만약 데이터 분포에 따라 너무 큰 차이가 있다면 다시 확인이 필요할 수 있습니다.
- 범주형 데이터를 라벨 인코딩하는 과정에서, 컬럼별 유니크한 값의 범위가
train과test가 달라지지 않았는지 확인해 보십시오.
2. 모델 및 파라미터 설정
LGBMRegressor를 사용할 때,random_state와 기타 파라미터들이 전혀 다른 결과를 초래할 수 있습니다. 동일한 조건이 설정되었는지 확인하세요.
verbose=-1은 출력을 억제하지만, 학습과정의 디버그 정보가 필요하다면 다른 값을 사용하여 출력을 살펴보시는 것도 방법입니다.
3. 성능평가 방식 및 최적화
root_mean_squared_error대신mean_squared_error를 사용하고squared=False를 설정하여 RMSE를 직접 계산하십시오.
from sklearn.metrics import mean_squared_error
rmse = mean_squared_error(y_val, pred, squared=False)
print("RMSE:", rmse)
- 모델 학습환경: 학습한 데이터에 따라 동작의 차이가 있을 수 있습니다. 동일한 데이터셋인지, 전처리 및 학습과정이 선생님 코드와 일치하는지 꼼꼼히 비교해보세요.
추천 게시글
- 작업형 2유형 코드 점검 한번만 부탁드립니다..: 유사한 전처리 및 모델 평가에 관한 게시글에서는 과정을 더 명확하게 설정하는 방법을 다룹니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.





