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 为样本量。

💡 选择建议:当数据存在明显偏态、有序分类变量或对异常值稳健性要求高时,优先使用斯皮尔曼秩相关系数。在金融风控场景中,信用评分卡的特征筛选常同时计算两种系数进行交叉验证。
相关性系数选择决策流程 变量对 (X, Y) 是否连续且近似正态? 是 皮尔逊相关系数 r 否 斯皮尔曼秩相关系数 ρ 关键判断依据 • 线性关系 → 皮尔逊 • 单调关系 → 斯皮尔曼 • 异常值多 → 斯皮尔曼 • 有序分类 → 斯皮尔曼 • 样本量小 → 两者均可 • 正态性存疑 → 斯皮尔曼

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 处理策略选择流程

  1. 计算 VIF,标记 VIF ≥ 10 的特征。
  2. 检查业务含义:高 VIF 特征是否具有独立业务解释价值?
  3. 若可删除:保留与目标变量相关性更高或业务更重要的特征。
  4. 若需保留:使用正则化方法(岭回归/Lasso)或 PCA 降维。
  5. 验证:处理后重新计算 VIF,确认共线性消除。
⚠ 风控模型特别提示:在信用评分卡等可解释性要求高的模型中,优先使用删除法或组合特征法,避免使用 PCA 等降低可解释性的方法。监管机构通常要求模型特征具有明确的业务含义。
多重共线性处理策略决策树 VIF ≥ 10 的特征 是否有独立业务含义? 是 保留特征,使用正则化 否 删除冗余特征 处理策略详解 • 岭回归:保留所有特征 • Lasso:自动特征选择 • 组合特征:比率/差值 • PCA:降维但损失可解释性 • 逐步回归:自动筛选 • 业务规则:保留关键变量 • 验证:重新计算 VIF

4.4 实践建议与注意事项

  • 先业务后统计: 在自动化筛选前,先基于业务知识识别明显冗余的特征对(如“总资产”与“净资产”)。
  • 迭代处理: 删除一个高 VIF 特征后,重新计算剩余特征的 VIF,因为共线性关系会动态变化。
  • 模型类型差异: 树模型(随机森林、XGBoost)对共线性不敏感,但线性模型(逻辑回归、线性回归)必须处理。
  • 监管合规: 在模型风险管理文档中,必须记录共线性诊断过程、VIF 阈值选择依据及处理策略。
📌 风控最佳实践:建议在特征筛选流程中设置两道共线性检查关卡:第一关在初步特征生成后(相关系数矩阵 + VIF),第二关在模型训练前(条件指数 + 特征值分解)。双重检查可有效避免共线性漏网。