【数据挖掘】【笔记】阅读之数据挖掘比赛基本流程

来源:互联网 发布:左右音箱测试软件 编辑:程序博客网 时间:2024/05/21 17:21

【干货】Kaggle 数据挖掘比赛经验分享
http://mp.weixin.qq.com/s/BE1mfmKJTsDSwWi16mllNA

数据分析,数据清洗,特征工程,模型训练和验证等四个大的模块

数据分析

  • 特征变量的分布
    • 连续值
      • 长尾分布且考虑使用线型模型,进行幂变换或对数变换
    • 离散值
      • 将频次较低的特征值统一编码为其他
  • 目标变量的分布
    • 连续
      • 值域范围大,考虑对数变换(结果需要逆变换)
      • 一般进行BoxCox变换,变换为正态分布
    • 离散值
      • 不均衡
        • 上采样/下采样
      • 某个ID上面不平衡
        • 划分训练集时考虑分层抽样
  • 变量之间的分布和相关度,发现高相关和共线性的特征

数据清洗

预处理
- 特征缺失值的处理
- 连续值:
- 偏正态分布用均值代替,保持数据均值
- 长尾分布用中值代替,避免受outlier影响
- 离散
- 众数代替
- 文本数据
。。。

特征工程

特征决定了效果的上限。case by case

特征变换

主要针对一些长尾分布的特征,进行幂变换或对数变换,使得模型(LR or DNN)更好的优化。

树模型(RF, GBDT) 对单调的函数变换不敏感。原因在于树模型求解分裂点的时候只考虑排序分位点。

特征编码

离散的类别特征。常用LabelEncoder, OneHotEncoder

对于取值较多的类别特征,OneHotEncoder会导致特征矩阵巨大,影响效果:
- 统计取值在样本中的频率,取Top N的取值做编码,剩下的类别分到‘其他类’,N作为超参数需要调优。
- 统计每个ID特征的一些统计量代替为特征
- 参考word2vec,将每个类别特征的取值映射到一个连续的向量,对这个向量进行初始化,跟模型一起训练。训练结束后,可以同时得到每个ID的Embedding。具体的使用方式,可以参考 Rossmann 销量预估竞赛第三名的获奖方案,https://github.com/entron/entity-embedding-rossmann。

对于 Random Forest 和 GBDT 等模型,如果类别特征存在较多的取值,可以直接使用 LabelEncoder 后的结果作为特征。