鱼佬:先搞出baseline,再根据baseline进行优化
最新的竞赛分数:6.38269
(悲伤)搞了异常值处理分数还是没上去,最后一次迭代的次数没设置好,也可能需要加上额外的上分技巧,有事情没赶上直播,刚好来看看鱼佬直播的回放
鱼佬直播回放链接:www.bilibili.com/video/av701…
一、竞赛中的几个主要模块
- 问题建模
- 数据分析
- 数据清洗
- 特征工程
- 模型训练
- 模型验证
- 模型预测
- 计算排名
二、 问题建模
业务理解
充分理解赛题业务,根据业务挖掘特征,构建和目标相关的特征(非常关键)
例子:预测用户还款情况(参考鱼佬的PPT)
赛题数据
理清楚每种数据集之间的关系,查看数据中缺失值的情况,查看类别特征和数值特征的基本分布(类别数,均值,最值等)
评价指标
回归任务和分类任务有着不同的评价指标。
- 分类:精确率、召回率、AUC、logloss
- 回归:MAE、MAPE、RMSE
线下验证
针对时序验证:分割训练集和验证集时间分隔点离测试集越近,效果越好 K折交叉验证:效果好,融合有分数提升,可以在时序验证之后作为最终提交
三、 探索性数据分析(EDA)
主要目的: 了解数据(类型大小、是否干净、标签类型),为建模做准备
EDA必看:
- 数据集大小,字段类型
- 缺失值
- 特征间是否冗余
- 是否存在时间信息(数据穿越性)
- 标签的分布(是否存在分布不平衡)
- 训练集测试集的分布
- 单变量/多变量的分布
四、特征工程
数据预处理
离群点处理:
- 当作缺失值
- 删掉离群点所在样本
- 使用统计值进行填充
缺失值处理:是否是真正意义上的缺失?
错误值处理:假值(明暗)处理
特征获取
先把类别特征和数值特征分开再进行处理。
编码方式:自然数、独热、count(替代类别特征)、目标编码 统计方式:count、nunique(宽度)、ratio(偏好) 交叉统计:行交叉(均值、中位数、最值)、业务交叉构造 离散方式:分桶、二值化(0/1)(量纲影响,数据分布有差异)
时间特征
时间序列问题 对时间特征的分析:是否具有周期性、趋势性、强相关、异常点
- 强相关:前1/3/5/7/15/Nday
- 趋势性:增长趋势,降低趋势,节假日的影响(双十一等)
- 周期性:月、周、日,与峰值的时间差
- 异常点:各种节日的数据,简单标注、剔除、修正
时间相关特征:历史平移、滑窗统计
历史平移:平移一个单位 滑窗统计:构造统计特征,如均值,最大值,最小值来反应前三天的情况 对于常间时序问题,都可以采用这样的方式来提取特征,构建训练集。
特征选择
注意:特征不多的情况下,没有必要做特征选择
常见套路
- 过滤法:相关系数+卡方检验+互信息
- 封装法:前向搜索+后向搜索(耗时间)
- 嵌入法:基于学习模型的特征排序
五、模型选择
必备模型:XGBoost,LightGBM,NN模型 特点:对特征处理要求低,对类别和连续特征友好,缺失值不需要填充
高分肯定需要模型融合
模型融合
理论分析:特征差异+样本差异+模型差异 训练过程融合:Bagging + Boosting 训练结果融合:投票法+平均法+Stacking
六、总结
针对于竞赛提分,EDA可能并不是最关键的。通过鱼佬的分析我学到了很多,特征工程和模型融合对于竞赛上分起着很关键的作用,单靠简单的baseline+数据清洗还是很难上分。模型融合对于小白来说可能也不太好上手,需要不断的理论学习加上动手实践。很遗憾分数还是没有上去,有的朋友用baseline都能上6.1。这三次的打卡任务也告一段落了,DataWhale团队对竞赛小白来说帮助非常大,强大的baseline,活跃的助学氛围,对于新手来说成长很大,在群里不发言看着大佬聊天都能学到很多。接下来的几天继续努力,不断优化好代码,争取冲进复赛。