본문 바로가기
데이터분석과 AI/데이터분석과 AI 일반

사내 AI해커톤(AI Play) 참여 후기

by 우공80 2020. 11. 7.
728x90

사내 AI해커톤 AI Play에 참여한 후기를 써본다.

 

1. 참가신청

 

회사에서 처음으로 여는 해커톤이었고, 1등 상품이 무려 맥북(2등 갤럭시탭S7, 3등 갤럭시워치3) 이었기 때문에 전사에서 1~3명으로 구성된 50여개팀이 참여하였다.

 

대회는 약 2주간의 시간 동안 온라인으로 예선을 진행하고, 예선에서 선발된 20개 팀이 오프라인으로 본선에서 경쟁을 하는 방식이었다. 

 

참여한 팀의 면면을 보니 AI관련 부서, IT기획실, 연구소 쪽에서 업무 자체가 데이터분석인 사람들이 다수 참여했다.

 

올 한해 열심히 하기는 했지만, 1월까지만 해도 PC에 파이썬도 깔려있지 않았는데, 쟁쟁한 사람들 속에서 수상은 어렵겠다 싶었다.

 

그래도 50개팀중에 20팀 안에만 들면 본선에 나갈 수 있으니 체면치레는 되는 거고, 절반은 허수일거라는 근거없는 믿음을 가지고, 본선 진출을 목표로 동기1명 후배1명과 참가신청을 했다.

 

예선 시작전 참여할 에피소드를 선택했는데, 총 3개의 에피소드가 있었고, 에피소드별 참가인원수에 비례해서 총 20개팀이 본선에 진출한다고 했다. 우리는 모바일/인터넷 해지 예측하는 에피소드를 골랐는데, 참가팀이 가장많아서 총 9개팀이 본선에 진출하게 되었다. (나머지 2개 에피소드에서 4팀/7팀이 본선 진출)

 

2. 예선 참여

예선은 2주간 진행되었고, 예선 시작당일 사내 AI플랫폼에 각 팀번호로 프로젝트가 생성되고, 데이터가 내려왔다.

 

이진 분류문제이니 기본만 하면 간단한 문제였는데, 본선 진출은 정확도 싸움이니, 최대한 정확도를 높여야 했다. 

 

출퇴근 길에 패스트캠퍼스의 데이터분석 강의를 듣는데, 머신러닝과 데이터분석 올인원 패키지 A-Z 강의에서 들은 테스트 데이터를 학습데이터로 활용하는 것을 적용했다.

 

그결과 1차 중간 결과 공지에서 2등에 랭크되었다!!! 

이때부터 김치국 한사발 마시고... 당연히 본선 진출할 것처럼 주변에 떠들어 대고, 약간의 친분이 있는 주최측의 대리에게 미리 수상소감을 말하기까지 했다ㅋㅋㅋㅋ

 

그런데, 모델을 개선할 수록 (학습데이터의 정확도가 올라갈수록) 실제 예측 결과는 조금씩 낮아졌고, 2차는 3등 3차는 4등 점점 순위가 떨어지고..다행히 4차 공지에서는 3위로 올라왔으나, 마지막 5차 공지에서 정답 파일 오류로 점수 계산이 되지 않아 점수를 확인할 수 없게 되었다.. 다른 팀의 정확도는 계속 올라가는데, 우리는 정체되어있다보니, 우리팀이 확인한 모델 기준으로 5차 공지에서 6~7등 정도로 보였기에 현재 모델 기준으로 최종 제출 시 본선 진출을 보장할 수 없게 되었다. 현재까지 확인된 가장 좋은 결과를 제출할 것인가.. 아니면 모험을 할 것인가..

 

우리는 모험을 하기로 결정했다. 모험을 해도 정확도가 확 떨어지지는 않을 것이고, 모험을 하지 않으면 혹시 떨어졌을 때 후회가 될까봐서였다.최종 모델을 제출하고 나니 가슴이 너무 두근거렸다.

 

그리고 결과 발표!!!  다행히 7위로 본선 진출했다!!!

마지막 제출한 모델은 우리의 베스트 모델은 아니었으나 크게 떨어지지는 않았고,

우리가 정확도 87% 후반 언저리에서 정체되었던 것처럼 다른 팀들도 비슷하게 87%~88% 사이에 분포되어있었다.

 

예선 기간 내내 낮에는 일하고, 저녁에 애 재우고 10시~11시 이후에 모델링을 하다보니, 하루에 4시간 이상을 자지 못했다.

중간 결과가 5번만 공지되다보니, 모델이 개선되고 있는지 퇴보하고 있는지 확인이 어려웠고,

쫓긴다는 압박감에 쉴수가 없었다.

그래도 2주간 공부는 많이 되었고, 고3때도 이렇게 열심히 하지는 않았는데, 내 평생 이렇게 열심히 한적은 처음인거 같다. 

 

2. 본선 준비

예선이 끝나고, 열흘 뒤 본선을 치루게 되었다. 

본선은 새로운 에피소드로 경쟁하게 될 줄 알았는데,

본선을 4일 남기고, 예선 때 에피소드 그대로 진행하며, 대신 데이터 셋에 변경이 있다는 공지가 내려왔다.

그리고, 정확도 60%, 심사위원 평가 30%, 참가자 상호평가 10%로 최종 순위를 결정한다고 했다.

 

예선 때의 모델을 정리해야했기 때문에 본선이 시작하지 않았지만, 사실상 본선이 시작되었다!!!

본선이 11.5~11.6 이틀간 진행되었는데, 2일부터 다시 밤을 새기 시작했다.

 

화요일은 팀 체육행사였는데, 낮술을 마시는 바람에 애들과 함께 잠들어서 일어나지 못했고, 수요일은 숙취때문에 아픈 머리를 잡고 새벽 4시까지 또 모델을 고쳤다.

 

3. 본선 기간

아침에 출근해서 오리엔테이션을 하고, 주최측이 준비한 선물을 받았다. 본선 진출자에게도 선물이 있다고 해서 기대했는데, 참가 기념 후드집업티와 밤샘을 위한 물품들이었다... (세면도구와 야외용 에어쇼파, 충전배터리...)

에어베드까지 있는 것은 너무 본격적으로 밤새라는 것 같아서 다소 충격을 받았다. 아래 같은 제품이다.

yes24 이미지 (사진을 누르면 이동합니다.)

그런데, 세면도구는 있으나, 수건은 없었고, 웃기게도 나는 무슨 생각인지 세면도구도 없이 수건만 달랑 들고 가서

나름 조화로웠고, 이런 재미요소가 나쁘지 않았다.

 

오리엔테이션이 끝나고 11시부터 본선이 시작되었고, 최종 결과제출은 다음날 12시까지 제출하는 것이었다.

사실상 24시간만 주어진 것이고, 이튿날 오후에 심사 및 시상까지 진행되었다.

 

본선에서도 총 5번의 중간 결과 발표가 있었는데, 첫번째 발표인 오후 5시에는 정줄 놓고 있다가 제출을 못했다.

그리고 오후 8시 2차 중간평가에 제출한 모델(Bayesian Optimization 으로 튜닝한 XGBoost 단일 모델)이 전체 순위 1위로 뙇!!!

 

그런데, 본선에서도 모델을 개선할 수록 성능이 떨어지는 결과가 나오기 시작했다.

그래도 오후 11시에도 동일하게 1위를 유지하고 있었다. 

 

그리고 밤새 모델을 튜닝하고, 심사항목에 차별화 포인트도 있었기 때문에 예선때 좋은 효과가 있었던 테스트 예측 결과를 학습 데이터에 추가하는 것과 예측이 잘 안되는 데이터를 클러스터링 해서 under samplig 하는 부분을 적용했다. 

 

다만, 최종 제출까지 2번의 중간 평가만 남아있었기 때문에 여러가지를 함께 적용하지 않고, 8시 4차 중간평가에는 보팅 앙상블만 적용한 모델을 올려서 효과가 있는지 보기로 했는데, 다시 2등으로 내려왔다..

 

마지막 11시 5차 평가때믄 보팅을 빼고 차별화 알고리즘을 추가해서 올렸는데, 1등은 탈환했지만, 성능은 여전히 첫번째 모델보다 떨어지는 모습을 보였다.

 

그래서 처음 1위를 했던 Bayesian Optimization 적용한 XGBoost 모델 결과를 제출하게 되었다.

 

4. 심사 과정

 

정확도가 최종까지 1위였고, 코드가 전사에 공유되어 학습에 사용할 수 있도록 하라고 해서 Ipynb 파일에 아주 상세한 주석을 달아서 쉽게 따라할수 있도록 했고, 차별화 알고리즘도 들어갔으니, 1등을 노려볼만 하다고 생각했다.

 

그런데, 심사가 진행되면서 이 생각이 깨졌다 ㅎㅎ

 

우선 심사가 팀당 5분이 주어졌고, 모두가 보는 상태에서 큰 스크린으로 설명을 하는게 아니라

심사위원과 다른 팀 사람들이 돌아다니면서 각자의 PC로 발표를 하는 것이었는데,

 

팀당 5분 밖에 시간이 주어지지 않았는데, 5분으로는 변수 선택과 파생변수 추가, 그리고 차별화 포인트 설명할 시간도 부족했다.

 

특히 jupyterlab 상으로는 스크롤되었던 catboost의 모델링 로그가 html 파일에서는 풀어져 보여서 스크롤을 하는데만 시간을 상당히 소모해야 했다.

 

심사라는 게 이런 식으로 진행될 줄 몰랐기 때문에 발표를 준비하지도 못했고, 

팀간 상호평가 점수가 있는데, 어찌된 것인지 내가 발표할 때는 보는 사람이 매우 적었다..

지금 생각하니 다른 팀은 그시간에 발표준비를 한것 같다..

 

상당히 어버버 하면서 발표를 진행했고, 심사위원 한분이 다른 사람들은 상당히 코드파일이 많은데, 당신네 팀은 왜 이렇게 적으냐? 시도를 많이 안했느냐고 질문을 하셔서 이게 무슨 뜻인가 해서 일단 팀원들이 나눠서 진행하면서 효과가 없는 코드는 삭제해서 적다고 말씀드렸는데, 나중에 생각해보니, 심사위원이나 나중에 학습서 볼 사람들이 편하라고 코드를 다 정리한 것을 다양한 시도를 안했다고 생각하신것 같았다..;;

 

그리고 다른 팀들이 한것을 들어보니, 모델 자체는 평이했고, 여러 모델을 앙상블하는 팀도 거의 없었다.

다만, 우리에 비해 데이터분석에 공을 들인 팀들이 많았고, 이런 부분은 인정해야겠다고 생각했다.

 

그래도 모델 자체는 우리팀이 가장 좋았다고 생각이 들어서 여전히 1등이 가능하지 않을까 김치국을 마셨다 ㅎㅎ

 

5. 시상식 

 

시상식을 기다리고 있는데, 팀원들이 상받는 팀들은 리허설하러 다 내려갔다고 해서 매우 실망했다.

1등이 안되더라도 순위권에는 들어갈 줄 알았는데..

 

그런데, 시상식을 위해 대강당에 가니, 주최측 과장님 한분이 깜짝 놀랐다고, 기대해도 좋다고 해서 다시 흥분되었다.

 

그리고 발표.

 

우리는 우수상(3등)을 수상했다!!!

 

사실 1등을 생각하면서 수상소감을 생각하고,

온갖 장미빛 미래를 그리고 있었는데, 우수상으로 발표가 되니, 좀 아쉬웠다.

(처음엔 본선진출만 해도 다행이다 했는데^^)

 

1등과 2등은 둘다 AI관련 업무를 하는 팀에서 가져갔다.

1등팀은 그래도 블렌딩 앙상블을 했으니, 다른 팀보다는 차별화가 되었고, 발표도 잘하고,

정확도 등수도 높아서 어느정도 인정을 했는데,

2등팀은 무엇때문에 2등을 한것인지 알수가 없었다. 나중에 결과 보면 알겠지..

 

그런데, 주최측에서 귀뜸하길..

심사위원 점수는 좋았는데, 인기투표에서 갈렸다고...;;

 

이게 우리를 억울하게 했다 ㅎㅎ

우리 발표할 때는 듣는 사람도 없었는데..ㅠㅠ

집에와서 애들 씻기고 같이 뻗었다고 새벽에 깨서 대회를 곱씹으니, 이 부분이 계속 억울했다.

 

6. 그러나, 다시 겸손해짐

 

그런데, 조금 전 애들 씻기고 다시 곰곰히 생각하니, 우리의 실력이 부족했다는 결론을 얻었다.

 

정확도를 떠나서, 설명이 가능한 모델을 만드는 것이 더 중요하고 본질적인 것이 아닌가라는 생각이 들었다.

 

사실 대회 시작전에 정확도는 하늘이 주시는 것이니, 우리는 데이터 분석에 집중해야 한다고 얘기했으면서도

실제 대회에서는 모델 튜닝에만 열을 올린게 좀 아쉬웠다.

 

다른 팀이 데이터 분석 했던 내용을 생각해보니, 

정확도는 우리팀이 높았지만, 실력은 다른 팀에 비해 떨어지는구나.. 느꼈다.

우리 팀이 정확도가 높았던 것은 우리가 비즈니스를 잘 아는 사람들이어서, 문제로 나온 데이터에 대한 이해가 높았고,

이로 인해 의미있는 파생변수가 많이 만들어진 것이지 데이터분석에 대한 실력은 부족했다.

 

그러니 우수상도 분수에 넘치는 것이 아닌가 생각이 들었고,

(사실 맥북보다 워치3가 더 탐이 났다. 맥북이 있어도 쓸데가 없음. 어차피 분석을 회사의 AI플랫폼에서 하고, 요즘에는 PC보다는 패드나 폰을 보니까...)

 

회사에서 AI를 강조하다보니 모델링 쪽만 너무 집중적으로 공부했던 것 같다.

 

지금도 반성하며 데이터분석 기초부터 다시 인강 들으려고 PC를 켰는데, PC 켠 김에 대회 후기를 남겨두어야 할 것 같았다.

 

7. 정리하면

 (1) 정석적인 데이터 분석과 모델링 순서를 따라야 한다. 개인적인 업무지식은 실무에서는 몰라도 PT를 해야하는 경우에는 중요하지 않다.

 (2) 모델의 정확도에 가장 큰 영향을 끼치는 것은 좋은 데이터, 좋은 피처, 앙상블이며, 튜닝은 가장 나중이다.

 (3) 학습데이터의 정확도 향상은 과적합을 가져올 수 있으니, 과적합을 줄이려는 노력이 필요하다.

 (3) 짧은 대회기간에 많은 시도를 하기는 어려우니, 미리 미리 활용할 수 있는 코드가 만들어져있어야 한다.

 (4) PT를 잘해야 한다. 즉, 차별화 포인트를 만들고 이것을 어필해야한다.

 

8. 마지막으로

대회 기간 내내 너무 힘들었기 때문에, 대회 끝나고 하는 설문조사에서 내년에는 참가할 생각이 없다고 답변했는데,

지금 와서 보니 아쉬움이 많이 남는다.

더 공부해서 내년에도 다시 출전해야겠다. 

 

그때까지 열공해야지!!!

 

 

 

 

 

 

 

 

 

 

 

 

728x90

댓글