
처음으로 대회에 참여해봤다. 지정된 책을 사용자가 어떤 평점을 내릴지 예측하는 테스크였다.
10/26(수) ~ 11/3 (목)까지 진행된 대회였다. wrap up 레포트를 적으면서 느낀 점인데, 대회가 끝난지 얼마 지나지 않았음에도 불구하고 기억이 잘 나지 않았다. 기록의 중요성이란...
(이렇게 기록 안하고 나중에 돌아봤을 때는 기억이 소멸될 듯)

부스트캠프에서 제시해준 EDA 예시인 미션1을 따라가면서 EDA를 진행해보았고, 결측치가 있고, 데이터가 어떻게 구성되어 있는지만 파악할 수 있었다.
Baseline 코드를 볼 때는 Context_model(FM, FFM)과 Context_data를 맡았다. 분명 강의에서 공부한 모델이었는데도 불구하고 코드로 보니 새로웠다. 적용해보기 위해 다시 공부하는 계기가 되었고 어떻게 모델이 구성되었는지도 알 수 있었다.
hyperparmeter tuning을 하지않은 기본 모델을 가지고 제출해보았으나(WDN) RMSE가 2.4253 정도로 좋지 못한 결과가 나왔다. 조금씩 hyperparmeter tuning을 해보면서 제출해봤는데 RMSE가 2.2558가 한계였다. 성능을 더 좋게 하기 위해서 cold start 문제를 해결해보고 싶었다. 해결하기 위해서 cold data와 warm data로 나누어서 cold start에 취약한 NCF로 학습해보았지만, 성과가 크지 않았고 다른 팀원들도 cold start에 대해서 같이 고민했기 때문에 나는 다른 것을 해결해야겠다 생각했다.
dataset을 보면서 age, language, country, summary, category 등으로 결측치가 많았다. 그중에서도 제일 많은 book data의 결측치를 해결해보았다. language의 결측값은 같은 language가 있는 같은 book_author을 매핑시켜 language의 결측값을 채워넣었고, 67,227개 -> 26,198개 로 결측치를 채울 수 있었다. category와 summary의 결측값은 book_title에는 동명의 책도 있었으므로 book_title과 book_author을 매핑시켜 결측값을 채워넣었고, 따로 알 방법이 없던 summary는 book_title을 채우면서 결측값을 채울 수 있었지만, 총 68,851개, 67227개 -> 63993, 62,356개의 적은 결측치만 채울 수 있었다. 결측치를 채우기 위해 모든 변수들과 매핑시키는 코드를 작성했는데 1시간이라는 시간이 걸렸다. 이를 통해 코드를 간결히 짜야 많은 시도를 할 수 있다는 것을 느꼈다.
여러 모델을 가지고 실험을 해보다. 그 중 cold start에 강한 FFM이 가장 성능이 좋았고 FFM을 가지고 계속 tuning을 하면서 실험을 해보았다. shell script를 이용해 자동으로 hyper-parameter를 자동으로 변경시켜 최적의 hyper-parameter를 찾을 수 있었다. embed dim의 tuning은 큰 차이를 느끼지 못하였고 batch size와 learning rate, weight decay를 변경시키니 성능의 변화를 관찰할 수 있었다. epoch은 크게 잡아두고 early stopping을 이용하여 overfitting되지 않도록 조기 종료시켜주었다.(patience=7)
마지막으로 k-fold를 이용하여 교차검증을 진행하였다. 대회 끝나는 날에 k-fold를 적용해보기 시작해서 많은 실험을 할 수 없었을뿐더러 시간이 촉박해 모든 split을 다 돌기 전에 멈추고 최종 제출했어야 했다.
K-Fold를 적용해서 제출해보니 눈에 띄게 성능이 향상된 것을 확인할 수 있어 적용의 중요성을 한 번 더 깨닫는 계기가 되었다.
최종 제출은 MODEL FFM LR 0.01 WEIGHT_DECAY 2e-4 BATCH_SIZE 512 FFM_EMBED_DIM 8 으로 다음 score와 같이 대회를 마무리 할 수 있었다.
LB score (public) : 2.1441
LB score (Private) : 2.1453
처음 접한 대회인 만큼 빠른 시간안에 중요 포인트를 잡지 못해 시간을 허비한 것에 아쉬움이 남는 대회였다.
1등, 2등 팀의 발표를 듣고 머신러닝 기법에도 시야를 넓혀야겠다고 생각했고, 데이터 처리나 모델링에서 한계를 마주하여 아쉬웠다. 많은 시도를 하는 것은 좋으나 정확한 분석과 우선순위, 계획을 세우는 것이 중요하다는 것을 느꼈다
Lv2때는 팀에게 도움되는 팀원이 되고싶다!!!