첫 캐글 대회 회고: ICR - Identifying Age-Related Conditions (with 풀잎스쿨)

캐글에 주구장창 참여하다가 기록의 필요성을 느꼈다.

지금은 playground 기준 TOP 10% 대에 머물고 있지만

더 나은 내가 되었으면 하는 바람에서 회고를 남기고자 결심했다.

 

이 글은 2023-06-24 ~ 2023-08-26 이 기간 동안 풀잎스쿨을 하면서 캐글에 처음으로 참여했던 대회의 회고이다.

(물론 타이타닉 빼고)

 

※ 해당 대회에 대해 정리한 깃허브

(당시의 짧은 회고와 Top 랭커들의 솔루션을 간략히 정리해 놨다)

kaggle-competitions/Kaggle_ICR_IARC at main · gyeom-yee/kaggle-competitions (github.com)

 


 

■ 개인 목표 및 동기

2023.10.15 - [대내외 활동/스터디] - 부스트코스 코칭스터디 10기: Beyond AI Basic 2023 후기

↑윗글에서 언급했다시피 캐글에 가입했지만 소극적이던 나였다.

코칭스터디 수료 후 나오는 풀잎스쿨 쿠폰을 써먹어보자는 마음으로 개설된 풀잎스쿨을 둘러보다가 

 

부스터들의 캐글 도전기 - 모두의 연구소 (modulabs.co.kr)

 

부스터들의 캐글 도전기

처음 도전하는 캐글 경진 대회! 혼자하면 어렵지만 함께하면 즐거워라! 캐글 참가 버튼만 눌러보고 제출은 해보지 않은 당신! 혹은 캐글을 해보고 싶지만 어떻게 하는 지 모르는 당신! 함께 공부

modulabs.co.kr

이것을 발견하였다...!

캐글에다가 협업까지 할 수 있는 기회라는 생각이 들어 냉큼 등록했다.

(논문 스터디 모임도 하고 싶긴 했는데 100% 할인쿠폰이 하나였다...)

 

풀잎스쿨을 잠깐 얘기해 보자면 퍼실리테이터가 있고 그를 도와주는 버디와 팀원들인 연구원(?)이 있다.

그리고 모두연에서 정원사분들이 여러 가지 도움을 주는 구조.

이 프로그램은 원래는 약 16만 원이라는 어마어마한 비용이 드는 8주 과정의 스터디로,

그만큼 경각심을 주어 스터디를 좋게 돌리려는 것 같긴 한데 나는 쿠폰을 써서 그런 느낌을 덜했다.

 

이름에서도 알 수 있듯 코칭스터디에서 쿠폰을 받아 참가한 부스터들이 대다수인 것 같긴 했지만

정말 쌩돈 써서 오신 분들도 꽤 있었다. 어떻게 그만한 큰돈을 쓸 결정을 했는지는 아직까진 이해가 어렵다.

 

아무튼 모임은 온라인으로 총 10명이 모여 5명, 5명씩 팀을 나누어 경쟁하듯 진행했다.

초반에는 다들 호기롭게 임하면서 우선 다른 사람들의 코드를 리뷰해 보고 점수를 올려보자! 했는데

이 때는 몰랐다. 이것이 패착 요인이 될 줄은...

(자세한 것은 글 후반에)

 


 

■ 대회 소개

ICR - Identifying Age-Related Conditions | Kaggle

 

ICR - Identifying Age-Related Conditions | Kaggle

 

www.kaggle.com

환자가 세 가지 질병 중 하나 이상을 가지고 있는지(class_1),

아니면 세 가지 질병 중 하나도 가지고 있지 않은지(class_0)를 예측하는 모델을 만드는 것이다. (이진분류)

 

원래 이러한 질환이 있는지 확인하려면 환자로부터 정보를 수집하는 과정이 길고 번거롭다. 하지만 예측 모델을 사용하면 조건과 관련된 주요 특성을 수집한 다음 이러한 특성을 인코딩하여 이 프로세스를 단축하고 환자 세부 정보를 비공개로 유지할 수 있다는 가정 하에 대회를 진행했다.

 

- Evaluation metric: Log Loss

의료 데이터에서 로그 손실은 확률적인 예측, 클래스 불균형 데이터 처리, 모델의 확률 보정, 최적화 및 모델 선택에 유용하게 사용. 이를 통해 모델의 예측 정확도를 평가하고 신뢰도 있는 의사 결정 가능.

 


 

■ 데이터셋

- train.csv

  • Id : 각 환자의 고유 식별자
  • AB - GL : 56개의 익명화된 건강 특성, EJ는 범주형('A', 'B')으로 구성
  • Class : 세 가지 의학적 상태 중 1개 이상이 포함된 경우(클래스 1), 그렇지 않다면(클래스 0)

- test.csv

  • Id : 각 환자의 고유 식별자
  • AB - GL : 56개의 익명화된 건강 특성, EJ는 범주형('A', 'B')으로 구성
  • test는 추론(모델 분석 결과)을 위한 데이터이기 때문에 Class가 존재하지 않음

- greeks.csv

  • train.csv에 추가하여 사용할 수 있는 메타데이터 (보충 데이터)

- Alpha

  • A : 연령 관련 조건이 존재하지 않음을 뜻하므로 train.csv에서 해당 식별자의 클래스는 0
  • B, D, G : 세 가지 연령 관련 조건이 존재한다는 뜻이므로 train.csv에서 해당 식별자의 클래스는 1

- Beta, Gamma, Delta 세 가지 실험 특성

- Epsilon은 데이터가 수집된 날짜

 


 

  결과 및 평가

  • 6,430 Teams
  • Public Leaderboard: 1,124 th
  • Private  Leaderboard: 703 th (Top 11%)

결과만 보면 잘한 것 같지만 사실 그렇지 않다.

 

우리의 베이스라인은 작성해보지도 못하고 다른 사람들의 공유 노트북만 리뷰하면서 제출한 게 전부였고

하필 이번 대회가 shakeup이 심했던 대회라 Public 리더보드 상위권이 우수수 떨어지는 바람에 잘 정리된 공유 노트북 하나 건져서 운이 좋게 높은 순위를 가질 수 있었다.

 

풀잎스쿨은 4주 차쯤 되니 이탈자도 생겼고 정기적인 회의 시간에 들어오는 사람은 3~4명뿐이었다.

베이스라인의 중요성을 뒤로한 채 그저 공유 노트북의 여러 방법론의 쓰임새에만 집중했고

완벽히 이해한 자신만의 베이스라인도 없어서 방법들을 어떻게 적용할지도 몰랐다.

 


 

■ 리뷰하면서 얻은 인사이트

- 의외로 간단한 기법이 높은 점수를 받았다. (대부분 catboost 사용)

  • 이때 당시엔 몰랐지만 shakeup 때문에 상대적으로 단순한 구성이 도움이 됐을 것이다.

- 높은 랭크에서 사후 보정(Calibration)은 사용하지 않았다.

 


 

  후기 및 소감

이 때는 베이스라인을 만든다는 게 뭐가 그리 복잡해 보이고 어려웠는지...

아마 베이스라인이란 것을 처음부터 끝까지 '나' 자신이 써야 되는 걸로 이해했던 것 같다.

 

그래서 한 번에 잘 쓰기 위해 다른 이들의 공유 노트북만 주구장창 봤고,

그 결과 자신만의 베이스라인도 없이 제출에 소극적이었던 것 같다.

 

그리고 컬럼이 암호화되어 있기에 캐린이에겐 너무 어려웠던 대회였던 것 같기도 하다.

마음껏 EDA 하고 Feature Engineering 해보고 그랬어야 했는데 데이터의 쌩 수치로만 풀어나가는 게 어려웠다.

 

이래저래 아쉬운 게 많은 활동과 대회였지만

베이스라인의 중요성과 shakeup을 겪으면서 오버피팅을 관리하는 게 얼마나 중요한지 몸소 깨달을 수 있던 경험이었다.