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时,需采取以下策略之一进行降维或合并:

  1. 直接剔除:保留与目标变量相关性更高、业务解释性更强的特征,剔除冗余特征。
  2. 特征合并:对高度相关的特征进行加权平均、主成分分析(PCA)或线性组合,生成新特征。
  3. 正则化约束:在XGBoost中通过colsample_bytree、lambda(L2正则)等参数抑制共线性影响。
  4. 业务规则筛选:依据风控业务逻辑,保留最具区分度的特征,如保留“负债收入比”而非同时保留“负债”和“收入”。
注意:在风控模型中,特征共线性不会显著影响XGBoost的预测能力,但会严重破坏模型的可解释性(如SHAP值、特征重要性排序)。若模型需要向监管机构解释,必须优先处理多重共线性。

4.4 相关性分析与共线性诊断流程

下图展示了从原始特征到筛选后特征集的完整诊断与处理流程:

相关性分析与多重共线性诊断流程 原始特征集 皮尔逊相关系数 (连续/正态分布特征) 斯皮尔曼秩相关系数 (有序/偏态分布特征) 相关系数矩阵 VIF方差膨胀因子 筛选后特征集(低相关/低VIF)

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 风控场景中的共线性处理案例

以信贷申请评分卡为例,原始特征包含“月收入”、“年收入”、“负债总额”、“信用卡额度”等高度相关的变量。处理步骤如下:

  1. 计算相关系数矩阵:发现“月收入”与“年收入”相关系数达0.95,“负债总额”与“信用卡额度”相关系数达0.82。
  2. 计算VIF:“月收入”VIF=18.5,“年收入”VIF=22.3,均超过10。
  3. 业务规则筛选:保留“月收入”(更稳定)和“负债收入比”(衍生特征),剔除“年收入”和“信用卡额度”。
  4. 验证:处理后所有特征VIF均小于4,模型AUC提升约2%,特征重要性排序更稳定。
关键结论:在风控建模中,相关性分析与多重共线性诊断是特征筛选的必要环节。通过皮尔逊/斯皮尔曼相关系数识别强相关特征对,利用VIF量化共线性程度,结合业务规则与统计方法进行特征剔除或合并,可显著提升模型的稳定性与可解释性。