2. 特征漂移基础:什么是特征漂移(数据漂移)、漂移的类型

在贷后预警体系中,模型上线后并非一成不变。随着宏观经济、客群行为、业务策略的变化,模型输入数据的统计分布或输入与目标之间的关系会发生改变,这种现象统称为特征漂移(Feature Drift)或数据漂移(Data Drift)。若不及时发现并处理漂移,模型预测能力将快速衰减,导致预警失效。

2.1 什么是特征漂移(数据漂移)

特征漂移是指模型在生产环境中接收到的实时数据分布,与模型训练时所使用的历史数据分布之间出现显著差异。这种差异会破坏模型“训练分布≈实时分布”的基本假设,使模型输出偏离预期。

核心影响: 特征漂移直接导致模型预测准确率下降、误报率上升、排序能力恶化,是贷后预警系统失效的首要原因。

漂移的量化通常通过统计检验(如 KS 检验、PSI 群体稳定性指标)或距离度量(如 Wasserstein 距离)来评估。下表列出了常用检测指标及其适用场景:

检测指标 适用数据类型 阈值参考 特点
PSI(群体稳定性指标) 分箱后的连续/离散特征 <0.1 无漂移;0.1~0.25 轻度漂移;>0.25 严重漂移 工业界最常用,对分布变化敏感
KS 检验 连续特征 p-value < 0.05 认为存在显著漂移 无参数检验,适合小样本
Wasserstein 距离 连续特征 需根据特征尺度自定义 对局部变化更鲁棒
人口稳定性指数(CSI) 评分卡/概率输出 与 PSI 类似 专门用于模型输出层

2.2 漂移的三种类型

根据漂移发生的对象不同,学术界和工业界将其划分为三类:协变量漂移、先验概率漂移和概念漂移。理解这三者的区别,是制定告警阈值和应对策略的前提。

记忆口诀: “X 变(协变量漂移)、Y 变(先验概率漂移)、关系变(概念漂移)”。

2.2.1 协变量漂移(Covariate Shift)

协变量漂移指模型输入特征 X 的边际分布 P(X) 发生变化,但条件分布 P(Y|X) 保持不变。即“客群结构变了,但相同特征下的违约规律没变”。

  • 典型场景: 疫情期间,申请客群的年龄、收入分布发生偏移,但相同收入水平下的违约率关系不变。
  • 检测方法: 对每个特征单独计算 PSI 或 KS 统计量。
  • 应对策略: 重采样、特征标准化、模型重训练。

2.2.2 先验概率漂移(Prior Probability Shift)

先验概率漂移指目标变量 Y 的边际分布 P(Y) 发生变化,但条件分布 P(X|Y) 保持不变。即“整体违约率变了,但各类别内部的特征分布没变”。

  • 典型场景: 经济下行期,整体逾期率从 2% 上升至 8%,但好客户和坏客户的特征模式未变。
  • 检测方法: 监控模型输出的平均预测概率或坏样本占比。
  • 应对策略: 调整决策阈值、重新校准模型概率。

2.2.3 概念漂移(Concept Drift)

概念漂移指输入 X 与目标 Y 之间的映射关系 P(Y|X) 发生变化。这是最危险的一类漂移,意味着“过去的规律已经失效”。

  • 典型场景: 监管政策变化后,过去“高负债=高风险”的规律变为“高负债但稳定现金流=低风险”。
  • 检测方法: 监控模型残差、滚动窗口 AUC 衰减、PSI 与模型性能联合分析。
  • 应对策略: 必须重训练或重建模型,仅靠阈值调整无效。
三种特征漂移类型对比 特征漂移三种类型对比 协变量漂移 先验概率漂移 概念漂移 Covariate Shift Prior Probability Shift Concept Drift P(X) 变化 P(Y|X) 不变 客群结构变了 规律没变 检测:单特征 PSI/KS 应对:重采样/标准化 P(Y) 变化 P(X|Y) 不变 整体违约率变了 类内特征没变 检测:平均预测概率 应对:调整决策阈值 P(Y|X) 变化 映射关系改变 过去规律失效 最危险类型 检测:残差/AUC衰减 应对:必须重训练 漂移类型判断流程 先检测 P(X) → 若变化则检查模型性能 → 性能下降则进一步分析 P(Y|X) 是否改变

2.3 三类漂移的对比总结

下表从多个维度对三种漂移进行对比,帮助在实际监控中快速定位问题类型:

对比维度 协变量漂移 先验概率漂移 概念漂移
变化对象 P(X) P(Y) P(Y|X)
模型影响 中等,可通过校准缓解 中等,需调整阈值 严重,模型基本失效
检测难度 容易(单特征统计量) 容易(监控输出均值) 较难(需联合分析)
告警优先级 中 中 高
典型修复方式 特征工程、重采样 阈值校准、概率校正 模型重建、特征重构
贷后预警示例 新客群年龄分布偏移 整体逾期率季节性上升 催收策略改变导致行为特征与逾期关系变化

2.4 漂移检测的实践流程

在贷后预警系统中,建议按以下步骤建立漂移检测流水线:

  1. 特征级监控: 对每个入模特征,按日/周计算 PSI,标记超过阈值的特征。
  2. 模型级监控: 监控模型输出的平均预测概率、分数分布、AUC 等指标。
  3. 联合诊断: 当特征漂移与性能下降同时发生时,进一步分析是否属于概念漂移。
  4. 告警分级: 根据漂移类型和严重程度,触发不同级别的告警通知。
常见误区: 不要仅凭特征 PSI 超标就判定模型失效。协变量漂移可能通过模型鲁棒性自然消化,而概念漂移即使 PSI 很小也可能导致严重问题。务必结合模型性能指标综合判断。
贷后预警漂移检测与告警流程 贷后预警漂移检测与告警流程 实时数据流 特征漂移检测 模型性能监控 联合诊断 协变量漂移告警(中优先级) 概念漂移告警(高优先级) 先验概率漂移告警(中优先级) 提示:联合诊断时需结合特征漂移方向与模型性能变化趋势,避免误判漂移类型

2.5 漂移检测的代码示例

以下 Python 代码演示如何使用 PSI 检测单个特征的漂移:

import numpy as np
import pandas as pd

def calculate_psi(expected, actual, bins=10):
    """
    计算群体稳定性指标 (PSI)
    :param expected: 训练集特征值 (array-like)
    :param actual: 实时特征值 (array-like)
    :param bins: 分箱数
    :return: PSI 值
    """
    # 基于训练集确定分箱边界
    percentiles = np.linspace(0, 100, bins + 1)
    bin_edges = np.percentile(expected, percentiles)
    
    # 对两个分布进行分箱
    expected_binned = np.histogram(expected, bins=bin_edges)[0] + 1e-10
    actual_binned = np.histogram(actual, bins=bin_edges)[0] + 1e-10
    
    # 计算占比
    expected_pct = expected_binned / expected_binned.sum()
    actual_pct = actual_binned / actual_binned.sum()
    
    # 计算 PSI
    psi = np.sum((actual_pct - expected_pct) * np.log(actual_pct / expected_pct))
    return psi

# 示例:检测特征 'income' 的漂移
train_income = np.random.normal(50000, 15000, 10000)
real_time_income = np.random.normal(55000, 18000, 1000)  # 分布偏移

psi_value = calculate_psi(train_income, real_time_income)
print(f"特征 income 的 PSI 值为: {psi_value:.4f}")

if psi_value > 0.25:
    print("告警:严重漂移,需立即排查")
elif psi_value > 0.1:
    print("提示:轻度漂移,建议关注")
else:
    print("正常:无显著漂移")
实践建议: 在贷后预警系统中,建议对每个特征设置三级 PSI 阈值(0.1/0.2/0.3),分别对应观察、关注、告警。同时结合业务经验,对关键特征(如负债率、逾期天数)设置更严格的阈值。