Kaggle 대회

[Porto Seguro’s Safe Driver Prediction] Improve

사자처럼 우아하게 2020. 2. 23. 00:34

 

최종적으로 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, 딥러닝, 머신러닝, 캐글, 캐글 대회, 캐글코리아