-
简介
- 赛题介绍
- 线上分数:0.06391+,调参任务还没有完全做完
-
特征工程
-
由于题目中的数值型特征,官方自动补了0,为了识别出该操作,针对数值型增加判断是否为0
-
由于相关APP打开次数,有些数据明显不正常,人为的划定区间(相当于手动聚类),{0, (0, 10), (10, 100), (100, 1000), (1000, )},然后One-Hot编码
尝试过直接用编码后的代替原始特征,发现效果不太好,因此不将原始特征drop掉
-
Boolean型特征二次组合,比如可能是否大学生+是否黑名单时才是强特
理论上应该穷举所有的组合可能,但是可能性太高了,使用PCA和SVD降维效果均不理想,有想通过CNN的方式降维,但是还没有较好的思路,只考虑了所有Boolean特征一起组合,此处用了一点小技巧:二进制编码
- 将所有Boolean特征的值当做二进制,转为10进制即可
- 由于有些编码情况过于少,应该合并为-1,尝试了不合并,小于2次的合并,小于5次和小于10次的合并,线下最好的为小于5合并
- 将编码合并后进行One-Hot
-
通过最后充值金额判断充值方式
感谢Venn老哥的开源,开源baseline见参考资料,不过进行了一点点改动
- 通过充值金额分三类,充值金额=0,充值金额能被10整除,充值金额不能被10整除
- 将编码后进行One-Hot
-
通过花费和余额等判断用户稳定性
该特征来源于Venn老哥的baseline,详情见参考资料
- 话费稳定性:当月花费 / (近6月平均花费 + 5) ps.分母+5是为了简单平滑
- 当月花费 / (当月账户余额 + 5)
-
尝试过的特征
- 万物皆embedding已经失效
- 所有基于label构造的特征,类似于CTR的特征均无效。(线下很好,线上GG,过拟合了)
-
-
特征融合
- 基模型
- lightgbm
- xgboost
- catboost,速度很慢,调参难度大
- RandomForest:速度慢,且效果差,舍弃
- GradientBoostin:速度慢,效果差,舍弃
- Adaboost:理由同上,舍弃
- stacking融合
- 使用BayesianRidge作为融合模型
- 由于使用了3个基模型,所以共有3种组合,lgb+xgb,lgb+ctb,lgb+xgb+ctb,加上原始的3组,则共有6组结果
- blending融合
- 通过stacking后有6组结果,如何确定6组结果的权重,这就是blending需要做的
- 最简单的做法是6组取均值,次数将其转化为最优化问题
- 在训练集中,以mae最小为目标函数,训练6个权重
- 将6个权重归一化
- 尝试过的模型
- KerasRegressor:NN模型,效果很烂
- automl:效果很烂
- 线性模型还没有尝试
- 基模型
-
参考资料