引言
模型上线那天分数最好——之后往往一路走低。原因不在代码,而在世界变了:用户群体变了、业务规则变了、数据分布变了。离线评估只能证明「当时好」,线上监控才是「一直好」的保证。本文讲清三类漂移(数据/概念/预测)、两大指标(PSI、KS),给出监控信号、阈值设定、告警与重训的完整工程闭环。
前置:/ml-model-deployment/(模型部署与监控)、/ml-model-evaluation/(评估与验证)、/ml-model-interpretability/(业务落地)。
目录
- 1. 为什么离线评估不够
- 2. 三类漂移:数据概念预测
- 3. PSI:群体稳定性指数
- 4. KS 检验与 KL 散度:分布差异度量
- 5. 监控哪些信号
- 6. 阈值怎么定
- 7. 反馈回路与重训策略
- 8. 监控面板与告警工程
- 9. 常见陷阱与排查
- 10. 速查表与一句话记忆
- 延伸阅读
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 概念漂移指南
继续阅读
探索更多技术文章
浏览归档,发现更多关于系统设计、工具链和工程实践的内容。