PROBLEM
Problem info
competition
Restaurant Revenue Prediction(Kaggle)
Theme
Regression
metric
MSE
Notes
- 데이터가 엄청 크지 않으면서 적절한 수준이었으면 하고 골랐습니다. (사실 boston 집값 예측 문제를 할까 했다가 다들 해보셨을 것 같아서요)
- shake up 이 크게 발생한 대회입니다. (Public 이랑 private 성적 차이가 큰 경우) 이를 경험해보는 것도 재미있을 것 같습니다.
refer
Review
- Restaurant의 revenue를 예측하는 회귀 문제이다.
- train으로 137개 row, test로 10만개 row가 주어지는, 어떻게 보면 불균형한 데이터다.
- 기타 위치정보, 지역 인구 정보, 부동산 정보 등이 P1~P37의 column으로 주어진다.
- train에서 'City', 'Type'의 cardinality가 test보다 작아서 신규 유입되는 데이터에 대한 고려가 필요하다.
- 파싱한 date 정보, 'City', 'City Group', 'Type' 등에 대해 one-hot encoding을 진행해야 하나 row가 137 밖에 되지 않아 one-hot encoding은 최소화 하고 37의 cardinality를 갖는 'City'에 대해선 label encoding을 진행했다.
- 'Open Date'가 주어졌는데, 현재의 시간을 기준으로 영업이 지속된 duration을 feature로 두는 것이 유효해보였다.
- Target encoding의 여지를 확인키 위해 'City', 'Day' column에 대해 target의 distribution을 확인했는데, 모두 상이한 분포를 보여 가능하단 판단을 내렸다. 그러나 유의미한 성능개선은 안보였던 것으로. 'Year', 'Month', 'Day'의 경우 인코딩을 하지 않고 그대로 값을 취했다.
- XGBoost, LGBM, Ridge, Lasso, ElasticNet의 5개 회귀 모델을 적용했다.
- 트리기한 XGBoost, LGBM은 기대만큼 성능을 내지 못하였다. GridSearch를 충분히 하였고 score도 괜찮게 나왔으나, 과적합의 영향인지 test data에 대해선 낮은 점수를 기록했다.
- Ridge, ElasticNet의 선형 회귀 모델이 test에서도 우수한 성능을 보였다. L1 regulation만을 사용하는 Lasso는 매우 저조한 성능을 보였다. 같은 문제를 다룬 블로그 글을 참조했을 때, Lasso의 경우 coeff 값이 상위 1개를 제외하고 모두 0으로 내려앉은 것을 확인할 수 있다.
- P1~P37의 count plot을 그려봤을 때, skew가 있는 column이 많아보였다. 이에 대해서는 과감히 drop하여 적절히 feature selection을 하는 것이 성능 개선을 이뤄낼 수 있으리라 예상된다.
스터디 논의 내용
Topic
'Bias variance decomposition'
Code
Github