4. 特征工程基础:特征构建、特征选择、特征缩放、特征编码(WOE、IV值)
在坏样本归因与收益评估中,原始数据往往无法直接用于模型训练。特征工程是将原始数据转化为高质量特征的过程,直接影响模型的解释能力与预测精度。本节将系统讲解特征构建、特征选择、特征缩放与特征编码四大核心模块,并重点介绍风控领域特有的WOE编码与IV值评估方法。
4.1 特征构建
特征构建是从原始数据中生成新特征的过程,旨在捕捉数据中隐藏的业务逻辑与非线性关系。常见的构建方法包括:
- 统计聚合特征:对时间序列或分组数据进行均值、最大值、最小值、标准差、最近N天趋势等计算。
- 交叉特征:将两个或多个离散特征组合,形成新的交互特征,如“年龄组×收入等级”。
- 比率特征:计算两个数值型字段的比值,如“负债/收入”、“逾期次数/总借款次数”。
- 时间窗口特征:基于滑动窗口提取近期行为模式,如“过去30天申请次数”。
- 业务规则特征:根据风控规则直接构造,如“是否命中黑名单”、“多头借贷指数”。
实战建议:特征构建应优先从业务逻辑出发,避免盲目生成大量无意义特征。每构建一个特征,都应思考其与坏样本率或收益指标的潜在关联。
4.2 特征选择
特征选择旨在从高维特征集中筛选出对目标变量最有解释力的子集,降低过拟合风险并提升模型训练效率。常用方法分为三类:
| 方法类别 | 代表算法 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|---|
| 过滤法 | 方差阈值、卡方检验、互信息 | 特征数量极大时快速初筛 | 计算快、独立于模型 | 忽略特征间交互 |
| 包裹法 | 递归特征消除(RFE)、前向选择 | 特征数中等、追求最优子集 | 考虑特征组合效果 | 计算开销大、易过拟合 |
| 嵌入法 | Lasso回归、树模型特征重要性 | 模型训练与选择同步进行 | 效率高、自带正则化 | 依赖模型选择偏好 |
关键指标:在风控场景中,IV值(Information Value)是衡量特征区分能力的核心指标。IV值越高,特征对坏样本的区分能力越强。通常IV < 0.02视为无预测力,0.02~0.1为弱,0.1~0.3为中等,> 0.3为强(需警惕过拟合)。
4.3 特征缩放
特征缩放用于消除不同特征量纲的影响,使模型(尤其是基于距离或梯度的模型)收敛更快、结果更稳定。常用方法包括:
- 标准化(Z-score):将特征转换为均值为0、标准差为1的分布。公式:\( z = (x - \mu) / \sigma \)。适用于数据近似正态分布的场景。
- 归一化(Min-Max):将特征线性映射到[0,1]区间。公式:\( x' = (x - min) / (max - min) \)。适用于有界特征或需要保留原始分布形状的场景。
- 稳健缩放(RobustScaler):使用中位数和四分位距进行缩放,对异常值不敏感。公式:\( x' = (x - median) / IQR \)。
注意:对于树模型(如随机森林、XGBoost),特征缩放通常不影响模型性能,因为树模型基于分裂点而非距离。但对于逻辑回归、SVM、神经网络等模型,特征缩放是必要步骤。
4.4 特征编码与WOE、IV值
特征编码将非数值型数据转换为模型可处理的数值形式。在风控领域,WOE(Weight of Evidence)编码与IV值评估是处理分类特征的标准方法。
4.4.1 常见编码方式对比
| 编码方式 | 原理 | 适用特征 | 优点 | 缺点 |
|---|---|---|---|---|
| 独热编码 | 每个类别生成一个0/1二元列 | 无序分类、类别数少 | 简单、无顺序假设 | 维度爆炸、稀疏 |
| 标签编码 | 类别映射为整数(0,1,2,...) | 有序分类 | 节省空间 | 引入虚假顺序 |
| 目标编码 | 用目标变量均值替换类别 | 高基数分类 | 捕捉类别与目标关系 | 易过拟合、需交叉验证 |
| WOE编码 | 基于好坏样本分布计算编码值 | 风控二分类特征 | 线性化、可解释、与IV值联动 | 需分箱、对零样本敏感 |
4.4.2 WOE编码原理
WOE编码将每个类别替换为该类别下坏样本占比与好样本占比之比的自然对数。公式如下:
WOE_i = ln( (坏样本_i / 总坏样本) / (好样本_i / 总好样本) )
= ln( 坏样本占比_i / 好样本占比_i )
其中,坏样本_i 表示第i个类别中的坏样本数量,总坏样本 为全体坏样本数。WOE值为正表示该类别坏样本占比高于好样本占比(风险偏高),为负则表示风险偏低。
4.4.3 IV值计算
IV值基于WOE计算,用于衡量特征的整体区分能力:
IV = Σ ( (坏样本占比_i - 好样本占比_i) × WOE_i )
IV值越大,特征对好坏样本的区分能力越强。在特征选择中,通常保留IV > 0.02的特征,并优先选择IV在0.1~0.3之间的特征。
实战流程:先对连续特征进行分箱(等频或等距),再计算每个箱的WOE与IV值。WOE编码后的特征可直接输入逻辑回归模型,且回归系数具有明确的业务含义。
4.5 特征工程整体流程
下图展示了从原始数据到建模特征的标准处理流程,涵盖本节所有核心步骤:
4.6 WOE编码与IV值计算示例
以下代码演示了如何对“收入等级”特征进行分箱、计算WOE与IV值:
import pandas as pd
import numpy as np
# 示例数据:收入等级与好坏样本
data = pd.DataFrame({
'income_level': ['低', '中', '高', '低', '中', '高', '低', '中', '高', '低'],
'target': [1, 0, 0, 1, 1, 0, 1, 0, 0, 1] # 1=坏样本, 0=好样本
})
# 计算每个类别的坏样本数与好样本数
grouped = data.groupby('income_level')['target'].agg(
bad='sum',
good=lambda x: (x == 0).sum()
).reset_index()
total_bad = data['target'].sum()
total_good = len(data) - total_bad
# 计算坏样本占比、好样本占比、WOE、IV
grouped['bad_pct'] = grouped['bad'] / total_bad
grouped['good_pct'] = grouped['good'] / total_good
grouped['WOE'] = np.log(grouped['bad_pct'] / grouped['good_pct'])
grouped['IV'] = (grouped['bad_pct'] - grouped['good_pct']) * grouped['WOE']
print(grouped)
print(f"总IV值: {grouped['IV'].sum():.4f}")
输出解读:若“低”收入等级的WOE为正,说明该等级坏样本占比高于好样本占比,风险偏高;总IV值反映“收入等级”特征的整体区分能力,可用于与其他特征比较,决定是否保留该特征。
4.7 特征工程避坑指南
- 数据泄露:特征构建时避免使用未来信息(如用全量数据计算均值后再分训练/测试集),应严格在训练集内计算统计量。
- 分箱过细:WOE编码前分箱过细会导致某些箱内样本数为0,无法计算WOE。建议每箱至少包含5%的样本或至少5个坏样本。
- IV值滥用:IV值仅衡量单变量区分能力,不能替代多变量交互选择。高IV特征之间可能存在强共线性,需结合VIF或相关系数进一步筛选。
- 缩放顺序:先进行WOE编码或独热编码,再进行特征缩放。编码后的数值特征应统一缩放,避免量纲差异影响模型。