Kaggle比赛(Recruit Restaurant Visitor Forecasting)
1.特征选取
类别特征选取了:
['air_area_name0', 'air_area_name1', 'air_area_name2', 'air_genre_name', 'air_store_id', 'day_of_week', 'golden_week', 'holiday_flg', 'month', 'year']
其中'air_store_id'是重点,需要将每个店都作为一个独立的类别;
数值特征选取了:
['week_of_year', 'latitude', 'longitude', 'precipitation', 'date_int', 'date_diff', 'var_max_long', 'var_max_lat', 'lon_plus_lat', 'avg', 'min_visitors', 'mean_visitors', 'median_visitors', 'max_visitors', 'count_observations']
其中'week_of_year', 是为了反映访客数的年度周期性变化而增加的特征,'date_diff',是为了反映访客数的长期性变化而增加的特征;
'precipitation',是为了反映天气影响而加入的降水量特征;
['avg', 'min_visitors', 'mean_visitors', 'median_visitors', 'max_visitors', 'count_observations']
是fill_submission中才有的店铺访客数的统计数据特征,会造成过拟合,在no_fill_submission中去掉这些特征得到了更好的private score;
预订信息是不能作为特征的,因为预定信息只到4-22,而要预测的数据是4-23-5-31期间的,必然存在许多缺失的预订信息,模型若过于依赖预订信息特征,可能在训练集和public score中都能获得较好的成绩,但到了private score时,因为缺失的相关预订数据过多,于是成绩就会下降特别多。
2.输出变量转换与极端值处理
单个店铺的访客数数值分布较为分散,取其对数log(1+vistors),分布较接近正态分布,假设其符合正态分布,将值在均值加减2.4倍标准差外的(98.5% standard)数据看作是极端数据,将极端数据值统一修改为此店铺的访客数据中位数。
3.模型选择
使用GBDT和LR的H2OStackedEnsembleEstimator模型(Stacking融合),在不同参数下得到的多个模型取平均得到最终模型。
GBDT对存在较多分类变量的data较为有优势。
4.单模型调参
一个模型中需要调的参数过多,无法一次调到最优,只能靠经验一次调整一两个参数。
5.h20相比与sklearn的优势
h2o能处理离散的类别特征,将其直接作为类别构建模型,而sklearn中要对离散类别特征进行one-hot编码,使得原有的n个类变成n列特征,每个特征取0或1(只能有一个1),这使得特征数量变多,处理数据量变大,不利于提高模型精度。另外在采用随机森林模型时,由于特征的选取是随机的,因此n个特征列不一定同时被选取到,这使得在大部分决策树中离散类别特征成为缺失不全的特征。

浙公网安备 33010602011771号