웹 로그 기반 조회수 예측 해커톤

알고리즘 | 정형 | 회귀 | 웹 로그 | RMSE

  • moneyIcon 상금 : 인증서
  • 639명 마감

 

[Private 1위] CatBoost + Optuna + StratifiedKFold(group)

2024.03.06 18:41 730 조회 language

[모델]
- CatBoostRegressor을 사용했고, optuna를 이용한 hyperparameter 설정을 하였습니다.

[전처리]
- object type의 column 들은 Targetencoder를 사용하여 encoding을 하였습니다.
- 결측값이 존재하는 컬럼들을 제거하였고, sessionID를 제거하였습니다.
- 학습 데이터에서 중복 데이터를 제거하였습니다.
- ChatGPT에게 질문하여, 새로운 파생변수를 생성하였습니다.

[학습]
- optuna를 이용해 hyperparameter를 먼저 설정한 후 학습을 진행하였습니다.
- optuna 과정과 제출을 위한 학습 과정 모두 동일한 cross-validation 학습 방법을 사용하였습니다.
- cross-validation은 StratifiedKFold를 사용하였으며, 이는 252,289개의 학습 데이터 중 Target의 nunique가 117개 밖에 존재하지 않아 사용할 수 있겠다고 판단하였습니다.
- StratifiedKFold의 groups 변수에 학습 데이터의 'userID'를 할당하였으며, 데이터셋 분할 후 해당 컬럼을 제거하였습니다.(이 방법을 사용했을 때, validation rmse가 크게 감소하였습니다.)
- EDA를 통해 bounced가 1일 때는 항상 Target이 1인 것을 관찰하였고, 학습 과정에서 bounced가 0인 데이터만 학습하였습니다.
- 각 fold마다 학습을 진행하였고, 학습된 모델을 테스트 데이터셋에 대해 추론을 하여 결과를 평균을 내는 Soft voting을 하였습니다.

[후처리]
- EDA를 통해 Target의 범위가 1이상 386이하인 것을 관찰하였고, 모델의 예측 결과가 0.xx부터 92.xx 사이인 것을 확인하고, 1 이하로 예측된 결과값들을 1로 변환하였습니다.
- bounced가 1인 데이터들의 예측값을 1로 변환하였습니다.

[🎻]
- 코드는 직접 작성하였습니다.
- Intel i7-13700F (24 core) 환경에서 학습하였습니다.

코드
로그인이 필요합니다
0 / 1000
rdgrdg
2024.03.08 10:28

Chatgtp한테는 어떻게 물었는지 여쭤봐도 될까요?

EISLab_이희원
2024.03.08 22:28

여러번 시도해서 얻은 결과이고, 오래되서 기록이 없네요.....

와샌즈
2024.03.11 11:52

우와 깔끔하네요