새소식

Study/프로젝트

[DACON] 유방암의 전이 예측 AI 경진대회 public 2위 후기

  • -
728x90

2023년 첫 포스팅은 가장 공들였고, 2022년에 참여했던 대회 중 가장 성과가 좋았던 대회 참여 후기로 해볼까 합니다.
이 글을 읽으시는 분들 모두 새해 복 많이 받으시고 원하는 바 모두 이루시는 2023년이 되시길 바라겠습니다.

1. 대회 개요

 림프절 전이는 암이 퍼지는 데 매우 치명적인 역할을 하기 때문에 암의 진단 이후 림프절 전이 여부에 따라 치료와 예후가 달라집니다.
따라서 림프절 전이 여부와 전이 단계를 파악하는 것이 암을 치료하고 진단하는 것에 있어서 매우 핵심적인 역할을 합니다. 이번 '유방암의 임파선 전이 예측 AI경진대회'에서 유방암 병리 슬라이드 영상과 임상 항목 데이터를 이용하여, 유방암의 임파선 전이 여부를 예측함으로써 유방암 치료에 핵심적인 역할을 할 수 있는 최적의 AI 모델을 만드는 것이 이번 대회의 목표입니다. 

1-1. 팀 빌딩

 데이콘 특성 상 하루에 3번만 제출할 수 있는 점을 고려해서 3명이 적당하다는 생각이 들었습니다. 직전 프로젝트인 기업연계 프로젝트에서 같은 팀이셨던 분들 중, 의료 데이터에 관심이 높으셨던 이어드림스쿨 오프라인 수강생 한 분과 일명 '코드를 좀 치시는' 훌륭하신 온라인 수강생 한 분께 팀 빌딩을 제안드렸고 고맙게도 두분 다 흔쾌히 수락해주셔서 즐겁게 대회 참여할 수 있었습니다.

 온라인 수강생 분께 연락을 드렸던 이유는, 약 6개월 간 이어드림스쿨에서 공부하면서 비록 얼굴을 뵐 수는 없었지만 랜선 너머로 예사롭지 않음이 느껴지는 분들이 너무나 많았기 때문입니다. 교육과정 운영사에서 지정해주는 팀은 주로 온라인과 오프라인을 구별하여 섞일 기회가 없었는데, 이 대회는 제가 자유의지로 참여하는 만큼 그 장벽을 허물고 온라인 분들로부터 배울 겸, 네트워킹 기회를 만들고 싶기도 했습니다. 

2. 문제 정의

 이번 대회는 임상학적 데이터로 이루어진 정형 데이터와 유방암 병리 슬라이드 이미지로 이루어진 비정형 데이터 두 가지를 모두 사용해 전이(1)/전이되지않음(0)으로 이진 분류를 하는 Multi-modal 모델링이 main task였습니다. 이미지를 필수적으로 모델링에 사용해야한다는 규칙이 있어, 처음에는 딥러닝으로 문제를 풀려고 시도해봤지만 데이터셋의 크기가 충분히 크지 않고, 이미지 데이터의 퀄리티도 좋다고 할 수는 없었기 때문에 성능이 좋지 못했던 기억이 납니다.   

3. Modeling 및 ensemble 

 저는 주로 이미지 데이터의 전처리와 이미지만을 사용한 이진 분류 model을 만드는 시도를 해보았습니다. 이미지 내에 많으면 4개까지 중복되는 영역이 있었기 때문에 이미지 내의 중복되는 개수에 따라 crop하는 알고리즘을 짜보고, 이를 pre-trained 된 딥러닝 모델에 학습시켜 보았지만 validation 점수가 0.649 정도로 베이스라인 수준이었습니다.

 이처럼 딥러닝을 데리고 초반에 약간의 방황을 겪고 나서, 이미지 데이터와 정형 데이터를 concat하여 딥러닝 모델에 입력하는 것보다 이미지로부터 유의미한 정보를 얻어 머신러닝 모델에 입력하는 방향으로 진행하기로 했습니다. 적절한 전처리 이후 정형 데이터만으로 XGBoost model을 사용했을 때 이미 public board에서 0.8점이 넘는 결과를 얻었기 때문입니다.
 이미지 데이터로부터 얻은 새로운 feature는 케글의 유사한 대회를 참고한 gleason score (노트북 링크)와, 이미지 내에서 tumour/cancer의 비율이었습니다. tumour ratio는 대회에서 주어진 일부 mask를 사용해 학습시킨 U-net segmentation 모델을 통해 구할 수 있었습니다. 

ML model은 정형 데이터만 사용했을 때보다도 높은 점수를 얻는 성과가 있었지만, 이때부터는 overfitting과의 싸움이었습니다. LGBM, Catboost등 익히 알고 있는 ML model들과의 앙상블과 K fold validation 및 out of fold 들을 시도해봤지만 Public score에서 예상보다 점수가 꽤 떨어져 당황스러웠습니다. 1~2등을 다투고 있었던 상황이라 조바심도 없지 않아 있었던 것 같습니다 ㅎㅎ 

4. 결과

 대회 마감 전날 새벽까지 고민한 결과, 저희 팀은 public score가 가장 높은 한 개의 결과물을 제출 했고 아쉽게도 public score 2위, private score 18위로 마무리하게 되었습니다. (두 개까지 제출할 수 있어서 두 개의 결과물을 체크를 해뒀는데, 새로 제출하면 체크가 리셋이 되어서 한 개만 제출되었다는 눈물나는 사연이..) 

 대회가 마감되고나서 앙상블했던 결과와 K-fold 했던 결과 모두 private score 가 너무 좋아서..(2등할 점수였음) 팀은 한 번 더 충격에 휩싸였고..ㅎㅎㅎㅎㅎ 단일 모델의 public score에 속아 앙상블의 중요성을 잊지 말자 라는 조금 뻔하지만 실천하기는 정말정말 어려운 교훈을 얻었습니다. 결과는 좀 아쉽지만 배운 것도 얻은 것도 많은 대회라 참여하길 정말 잘했다는 생각이 듭니다. 2023년에는 수상 한 번쯤 해보고 싶네요 😎


저희 팀의 코드가 궁금하시다면 이 깃허브 링크를 통해 확인하실 수 있습니다. 

728x90
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.