数据挖掘之特征工程(笔记)

特征工程

在介绍特征工程之前,我们先看两张图。

图一是基本的数据挖掘场景

数据挖掘之特征工程(笔记)

图二是特征工程的常见方法和步骤
数据挖掘之特征工程(笔记)

特征工程(Feature Engineering)是数据挖掘模型开发中最耗时、最重要的一步。这里简单介绍笔者在模型开发中所总结的一些方法。

特征也就是我们常常说的变量/自变量,一般分为三类:

  • 连续型
  • 无序类别(离散)型
  • 有序类别(离散)型

特征工程(Feature Engineering)包括:特征处理(Feature Processing)特征选择(Feature Selection)

特征处理(Feature Processing)

连续型特征

不处理

除了归一化(去中心,方差归一),不用做太多特殊处理,可以直接把连续特征扔到模型里使用。根据模型类型而定。

离散化

对于一些特殊的模型(信用评分卡)开发,有时候我们需要对连续型的特征(年龄、收入)进行离散化。
离散化方法的关键是怎么确定分段中的离散点,下面介绍几种常用的离散化方法:

  • 等距离离散(等距分组)
    顾名思义,就是离散点选取等距点。

  • 等样本点离散(等深分组)
    选取的离散点保证落在每段里的样本点数量大致相同

  • 决策树离散化(最优分组)
    决策树离散化方法通常也是每次离散化一个连续特征,原理如下:
    单独用此特征和目标值y训练一个决策树模型,然后把训练获得的模型内的特征分割点作为离散化的离散点。

  • 其他离散化方法
    其中,最优分组除决策树方法以外,还可以使用卡方分箱的方法,这种方法在评分卡开发中比较常见。

函数转换

有时我们的模型的假设条件是要求自变量或因变量服从某特殊分布(如正太分布),或者说自变量或因变量服从该分布时,模型的表现较好。这个时候我们就需要对特征或因变量进行非线性函数转换。这个方法操作起来很简单,但记得对新加入的特征做归一化。对于特征的转换,需要将转换之后的特征和原特征一起加入训练模型进行训练。

无序类别(离散)型

数值化

  • one-hot编码 一个变量k个值就转换成k个虚拟变量,优点:简单,且保证无共线性,缺点:太稀(稀疏矩阵)。
    避免产生稀疏矩阵的常见方法是降维,将变量值较多的分类维度,尽可能降到最少,能降则降,不能降的,别勉强。

也不是所有的无序变量都需要做数值化处理,决策树、随机森林等树模型可能不需要处理,视情况而定。

有序类别(离散)型

数值化

  • label encoder 一个变量的k个值,按序转换成k个数字(1,2,3…k)。例如一个人的状态status有三种取值:bad, normal, good,显然bad < normal < good。这个时候bad, normal, good就可以分别转换成 123

    该方法局限性较大:

    1. 不适用于建立预测具体数值的模型,比如线性回归,只能用于分类,
    2. 即使用于分类,也有一些模型不适合,
    3. 可能结果的精度不如one-hot编码。
  • 生成哑变量
    与one-hot编码一样,都是将一个变量的k个值生成k个哑变量,但注意不能丢了变量值之间的顺序关系。一般的表达方式如下:

status取值 向量表示
bad (1, 0, 0)
normal (1, 1, 0)
good (1, 1, 1)


上面这种表达方式很巧妙地利用递进表达了值之间的顺序关系。

特征选择(Feature Selection)

特征选择的目的

特征选择一般有两个目的:

  1. 剔除对因变量影响较小或无任何相关性的自变量,使得模型预测或分类效果达到理想值。
  2. 提高模型的可解释性

按特征类型分

这里只介绍Filter方法

  • 连续型: pearson相关系数
  • 有序型: 转换成数值后使用spearman相关系数,或使用无序型的方法。
  • 无序型: 单因素方差分析(回归),卡方检验、IV值(二分类)

上述方法为经验所得,并不全面,之后若遇到其他方法,会将其补充。也欢迎读者留言补充。

模型评估(Model Evaluation)

模型评估一般有两个目的:
1. 检验特征工程的工作,查看所选择的特征是否有利于提升模型的性能。
2. 检查参数调整的工作,通过调整模型参数,找到最佳参数使得模型的分类、预测性能最佳。

回归预测问题

对于连续型目标变量的回归预测问题,评估模型的方法一般有:

  • R^2值 R^2越大,模型的预测效果越好。

(后续补充)

分类预测问题

对于离散型目标变量的分类预测问题,评估模型的方法一般有:

  • 交叉检验 观察模型的预测准确率,越大越好。但注意使用决策树或随机森林时的过拟合问题。
  • AUC、ROC 观察模型的ROC曲线及AUC值,越大越好

(后续补充)

结束语

特征工程是一件极其繁琐同时也极其重要的一件事情。特征工程做的好,不仅后期的模型调参容易得多甚至不需要调参,而且模型的稳定性,可解释性也要更好。还记得文章开始的第一张图吗?如果特征工程做得不好,模型评估怎么调参都调不到理想的效果,那么你可能需要在虚线框内做循环的动作,知道你的模型达到理想的效果为止。可见特征工程非常的耗时、耗力,网上说特征工程所花的时间是模型开发所用时间的80%。在我看来,至少是占了95%。
所以,特征工程需要以提升模型的性能和可解释性为目标,有耐心地、逻辑清晰地去做。