4. 数据漂移类型与检测方法

在模型监控与漂移控制审计中,最容易被混淆的不是“有没有漂移”,而是“漂移发生在哪一层”。同一个线上指标下滑,可能来自输入分布变化、标签分布变化,也可能来自输入与标签之间映射关系的改变。三者的检测对象、统计检验方法和处置策略完全不同。本节围绕协变量漂移、标签漂移、概念漂移三类核心漂移,建立可落地的识别指标体系与检验方法。

一、核心原理:三类漂移的数学定义与审计视角

设特征为 X,标签为 Y,模型输出为 f(X)。训练期联合分布为 P_train(X,Y),线上期为 P_live(X,Y)。三类漂移可统一表达为:

  • 协变量漂移(Covariate Drift):P(X) 变化,但 P(Y|X) 保持不变。即输入特征分布改变,决策边界本身仍然有效。
  • 标签漂移(Label Drift / Prior Shift):P(Y) 变化,但 P(X|Y) 保持不变。即正负样本比例改变,模型排序能力可能不变,但阈值校准失效。
  • 概念漂移(Concept Drift):P(Y|X) 变化。即同样的输入,真实标签的含义或映射关系发生改变,模型需要重新训练或调整。

审计视角下,关键不是只判断“漂移存在”,而是判断漂移是否影响模型有效性。协变量漂移可能只是输入采集口径变化;标签漂移可能只是业务季节性波动;概念漂移则通常直接威胁模型决策正确性。因此,检测指标必须与业务影响挂钩。

三类漂移的分布变化与检测对象 协变量漂移 P(X) 变化 训练期 P(X) 线上期 P(X) 检测:PSI / KS / MMD 标签漂移 P(Y) 变化 训练期 P(Y) 与线上期 P(Y) 检测:卡方 / JS 散度 概念漂移 P(Y|X) 变化 决策边界发生改变 检测:DDM / ADWIN / 性能衰减

二、方法流程:识别指标与统计检验方法

检测流程建议按“数据层 → 标签层 → 性能层”逐层推进,避免直接跳到模型指标而忽略根因。

  1. 协变量漂移检测:对每个特征计算训练期与线上期的分布差异。连续特征使用 KS 检验、PSI、Wasserstein 距离;类别特征使用卡方检验、JS 散度;高维特征可使用 MMD 或对抗验证(Adversarial Validation)。
  2. 标签漂移检测:对标签分布做卡方检验或 JS 散度,监控正样本率、类别占比。若标签延迟到达,需使用代理指标或延迟校正。
  3. 概念漂移检测:监控模型性能指标(AUC、F1、KS)随时间的变化,使用 DDM、EDDM、ADWIN 等在线漂移检测算法;也可通过残差分析、校准曲线偏移判断 P(Y|X) 是否改变。
漂移类型 变化对象 常用识别指标 统计检验方法 审计关注点
协变量漂移 P(X) PSI、KS、JS、MMD KS 检验、卡方检验、MMD 检验 输入采集口径、特征可用性
标签漂移 P(Y) 正样本率、类别占比、JS 卡方检验、比例检验 标签延迟、业务季节性
概念漂移 P(Y|X) AUC、F1、KS、校准误差 DDM、EDDM、ADWIN、Page-Hinkley 决策边界有效性、重训触发

三、案例/场景:信贷风控中的三类漂移识别

某信贷评分模型上线后,监控发现近 30 天通过率下降 12%。审计团队按三层排查:

  • 协变量漂移:收入字段 PSI 从 0.03 升至 0.21,KS 检验 p 值小于 0.01,说明申请人群收入分布明显右移,属于输入分布变化。
  • 标签漂移:逾期率从 4.1% 升至 6.8%,卡方检验显著,说明标签先验发生变化,但模型排序能力尚未明显下降。
  • 概念漂移:AUC 从 0.78 降至 0.69,校准曲线整体上偏,说明同样的收入水平对应的违约风险已经改变,属于概念漂移。

最终结论是:协变量漂移和标签漂移同时存在,但真正导致模型失效的是概念漂移。若只监控 PSI,会误判为“输入变化”;若只看逾期率,会误判为“标签波动”。三层联合判断才能定位根因。

审计提示:漂移检测不是单点判断,而是“指标 + 检验 + 业务影响”的三元组。建议为每类漂移设置黄色预警和红色告警两级阈值,并记录触发后的处置动作。

四、误区/复盘:常见误判与改进建议

  • 误区一:PSI 高就一定是模型失效。PSI 只反映输入分布变化,若 P(Y|X) 稳定,模型可能仍然有效。应结合性能指标判断。
  • 误区二:标签漂移等于概念漂移。标签比例变化不等于映射关系变化。需通过分层性能分析区分。
  • 误区三:只做离线批量检验。概念漂移往往突发,建议引入 ADWIN、DDM 等在线检测,配合滑动窗口监控。
  • 误区四:忽略标签延迟。标签未回流时,标签漂移和概念漂移检测会失真,应使用代理标签或延迟校正方法。
# 示例:协变量漂移 PSI 计算
import numpy as np

def psi(expected, actual, bins=10):
    breakpoints = np.percentile(expected, np.linspace(0, 100, bins + 1))
    expected_perc = np.histogram(expected, breakpoints)[0] / len(expected)
    actual_perc = np.histogram(actual, breakpoints)[0] / len(actual)
    expected_perc = np.where(expected_perc == 0, 0.0001, expected_perc)
    actual_perc = np.where(actual_perc == 0, 0.0001, actual_perc)
    return np.sum((actual_perc - expected_perc) * np.log(actual_perc / expected_perc))

# PSI < 0.1 稳定;0.1~0.25 预警;> 0.25 显著漂移
复盘结论:三类漂移的检测顺序应为“先输入、再标签、后性能”。协变量漂移解释“数据变了”,标签漂移解释“结果比例变了”,概念漂移解释“规律变了”。只有三者联合,才能支撑模型监控与漂移控制的有效性审计结论。