模型监控与数据漂移检测:PSI、KS 与概念漂移实战

模型上线后的监控与漂移检测实战:为什么离线评估不够、数据漂移/概念漂移/预测漂移三类漂移、PSI 群体稳定性指数、KS 与 KL 散度、漂移检测的信号源与阈值、反馈回路与重训策略、监控面板与告警、可观测性工程落地、常见陷阱。

引言

模型上线那天分数最好——之后往往一路走低。原因不在代码,而在世界变了:用户群体变了、业务规则变了、数据分布变了。离线评估只能证明「当时好」,线上监控才是「一直好」的保证。本文讲清三类漂移(数据/概念/预测)、两大指标(PSI、KS),给出监控信号、阈值设定、告警与重训的完整工程闭环。

前置:/ml-model-deployment/(模型部署与监控)、/ml-model-evaluation/(评估与验证)、/ml-model-interpretability/(业务落地)。


目录


1. 为什么离线评估不够

1.1 离线验证的三个盲区

盲区说明
时间盲区测试集是过去的,线上是「现在」——分布可能已变
环境盲区训练时的数据管道与线上特征计算未必一致
反馈盲区预测影响决策,决策改变未来数据(闭环)

1.2 监控的本质

监控回答三个问题:输入变了吗(数据漂移)?关系变了吗(概念漂移)?输出变了吗(预测漂移)? 三者都要看,只看 loss 或准确率根本来不及——指标下降时事故已发生。

记忆:离线评估证明「当时好」,线上监控保证「一直好」;监控三问——输入变了、关系变了、还是输出变了。


2. 三类漂移:数据概念预测

2.1 数据漂移(Data Drift)

特征分布变了:用户画像老化、季节变化、渠道更替。

训练期:年龄 ~ 正态(35, 8)
上线后:年龄 ~ 正态(28, 10)   ← 数据漂移

2.2 概念漂移(Concept Drift)

「特征→目标」的映射关系变了:风控政策收紧、市场偏好转向。

训练期:消费额 > 5000 → 高信用(正相关)
上线后:规则改了,消费额不再代表信用   ← 概念漂移

2.3 预测漂移(Prediction Drift)

模型输出分布变了——可能是前两者导致,也可能是模型本身坏了(特征缺失、代码 bug)。

记忆:数据漂移=输入变了、概念漂移=规则变了、预测漂移=输出变了;后两者最难察觉,要靠业务标签回传才能确认。


3. PSI:群体稳定性指数

3.1 PSI 的定义

PSI 对比「当前分布」与「基准分布」的差异,按分箱计算每个箱的概率比:

import numpy as np

def psi(expected, actual, bins=10):
    # 按基准分布的分位数分箱
    edges = np.percentile(expected, np.linspace(0, 100, bins + 1))
    e_hist, _ = np.histogram(expected, bins=edges, density=True)
    a_hist, _ = np.histogram(actual, bins=edges, density=True)
    e_ratio = e_hist / e_hist.sum() + 1e-9
    a_ratio = a_hist / a_hist.sum() + 1e-9
    return np.sum((a_ratio - e_ratio) * np.log(a_ratio / e_ratio))

3.2 判读标准(业界惯例)

PSI 值判断
< 0.1无显著漂移
0.1 ~ 0.25中度漂移,关注
> 0.25严重漂移,需行动

记忆:PSI 对比当前与基准的分布差异(按分箱算概率比的对数),<0.1 无漂移、0.1-0.25 关注、>0.25 严重——风控行业标配。


4. KS 检验与 KL 散度:分布差异度量

4.1 KS 检验:分布最大距离

KS(Kolmogorov-Smirnov)检验计算两条累积分布的最大距离,并给出显著性:

from scipy import stats

ks_stat, p_value = stats.ks_2samp(expected, actual)
# ks_stat:两条 CDF 的最大垂直距离;p 值 < 0.05 认为显著不同

4.2 KL 散度:信息损失量

KL 散度度量「用基准分布近似当前分布」损失的信息:

from scipy.special import rel_entr

kl = rel_entr(actual_ratio + 1e-9, expected_ratio + 1e-9).sum()

PSI 与 KL 本质同族(PSI 是 KL 的对称变体)。工程上用 PSI 更常见,KS 适合单特征快速检验。

4.3 特征级 vs 模型级

# 特征级:逐特征算 PSI/KS,定位「哪个特征变了」
# 模型级:对模型分数(概率输出)算 PSI,看整体预测分布
# 组合:先看模型级 PSI 报警,再下钻到特征级定位

记忆:KS 看累积分布最大距离、KL 看信息损失量,与 PSI 同族;先模型级报警、再特征级定位,是标准排查路径。


5. 监控哪些信号

5.1 信号清单

信号含义指标
特征分布每个入模特征是否漂移PSI / KS 每特征
模型分数输出概率分布是否漂移PSI(模型级)
业务指标预测对应的业务结果转化率、通过率、AUC 影子
数据质量缺失率/取值域是否异常缺失比例、极值占比
延迟与错误服务是否正常延迟 P95、错误率、超时

5.2 影子 AUC:没有标签时的替代

真标签回传有延迟时,用「影子模型」与线上模型对比:

# 影子 AUC:新候选模型 vs 线上模型,在同一批输入上比预测一致性与表现
# 无需标签也能早期发现"线上模型开始落后"

记忆:信号要分层——特征 PSI、模型分数 PSI、业务指标、数据质量、服务健康五层监控;标签延迟用影子 AUC 兜底。


6. 阈值怎么定

6.1 两类阈值

  • 静态阈值:PSI 0.1/0.25 等业界惯例,简单但粗糙
  • 动态基线:统计最近 N 天的分布作为滚动基线,比「训练期一次性基线」更贴现实

6.2 分环境设定

# 不同业务容忍度不同
# 高敏感(风控/医疗):PSI > 0.1 就告警
# 一般推荐/营销:PSI > 0.25 才行动
# 告警分级:notice(观察)/ warn(关注)/ alert(行动)
# 避免告警风暴:加"连续 N 天超阈值"才升级告警

记忆:阈值分敏感度、分环境,配「连续 N 天超阈才告警」防抖——动态滚动基线比一次性基线更贴近现实。


7. 反馈回路与重训策略

7.1 标签回传是监控的闭环

漂移只是信号,真正要修复靠标签:线上预测结果产生业务结局(成交/违约/点击),回传后形成新的训练数据。

7.2 重训的三种节奏

策略时机适用
定期重训按周/月定时分布缓慢变化的常态
触发式重训漂移指标超阈值突变的场景(政策/疫情)
增量学习每条样本在线更新高频变化的流式场景

7.3 重训的质量把关

# 重训不是"无脑重跑"
# 1) 用最新标签评估新模型(AUC/PSI 对比旧模型)
# 2) 灰度上线:先放 10% 流量对比
# 3) 回滚预案:新模型劣化立即切回旧模型
# 4) 记录每次重训的基线分布快照

记忆:监控闭环 = 漂移报警 + 标签回传 + 重训;节奏选定期/触发/增量,重训必须灰度对比与回滚预案。


8. 监控面板与告警工程

8.1 面板设计

# 一屏看全:输入漂移(特征 PSI 热力图)+ 输出漂移(分数分布时序)+ 业务指标
# 下钻路径:模型级 → 特征级 → 单样本归因
# 数据源:训练基线快照 + 线上特征日志(落地到仓库)

8.2 特征日志是监控的地基

没有线上特征日志就谈不上漂移监控——预测时把特征快照与分数一起落库,才能与训练基线对比:

# 伪代码:预测时记录特征快照
log_row = {**features, "prediction": pred, "model_version": "v2026.03"}
write_to_feature_store(log_row)

8.3 告警动作

# 告警不只是发消息,要带处置动作
# 1) 通知:IM/邮件分级发送
# 2) 自动动作:超重度自动切回影子模型
# 3) 复盘:每次告警生成工单,记录根因与修复

记忆:面板一屏看三层漂移、特征日志是监控地基(预测时落库特征快照)、告警要带处置动作与复盘闭环。


9. 常见陷阱与排查

  • 只看准确率:业务指标滞后且受标签质量污染,漂移要先看分布再看结果。
  • PSI 基准过期:用三年前的训练分布当基准,永远「看起来无漂移」——滚动基线。
  • 特征日志缺失:没存线上特征,漂移报警后无从定位。
  • 告警风暴:阈值太敏感天天报警,人不再看——加连续超阈才升级。
  • 重训不看效果:漂移就重训,但新模型可能更差——必须灰度对比。
  • 把数据漂移当概念漂移:特征变了但关系没变,重训即可;概念漂移要改特征/改模型。

记忆:监控工程三大忌——基准过期、特征日志缺失、告警风暴;排查先定位「哪类漂移」再决定「重训还是改特征还是改模型」。


10. 速查表与一句话记忆

工具度量一句话
PSI分箱分布差异风控标配,<0.1 安全
KS 检验CDF 最大距离快速单特征检验
KL 散度信息损失PSI 的对称变体
影子 AUC候选 vs 线上无标签时兜底
滚动基线近期分布防基准过期
特征日志线上快照监控的地基

一句话记忆:模型监控的三层信号——数据漂移(输入变了,看特征 PSI)、概念漂移(规则变了,靠标签回传确认)、预测漂移(输出变了,看分数 PSI);PSI 分箱比分布差异(<0.1 无、0.1-0.25 关注、>0.25 严重),KS/KL 同族做单特征快检;地基是特征日志(预测时落库特征快照),配滚动基线、分级阈值、连续超阈防抖告警;修复走「漂移报警→标签回传→定期/触发/增量重训→灰度对比→回滚预案」的闭环——离线评估只能证明当时好,监控才保证一直好。


延伸阅读

  • /ml-model-deployment/ — 部署、A/B 测试与漂移监控
  • /ml-model-evaluation/ — 评估指标与验证策略
  • /ml-model-interpretability/ — 特征归因(定位漂移特征)
  • /ml-pipelines-feature-selection/ — 特征治理与 Pipeline
  • [[ai-ml]] — 大规模训练与 MLOps
  • Evidently AI 漂移检测库
  • AWS 概念漂移指南

继续阅读

探索更多技术文章

浏览归档,发现更多关于系统设计、工具链和工程实践的内容。

全部文章 返回首页

「ml」更多文章

  1. 模型压缩与推理优化实战:量化、剪枝与知识蒸馏
  2. 强化学习入门实战:MDP、Q-learning 与 DQN 概览
  3. 多分类与多标签学习实战:OvR、softmax 与多输出评估