[ML] 불균형이 심한 대회 참여 회고

윰진·2024년 2월 26일
1

Competetion

목록 보기
7/8

💦 푸념과 자기 반성이 담긴 글입니다.
🥉 최종 스코어: 상위 13%

요약

  • 팀으로 참여하자!
    • 데이터를 조금 더 다양한 시각으로 바라볼 수 있고, 생각하지 못한 인사이트를 발견할 수도 있다.
    • 시야를 넓힐 수 있어 개인적인 성장에 도움이 된다.
  • 다양한 데이터를 다루어 보자.
    • Dacon이나 Kaggle 대회에 참여할 때 기계적으로 움직이지말고, 왜?라는 물음에 답해보자.
      • 나는 왜 이 Category 변수에 Label Encoder/Ordinary Encoder/Target Encoder 등을 적용하지?
      • 왜 이 파생변수를 추가할까?
  • 기록할 수 있는 환경을 먼저 만들기
    • MLFlow, WanDB 등등.. 실험 내용을 관리할 수 있는 환경을 먼저 만들어두기
      • 바빠지면 헷갈리고, 실수할 확률도 높아지니까 미리 미리 관리하기

01. 시작

모를수록 용감하다.

처음 데이터를 받아봤을 때는 그렇게 어려워 보이지 않았다.
Categorical 변수가 많고, 정제되지 않은게 많이 보이네 {\rightarrow} 정제해서 모델 돌려야지!
시험 삼아 몇 개만 바꾸어서 모델을 돌려봤더니 금방 베이스라인을 넘겼다.
불균형이 심한 데이터라, OverSampling과 UnderSampling을 적용하면 성능이 더 오르겠지 하고 기대했다.

02. 건드릴수록 떨어지는 성능

베이스라인에서 Train과 Test를 Concat하여 Label Encoding을 하고 있다.
{\rightarrow} Data Leakage 아닌가? CatBoost로 다시 베이스라인을 작성해야겠다. (그냥 좋아하는 모델)
{\Rightarrow} 불행의 시작

웬걸, 베이스라인을 다시 작성했더니 성능이 뚝 떨어졌다.
Data Cleaning도 해보고, Feature를 빼보기도 했는데 손 대는 것 마다 public score가 뚝뚝 떨어졌다.

각 Feature 마다 Null 비율이 높고, 연속형 변수 같지만 범주형인 데이터들이 있었다.
다시, 어떻게 결측치를 채우고 어떻게 범주형 변수를 변환할지 그리고 어떤 파생 변수를 생성할지 고민이 깊어졌다.

03. Rule Base가 훨씬 좋은 성능을..

도메인 지식의 중요성 이라기엔 얻어 걸린

변수들 간의 관계를 꼼꼼히 살펴보면서 몇 가지 가설을 세웠다.
가설에 따라 Rule Base로 예측을 진행했고 베이스라인을 크게 웃도는 점수로 차트인을 할 수 있었다.

03. 드디어 넘긴 베이스라인

베이스라인은 넘겼지만...

Rule Base에 사용된 것을 파생변수로 추가하여 Boosting 계열 모델에 적용했다.
이제 몇 가지 더 추가해보고 K-fold, Optuna 그리고 Ensemble을 적용하면 되겠다. 라는 착각을 했다.

04. 순항하는줄 알았지만 난파한 배

기준 점수를 두고 Feature를 빼고 넣으면서 Validation Dataset의 Score와 Public Score가 일치하는지 확인했다.
Data Split 전략에 따라 Score가 Fit 되는지 여부가 달라짐을 (주워) 들었기에 확인해봤고, 일치한다고 판단했다.

여러 사정으로 대회가 며칠 안남았을 때 참여하게 되어, 제출 횟수가 부족했고 Valid Score에 의존했다.
어떤 Feature를 추가했을 때, Valid Score는 높아지는데 Public Score는 낮아지는 문제가 있었다.

특정 Feature (종속 변수와 상관성이 높은 Feature)에서만 그럴거라고 생각했지만, 오산이었다.

이후 진행한 Feature Engineering으로는 눈에 띄는 점수 향상을 기대할 수는 없었다.

05. 모델 바꾸기로 지푸라기를 잡아볼..뻔

???: 모델의 성능이 좋지 않다면 내가 한 EDA와 Feature Engineering을 먼저 돌아보세요.

모델을 바꾸었을 때 성능이 개선되는 경험을 한 적이 있기 때문에 모델을 바꾸어 보았다!
그리고 놀랍게도 좋은 성능을 얻지 못했다.
이 무렵 부터는 대회 종료 시점이 얼마 남지 않아 뭔가 허둥지둥한 것 같다.
마음이 급해지니 원칙은 사라지고 점수 향상에만 혈안이 되어 버렸다.

그렇게 상위 13%의 성적으로 대회를 마무리했다.
차트인을 다시 하지 못한게 못내 아쉽게 다가왔다.

06. 패인과 아쉬운 점

파생 변수를 조금 더 다양하게 생각하지 못한 것과 Categorical 변수를 제대로 처리하지 못한게 주요 패인이 아닐까 싶다.
그 외에도 '불균형'에 꽂혀서 OverSampling 기법만 생각하고 다양한 시도를 못해본 것도 패인이지 싶다.

군집 분석이나 텍스트 마이닝 그리고 딥러닝 기법들을 다양하게 못 써본건 개인적으로 아쉽다.
또, 팀으로 참여했다면 여러 인사이트를 공유하고, 잘못된 점도 빨리 찾을 수 있었을텐데 그 점도 아쉽다.

07. 개선 방향

블로그 포스팅을 통해 부족한 점 채우기

참여한 대회는 아쉽게도 데이터 셋 공개가 허가되지 않아 EDA나 Feature Engineering에 대한 리뷰가 어렵게 됐다.
Dacon의 다른 대회의 데이터를 바탕으로 본 대회에서 아쉬웠던 점들을 채워가며 포스팅을 하려고 한다.


p.s. 개인 고민
데이터를 잘 이해하고 다룰 수 있는 개발자가 되는게 목표였는데, 어쩐지 주객이 전도되어 분석가로 향하고 있는 느낌..
그치만 데이터를 파고 드는 느낌이 재밌다!
지금 하는 경험이 나중에 협업에라도 도움이 되어 좋은 엔지니어로 성장할 수 있길 바라며XD🌷

0개의 댓글