【风控模型】特征工程之缺失值及编码
什么是特征工程?
特征工程是使用专业背景知识和技巧处理数据,使得特征能在机器学习算法上发挥更好的作用的过程。
机器学习领域的大神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
维度.
高维映射是最精确的做法, 完全保留信息,也未添加额外信息,优缺点如下:
- 优点: 完全保留原始全部信息.
- 缺点: 计算量大大提升, 只有在样本量大时效果好, 否则过于稀疏效果较差.
特征编码
特征分箱
在 评分卡等模型中, 一般需要对连续特征离散化, 从而增加模型的鲁棒性, 降低模型的过拟合风险, 而离散化一般采用分箱的方法.
特征分箱优点
本部分来自于严林的知乎回答, 并根据评论区回复进行整理.该部分优势相互之间有所重复和耦合, 但是为保证完整, 全部保留.
离散特征的增加和减少都很容易,易于模型的快速迭代 > 该部分不代表模型无需重新训练, 而是相较于连续特征其处理上较为简单
稀疏向量内积乘法运算速度快,计算结果方便存储,容易扩展
离散化后的特征对异常数据有很强的鲁棒性 > 比如一个特征是
age>30
是1
,否则0
.如果特征没有离散化,一个异常数据age = 300
会给模型造成很大的干扰LR属于广义线性模型,表达能力受限; 单变量离散化为
N
个后,每个变量有单独的权重,相当于为模型引入了非线性,能够提升模型表达能力,加大拟合 > 对于特征的分箱后, 可以将 类似于 肌肉强度-年龄 这种类似单调增后单调减的情况以分段形式, 从而为前期和后期减少权重, 中期增加权重, 模拟非线性离散化后可以进行特征交叉,由
M+N
个变量变为M*N
个变量,进一步引入非线性,提升表达能力特征离散化后,模型会更稳定 > 注意: 对于
age
特征, 可能增加一岁就会大的变化, 但是离散就会减弱该变化, 但是处于两个区间之间可能增大该区别特征离散化以后,起到了简化了逻辑回归模型的作用,降低了模型过拟合的风险
无监督分箱
无监督分箱: 无需利用标签数据, 即可进行分箱.
- 等距分箱: 从最小值到最大值之间, 均分为
N
等份, 构建对应的区间.每个区间的样本数量不等且容易受到异常最大最小值影响. - 等频分箱: 分箱时每个箱内的样本量相等
有监督分箱
决策树分箱: 利用决策树度单变量拟合目标变量, 使用内部及诶点的阈值作为分箱的切点.
best-ks分箱
KS(
Kolmogorov Smirnov
): 用于模型风险区分能力进行评估,指标衡量的是好坏样本累计部分之间的差距.KS值越大,表示该变量越能将正,负客户的区分程度越大.通常来说,KS>0.2
即表示特征有较好的准确率.
原理: 让分享后组别的分布的差异最大化
步骤:
- 将特征值值进行从小到大的排序.
- 计算出
KS
最大的那个值,即为切点,记为D
.然后把数据切分成两部分. - 重复步骤2,进行递归,
D
左右的数据进一步切割.直到KS的箱体数达到我们的预设阈值即可.
特点:
- 连续型变量: 分箱后的
KS
值<=分箱前的KS
值 - 分箱过程中,决定分箱后的
KS
值是某一个切点,而不是多个切点的共同作用.这个切点的位置是原始KS
值最大的位置.
代码暂时可以参考特征工程之分箱--Best-KS分箱或特征工程之特征分箱(决策树分箱、卡方分箱、bestks以及评价标准WOE和IV)
卡方分箱
卡方分箱(ChiMerge): 由 Kerber
于1992提出;
依赖于卡方检验的分箱方法,在统计指标上选择卡方统计量(chi-Square
)进行判别.
主要包括两个阶段: 初始化阶段和自底向上的合并阶段:
- 初始化阶段:
- 首先按照属性值的大小进行排序(对于非连续特征,需要先做数值转换,比如转为坏人率,然后排序),然后每个属性值单独作为一组.
- 合并阶段:
- 对每一对相邻的组,计算卡方值
- 根据计算的卡方值,对其中最小的一对邻组合并为一组
- 不断重复 <1>, <2> 直到计算出的卡方值都不低于事先设定的阈值,或者分组数达到一定的条件(如最小分组数5,最大分组数8).
代码暂时可以参考一文介绍特征工程里的卡方分箱,附代码实现