特征工程步骤——以二分类问题为例

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lanyuelvyun/article/details/82151767

1、初步分析阶段

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

1、准备好样本、特征、label
2、查看样本集中样本总个数、特征总个数
3、查看正负样本个数,如果正负样本相差不多,则属于样本均衡的建模问题,如果其中一类明显高于另外一类,则属于样本不均衡的建模问题
4、先整体查看一下 1)每个特征的缺失值数量以及缺失值所占比例 2)每个特征的类型:离散型、连续型。按照不同的类型进行分组,分别进行处理
5、接下来,按照上面的分组,进行单个特征评估

1.1、单个特征评估

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

1.1.1 连续型特征

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

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

2、画概率密度图,查看好坏样本在该特征值上的分布
根据变量的值,统计label=0好样本(=1坏样本)的比例,画概率密度图:
概率密度图

1)X轴:该特征的特征值
2)Y轴:具有当前特征值的label=1(或=0)样本占总label=1(或=0)样本的比例
3)编程可以用seaborn. distplot(kde=True)实现。
4)可以看出:异常值/极端值;查看好坏样本在该特征值上的分布:好(坏)样本集中在哪个范围内?

3、画“好坏样本比”曲线:计算出每一个特征值上的好坏样本比。可以看出该特征对好坏样本的区分度。
这里写图片描述这里写图片描述

1)X轴:该特征的每一个特征值
2)Y轴:好坏样本比:好样本个数/坏样本个数
3)从左图,比较纵坐标的值,可以看出该特征对好坏样本还是有一定区分度的
4)从右图,比较纵坐标的值,可以看出该特征对好坏样本基本上没有区分度

4、极端值分析

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

5、计算变量的方差

如果方差接近于0,也就是该特征的特征值之间基本上没有差异,这个特征对于样本的区分并没有什么用,剔除

6、查看变量与label之间的相关性

皮尔逊系数/斯皮尔曼系数:衡量2个变量之间的线性相关性。
   .00-.19 “very weak”
   .20-.39weak”
   .40-.59 “moderate”
   .60-.79strong”
   .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.020.1 weak (maybe acceptable)
   – 0.3 medium
   >0.3 strong

9、 计算AUC

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

10、其他考虑因素

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

1.1.2 离散型特征

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

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

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

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

3、 画概率密度图,查看好坏样本在该特征值上的分布
根据变量的值,统计label=0好样本(=1坏样本)的比例,画概率密度图:
这里写图片描述

1)X轴:特征的值
2)Y轴:具有当前特征值的label=1(或=0)样本占总label=1(或=0)样本的比例
3)编程可以用seaborn. distplot(kde=False, hist=True, norm_hist=Truee)实现。
4)可以看出
    a)该离散特征unique value的个数以及具体数值
    b)异常值/极端值
    c)查看好坏样本在该特征值上的分布:好(坏)样本集中在哪个范围内?

4、 画“好坏样本比”散点图:计算出每一个特征值上的好坏样本比。可以看出该特征对好坏样本的区分度
这里写图片描述

1)X轴:该特征的每一个特征值
2)Y轴:好坏样本比:好样本个数/坏样本个数
3)从上图,比较纵坐标的值,可以看出该特征对好坏样本基本上没有区分度

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有提高,如果有,说明多项式特征起了作用。

猜你喜欢

转载自blog.csdn.net/lanyuelvyun/article/details/82151767