어느새 아이펠 7주차가 끝났다.
첫 주였던 오티 이틀을 뺀다 해도 거의 2개월동안 아이펠 과정을 소화하고 있는 것이다.
7주차에는 1차 해커톤이 진행되었다.
저번주부터 정처기 공부에 이번주는 해커톤에 집중하느라 블로그 포스팅에 많이 소홀했었다.
그래서 1차 해커톤도 끝났겠다 1/3이 지난 시점을 기록으로 남겨두면 좋을 것 같아서 포스팅을 하게 되었다.
8/4 ~ 8/6 3일 동안 진행된 1차 해커톤은 캐글 경연대회에 참여하는 것이었다.
https://www.kaggle.com/c/recruit-restaurant-visitor-forecasting
일본 레스토랑의 방문자 수를 예측하는, 이미 종료 된 경연이다.
위의 링크에서 데이터셋을 다운받아 각자 조별로 데이터 전처리, 시각화, 모델 학습 등을 진행하는 방식이었다.
우리 조는
1. Exploratory Data Analysis (EDA) -> 2. Feature Engineering and Data Cleaning -> 3. Predictive Modeling
순서로 프로젝트를 진행했다.
사실 우리 모두가 아이펠을 시작한지 이제 막 두달이 되어가는 초심자였기에 데이터 분석 단계부터 버벅거렸다.
우리가 생각하고 원했던 걸 코드로 전부 구현하기 힘들었기 때문에 기존 캐글 커널을 열심히 공부했다.
최대한 우리의 아이디어와 비슷한 커널을 선택했고 그 커널의 코드를 분석했다.
1. Exploratory Data Analysis (EDA)
코드를 분석하고 우리만의 코드로 구현하는데만 꼬박 하루하고 반나절이 걸렸다. 8월 4일 오전부터 시작해 8월 5일 오후에 데이터 처리가 끝났으니.. 아래는 데이터 분석 후 시각화 한 것들 중 몇개만 가져온 그림들이다.
이외에도 시각화 해 본 것들이 더 있다. 발표 준비를 하면서 시각화를 꽤 많이 해봤다 생각했는데, 해커톤 결과를 봤을 때 좀 더 많이 시각화를 해 보고, 더 다양한 시각으로 데이터를 분석했었으면 좋았겠다 싶었다.
2. Feature Engineering and Data Cleaning
피쳐 엔지니어링 단계도 호락호락하지 않았다.
여러 개의 파일로 나뉘어져 있는 데이터를 어떤 방법으로 합쳐서 훈련 데이터를 만들 것인가가 가장 큰 문제였다.
위의 데이터 분석 단계에서 참고했던 커널을 참고해서 훈련 데이터셋을 만들 수 있었다.
커널을 참고하여 코드를 분석하고 다시 우리 조만의 코드로 작성하는 과정에서 정말 많은 스킬을 배울 수 있었다.
3. Predictive Modeling
사실 마지막 모델 설계, 모델 학습 부분은 큰 어려움이 없었다.
아이펠에서 진행하는 노드 학습을 하면서 다양한 모델 학습을 공부했었기 때문에 모델링은 이것저것 시도해 볼 수 있었다. 나는 6주차 노드를 진행하면서 따로 공부했던 모델 학습을 적용 시켜 보고 싶었으나 캐글 노트북에서 메모리 부족으로 코드가 실행되지 않고 다운되어 아쉽게도 해보지 못했다.
이 데이터는 분류 문제가 아니기 때문에 Regressor 모델 위주로 다음과 같은 6개의 기본 모델을 선정했다.
RandomForestRegressor, XGBRegressor, LGBMRegressor, Ridge, CatBoostRegressor, LinearRegression
선정한 기본 모델들의 성능을 파악하기 위해 기본 모델의 파라미터 튜닝없이 훈련 데이터로만 우선 모델 훈련을 진행했으며 파라미터 튜닝없이 가장 좋은 결과(public score)를 보인 2개의 모델(CatBoostRegressor, XGBRegressor)에 대해서 앙상블을 진행했다.
결과는 나쁘지 않았다. 점수도 만족했고 모델 선정, 모델 학습 과정 모두 만족했기에 우리 조는 만족스럽게 결과물을 제출했다.
제출 후 조 별 발표도 10분이라는 짧은 시간으로 제한되어 있어서 최대한 간략하게 준비했다.
발표도 시간 지켜서 깔끔하게 했다고 생각했기 때문에 나는 개인적으로 좋은 결과를 기대했었는데, 캐널 커널을 참고하여 코드를 짠 것이 큰 감점요인이었을까 순위 안에 들지 못했다.
조원들과 이틀은 새벽까지 고생했고 마지막 날에도 점심까지 대충 먹으면서 고생했는데 좋지 못한 결과를 얻게 되어서 너무 아쉽고 슬펐다.
그래도 해커톤이라는 처음 경험해 보는 협업 프로젝트를 이렇게 직접 참여할 수 있어서 좋았다고 생각한다.
+) 사적인 내용이 가득한 해커톤 후기
사실 짧은 2n년을 살면서 한번도 조별 과제에서 괜찮은 조원들을 만난 적이 없다고 생각했었다. 초,중,고,대학교까지 있었던 모든 조별 활동은 나만 열심히 하는 구조였기 때문이다. 내 성격 영향도 있겠지만 기본적으로 조원들이 제대로 협력하지 않았다. 때문에 나는 같은 조라는 명목으로 사람을 만나는 것에 두려움이 있어 조별 과제를 정말 정말 싫어한다.
하지만 이번 1차 해커톤을 진행하면서 처음으로 살면서 조원을 잘 만났다라고 생각을 하게 되었다.
처음으로 역할 분담이라는 것을 제대로 해 보았고, 서로의 부족한 점을 서로가 보완해주는 것을 느끼며 이게 진짜 조별 활동이구나 느꼈다. 모두가 같은 목표를 가지고 모인 커뮤니티이기 때문에 이렇게 손발이 착착 맞게 프로젝트를 진행할 수 있었던 것 같기도 하다.
나는 분명 조원들에게 많이 답답하면서 부족한 조원이었을텐데 단 한명도 질책하지 않고 모두 괜찮다고, 잘했다고 해주어서 조원들에게 정말 감사했다. 덕분에 도전하는 것에 두려움이 조금은 줄어들었으며 조별 활동의 재미를 느낄 수 있었다.
결과로 제출했던 노트북 파일은 나중에 다시 보고 데이터 분석, 피처 엔지니어링 부분을 공부를 할 수 있을 것 같아서 아래 깃헙에 레포를 새로 만들어서 올려뒀다.
https://github.com/YOOHYOJEONG/AIFFEL_hackathon