4. 相关性分析与多重共线性
在模型风险管理中,特征选择不仅要考虑单个特征与目标变量的预测能力,还必须审视特征之间的相互关系。高度相关的特征会导致模型不稳定、系数解释失真以及泛化能力下降。本章系统讲解相关性度量方法与多重共线性的诊断、处理策略。
4.1 相关性分析基础
相关性分析用于量化两个变量之间线性或单调关联的强度与方向。根据变量类型与分布假设,选择不同的相关系数。
| 指标 | 适用变量类型 | 数据假设 | 取值范围 | 对异常值敏感度 |
|---|---|---|---|---|
| 皮尔逊相关系数 | 连续变量 | 线性关系、正态分布 | [-1, 1] | 高 |
| 斯皮尔曼秩相关系数 | 连续/有序变量 | 单调关系(无需正态) | [-1, 1] | 低 |
4.1.1 皮尔逊相关系数
皮尔逊相关系数度量两个连续变量之间的线性相关程度。计算公式为:
r = Σ[(xᵢ - x̄)(yᵢ - ȳ)] / √[Σ(xᵢ - x̄)² · Σ(yᵢ - ȳ)²]
- r = 1:完全正线性相关
- r = -1:完全负线性相关
- r = 0:无线性相关
⚠ 使用限制:皮尔逊相关系数对异常值极为敏感,且仅能捕捉线性关系。若变量间存在非线性但强相关的关系(如 U 型曲线),皮尔逊系数可能接近 0,造成误导。
4.1.2 斯皮尔曼秩相关系数
斯皮尔曼秩相关系数基于变量的秩次(排序位置)计算,不要求数据服从正态分布,适用于单调关系(包括非线性单调关系)。
ρ = 1 - [6 · Σdᵢ²] / [n(n² - 1)]
其中 dᵢ 为两个变量秩次之差,n 为样本量。
💡 选择建议:当数据存在明显偏态、有序分类变量或对异常值稳健性要求高时,优先使用斯皮尔曼秩相关系数。在金融风控场景中,信用评分卡的特征筛选常同时计算两种系数进行交叉验证。
4.2 多重共线性诊断
多重共线性指模型中两个或多个自变量之间存在高度相关关系,导致回归系数估计方差膨胀、模型不稳定。在金融风控模型中,共线性会削弱特征的可解释性与风险归因能力。
4.2.1 方差膨胀因子(VIF)
VIF 是诊断多重共线性的核心指标。对于第 j 个特征,将其作为因变量对其他所有特征进行线性回归,得到决定系数 R²ⱼ,则:
VIFⱼ = 1 / (1 - R²ⱼ)
| VIF 值范围 | 共线性程度 | 处理建议 |
|---|---|---|
| VIF = 1 | 无共线性 | 无需处理 |
| 1 < VIF < 5 | 轻度共线性 | 可接受,注意监控 |
| 5 ≤ VIF < 10 | 中度共线性 | 需进一步诊断 |
| VIF ≥ 10 | 严重共线性 | 必须处理 |
📐 计算示例(Python):
import pandas as pd
from statsmodels.stats.outliers_influence import variance_inflation_factor
# 假设 X 为特征矩阵(DataFrame)
X = pd.DataFrame({
'feature_a': [1, 2, 3, 4, 5],
'feature_b': [2, 4, 6, 8, 10],
'feature_c': [5, 6, 7, 8, 9]
})
# 添加截距项
X_with_const = sm.add_constant(X)
# 计算每个特征的 VIF
vif_data = pd.DataFrame()
vif_data['feature'] = X_with_const.columns
vif_data['VIF'] = [variance_inflation_factor(X_with_const.values, i)
for i in range(X_with_const.shape[1])]
print(vif_data)
4.2.2 其他诊断方法
- 条件指数(Condition Index): 特征值分解中最大特征值与最小特征值之比的平方根。条件指数 > 30 提示严重共线性。
- 特征值分解: 接近 0 的特征值对应高度相关的特征组合。
- 相关系数矩阵热力图: 可视化两两特征之间的相关系数,快速定位高相关对。
4.3 共线性处理策略
当诊断出多重共线性后,需根据业务场景与模型类型选择合适的处理策略。以下为常用方法对比:
| 策略 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
| 删除高相关特征 | 特征冗余明显 | 简单直接,模型简洁 | 可能丢失重要信息 |
| 主成分分析(PCA) | 需要降维且保留方差 | 消除共线性,降维 | 可解释性下降 |
| 岭回归(L2正则化) | 回归模型,特征较多 | 保留所有特征,稳定系数 | 系数有偏估计 |
| Lasso回归(L1正则化) | 特征选择与共线性并存 | 自动特征选择 | 可能随机选择相关特征 |
| 组合特征(比率/差值) | 业务含义明确 | 保留信息,增强可解释性 | 需领域知识 |
4.3.1 处理策略选择流程
- 计算 VIF,标记 VIF ≥ 10 的特征。
- 检查业务含义:高 VIF 特征是否具有独立业务解释价值?
- 若可删除:保留与目标变量相关性更高或业务更重要的特征。
- 若需保留:使用正则化方法(岭回归/Lasso)或 PCA 降维。
- 验证:处理后重新计算 VIF,确认共线性消除。
⚠ 风控模型特别提示:在信用评分卡等可解释性要求高的模型中,优先使用删除法或组合特征法,避免使用 PCA 等降低可解释性的方法。监管机构通常要求模型特征具有明确的业务含义。
4.4 实践建议与注意事项
- 先业务后统计: 在自动化筛选前,先基于业务知识识别明显冗余的特征对(如“总资产”与“净资产”)。
- 迭代处理: 删除一个高 VIF 特征后,重新计算剩余特征的 VIF,因为共线性关系会动态变化。
- 模型类型差异: 树模型(随机森林、XGBoost)对共线性不敏感,但线性模型(逻辑回归、线性回归)必须处理。
- 监管合规: 在模型风险管理文档中,必须记录共线性诊断过程、VIF 阈值选择依据及处理策略。
📌 风控最佳实践:建议在特征筛选流程中设置两道共线性检查关卡:第一关在初步特征生成后(相关系数矩阵 + VIF),第二关在模型训练前(条件指数 + 特征值分解)。双重检查可有效避免共线性漏网。