【风控模型】特征工程之缺失值及编码

什么是特征工程?

特征工程是使用专业背景知识和技巧处理数据,使得特征能在机器学习算法上发挥更好的作用的过程。

机器学习领域的大神Andrew Ng(吴恩达)老师说“Coming up with features is difficult, time-consuming, requires expert knowledge. “Applied machine learning” is basically feature engineering. ” 注:业界广泛流传:数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已。

特征清洗

实际工程中数据缺失产生的原因主要有如下两种:

  • 客观原因: 由于数据采集失败等原因, 导致数据未及时采集返回
  • 人为原因: 由于录入员误录漏录, 历史局限(系统未采集等).

实际工程中缺失值处理主要有如下两种:

  • 删除
    • 针对样本: 若特征确保新样本均存在, 可删除缺失样本
    • 针对特征: 若特征缺失较为常见, 可删除该特征列
    • 优缺点:
      • 优点: 简单高效
      • 缺点: 损失大量有效信息
  • 补全
    • 优缺点:
      • 优点: 保留原始数据
      • 缺点: 计算复杂, 可能引入额外误差

统计值插补

  • 如果样本的属性是连续值,则该属性的缺失值就以该属性有效值的平均值来插补。
  • 如果样本的属性是离散值,则该属性的缺失值就以该属性有效值的众数(出现频率最高的值)来插补。

均值插补在含有缺失值的属性上的所有缺失值都填补为同一个值。而同类均值插补首先将样本进行分类,然后以该类中的样本的均值来插补缺失值。

注意: 同类均值插补可能导致特征泄露.

# 缺失值处理方法
sklearn.preprocessing.Imputer(missing_values = 'NaN', strategy = 'mean', axis = 0, verbose = 0, copy = True)
# 缺失80%可考虑删除
df_titanic.drop(["deck"], axis = 1)

建模插补

建模插补思想: 将缺失属性作为预测目标, 通过建立模型来预测.

建模插补步骤: 将数据集拆分, 利用属性未缺失样本进行训练, 针对属性缺失样本进行预测, 从而插补.

建模插补存在根本缺陷:

  • 若其他属性与存在缺失的属性无关, 预测毫无意义
  • 若其他属性与存在缺失的属性高度相关(预测效果好), 那么存在缺失属性信息亢余, 无添加必要

高维映射

高维映射思想: 将属性映射到高维空间

高维映射步骤: 将属性离散化添加新类别(缺失情况类别), 从 K 维度映射到 K + 1 维度.

高维映射是最精确的做法, 完全保留信息,也未添加额外信息,优缺点如下:

  • 优点: 完全保留原始全部信息.
  • 缺点: 计算量大大提升, 只有在样本量大时效果好, 否则过于稀疏效果较差.

特征编码

特征分箱

在 评分卡等模型中, 一般需要对连续特征离散化, 从而增加模型的鲁棒性, 降低模型的过拟合风险, 而离散化一般采用分箱的方法.

特征分箱优点

本部分来自于严林的知乎回答, 并根据评论区回复进行整理.该部分优势相互之间有所重复和耦合, 但是为保证完整, 全部保留.

  1. 离散特征的增加和减少都很容易,易于模型的快速迭代 > 该部分不代表模型无需重新训练, 而是相较于连续特征其处理上较为简单

  2. 稀疏向量内积乘法运算速度快,计算结果方便存储,容易扩展

  3. 离散化后的特征对异常数据有很强的鲁棒性 > 比如一个特征是 age>301,否则 0.如果特征没有离散化,一个异常数据 age = 300会给模型造成很大的干扰

  4. LR属于广义线性模型,表达能力受限; 单变量离散化为 N个后,每个变量有单独的权重,相当于为模型引入了非线性,能够提升模型表达能力,加大拟合 > 对于特征的分箱后, 可以将 类似于 肌肉强度-年龄 这种类似单调增后单调减的情况以分段形式, 从而为前期和后期减少权重, 中期增加权重, 模拟非线性

  5. 离散化后可以进行特征交叉,由 M+N 个变量变为 M*N个变量,进一步引入非线性,提升表达能力

  6. 特征离散化后,模型会更稳定 > 注意: 对于 age 特征, 可能增加一岁就会大的变化, 但是离散就会减弱该变化, 但是处于两个区间之间可能增大该区别

  7. 特征离散化以后,起到了简化了逻辑回归模型的作用,降低了模型过拟合的风险

无监督分箱

无监督分箱: 无需利用标签数据, 即可进行分箱.

  • 等距分箱: 从最小值到最大值之间, 均分为 N 等份, 构建对应的区间.每个区间的样本数量不等且容易受到异常最大最小值影响.
  • 等频分箱: 分箱时每个箱内的样本量相等

有监督分箱

决策树分箱: 利用决策树度单变量拟合目标变量, 使用内部及诶点的阈值作为分箱的切点.

best-ks分箱

KS(Kolmogorov Smirnov): 用于模型风险区分能力进行评估,指标衡量的是好坏样本累计部分之间的差距.KS值越大,表示该变量越能将正,负客户的区分程度越大.通常来说,KS>0.2 即表示特征有较好的准确率.

原理: 让分享后组别的分布的差异最大化

步骤:

  1. 将特征值值进行从小到大的排序.
  2. 计算出 KS 最大的那个值,即为切点,记为 D.然后把数据切分成两部分.
  3. 重复步骤2,进行递归,D左右的数据进一步切割.直到KS的箱体数达到我们的预设阈值即可.

特点:

  • 连续型变量: 分箱后的 KS 值<=分箱前的 KS
  • 分箱过程中,决定分箱后的 KS 值是某一个切点,而不是多个切点的共同作用.这个切点的位置是原始 KS 值最大的位置.

代码暂时可以参考特征工程之分箱--Best-KS分箱特征工程之特征分箱(决策树分箱、卡方分箱、bestks以及评价标准WOE和IV)

卡方分箱

卡方分箱(ChiMerge): 由 Kerber 于1992提出; 依赖于卡方检验的分箱方法,在统计指标上选择卡方统计量(chi-Square)进行判别.

主要包括两个阶段: 初始化阶段和自底向上的合并阶段:

  1. 初始化阶段:
    1. 首先按照属性值的大小进行排序(对于非连续特征,需要先做数值转换,比如转为坏人率,然后排序),然后每个属性值单独作为一组.
  2. 合并阶段:
    1. 对每一对相邻的组,计算卡方值
    2. 根据计算的卡方值,对其中最小的一对邻组合并为一组
    3. 不断重复 <1>, <2> 直到计算出的卡方值都不低于事先设定的阈值,或者分组数达到一定的条件(如最小分组数5,最大分组数8).

代码暂时可以参考一文介绍特征工程里的卡方分箱,附代码实现

参考资料


【风控模型】特征工程之缺失值及编码
https://www.windism.cn/2561168350.html
作者
windism
发布于
2022年3月19日
许可协议