주제

3차 프로젝트 5일차

 

  • 어제의 중간 보고 회의 이후에 나온 사항 :
    • 아직 성능을 올릴 시간이 부족하여 추가적으로 하루를 더 작업하고 오늘 다시 한 번 모이기로 함
    • 파생 변수의 유무가 성능에 큰 영향을 줌
    • 조원의 요청으로 내가 작업한 코드 공유함
  • 나는 어느정도 해볼 것은 다 해보았기 때문에 혹시 몰라 한 두가지 시도만 더 해보았음

 

1. 성능 개선 시도

  • 이상치를 제거한 총상환원금비율을 포함한 총 4개의 피쳐로 다시 하이퍼파라미터 튜닝을 시도
    • best_params_의 결과가 동일했다
  • 4개 피쳐 + 튜닝 모델의 조합은 여태 튜닝 모델의 결과 중 가장 우수했지만 역시나 기본 모델보다 높진 않았다
    • 이 현상은 다른 조원들도 겪고 있었다
  • 이번에는 두번째로 중요도가 높았던 총상환이자비율의 이상치를 제거하여 시도해보았다
  • 총상환원금비율은 이상치가 제거되지 않은 상태로 두고, 총상환이자비율만 제거하였다
  • 먼저 이상치 확인

총상환이자비율의 이상치 확인

# 이상치 제거
Q1 = train[['총상환이자비율']].quantile(0.25)
Q3 = train[['총상환이자비율']].quantile(0.75)

IQR = Q3 - Q1

threshold = 1.5

outliers = (train[['총상환이자비율']] < (Q1 - threshold * IQR)) | (train[['총상환이자비율']] > (Q3 + threshold * IQR))

train_no_outliers = train[~outliers.any(axis=1)]
  • 제거한 후 총 94385개의 데이터가 남았다. 그 전에는 96294개가 존재
  • 이상치 제거 후 다시 시각화하여 확인
    • 이상치가 많이 줄어든 것을 확인할 수 있었다

이상치 제거 후 모습

  • 이상치 제거 후에 다시 스케일링을 진행하고 피쳐 4개 ('총상환원금비율', '총상환이자비율', '총상환원금_log', '총상환이자_log')만 사용하여 기본 모델을 훈련시켜보았다
  • 그 결과 정확도는 약 94.7%, F1 score는 약 93.3%였다
  • 이는 총상환원금비율의 이상치를 제거한 결과보다 우수하지 않았다
  • 그 다음 시도는 총상환원금비율과 총상환이자비율 모두 이상치를 제거해보았다
  • 과정은 위와 동일하여 생략
  • 이상치 제거 전과 후의 모습은 이렇다 :

이상치 제거 전
이상치 제거 후

  • 이번에도 이상치가 잘 제거되었다
  • 같은 기본 모델에 4가지 피쳐를 사용해본 결과는 이렇다 :
    • 정확도는 약 95.0%, F1 score는 약 93.8%로 정확도는 최우수 성능과 같았지만, F1 점수는 떨어졌다
    • 이는 일반화가 덜 되었다고 생각해볼 수 있다.
    • 정확도도 반올림하여 95%지만 실제로 0.951정도였고 1개 피쳐의 이상치만 제거했을 땐 0.952였으므로 사실상 정확도의 미세한 차이도 존재했다

총 성능 평가 정리

 

정리

  • 오늘의 시도를 분석해보자면, 특성 중요도가 가장 높은 피쳐의 이상치를 제거하는 것이 가장 효과적이었고 오히려 많은 피쳐의 이상치를 제거하는 건 F1 score의 성능 저하를 일으킬 수 있다는 것이다.
  • 이상치 제거 방법에 대해 공부할 때, 전체 데이터의 이상치를 제거하면 오히려 정확도가 매우 매우 낮았는데 이런 이유에서였던 것 같다
  • 모델의 정확도도 중요하지만, 다중분류 모델에서는 F1 score도 중요하기 때문에 F1 score의 저하는 눈여겨볼 필요가 있는 것 같다

+ Recent posts