[Dacon] 2024 생명연구자원 AI활용 경진대회 후기
후기
몇 달 전에 정형 데이터 머신러닝을 공부하기 위해서 캐글에 있는 Housing Prices Competition for Kaggle Learn Users라는 모의 대회를 참여했었다. 마침 공부하기에 좋은 코드가 있었고, 이를 적용해볼만한 정형 데이터 대회가 없을까 하다가 발견한 대회가 Dacon의 2024 생명연구자원 AI활용 경진대회였다.
데이터를 처음 봤을 때 이게 무슨 의미인지 한참 고민했다. 알 수 없는 용어들과 무수한 WT들.. 덕분에 몇 일 동안은 chatGPT를 끼고 도메인 지식을 얻으려고 애썼다. 나는 각 열의 이름이 유전자의 이름을 나타낸다는 것과 WT를 제외한 데이터는 SNV 형태의 데이터를 의미한다는 것을 알았다. 변이의 종류(Silent, Missense, Nonsense)로 one-hot encoding하고 이를 단순하게 XGBoost에 넣어 Baseline을 만들었다.
이 대회의 평가 산식은 F1 score macro였다. 그리고 초기에 제출했던 내 퍼블릭 스코어는 0.119이다. 그 당시 상위권의 스코어가 0.6~0.7이었으니 이정도 상승을 노리려면 모델을 깎기보다 데이터를 더 다듬어 보기로했다.
먼저 나는 대회에서 제공하는 데이터가 부족하다는 것을 느꼈다. 그래서 TCGA가 제공하는 MAF 파일을 대회의 입력에 맞게 전처리를 했다. 그리고 변이의 종류에 따라서 암에 주는 영향이 다르다는 도메인 지식을 이용해 암에 더 영향을 많이줄수록 더 많은 점수를 주도록 label encoding을 진행하였다. 또한 모델의 입력 크기가 4300정도였으니 이는 모델에 차원의 저주가 있을 수 있다고 생각했고 PCA를 적용하였다. 이후 스코어는 0.386으로 상승했다.
이외에도 대회에서 분류하는 데 사용하지 않는 예측 변수 데이터를 other로 분리하여 학습하는데 사용해보았다. 그리고 LightGBM, MLP과 같은 다른 모델을 적용하거나 voting classifier로 ensemble도 해보았으나 정답률 향상이 크지 않았다.
따라서 나는 여전히 데이터에서 개선할 부분이 있을 것이라고 생각했고, 예측 class의 불균형 문제를 해결하지 않았음을 깨닫고 SMOTE와 ADASYN을 이용하여 클래스 불균형 문제를 해결했다. 그러면서 스코어는 0.45까지 상승했다.
이후 나는 데이터를 ICGC와 GTEX 데이터를 추가해보았으나 정답률에 큰 영향이 없음을 알았고, 이제 데이터가 부족한 것은 아니며 모델을 깎을 수도 없으므로 피쳐를 해석하는 부분에서 정답률 개선을 이루어야겠다고 생각했다. 단순 변이 종류를 레이블 인코딩한 것 이외에, 한 유전자에서 일어나는 변이의 개수와 점수의 합, 변이 위치의 최솟값 등을 이용해 스코어를 0.49까지 상승시켰다.
그리고 나서 한동안 진전이 없었으므로 도메인 지식과 관련된 정보를 다시 공부하고자했다. 때문에 나는 “Misannotated Multi-Nucleotide Variants in Public Cancer Genomics Datasets Lead to Inaccurate Mutation Calls with Significant Implications” 이라는 논문과 “Cancer classification based on multiple dimensions: SNV patterns”를 읽었다. 간단히 요약하면 SNV 데이터는 하나의 아미노산 변이만을 표기하므로 여러개의 변이를 포함하는 MNV 데이터로 변환하면 정답률이 올라갈것이라는 것과, 아미노산이 변이하기 전과 후의 정보로 KNN 클러스터링을 하면 암 종류 분석의 정답률이 높게 나온다는 논문이었다.
나는 이를 이용하여 새로운 피쳐를 추가하였고 0.502의 스코어를 얻었다. 이를 마지막 제출로 나는 최종 17등을 할 수 있었다. 비율로 따지면 상위 **1.8%**의 성적이다. 2년만에 나가본 대회인데, 2년 전이랑은 비교도 안되는 순위로 마무리를 할 수 있었다는 것에 크게 만족하고있다.
Kaggle에서 Expert를 달자는 목표에 한 발자국 다가갈 수 있어서 정말 기쁘다. 앞으로도 더 좋은 성적을 거둘 수 있도록 연습을 꾸준히 해야겠다.