본문 바로가기
Kaggle 대회

[Porto Seguro’s Safe Driver Prediction] Improve

by 사자처럼 우아하게 2020. 2. 23.

 

최종적으로 240등(Private 0.29025, Public 0.28669) 모델을 구축했다.

이전 포스팅에서 공개한 Baseline을 기반으로 업그레이드를 시켰으며, 주된 변경점은 1. category Feature encoding 방법 변경 2.Undersampling  이다.

 

[ Category Feature Encoding ]

이전의 머신러닝 대회에서는 카테고리 변수 내에 Label이 너무 많아 모두 dummy화 시킬 경우 Cardinality가 너무 높아져서 문제가 되는 경우가 많았다. 그래서인지 당연하게 Category Feature를 Get_dummy가 아닌 Label Encoding을 했는데 이게 문제가 되었다.

문제를 발견한 건 어떤 방법을 써도 성능이 개선되지 않음을 깨달았을 때부터이다. 모델도 변경하고 Parameter도 변경해봤는데 특정 수준 이상으로 학습이 되지 않았다. 원인에 대해 고민하다가 Input Parameter가 51개밖에 되지 않는 것이 문제가 될 수 있다고 생각하고 Category Feature를 Get_dummy로 모두 변경했다.

그 이후부턴 학습이 잘되기 시작했다. 

* 참고 : https://stackoverflow.com/questions/38413579/what-is-the-difference-between-sklearn-labelencoder-and-pd-get-dummies

 

[ Undersampling ]

이전 포스팅에서 SMOTE 알고리즘을 활용한 Oversampling을 했을 때 처참한 결과가 나왔다고 이야기했다. TSNE 된 결과로 보면 Target 0과 1이 Random하게 섞여있는 것을 확인할 수 있는데 이 때문에 Oversampling이 의미가 없었던 것으로 추정된다.

Imbalance된 문제를 해결해보고자 Undersampling을 시도했다. 

Undersamling은 Random하게 0 Value인 Row 중 1/3 에 해당하는 만큼의 데이터만 뽑아오도록 했다. 이렇게 하면 정보 유실의 문제가 생길 수 있기 때문에 Random하게 sampling 하여 학습하는 과정을 총 5번을 실시했다. 

그 결과는 매우 만족스러웠는데 Random Sampling을 여러번 반복하여 학습시키는 과정이 앙상블과 유사하기 때문일것이다.

 

 

Feature engineering, feature selection, Porto Seguro’s Safe Driver Prediction, Portoseguro, XGBoost, 딥러닝, 머신러닝, 캐글, 캐글 대회, 캐글코리아

댓글