2、特征工程基础:特征分类、质量评估与有效性验证
特征工程是风控模型构建的核心环节,其质量直接决定模型的上限。本章系统梳理特征的分类体系、质量评估标准以及有效性验证方法,为后续特征服务与样本分层奠定基础。
2.1 特征分类体系
风控场景中的特征可按数据形态与业务含义分为三大类:数值型、类别型和时序型。每类特征在预处理、编码和业务解释上存在显著差异。
| 特征类型 | 典型字段 | 常见问题 | 常用处理方法 |
|---|---|---|---|
| 数值型 | 年龄、收入、负债率、近3月交易金额 | 量纲差异、长尾分布、异常值 | 标准化/归一化、分箱、对数变换、截断 |
| 类别型 | 职业、学历、地区、设备型号 | 基数过高、稀疏类别、缺失值 | Label Encoding、One-Hot、Target Encoding、频次编码 |
| 时序型 | 申请时间、还款日、交易时间戳 | 周期性、趋势漂移、不规则间隔 | 滑动窗口统计、时间衰减、差分、周期性编码 |
实践建议:在风控特征服务中,建议对数值型特征优先做分箱处理以增强鲁棒性;对高基数类别型特征使用Target Encoding时需配合交叉验证防止过拟合;时序型特征必须关注时间窗口的稳定性,避免引入未来信息。
2.2 特征质量评估
特征质量评估是特征筛选的第一道关卡,主要从完整性、一致性、稳定性和区分度四个维度展开。
- 完整性:缺失率是否在可接受范围内(通常阈值设为5%~20%)。缺失率过高的特征需评估是否保留或进行插补。
- 一致性:特征在不同时间窗口、不同客群中的分布是否稳定。常用PSI(Population Stability Index)衡量。
- 稳定性:特征在训练集与测试集、线上与线下之间的分布差异。PSI < 0.1 表示稳定,0.1~0.25 需关注,> 0.25 建议剔除。
- 区分度:特征对好坏样本的区分能力。常用IV(Information Value)或KS统计量评估。
质量评估速查表:
| 维度 | 指标 | 阈值参考 | 处理建议 |
|---|---|---|---|
| 完整性 | 缺失率 | < 5% 优秀;5%~20% 可接受;> 20% 需处理 | 缺失率过高时考虑剔除或使用业务默认值填充 |
| 一致性 | PSI | < 0.1 稳定;0.1~0.25 需监控;> 0.25 不稳定 | PSI过高时检查数据源或特征定义是否发生变化 |
| 区分度 | IV | < 0.02 无效;0.02~0.1 弱;0.1~0.3 中等;> 0.3 强 | IV过低可考虑删除或与其他特征组合 |
2.3 特征有效性验证方法
特征有效性验证旨在确认特征是否对模型预测有实质贡献,避免引入噪声。常用方法包括单变量分析、多变量筛选和模型重要性评估。
2.3.1 单变量验证
- IV(Information Value):衡量特征对好坏样本的区分能力。IV > 0.02 为有效特征。
- KS(Kolmogorov-Smirnov)统计量:衡量好坏样本累计分布的最大差异。KS > 0.1 通常认为有区分度。
- 卡方检验:用于类别型特征与目标变量的独立性检验,p值 < 0.05 表示显著相关。
2.3.2 多变量筛选
- 相关性分析:计算特征间Pearson/Spearman相关系数,剔除高度相关(|r| > 0.8)的冗余特征。
- VIF(方差膨胀因子):检测多重共线性,VIF > 10 表示存在严重共线性。
- 前向/后向/逐步选择:基于AIC或BIC准则逐步加入或剔除特征。
2.3.3 模型重要性评估
- 树模型特征重要性:基于分裂次数或信息增益排序,筛选Top-K特征。
- Permutation Importance:随机打乱特征值后观察模型性能下降程度,下降越大特征越重要。
- SHAP值:基于博弈论解释每个特征对预测结果的边际贡献,可同时评估全局和局部重要性。
避坑提示:单变量验证(如IV)只能反映特征与目标之间的边际关联,无法捕捉特征间的交互作用。建议将单变量筛选作为初筛,再结合多变量和模型重要性评估做最终决策。此外,Permutation Importance在特征高度相关时可能低估重要特征,建议配合SHAP使用。
2.4 特征有效性验证代码示例
以下代码展示使用Python进行特征有效性验证的典型流程,涵盖IV计算、相关性分析和树模型重要性排序。
import pandas as pd
import numpy as np
from scipy.stats import chi2_contingency
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
# 示例数据:假设df包含特征列和目标列'target'
# df = pd.read_csv('feature_data.csv')
# 1. 计算IV值(离散化后)
def calc_iv(df, feature, target):
df_group = df.groupby(feature)[target].agg(['count', 'sum'])
df_group['good'] = df_group['count'] - df_group['sum']
df_group['bad_rate'] = df_group['sum'] / df_group['sum'].sum()
df_group['good_rate'] = df_group['good'] / df_group['good'].sum()
df_group['woe'] = np.log(df_group['bad_rate'] / df_group['good_rate'])
df_group['iv'] = (df_group['bad_rate'] - df_group['good_rate']) * df_group['woe']
return df_group['iv'].sum()
# 2. 相关性分析
corr_matrix = df.corr().abs()
upper_tri = corr_matrix.where(np.triu(np.ones(corr_matrix.shape), k=1).astype(bool))
high_corr_features = [column for column in upper_tri.columns if any(upper_tri[column] > 0.8)]
# 3. 树模型特征重要性
X = df.drop('target', axis=1)
y = df['target']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
rf = RandomForestClassifier(n_estimators=100, random_state=42)
rf.fit(X_train, y_train)
feature_importance = pd.DataFrame({
'feature': X.columns,
'importance': rf.feature_importances_
}).sort_values('importance', ascending=False)
# 输出Top10重要特征
print(feature_importance.head(10))
工程落地建议:在风控特征服务中,建议将特征有效性验证流程封装为自动化Pipeline,每次特征上线前自动执行IV、相关性、VIF和模型重要性检查,并生成质量报告。对于IV < 0.02或VIF > 10的特征,系统自动标记为“待审核”状态,由人工确认后再决定是否上线。