那个"悄悄地变蠢"的模型

2026年3月,我们一个风控模型的通过率从85%缓慢下降到了72%。下降过程持续了6周,每周下降约2%。没有人发现——因为监控只看"有没有报错",而不是"模型性能是否退化"。

6周后,业务方投诉:“为什么最近风控拒绝了这么多正常用户?“我们才意识到模型已经"悄悄变蠢"了。

金句:模型上线后的性能退化不是"突然发生"的,而是"缓慢累积"的——就像温水煮青蛙。

检测方法一:PSI(Population Stability Index)

PSI比较两个分布(训练时 vs 推理时)的差异。将数据分箱,计算每个箱中实际分布和预期分布的差异。PSI < 0.1:无显著漂移。0.1 <= PSI < 0.25:中等漂移,需要关注。PSI >= 0.25:显著漂移,需要采取行动。PSI的局限: 只检测分布变化,不检测"变化是否影响模型性能”。

检测方法二:KS检验

KS检验(Kolmogorov-Smirnov Test)比较两个分布的累积分布函数。ks_2samp(reference_data, current_data),p < 0.01则漂移。KS vs PSI: KS对分布的形状变化更敏感,PSI对分布的尾部变化更敏感。建议两者都用。

检测方法三:对抗验证(Adversarial Validation)

训练一个分类器来区分"训练数据"和"推理数据”。如果AUC > 0.7,意味着分类器能轻松区分训练和推理数据 → 数据漂移严重。如果AUC ≈ 0.5,意味着无法区分 → 无漂移。这是最强大的漂移检测方法。

2026年退化检测最佳实践

实时层: 每个推理请求计算特征的PSI(滚动窗口),如果PSI > 0.25,触发告警。批量层: 每天用对抗验证检测训练数据 vs 当前推理数据的整体漂移。定期层: 每周用新标签数据重新评估模型AUC/F1。自动修复: 当退化检测触发后,自动触发模型重训练。

最常见的错误

错误1:只监控输入数据,不监控模型输出。 数据漂移 != 模型性能退化。错误2:PSI阈值设得太高。 建议在0.15时就开始关注。错误3:忽略"季节性"。 用"时间序列异常检测"替代"静态阈值"。

结论:模型退化检测是ML系统最重要的"体检"机制。 比"发现问题"更重要的,是"在用户发现问题之前,你先发现问题"。