Data Drift
数据漂移是指生产环境中的输入数据偏离训练数据分布,导致准确率下降。介绍漂移类型、统计检验和重新训练。
数据漂移是指已部署模型接收的输入数据统计分布相对于训练数据发生变化。模型假设生产环境输入与其训练数据来自相同分布;一旦这一假设不再成立,准确率就可能下降,且没有任何错误消息,模型代码或权重也可能完全没有变化。视觉系统中的常见原因包括更换摄像头或镜头、光照和季节变化、摄像头角度移动、新产品包装,以及上游流程变化(例如采用不同的图像压缩设置)。检测并应对漂移是模型监控和机器学习运维 (MLOps)的核心任务。
分布偏移的类型#
分类器会对给定输入的标签概率进行建模;偏移可能出现在输入、标签或两者之间的关系中:
- 协变量偏移:输入分布发生变化,但任意给定输入的正确标签保持不变。一个使用白天图像训练的检测器开始接收黄昏时段的录像,就会遇到协变量偏移,因为汽车依然是汽车。狭义上的数据漂移指的就是这种情况。
- 标签偏移:也称先验概率偏移,指类别频率发生变化。如果生产线的缺陷率从 1% 上升到 5%,检测器报警中真实缺陷所占比例也会随之上升,因此其精确率会发生变化,即使模型本身和每种缺陷的外观都没有改变。
- 概念漂移:输入与标签之间的关系发生变化,因此相同输入现在应对应不同标签。欺诈者会不断调整策略,导致欺诈模式发生变化;质量标准收紧后,过去合格的零件也会变成不合格品。
漂移可能是突发的,例如更换摄像头;也可能是渐进的,例如镜头逐渐积灰;还可能是周期性的,例如树叶和积雪随季节变化。
检测数据漂移#
漂移检测会将参考样本(通常是训练数据或验证数据)与近期生产数据窗口进行比较。没有标签时,团队会检验这两个输入分布是否存在差异:连续特征使用双样本柯尔莫哥洛夫-斯米尔诺夫(KS)检验,类别特征使用卡方检验,或者使用信用评分中常见的总体稳定性指数(PSI)。原始像素的维度太高维,无法直接比较,因此图像监测会检查亮度和锐度等汇总统计量,或预训练网络的嵌入;一项关于分布偏移检测方法的研究发现,对预训练分类器的表征进行双样本检验效果最佳。模型自身的输出是另一项信号:预测类别频率、每张图像的边界框数量或置信度分数的变化,往往会在准确率得到测量之前就显现。
import numpy as np
from scipy.stats import ks_2samp
rng = np.random.default_rng(0)
# Mean brightness (0-255) of 500 training images and two batches of 200 production images
reference = rng.normal(130, 25, 500)
same_light = rng.normal(130, 25, 200)
dusk = rng.normal(110, 25, 200)
# Two-sample Kolmogorov-Smirnov test: a small p-value means the distributions differ
for name, batch in (("same light", same_light), ("dusk", dusk)):
result = ks_2samp(reference, batch)
drifted = result.pvalue < 0.01
print(f"{name}: KS statistic {result.statistic:.3f}, p-value {result.pvalue:.2g}, drift {drifted}")从训练分布中抽取的批次,其 KS 统计量为 0.046,p 值为 0.91;平均亮度下降 20 个等级的批次,其 KS 统计量为 0.346,p 值为 1.1e-15,因此会触发告警。KS 统计量是两个累积分布之间的最大差距;样本量非常大时,即使无害的偏移也会得到极小的 p 值,因此漂移告警通常直接基于 KS 统计量设置,因为它衡量的是偏移幅度,而不只是 p 值。
应对漂移#
只有新鲜标签才能表明检测到的偏移是否降低了准确率。标准应对方法是抽取近期生产数据样本,为其添加标签,并测量其平均精度均值 (mAP)或其他任务指标;如果性能下降,就使用新数据和原始数据的混合数据重新训练或微调,并保留旧样本,以避免灾难性遗忘。亮度、模糊和颜色变化等数据增强可以让模型适应可预期的变化;无监督域自适应则利用无标签目标数据使模型适应新领域。在 Ultralytics Platform 中,专用端点的监控选项卡会绘制其处理图像的平均预测置信度随时间变化的曲线,以及类别计数、框的尺寸和位置;近期样例可以保存到数据集中,以供审核和重新训练。










