1、数据的探索分析EDA
数据的探索分析EDA,是对数据进行初步的统计分析,统计数据的分布、异常、相互关系,目标是让我们了解这些数据能告诉我们什么。可以用来指导我们进行模型的选择,比如说帮助我们初步的决定哪些特征需要被使用,哪些特征需要被剔除。

准备好样本、特征、label
查看样本集中样本总个数、特征总个数
查看正负样本个数,如果正负样本相差不多,则属于样本均衡的建模问题,如果其中一类明显高于另外一类,则属于样本不均衡的建模问题
查看一下每个特征的类型:离散型、连续型。按照不同的类型进行分组,分别进行处理
按照上面的分组,进行单个特征评估

1.1、单个特征评估
分析过程按照以下顺序依次进行,没有出现的情况就跳过
分析方法是推荐使用,如有其他方式达到相同效果也可行
分析工具自由选择

1.1.1 连续型特征
1、查看变量的缺失值(missing value,空值)个数以及所占比例

1)剔除掉缺失率>80%并且未来依然会高缺失的变量
2)如果“缺失”包含了业务含义,保留该变量,并且直接将缺失值填充为区别于其他正常值的默认值,比如-1。
3)如果“缺失”没有业务含义:
    a)连续型变量:偏正态分布,用均值填充,可以保持数据的均值;偏长尾分布,使用中值填充,避免受异常值的影响。
      编程上可以用sklearn.preprocessing中的Imputer实现;
    b)若缺失量比较大,不适合使用平均值填补。一般通过使用其它变量预测或者直接将缺失值设置为默认值的方法填补;

2、画概率密度图,查看样本在该特征值上的分布

根据连续变量的值域范围,将该变量分成10箱,就是分成10段,箱数可自由选择;
统计每一箱内样本的占比:该箱内样本个数/总样本个数,这就是概率密度。然后将每一箱的概率密度画出来:

1)X轴:分箱区间
2)Y轴:概率密度:落在该分箱内的样本个数 / 总样本个数
3)编程可以用seaborn. distplot(kde=True)实现。
4)可以看出:样本在该特征值上的分布:大部分样本集中在哪个范围内?
5)上图中是两组样本集,一种颜色代表一组,画在同一个图里面,可以看出两组样本【在特征分布上】有哪些不同

3、画“好坏样本比”曲线

根据连续变量的值域范围,将该变量分成10箱,就是分成10段,箱数可自由选择;
统计每一箱内的两类样本的比值:该箱内label=1的样本个数 / 该箱内label=0的样本个数;
可以看出该特征对两类样本的区分度。
问题:在实际画图的时候,会出现一个问题,当分母=0的时候,该比值会无穷大,画不出来;
解决办法:找到该样本集中总体占比多的那一类,比说label=1的样本多,那么统计每一箱内label=1样本个数 / 该箱内总样本个数,效果也是一样的,因为就只有两类。

1)X轴:分箱区间
2)Y轴:两类样本比:该箱内label=1的样本个数 / 该箱内label=0的样本个数
3)比较纵坐标的值,跌宕起伏很陡峭的话,说明该特征对两类样本有一定区分度;如果是一条接近水平的直线,则说明该特征对于两类样本没有区分能力。
   也就是各箱之间的【差值】越大,该特征区分能力就越好。
4)上图中是两组样本集,一种颜色代表一组,画在同一个图里面,可以看出两组样本【在特征的区分度上】有哪些不同,这在比较样本构成的时候会用到。
   从上图可以看出:橘色的样本集中,label=0的样本在每一箱内的占比,明显比蓝色的样本集少,也就是橘色每一箱内label=1的样本占比多;
   在该特征的区分度上也有一点差别,看倒数第二、三个分箱,蓝色的差值更大,说明该特征在该样本集上的这两个区间内的区分力比橘色的大

4、极端值分析

1)在上一步画图的时候,就可以看出来有哪些极端值
2)除非是计算或者人为错误,极端值需要从业务层面进行分析
    a)    分别计算“拥有极端值的那些样本中,label=1样本的占比R1” 和“拥有非极端值的那些样本中,label=1样本的占比R2”
    b)    如果R1明显大于R2,则说明极端值有业务意义,建议保留,特别是从反欺诈的角度来分析一下
3)如果是计算或者人为错误,极端值的影响可以通过分箱被中和,对模型训练没有影响;
   也可以将极端值设置成缺失值/空值,然后用处理缺失值的方法进行处理

5、计算变量的方差

如果方差接近于0,也就是该特征的特征值之间基本上没有差异,这个特征对于样本的区分并没有什么用,剔除
1
6、查看变量与label之间的相关性

皮尔逊系数/斯皮尔曼系数:衡量2个变量之间的线性相关性。
.00-.19 “very weak”
.20-.39 “weak”
.40-.59 “moderate”
.60-.79 “strong”
.80-1.0 “very strong”

结合上面几步,综合来决定,该特征对于样本的区分有没有作用。
7、查看变量之间的相关性

1)目的:去除冗余变量,并结合业务含义取舍
2)皮尔逊系数/斯皮尔曼系数:衡量2个变量之间的线性相关性。
3)如果>0.8,说明2个变量有明显线性关系,只保留一个,保留与label的皮尔逊系数较大的那个变量
  或者保留lightgbm AUC最大的那个;

8、计算变量IV值(也可以考虑Gini系数)

目的:筛选变量,IV值低的变量根据业务分析决定是否剔除,一般<0.02的变量可剔除
<0.02 unpredictive
0.02 – 0.1 weak (maybe acceptable)
– 0.3 medium
>0.3 strong

9、    计算AUC

计算单变量的AUC:该变量经过lightgbm之后的AUC,AUC>0.53可以考虑留下
1
10、    计算importance

将上面步骤筛选出来的特征,全部输送到lightgbm算法中训练,得到每一个特征的importance,过滤掉importance=0的变量。
1
11、其他考虑因素

以上所有特征工程的步骤,都要跟业务结合在一起,综合考虑,衡量一个变量采用与否。

1.1.2    离散型特征
1、查看变量的缺失值(missing value,空值)个数以及所占比例

1)剔除掉缺失率>80%并且未来依然会高缺失的变量
2)如果“缺失”包含了业务含义,保留该变量,并且直接将缺失值填充为默认值。
3)如果“缺失”没有业务含义
    a)离散型变量,用众数填充;
    b)若缺失量比较大,不适合使用中位数或者平均值填补。一般通过使用其它变量预测或者直接将缺失值设置为默认值的方法填补;

2、对离散特征的值进行编码
由于离散值有数值型、字符型等,其中字符型没有办法直接入模计算,所以要对其进行编码,全部变成数值型, 将定性数据编码为定量数据

1)Label encoding  
   将变量中的每个unique value指定为一个整数,编程上可以用sklearn中的LabelEncoder实现。
2)One-hot encoding  
   将一个变量变成多个变量,例如有4个样本,原特征及特征值是{“户籍省“:[“北京”,”上海”,”福建”,”四川”]},
   {“四川”:[0,0,0,1]}。编程上可以用pd.get_dummies(df)或者sklearn.preprocessing中的OneHotEncoder实现。

3、    画概率密度图,查看样本在该特征值上的分布

对该特征进行分箱,由于是离散变量,值比较少,所以该特征的每一个值就是一箱;
统计每一箱内样本的占比:该箱内样本个数/总样本个数,这就是概率密度。然后将每一箱的概率密度画出来:

1)X轴:分箱区间
2)Y轴:概率密度:落在该分箱内的样本个数 / 总样本个数
3)编程可以用seaborn. distplot(kde=True)实现。
4)上图中是两组样本集,一种颜色代表一组,画在同一个图里面,可以看出两组样本【在特征分布上】有哪些不同
5)可以看出
    a)该离散特征unique value的个数以及具体数值
    b)异常值/极端值
    c)样本在该特征值上的分布:大部分样本集中在哪个范围内?

4、    画“好坏样本比”图

对该特征进行分箱,由于是离散变量,值比较少,所以该特征的每一个值就是一箱;
统计每一箱内的两类样本的比值:该箱内label=1的样本个数 / 该箱内label=0的样本个数;
可以看出该特征对两类样本的区分度。
问题:在实际画图的时候,会出现一个问题,当分母=0的时候,该比值会无穷大,画不出来;
解决办法:找到该样本集中总体占比多的那一类,比说label=1的样本多,那么统计每一箱内label=1样本个数 / 该箱内总样本个数,效果也是一样的,因为就只有两类。

1)X轴:分箱区间
2)Y轴:两类样本占比:该箱内label=1的样本个数 / 该箱内label=0的样本个数
3)比较纵坐标的值,跌宕起伏很陡峭的话,说明该特征对两类样本有一定区分度;如果是一条接近水平的直线,则说明该特征对于两类样本没有区分能力。
   也就是各箱之间的【差值】越大,该特征区分能力就越好。
4)上图中是两组样本集,一种颜色代表一组,画在同一个图里面,可以看出两组样本【在特征的区分度上】有哪些不同,这在比较样本构成的时候会用到。
   从上图可以看出:橘色的样本集中,label=0的样本在每一箱内的占比,明显比蓝色的样本集少,也就是橘色每一箱内label=1的样本占比多;
   在该特征的区分度上也有一点差别,看倒数第二、三个分箱,蓝色的差值更大,说明该特征在该样本集上的这两个区间内的区分力比橘色的大

5、    其他评估方法,类似连续特征处理方式

2、特征衍生
以上特征评估方法,都是在原有特征的基础上,进行分析、筛选,并没有生成新的特征,下面来介绍特征工程的另一重头戏:利用已有特征,衍生出新的特征

2.1 Polynomial features(多项式特征)
我们在进行分类和回归预测的时候,有时需要根据已有的特征构建更多的特征,然后对特征再进行特征选择。实验发现,通过增加一些输入数据的非线性特征来增加模型的复杂度,这种做法通常是有效的。一个简单通用的办法是使用多项式特征,可以获得特征的更高维度和互相间关系的项。
多项式特征,是一个简单的特征构造方法,该方法是根据已有的特征产生新的特征,可以通过sklearn.preprocessing 中的PolynomialFeatures 实现。这些由多个单独变量组合而成的特征称为交互项。换句话说,虽然两个变量本身对目标的影响不大,但将它们组合成一个单独的交互变量可能会显示出与目标的强关系。

举一个例子:
1)原特征是(X_1, X_2),计算原特征与label的pearson线性相关系数;
2)用PolynomialFeatures(degree=2)构造多项式特征,构造出来的新特征就是(1, X_1, X_2, X_1^2, X_1X_2, X_2^2);
3)再计算这些新特征与label的pearson线性相关系数,查看是否有提高;
4)如果有,可以考虑将这些新生成的多项式特征合并到原特征里;
5)为了查看这些多项式特征有无效果,需要进行对比实验
    a)    用原特征训练模型,记录AUC
    b)    加入多项式特征之后,再训练模型,记录AUC
    c)    查看后者AUC是否较前者AUC有提高,如果有,说明多项式特征起了作用。
--------------------- 
作者:lanyuelvyun 
原文:https://blog.csdn.net/lanyuelvyun/article/details/82151767 
版权声明:本文为博主原创文章,转载请附上博文链接!

【机器学习】特征工程步骤——以二分类问题为例相关推荐

  1. 机器学习——特征工程之分类变量

    机器学习--特征工程之分类变量 前言 分类变量的编码 1.one-hot 编码 2.虚拟编码 3.效果编码 处理大型分类变量 1.特征散列化 2.分箱计数 总结 前言 关于特征工程,已经对空值.数值型 ...

  2. 机器学习特征工程之连续变量离散化:连续变量二值化(Binarizer)

    机器学习特征工程之连续变量离散化:连续变量二值化(Binarizer) 离散化,就是把无限空间中有限的个体映射到有限的空间中: 根据用户的听音乐的数据来预测哪些歌曲更受欢迎. 假设大部分人听歌都很平均 ...

  3. 机器学习-特征工程中的特征降维

    对于一个机器学习问题,数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限.由此可见,数据和特征在模型的整个开发过程中是比较重要.特征工程,顾名思义,是对原始数据进行一系列工程处理,将其提炼为 ...

  4. 机器学习-特征工程中的特征选择

    对于一个机器学习问题,数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限.由此可见,数据和特征在模型的整个开发过程中是比较重要.特征工程,顾名思义,是对原始数据进行一系列工程处理,将其提炼为 ...

  5. 机器学习-特征工程中的数据预处理

    对于一个机器学习问题,数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限.由此可见,数据和特征在模型的整个开发过程中是比较重要.特征工程,顾名思义,是对原始数据进行一系列工程处理,将其提炼为 ...

  6. 机器学习实战 | 机器学习特征工程最全解读

    作者:韩信子@ShowMeAI 教程地址:https://www.showmeai.tech/tutorials/41 本文地址:https://www.showmeai.tech/article-d ...

  7. 机器学习——特征工程——数据的标准化(Z-Score,Maxmin,MaxAbs,RobustScaler,Normalizer)

    数据标准化是一个常用的数据预处理操作,目的是处理不同规模和量纲的数据,使其缩放到相同的数据区间和范围,以减少规模.特征.分布差异等对模型的影响. 比如线性回归模型.逻辑回归模型或包含矩阵的模型,它们会 ...

  8. 探讨使用UML设计机器学习特征工程与深度学习建模等大数据分析软件

    大数据人工智能软件产品研发,是在传统软件工程的基础上,增加了数据特征分析.人工智能算法建模及模型训练过程,同时也增加了很大的不确定性. 0. 前言 本文以程序员视角,以客户流失为案例,使用UML方式设 ...

  9. 机器学习特征工程之连续变量离散化:聚类法进行分箱

    机器学习特征工程之连续变量离散化:聚类法进行分箱 离散化,就是把无限空间中有限的个体映射到有限的空间中: 根据用户的听音乐的数据来预测哪些歌曲更受欢迎. 假设大部分人听歌都很平均,会不停的听新的歌曲, ...

最新文章

  1. Intellij IDEA中开启Run Dashboard模式
  2. 8种方案解决重复提交问题!
  3. 读取xml忽略dtd验证
  4. docker-compose常用命令
  5. widget模式弄不出来_【春天文化】互联网时代的教育模式培养精英
  6. 博士仅用2周投中了篇论文,戏耍157家期刊,被Science报道!
  7. linux lvm 查看,Linux LVM 详解
  8. 使用C#+Edge (Chromium)进行Web自动化测试
  9. Android 获取联系人列表
  10. JVM总结(一):概念----(无节操转载,潜心学习)
  11. qt qtableview 刷新列表_qt中Qtableview的用法
  12. URL 长链地址转短链 URL地址
  13. 继电器控制实验程序c语言,继电器原理及实验程序
  14. Mysql从入门到入魔——8. 视图、存储过程、事务处理
  15. 程序员做外包,真的没地位没出路吗?
  16. Hazel引擎学习(八)
  17. Python自动检查哪位学生未提交作业
  18. (Python语法篇)4.序列(3)字典
  19. html2canvas生成放大图片
  20. 怎么在线免费压缩图片

热门文章

  1. 老好人当不了领导,尤其是中层干部
  2. grib1文件解析 python_grib文件解析
  3. 【论】易语言锁机过杀
  4. 华为MateBook D笔记本(8代处理器)安装Win7系统
  5. detectron2的安装和测试
  6. 用python---matplotlib画图不能显示中文(中文乱码)
  7. 快讯:阿里20周年街头采访集锦
  8. 搜索——献给阿尔吉侬的花束
  9. sqlite源码剖析(一)
  10. Nodejs安装教程(全套教程保姆级)