본문 바로가기
AI/Competition

[Dacon] 제주도 도로 교통량 예측 AI 경진대회 후기

by Myungbin 2023. 7. 9.

참여 계기

아직 인턴이다 보니 가끔 비는 시간이 있다.

비는 시간에 공부를 하긴 하는데 재미도 없고 해서 이것저것 찾아보다가 사수님이 이거 한번 해보라 해서 참여하게 되었는데 첫 제출했을 때 생각보다 Public 점수가 높아서 '어? 할만할 거 같은데?'라는 생각이 딱 들었다. 첫 출발을 7등으로 시작했으니 이 정도면 나쁘지 않다고 생각했던 것 같았다. 그게 계속할 수 있었던 발판이 된 게 아닌가 싶기도 한 게 이전 대회 참여할 때는 처음부터 등수가 낮아서 '아 모르겠다' 하고 중간에 포기한 적도 있어서...

친구들한테 7등이라고 자랑했던 사진

진행

대회를 진행하면서 느낀 것은 '아 내가 진짜 이전 대회 대충 참여하고 있었구나' 하는 생각이 들었다.

기존에는 다른 분들이 해놨던 EDA 슬쩍 보고 모델만 갈아끼웠는데, 이번 대회에는 데이터 하나하나 다 살펴보면서 데이터 특성 파악하려고 하고 관련 자료도 살펴보고 하니까 어느 정도 이해가 되는 느낌이 들었다.

1. 모델 정하기

일단 제일 처음 한 게 Raw 데이터에 대해 성능이 잘 나온 모델부터 찾았다. 그게 xgboost랑 catboost였는데, 두 모델을 정해놓고 Feature Engineering을 시작했다.

2. Feature Engineering

전처리를 하면서 진짜 다양한 가설을 세우고 검증하는 과정을 거쳤는데 A라는 feature를 추가하고 추가하기 전, 후의 5fold validation mae를 비교하고 성능 향상이 있으면 추가하고 없으면 버리는 식으로 진행을 했는데, 여기서 약간 아쉬웠던 게 제거한 A 변수가 다른 변수와 영향이 있을 수 있도 있어서 지금은 떨어질지 몰라도 다른 변수와 있을 때는 오르지 않을까..라는 생각을 뒤늦게 했다.

당시에 파생 변수 만들면서 진짜 어떻게 이런 생각을 하지 하면서 자화자찬했던 게 있는데

  1. distance: 관광지와 도로 사이의 거리
  2. cluster: 지역 구분을 위한 cluster
  3. Tour_count: 2km 내 관광지 개수

이 세 개였다. 진짜 이 세 개는 생각하고 와 진짜 이걸 생각하네 하면서 대단하다고 생각했는데 대회 끝나고 다른 분들 코드 보니까 다른 분들도 비슷한 코드가 있어서 사람 생각하는 게 다 비슷하구나... 하는 생각도 하게 되었다

Tour_count는 처음에 Kakao api를 이용하여 했는데 처음에는 아무 생각 없다가 혹시 몰라서 문의하니까 Data Leakage라고 해서 "와 진짜 큰일 났다. 이거 나름 핵심 변수인데" 하면서 슬퍼했는데 팀원이 그럼 관광지 데이터를 구해서 하면 되지 않냐 해서 다행이게 비슷하게는 할 수 있었다.

아직도 Kakao api를 이용한 데이터를 못 쓴 게 너무너무 아쉽다.(이거 때문에 2 -> 4등으로 밀림)

팀원

수상할 수 있었던 가장 큰 이유는 팀원이었다고 생각한다.

Public 3.11(10위권)에서 더 이상 정체되어 못하고 있었는데 토크를 보니까 팀원 구한다는 글이 있어서 할까 말까 고민을 되게 많이 했다.

항상 팀플에 대한 안 좋은 경험이 있어서 흐지부지되거나 안 하는 사람 있어서 스트레스 받을 거 같아서 망설였는데 그래도 다른 사람 생각 한번 들어보자는 마음에 연락하게 되었다.

팀원들과 진행하면서 되게 많은 걸 배웠다. 같은 데이터를 본 다른 사람의 생각을 들을 수 있었고, 내가 생각한 것에 대해 의견을 물어보고 하는 게 되게 재밌었다.

기존에 학교에서 하던 팀플은 대게 내가 주도해서(사람들이 의지가 없어서) 혼자 하고 이거 이거 해주세요. 이런 느낌이었다면,

이번에는 이거 A 이런 생각으로 만들어봤는데 어떻게 생각하세요? 하면서 생각을 물어보고 듣고 하면서 저렇게 생각할 수 도 있구나 하는 정도?

약간 아쉬웠던 건 코드 정리와 대면하는 사람과 비대면하는 사람들 간의 의사소통 문제 정도?

5명 중 3명이 대면이 가능해서 대면으로 회의를 진행했는데, 비대면 하시는 분들 생각해서 대면회의 때 한 거 정리라도 해서 보내드려서 version을 맞췄어야 하는 아쉬움이 남는다. 만약 매일매일 정리해서 알려드렸다면 좀 더 좋은 결과가 있지 않았을까..?

다 같이 평일, 주말 가릴 거 없이 원래 하던 일도 있을 텐데 불평하나 하지 않았던 게 너무 좋았다.

퇴근하고 8시 ~ 10시 30분, 주말에 1시~8시까지 만나서 회의하고 코드 짜고 하는 게 육체적으로는 진짜 힘들었는데, 너무 재밌었다.

내가 재밌어하는 일을 남들과 같이 한다는 즐거움?

아무튼 팀장님이 진짜 되게 열정적이셨다. 나는 항상 '아 나 정도면 진짜 열심히 사는 거 아닌가?' 하는 생각을 했는데 팀장님을 보면 그런 생각이 싹 사라졌다. 새벽까지 하시고 몇 시간 안 주무시고 바로 대면 회의하러 나오시고 진짜 보는 내내 대단하다고 느꼈다.

그리고 마지막에 순위 밀릴 위기에 있었는데 나는 그냥 "이거 방법 없는데 그냥 기도하죠?" 하면서 포기하고 있었는데 팀장님이

"아 이거 할 수 있을 거 같은데... 해보죠"

라고 하셨다. 그때 나는 속으로 아니 이거 불가능 한데 어떻게 하신다는 거지? 하고 다음날 출근이라 바로 자러 침대 다이빙했는데,

자고 일어나니까 해결했다는 카톡을 보고 팀장님의 의지에 눈물을 흘릴 뻔했다. 저 정도는 해야 성공하는구나 하는 생각도 들고...

만약 혼자 했다면 순위권에 들었더라도 Data Leakage 걸려서 수상을 못했을 것이다.

결과

대회 기간이 끝나고 이제 검증하는 단계가 남았었는데 Data Leakage로 떨어질 일은 절대 없었다고 생각해서 마음은 편했다.

끝나기 한 3일 전부터 비는 시간마다 코드 정리하고 다 같이 검증하고 해서 수상은 확정이라 생각했다.

결과는 3등으로 마무리했다.

대회 끝나고 제일 궁금했던 게 1 ~ 10등까지의 코드였다. 어떤 전처리와 모델링이 들어갔을까 하는 기대?

특히 1등분들의 코드가 가장 궁금했는데 아무리 해도 1등의 Public 점수는 넘사벽이였기 때문이다.

그래서 끝나고 어떻게 했나 봤더니 2 ~ 은 머신러닝인데 1등분만 딥러닝을 써서 하셨다.

코드를 보면서 와.. 저렇게 할 수 도 있구나 하는 생각과 함께 경외감이 들었다

서울에서 간략하게 오프라인 시상식을 했는데 그때 2등, 4등분은 안 오셨는데, 다행히도 1등분이 오셔서 끝나자마자 바로 물어봤다.

너무 뜬금없이 물어봤던 거 같은데... 친절하게 알려주셨는데, 덕분에 내가 가진 생각에 대한 나름의 확신을 가질 수 있었다.

내가 항상 딥러닝 할 때마다 생각하는 게 '모델 구성을 대체 어떻게 해야 할까?'였다. 정해진 건 없고 데이터에 맞는 걸 찾아야 한다는 것을 들어서 알고 있었지만 이게 맞나 싶었는데 그분들도 "하나하나 하면서 찾아봤어요" 하셔서, 나름의 확신을 얻을 수 있었다

아쉬운 건 제주도 시상식을 회사 때문에 못 가서 나머지 분들한테도 물어보고 싶은 게 많았는데 못 물어본다는 거 정도...

후기

확실히 나는 공부를 적용을 시켜보고 살을 붙이는 식으로 해야 한다는 사실을 알게 되었다.(일단 해보고 모르는 게 생기면 찾아보는 형식)

적용시키고 찾아보면서 배운 게 되게 많다.

기존에는 모델도 아무 생각 없이 적용시켰는데 이번에 model paper도 찾아보고 하면서 이 모델이 가지는 특징이 무엇인지, 어떤 데이터에 써야 좋은지 등과 데이터 전처리 하는 것과 데이터를 보는 시각이 조금은 넓어졌다고 해야 하나...

모델도 ensemble 하면 성능이 좋아지듯이 사람도 똑같다고 생각한다. 혼자보단 둘, 둘보단 셋 이 좋으니까. 협업의 가치를 조금은 알게 되었던 것 같다. 다음에는 좀 더 보완된 형태의 협업을 하고 싶은 생각도 있다. 다들 처음이라 어떤 식으로 협업이 이뤄지는지 형상관리는 어떻게 하는지에 대해 모르는 것이 아쉬웠다. 내가 배우면서 다음엔 먼저 하자고 말을 꺼내봐야겠다.

왠지모를 코드에 대한 애정이 간다. 프로젝트를 마지막에 정리하면서 Github에 박제 해놓으니까 괜히 더 깔끔하게 하고 싶고 내가 열심히 한 프로젝트라 그런가 아직은 허접하지만 README 같은거 쓸 때 딴거 쓸 때 보다 열심히 썼다. 원래는 대충 개요랑 결과만 넣었을 텐데..

그리고 나 같은 사람도 수상할 수 있구나 하는 자신감도 약간... 얻었다.

나는 항상 내가 부족하고 모른다고 생각했다. 남들보다 뛰어난 게 없는데 AI를 계속하는 게 맞을까 하는 생각도 한다. 일기에도 그게 잘 드러나는데 최근 들어 하면 할수록 아는 게 없다고 느끼니까 약간의 우울함이 있었는데 이번 수상으로 약간은 그래도 배운 게 헛된 건 아니었구나 하는 생각

머신러닝 말고 딥러닝 위주로 더 공부해야겠다는 생각도

아직 졸업도 못한 4학년이지만 졸업하기 전에 뭐라도 이룬 게 있어 기쁘다.

이번 대회는 내가 더 성장할 수 있는 도움닫기였다고 생각한다. 이젠 뛰러 가야지

끝.

+

코드는 여기에

https://github.com/Myungbin/Jeju-Traffic-Prediction