본문 바로가기
Kaggle 대회

[Santander Product Recommendation] Feature engineering

by 사자처럼 우아하게 2019. 12. 25.

 

 

어렵게, 정말 어렵게 Baseline을 구축했습니다.

쉽게 갈 수 있는 길을 어렵게 돌아온 이유는 생각해보면 문제에 대한 이해를 후순위에 두고 기술적으로만 접근했기 때문인 것 같습니다. 큰 교훈 하나 얻었으니 다음 대회부턴 문제에 대한 이해를 우선시 해야겠습니다.

아무튼 현재까지 구축된 Baseline을 기반으로 모델 성능을 Improve 하는 시도를 해보겠습니다.

 

1. Baseline : Public Score 0.01088

 - lag-1 값(지난달 개인정보 + 보유 상품)을 신규 Feature로 하고 3 Folds(shuffle =True)로 CV 했을때 결과 입니다.

 - 생각보다 결과가 나빴지만 어렵게 구축한 Baseline인 만큼 만족하고 다음 단계로 넘어갔습니다.

 

2. Fold 구성 방식 변경 : Public Score 0.00885

- Fold 구성 시 Shuffle =True 를 False로 변경하고 학습한 결과 터무니 없는 결과가 나왔습니다. 아무래도 Cross Validation을 수행할 경우 포함되지 않는 고객 ID들로 인해 학습 한계가 생기는 것 같습니다.

 

3. 학습 방식 변경 : Public Score 0.02550

 - Cross validation을 고집했는데 이를 버리고 데이터셋을 train/validation 셋으로 나누는 방식으로 변경했습니다. 이때 우리가 예측해야하는 Test Set이 '2016-06-28' 데이터인것을 감안하여 Validation set을 '2016-05-28' 데이터로 설정했습니다.

- 학습 결과는 만족스러웠습니다. 역시 서로 포함되어 있지 않은 고객 ID로 인해 학습이 더이상 되지 않는 문제가 있었던것 같습니다.

 

4. 모델 성능 개선 : Public Score 0.02550 → 0.02789 → 0.02885

- 안정적으로 학습이 되는 것을 확인했으니 이제 모델 성능에 도움이 되는 Feature를 찾아해맸습니다. 

- 이미 종료된 대회이다 보니 많은 Tip들이 있었는데요 저는 그중에서 가장 성능에 도움을 준다는 Lag1~3 컬럼을 추가했습니다. Lag1~3은 고객이 지난달 ,지지난달 ,지지지난달에 보유했던 상품 그리고 개인정보들을 Feature로 사용하는 것입니다. 우승작들은 Lag4~5까지 확장하여 모델 성능을 올렸다고 하는데요 저는 H/W 문제도 있고 시간 문제도 있으니 Lag3까지만 만들어서 테스트 했습니다.

- 테스트 결과, Lag 2 의 경우 0.02789 로 기존대비 10% 성능 개선을 보였고 Lag3를 추가했을 때 0.02885로 약 3.4% 성능 개선을 보였습니다.

 

이외에도 다양한 Feature engineering 방법들이 있겠지만 나머지 컬럼들은 성능 개선에 크게 영향을 주지 않는다는 Tip들이 많기 때문에 여기까지만 진행하고 우승작이 시도한 MLP 모델링 후 앙상블하는 방식을 시도해보도록하겠습니다.

 

 

 

 

 

 

댓글