workflow
数据探索 EDA
- 熟悉数据的分布、特点等等,为数据预处理和特征工程做基础。
数据预处理
- 不属于同一量纲
- 信息冗余
- 定性特征不能直接使用
- 将定性特征转换为定量特征
- 存在缺失值
- 信息利用率低
特征工程: 主要是来自wepe的特征
特征主要分为这几类:
- 用户线下相关的特征
- 用户线上相关的特征
- 商家相关的特征
- 用户-商家交互特征
- 优惠券相关的特征
- 其它特征
这里对于特征的选择,我大量参考了别人的代码和第一届比赛后的开源代码。首先搜集到尽可能足够多的特征,然后再去判断特征是否有用,考虑是否删除还是其他操作。
- 特征选择时候可以考虑使用过拟合训练的方法,使用100%数据集训练,使用100%数据集测试,观察auc
- 当auc距离1越远的时候,说明你的特征不足够多,再去探索寻找更多的特征,直到这里的auc接近1
- 然后,过拟合训练完成后,输出特征重要性。删除一些特征重要性低的特征,不断过拟合训练,保持auc基本不变。
- 最后你得到的是尽可能少的特征数量,但又能足够表示这批数据的特性。
模型选择: 尝试尽可能多的回归和分类模型
- wepe当时只使用了三个模型,这里你可以尝试更多的模型,比他做的更好。
- 尝试所有分类回归的模型,只要这些模型的表现还可以,就尽可能的单模型调到最优。
(使用CV本地验证即可,一般来说本地CV和线上LB是基本一致的) - 我当时只是使用了8个模型,然后直接blending,加权融合(我首先单个模型依次提交,给auc高的模型打高的权重,但这其实是很容易过拟合的)
- 训练多个基模型完成后,使用stacking或者bagging进行模型融合
建议 or 上分指南
- 特征一定要保证合适
- 训练足够多的基模型,使用stacking
第一层使用基模型训练出多个预测的auc
第二层使用逻辑回归(或者其他模型)来拟合第一层的输出作为这一层的输入,然后输出最终的auc
tips:集成学习
常见的 Ensemble 方法:
Bagging
Boosting
Blending
Stacking
从理论上讲,Ensemble 要成功,有两个要素:
Base Model 之间的相关性要尽可能的小
Base Model 之间的性能表现不能差距太大