• 카테고리

    질문 & 답변
  • 세부 분야

    딥러닝 · 머신러닝

  • 해결 여부

    미해결

이상치 제거 및 오버샘플링 후 강의와 다르게 성능이 더 안좋게 나타납니다ㅠㅠ

22.01.22 00:17 작성 조회수 183

0

이상치 제거 파트에서

def get_preprocessed_df(df=None):
  df_copy = df.copy()
  Amount_log = np.log1p(df_copy["Amount"].values.reshape(-1,1))
  df_copy["Amount"] = Amount_log
  df_copy.drop("Time", axis=1, inplace=True)
  outlier = get_outlier(df_copy, "V14"1.5)
  df_copy.drop(outlier, axis=0, inplace=True)
  return df_copy
 
위와 같이 전처리 진행해주고 Logistic Regression하고 LightGBM 돌렸는데, 강사님의 결과와 다르게 오히려 로그변환만 했을 때보다 성능이 전체적으로 떨어지게 나오네요ㅠㅠ 왜그런지 이유를 알 수 있을까요??
 
로그변환만 했을 경우
정확도: 0.9996 정밀도: 0.9444 재현율: 0.8041 F1: 0.8686 ROC: 0.9746
 
이상치 제거까지 함께 했을 경우
정확도: 0.9995 정밀도: 0.9280 재현율: 0.7945 F1: 0.8561 ROC: 0.9749
 
 
SMOTE 적용 후 LightGBM 적용도 결과가
 
정확도: 0.9323 정밀도: 0.0217 재현율: 0.8767 F1: 0.0424 ROC: 0.9045
 
로 강사님께서 하신 결과랑 많이 다르게 나오네요...
앞선 3장에서 만든 성능평가 함수가 문제가 있는건가, 아니면 패키지나 라이브러 버전 문제 때문인가 왜그런지 모르겠네요ㅠㅠ
 
그리고 추가적으로 SMOTE를 하면 레이블값이 불균형하지 않으니 LightGBM 파라미터 중 "boost_from_average"를 True로 설정해도 되는 것이 아닌가 궁금합니다

답변 1

답변을 작성해보세요.

0

안녕하십니까, 

해당 영상은 사이킷런 0.19.2 로 수행한 결과이므로 새로운 버전에서는 달라질 수 있습니다. 

그렇지만 제가 최신 버전의 사이킷런(1.0.2)과 LightGBM(3.3.2) 버전으로 테스트 해본 결과와 지금 질문 올려 주신 결과는  다르군요.  아래는 제가 테스트한 결과 입니다.  Light GBM만 해당 되며 AUC 보다는 재현율에 집중해 주시면 될 것 같습니다.  로그변환->이상치제거->SMOTE 할 때마다 재현율이 좋아집니다. 

원본 데이터 LGBM: 정확도: 정확도: 0.9995, 정밀도: 0.9573, 재현율: 0.7568,    F1: 0.8453, AUC:0.9790
정규 분포 변환후 LGBM: 정확도: 0.9995, 정밀도: 0.9569, 재현율: 0.7500, F1: 0.8409, AUC:0.9779

로그 변환: 정확도: 0.9995, 정밀도: 0.9576, 재현율: 0.7635, F1: 0.8496, AUC:0.9796

이상치 제거: 정확도: 0.9996, 정밀도: 0.9603, 재현율: 0.8288, F1: 0.8897, AUC:0.9780

SMOTE 적용후: 정확도: 0.9996, 정밀도: 0.9118, 재현율: 0.8493, F1: 0.8794, AUC:0.9814

주피터 노트북을 재 기동하시거나 creditcard.csv를 다시 다운로드 받으 신후 수행해 보시거나 사용하시는 사이킷런 버전과 LightGBM 버전을 다시 확인해 보시면 어떨까 싶습니다. 

그리고 smote시에  boost_from_average=True로 변경하고 함 적용해 보시지요.

감사합니다. 

김남욱님의 프로필

김남욱

질문자

2022.01.25

코랩환경에서 sklearn(1.0.2), lightGBM(2.2.3) 사용 중이며 다시 확인하여도 이상치 제거 후에 재현율이 약간 떨어지고 SMOTE 적용 후에는 재현율이 약간 올라도 정밀도가 0.0217, F1 스코어가  0.0424로 처참하게 나오네요ㅠㅠ

Imbalanced-learn 패키지 버전이 0.8.1 인데 해당 버전이 문제인건지 이유를 잘 모르겠습니다ㅠㅠ