4、相关性分析与多重共线性:皮尔逊/斯皮尔曼相关系数、VIF方差膨胀因子、高相关特征处理策略
在风控建模中,特征之间的高度相关性会导致模型系数不稳定、可解释性下降,并放大过拟合风险。本章系统讲解相关性度量方法、多重共线性诊断工具以及高相关特征的筛选与处理策略。
4.1 相关性度量:皮尔逊与斯皮尔曼
相关性分析是特征筛选的第一步,用于量化两个变量之间的线性或单调关联程度。风控场景中,连续型变量(如收入、负债比)与有序型变量(如信用评分等级)需采用不同的相关系数。
| 指标 | 适用变量类型 | 取值范围 | 对异常值敏感度 | 风控典型应用 |
|---|---|---|---|---|
| 皮尔逊相关系数 | 连续型、正态分布 | [-1, 1] | 高 | 收入与负债比、额度与逾期率 |
| 斯皮尔曼秩相关系数 | 有序型、偏态分布 | [-1, 1] | 低 | 信用等级与违约概率、年龄组与风险评分 |
经验法则:当特征分布明显偏态或存在极端值时,优先使用斯皮尔曼相关系数;若特征经WOE变换后近似正态,可选用皮尔逊相关系数。
4.2 多重共线性诊断:VIF方差膨胀因子
VIF衡量某个特征被其他所有特征线性解释的程度。VIF值越大,说明该特征与其他特征的多重共线性越严重。风控建模中,通常以VIF > 10作为剔除阈值。
import pandas as pd
import numpy as np
from statsmodels.stats.outliers_influence import variance_inflation_factor
from sklearn.linear_model import LinearRegression
def calculate_vif(df, features):
"""计算指定特征的VIF值"""
vif_data = pd.DataFrame()
vif_data["feature"] = features
vif_data["VIF"] = [variance_inflation_factor(df[features].values, i)
for i in range(len(features))]
return vif_data.sort_values("VIF", ascending=False)
# 示例:假设df已包含风控特征
features = ['income', 'debt_ratio', 'credit_score', 'loan_amount', 'age']
vif_result = calculate_vif(df, features)
print(vif_result)
VIF诊断标准:
- VIF = 1:无共线性
- 1 < VIF < 5:弱共线性,可接受
- 5 < VIF < 10:中等共线性,需关注
- VIF > 10:严重共线性,建议剔除或合并
4.3 高相关特征处理策略
当特征间相关系数绝对值超过0.7或VIF超过10时,需采取以下策略之一进行降维或合并:
- 直接剔除:保留与目标变量相关性更高、业务解释性更强的特征,剔除冗余特征。
- 特征合并:对高度相关的特征进行加权平均、主成分分析(PCA)或线性组合,生成新特征。
- 正则化约束:在XGBoost中通过
colsample_bytree、lambda(L2正则)等参数抑制共线性影响。 - 业务规则筛选:依据风控业务逻辑,保留最具区分度的特征,如保留“负债收入比”而非同时保留“负债”和“收入”。
注意:在风控模型中,特征共线性不会显著影响XGBoost的预测能力,但会严重破坏模型的可解释性(如SHAP值、特征重要性排序)。若模型需要向监管机构解释,必须优先处理多重共线性。
4.4 相关性分析与共线性诊断流程
下图展示了从原始特征到筛选后特征集的完整诊断与处理流程:
4.5 特征筛选决策矩阵
综合相关系数与VIF结果,可按以下矩阵决定特征去留:
| 相关系数绝对值 | VIF值 | 推荐策略 | 风控场景示例 |
|---|---|---|---|
| < 0.3 | < 5 | 保留 | 年龄与收入(弱相关) |
| 0.3 ~ 0.7 | 5 ~ 10 | 保留但监控 | 信用评分与负债比(中等相关) |
| > 0.7 | > 10 | 剔除或合并 | 收入与贷款额度(强相关) |
实操建议:在风控建模中,建议先计算相关系数矩阵,剔除|r| > 0.8的特征对中IV值较低的一方;再对剩余特征计算VIF,迭代剔除VIF > 10的特征,直至所有特征VIF < 5。
4.6 高相关特征处理策略对比
下表对比了四种常见处理策略的适用场景与优缺点:
| 策略 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
| 直接剔除 | 特征冗余度高,业务解释性弱 | 简单快速,模型可解释性强 | 可能丢失部分信息 |
| 特征合并 | 特征间存在线性组合关系 | 保留信息,降低维度 | 新特征可解释性下降 |
| 正则化约束 | 模型以预测精度为首要目标 | 自动抑制共线性影响 | 无法改善特征重要性解释 |
| 业务规则筛选 | 风控领域知识明确 | 符合业务逻辑,监管友好 | 依赖专家经验,可能遗漏 |
4.7 风控场景中的共线性处理案例
以信贷申请评分卡为例,原始特征包含“月收入”、“年收入”、“负债总额”、“信用卡额度”等高度相关的变量。处理步骤如下:
- 计算相关系数矩阵:发现“月收入”与“年收入”相关系数达0.95,“负债总额”与“信用卡额度”相关系数达0.82。
- 计算VIF:“月收入”VIF=18.5,“年收入”VIF=22.3,均超过10。
- 业务规则筛选:保留“月收入”(更稳定)和“负债收入比”(衍生特征),剔除“年收入”和“信用卡额度”。
- 验证:处理后所有特征VIF均小于4,模型AUC提升约2%,特征重要性排序更稳定。
关键结论:在风控建模中,相关性分析与多重共线性诊断是特征筛选的必要环节。通过皮尔逊/斯皮尔曼相关系数识别强相关特征对,利用VIF量化共线性程度,结合业务规则与统计方法进行特征剔除或合并,可显著提升模型的稳定性与可解释性。