미누에요
[회고록] LG AIMERS 6기 온라인 해커톤 마치고 쓰는 반성문 본문
작년 여름방학에 LG AIMERS라는 아주 좋은 프로그램을 알게 되었고, 5기를 진행하며 내가 많이 부족하다는 걸 깨달았었다.
그리고 그 후로 머신러닝/딥러닝 관련 스터디를 진행하며 내가 잘 알지 못하는 부분에 대한 학습을 진행하였고, 올해 초에 LG AIMERS 6기를 진행하게 되었다.
처음에 수강하는 강의의 내용은 5기와 완벽하게 동일해서, 빠르게 넘어갔다.
그리고 시작된 온라인 해커톤....
이번에는 elice가 아닌, dacon에서 진행되었다!
나는 처음에 엄청난 삽질을 했다.....
코드에서 자꾸 train데이터에서 선택한 Feature가 test 데이터에 존재하지 않아 학습시킨 모델에 test 데이터를 넣지 못하고 있다는 것.
처음에 RandomForest 점수가 0.60, XGboost가 0.61, LightGBM이 0.61이 나왔다.
생각보다 너무 미미한 점수라 뭐가 잘못되었다는 것을 깨달았고............................
내가 생각한 AI 모델 학습의 순서는 train 데이터를 이용하여 모델을 학습시킨 후, test 데이터를 가지고 train 데이터와 동일한 조건으로 전처리 및 인코딩, 스케일링을 진행하는 거라고 생각했지만, 원-핫 인코딩을 진행할 때 train데이터와 test데이터를 같이 동시에 인코딩하는 게 맞다는 생각이 들었다.
너무 주절주절이라 이해하기 어려울까봐 다시 말하자면, train데이터를 가지고 전처리, 인코딩, 스케일링 부터 모델 학습까지 모든 과정을 수행한 뒤, test 데이터는 train 데이터에 대한 작업이 모두 끝난 후에 전처리, 인코딩, 스케일링을 수행하려 했다는 것이다.
너무도 멍청했던 나는 이 과정을 고치면서 아래 내용들을 뼈저리게 깨달았다.
- train데이터와 test 데이터의 전처리 과정은 동일한 조건이어야 한다.
- 또한 학습한 모델에 들어간 feature와 test데이터를 가지고 학습시킬 때 feature도 동일해야한다.
나는 AI 모델이 예측하는 게 입력된 피쳐들과 동일한 피쳐를 넣어야한다는 걸 알지 못했다.
(왜냐면 그건 인공지능이라고 할 수 없기 때문. 그건 그냥 함수잖아. 똑같은 input을 넣어서 output을 예측하는 건)
그래서 2회차임에도 불구하고 엄청난 삽질을 겪은 결과 ^^
나는 그래도 이제 기초에 대해서 조금 더 알고 있는 사람이 되었다.
이까지가 4회차까지의 삽질이었다.
아무튼 그렇게 정신을 차리고 나서..... 본격적으로 성능 높이기에 들어갔다.
아직까지 모델 학습의 순서가 머릿속에 명확히 자리잡지 않은 거 같아 먼저 노션에 순서를 정리했다.
(2학기에 스터디까지 했는데................. 왜이렇게 모르는 게 많을까..................)
그리고 나서 XGBoost, LightGBM, CatBoost를 각각 점수 계산하여 테스트를 했다.
사용한 세부 내용들은 아래와 같다.
삽질을 마치고 모델을 만들어 제출하니 0.662점이 나왓다.
그리고 더 놀라운 사실은............. 1등이 0.742점인데, 불과 0.2점 안에 400명이 있다는 것이었다......................
더군다나 동아리운영진 해커톤에 참석하게 되어 진도를 빨리 내지 못하였다.
그럼에도 시간을 내서 시도한 내역들에 대해 적어보겠다.
1차 시도 (Random Forest)
0.60
2차 시도 (XGBoost)
0.61
3차 시도(LightGBM)
0.61
--------------------------
여기서 아까 말했던 오류를 찾고 정신차림
-------------------------
5차 시도 (XGBoost)
0.70!
난 진짜 바보라는 것을 느꼈다 ^^
(그래........점수가 저렇게 안나올 리가 없어)
6차 시도 (하이퍼파라미터 튜닝 안하고 3가지 모델 비교)
- XGBoost AUC-ROC: 0.7082
- LightGBM AUC-ROC: 0.7135
- CatBoost AUC-ROC: 0.7092
7차 시도(피쳐 선택 다시)
피쳐 선택을 싹 다시 함
하이퍼 파라미터 튜닝 없이, XGBoost로 해보겟음
- xgboost → 0.7093
- lightgbm → 0.7162
- castboost → 0.7118
8차 시도 (optuna를 통한 하이퍼파라미터 최적화)
optuna를 사용해 최적화한 하이퍼파라미터로 시도.
XGBoost → 0.7173
LightGBM → 0.7179(최고)
CatBoost →
성능 차이가 크게 없다.
→ 모델 학습 시 class_weight='balanced’ 사용해볼까? (불균형 해결)
오버샘플링도 방법일듯(SMOTE)
9차 시도(baysian 최적화)
baysian 를 사용해 최적화한 하이퍼파라미터로 시도.
XGBoost → 0.7178
LightGBM → 0.7170
CatBoost →
베이지안 별로인듯
10차 시도 (optuna 최적화 + class_weight 설정을 통한 불균형 해결)
0.716
성능 차이가 크게 없음
11차 시도 (SMOTE 사용)
0.704
12차 시도 (피쳐 엔지니어링)
0.735 !!!
피쳐 엔지니어링이 먹혔다!!
이후에 세가지 모델을 앙상블하여 제출하고자 하였으나 해커톤 일정과 겹쳐 추가적인 제출을 하지 못한 채 아쉽게 마무리되었다.....
그래도 이번 대회를 통해 저번 대회에서 배운 것과는 다르게 모델 학습의 과정들에 대해 조금 더 이해하게 된 거 같았다.
다음에 대회를 나간다면 더 좋을 성적을 거둘 수 있도록 꾸준히 학습을 진행해야겠다!