[ML Study 2022] 3주차

Everafter·2022년 10월 16일
0

ML Study 2022

목록 보기
3/10

PROBLEM

Problem info

competition

제주 테크노파크 제주도 도로 교통량 예측 AI 경진대회

Theme

Data preprocessing & basic ML

metric

Regression Metric (MSE, RMSE, MAE.. etc)

Notes

  • 제주 테크노파크 제주도 도로 교통량 예측 AI 경진대회 입니다.
  • 변수
  • 이번에도 마찬가지로 변수를 어떻게 처리해야 좋은 결과를 낼 수 있을지 고민이 많이 필요해 보입니다. 역시 데이터는 모델링이 아닌 데이터 처리가 훨씬 중요하다는 것을 다시 깨닫고 있는 중입니다.
  • 이제 점점 스터디 방향이 책은 크게 상관하지 않고 자유롭게 하는 느낌이 들어서, 자유롭게 분석해 주시고 서로 좋은 아이디어가 있으면 공유하면 좋을 거 같습니다.

refer

Review

  • Daycon에서 실제 진행중인 대회인 제주도 도로 교통량 예측 회귀문제이다.
  • 실제 데이터라 그런지 column 수도 꽤 되고 크기도 컸다. train data에만 400만개 이상의 row가 있다.
  • 교통량을 측정한 시간과 차로수, 최고제한속도, 도로명 등의 도로 정보, node의 위도 경도 정보까지 필요한 대부분의 정보가 포함돼있다.
  • 결측치는 없고, feature engineering이 중요한 부분이었다.
  • 특이한 것은 모든 feature의 cardinality가 데이터 크기에 비해 크지 않아(최대 600) 관점에 따라 모두 categorical feature로 볼 수 있었다.
  • 'date'와 'latitude', 'longitude' column은 numeric으로 보는게 자연스러웠으나, 애매한 feature가 몇 개 있었다. 예로 'weight_restricted(최대제한하중)'의 경우 '제한 없음'을 0의 값으로 두고 있었고 cardinality도 10보다 작았다. 따라서 categorical로 처리를 할 것인지, 적절히 numeric으로 둘 것인이의 고민이었다. numeric이라면 0을 어떻게 변환 할 것인지, categorical이라면 어떤 encoding 기법을 사용할 것인지 선택이 필요했다. 최종적으로는, 그냥 one-hot encoding을 사용했다. 분명 rank 관계가 있지만, 유의미한 영향이 있는지 의문이 들었다. label encoding을 할 바에는 numeric 그대로 처리를 하는게 나아보였다.
  • node의 위도, 경도값은 시작지점이냐, 도착지점이냐에 따라 값의 차이가 거의 나지 않았다. 시작, 출발지점의 구분은 이름을 나타낸 column이 이미 존재하기 때문에 위치 정보는 굳이 구분할 필요 없다고 보았다. 따라서 시작, 도착지점의 mean 값을 새로운 feature로 하여 함축했다.
  • categorical feature들의 cardinality가 10 이하인 것은 one-hot encoding을 진행했고, 'hour' feature는 24시간을 6타임으로 묶어서 cardinality를 줄였다.
  • 나머지 cardinality가 수십, 수백인 feature들에 대해서는 target encoding을 진행했다. drop을 하지 않는 한 target encoding밖에 해답이 없다고 보았다. 좀 더 찾아보면 더 나은 방안이 있을지도 모르겠지만...
  • feature selection으로 MI지수를 이용하려 했지만 데이터가 큰 탓인지 연산에 너무 많은 시간이 걸려 포기했다. 다른 selection 기법 공부가 필요해보인다.
  • 모델은 LGBM, XGBoost, Catboost 3가지를 활용해보았다. LGBM, Catboost는 처음 사용해보는데, LGBM은 XGBoost와 비슷하지만 연산속도를 향상시키고, 성능은 유지하는 기특한 모델이었다. 역시 도입해보니 XGBoost보다 시간은 적게 걸리고 성능은 더 좋게나왔다.
  • Catboost는 categorical feature가 많은 데이터에 적합하다고 해서 encoding 하기 전의 data를 따로 넣어줬는데 기대했던 만큼 성능이 좋진 않았다. 아직 모델에 대한 이해가 없어서, 공부가 필요해보인다.
  • GridSearchCV를 도입했는데 모델 한바퀴 돌리는데 1분이 넘게 소요되어 경우의 수가 조금만 많아지면 1시간씩 소요됐다. 지금까지 교육용으로 나온 가벼운 데이터만 다뤄와서 그런지 실제 데이터의 매운맛을 맛 볼 수 있었다. 그러나 이 데이터 마저도 선녀였다는 것을 또 깨달았다.
  • 최종 4.2에 가까운 MAE 점수를 얻었는데 대회 1등은 3점 초반대였다. 코드를 어떻게 짰는지 궁금한데 통 공유를 안하니 궁금했다. kaggle와 비교해 가장 큰 단점이다. kaggle은 말도 안되는 퀄리티의 kernel이 사방에 널려있다. 참고할만한 코드가 산더미다. daycon이 kaggle을 따라잡을 수 없는 이유다. kaggle 최고~

Code

Github

0개의 댓글