4、偏差检测方法:描述性统计对比、PSI(群体稳定性指标)、特征分布可视化(KS检验、卡方检验)

样本偏差的检测是校准工作的前提。只有准确识别出训练样本与目标总体(或线上实时样本)之间的分布差异,才能有针对性地选择校准策略。本章系统介绍三类最常用的偏差检测方法:描述性统计对比、群体稳定性指标(PSI)以及特征分布可视化(KS检验、卡方检验)。

4.1 描述性统计对比

描述性统计对比是最直观、最快速的偏差检测手段。通过对比训练集与验证集(或线上样本)在关键特征上的统计量,可以初步判断是否存在系统性偏移。

4.1.1 核心对比维度

统计量 适用特征类型 偏差指示
均值(Mean) 连续型 均值差异 > 0.1 标准差时需关注
中位数(Median) 连续型 均值与中位数同时偏移表明分布形态改变
标准差(Std) 连续型 标准差扩大说明样本离散度增加
缺失率(Missing Rate) 任意类型 缺失率差异 > 5% 可能代表数据采集逻辑变化
类别占比(Category Ratio) 离散型 任一类别占比变化 > 10% 需深入分析

4.1.2 操作步骤

  1. 选定对比样本集:通常为训练集 vs 验证集,或训练集 vs 线上最近30天样本。
  2. 计算关键统计量:对每个特征分别计算均值、中位数、标准差、缺失率(连续型)或类别占比(离散型)。
  3. 计算差异指标:使用绝对差异或相对差异(如差异百分比)量化偏移程度。
  4. 设定预警阈值:根据业务经验设定阈值,如均值差异超过0.2个标准差即标记为“待审查”。
实践建议:描述性统计对比适合作为“第一道防线”,快速筛选出明显偏移的特征。但该方法对分布形态的细微变化不敏感,需要结合后续的PSI和分布检验进行深入分析。

4.2 群体稳定性指标(PSI)

PSI(Population Stability Index)是风控领域衡量样本分布稳定性的核心指标,广泛应用于模型监控和样本偏差检测。它通过比较两个样本集在特征上的分箱分布差异,给出一个综合性的偏移度量。

4.2.1 PSI 计算公式

PSI 的计算基于特征分箱后的实际占比与预期占比:

PSI = Σ (实际占比_i - 预期占比_i) * ln(实际占比_i / 预期占比_i)

其中:

  • 预期占比:通常为训练集或基准样本集在各分箱中的样本比例。
  • 实际占比:当前待检测样本集(如线上样本)在各分箱中的样本比例。
  • 分箱方式:连续型特征通常等频分箱(10箱或20箱),离散型特征按类别自然分箱。

4.2.2 PSI 评判标准

PSI 值范围 稳定性等级 建议操作
< 0.1 稳定 无需处理
0.1 ~ 0.25 轻度偏移 需关注,建议进一步分析
> 0.25 严重偏移 必须进行校准或模型重建

4.2.3 PSI 计算示例(Python)

import numpy as np
import pandas as pd

def calculate_psi(expected, actual, bins=10):
    # 等频分箱
    expected_bins = pd.qcut(expected, q=bins, duplicates='drop')
    expected_counts = expected.groupby(expected_bins).count()
    actual_counts = actual.groupby(pd.cut(actual, bins=expected_bins.cat.categories)).count()
    
    # 计算占比
    expected_pct = expected_counts / len(expected)
    actual_pct = actual_counts / len(actual)
    
    # 避免除零
    actual_pct = actual_pct.replace(0, 0.0001)
    expected_pct = expected_pct.replace(0, 0.0001)
    
    # 计算PSI
    psi_value = np.sum((actual_pct - expected_pct) * np.log(actual_pct / expected_pct))
    return psi_value

# 使用示例
train_feature = np.random.normal(0, 1, 10000)
online_feature = np.random.normal(0.2, 1.1, 10000)
psi = calculate_psi(train_feature, online_feature)
print(f"PSI = {psi:.4f}")
注意事项:PSI 对分箱数量敏感,建议连续型特征统一使用10箱或20箱等频分箱。当某分箱内样本数为0时,需做平滑处理(如加极小值),避免对数计算报错。

4.3 特征分布可视化:KS检验与卡方检验

可视化方法能够直观展示分布差异,而统计检验则提供量化判断依据。本节重点介绍KS检验(适用于连续型特征)和卡方检验(适用于离散型特征)。

4.3.1 KS检验(Kolmogorov-Smirnov Test)

KS检验用于判断两个连续型样本是否来自同一分布。其核心统计量是两条累积分布函数(CDF)曲线的最大垂直距离。

  • 原假设 H₀:两个样本来自同一分布。
  • KS统计量:D = max|F₁(x) - F₂(x)|,其中F₁和F₂分别为两个样本的累积分布函数。
  • 判定标准:p值 < 0.05 时拒绝原假设,认为分布存在显著差异。
应用场景:KS检验特别适合检测连续型特征(如收入、年龄、负债率)在训练集与线上样本之间的分布偏移。当D值 > 0.1 且 p值 < 0.05 时,该特征应纳入校准范围。

4.3.2 卡方检验(Chi-Square Test)

卡方检验用于判断两个离散型特征(或连续型特征分箱后)的分布是否独立。在偏差检测中,常用于比较训练集与线上样本在类别特征上的分布一致性。

  • 原假设 H₀:两个样本在特征上的分布无显著差异。
  • 卡方统计量:χ² = Σ (Oᵢ - Eᵢ)² / Eᵢ,其中Oᵢ为观测频数,Eᵢ为期望频数。
  • 判定标准:p值 < 0.05 时拒绝原假设,认为分布存在显著差异。

4.3.3 分布可视化对比图

下图展示了连续型特征的分布对比,包含直方图、累积分布曲线以及KS统计量标注。

连续型特征分布对比(含KS检验) 直方图对比 训练集 线上样本 累积分布函数(CDF)对比 D=0.12 KS检验结果:D=0.12, p=0.003 结论:分布存在显著差异,需校准

4.3.4 离散型特征卡方检验可视化

对于离散型特征,使用堆叠柱状图或分组柱状图对比训练集与线上样本的类别占比,并标注卡方检验结果。

离散型特征类别占比对比(含卡方检验) 类别A 40% 48% 类别B 32% 28% 类别C 16% 12% 类别D 4% 8% 训练集 线上样本 卡方检验:χ²=15.3, p=0.002 → 分布显著差异

4.4 偏差检测方法对比总结

检测方法 适用特征类型 输出指标 优点 局限性
描述性统计对比 连续型 / 离散型 均值差、缺失率差等 快速、直观、易解释 对分布形态变化不敏感
PSI 连续型(需分箱) PSI值(0~∞) 综合性强、行业标准 分箱方式影响结果
KS检验 连续型 D值 + p值 统计严谨、可视化直观 对样本量敏感
卡方检验 离散型 χ²值 + p值 适合类别特征 对稀疏类别不稳健
最佳实践:建议采用“三步走”策略:先用描述性统计快速扫描,再用PSI量化整体偏移程度,最后对高PSI特征进行KS检验或卡方检验确认。三种方法互为补充,共同构成完整的偏差检测体系。