机器学习笔记03--竞赛常见上分技巧

271 阅读4分钟

鱼佬:先搞出baseline,再根据baseline进行优化

最新的竞赛分数:6.38269

tup.png

(悲伤)搞了异常值处理分数还是没上去,最后一次迭代的次数没设置好,也可能需要加上额外的上分技巧,有事情没赶上直播,刚好来看看鱼佬直播的回放

鱼佬直播回放链接:www.bilibili.com/video/av701…

一、竞赛中的几个主要模块

  • 问题建模
  • 数据分析
  • 数据清洗
  • 特征工程
  • 模型训练
  • 模型验证
  • 模型预测
  • 计算排名

二、 问题建模

业务理解

充分理解赛题业务,根据业务挖掘特征,构建和目标相关的特征(非常关键)

例子:预测用户还款情况(参考鱼佬的PPT)

赛题数据

理清楚每种数据集之间的关系,查看数据中缺失值的情况,查看类别特征和数值特征的基本分布(类别数,均值,最值等)

评价指标

回归任务和分类任务有着不同的评价指标。

  • 分类:精确率、召回率、AUC、logloss
  • 回归:MAE、MAPE、RMSE

线下验证

针对时序验证:分割训练集和验证集时间分隔点离测试集越近,效果越好 K折交叉验证:效果好,融合有分数提升,可以在时序验证之后作为最终提交

三、 探索性数据分析(EDA)

主要目的: 了解数据(类型大小、是否干净、标签类型),为建模做准备

EDA必看:

  • 数据集大小,字段类型
  • 缺失值
  • 特征间是否冗余
  • 是否存在时间信息(数据穿越性)
  • 标签的分布(是否存在分布不平衡)
  • 训练集测试集的分布
  • 单变量/多变量的分布

四、特征工程

数据预处理

离群点处理:

  1. 当作缺失值
  2. 删掉离群点所在样本
  3. 使用统计值进行填充

缺失值处理:是否是真正意义上的缺失?

错误值处理:假值(明暗)处理

特征获取

先把类别特征和数值特征分开再进行处理。

编码方式:自然数、独热、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,活跃的助学氛围,对于新手来说成长很大,在群里不发言看着大佬聊天都能学到很多。接下来的几天继续努力,不断优化好代码,争取冲进复赛。