Courses
“漂移”(Drift)是机器学习中的一个术语,用来描述机器学习模型在生产环境中的性能如何随着时间的推移而逐渐变差。这可能由多种原因造成,例如输入数据分布随时间发生变化,或者输入(x)与期望目标(y)之间的关系发生改变。
当我们在现实世界中使用机器学习时,数据往往是动态且不断变化的,漂移会成为一个重大问题。本文将深入探讨模型为何会发生漂移、不同类型的漂移、检测算法,最后通过一个开源的 Python 实现来完成对漂移检测的讲解。
什么是漂移?
机器学习模型是用历史数据进行训练的,但一旦投入现实世界使用,由于一种称为漂移的现象,它们可能会随着时间的推移变得过时并失去准确性。漂移是指用于训练机器学习模型的数据的统计性质随时间发生变化。这会导致模型变得不那么准确,或表现与设计初衷不同。
换句话说,“漂移”是指由于模型所处环境发生变化,导致其进行准确预测的能力下降。
为什么机器学习模型会发生漂移?
机器学习模型会随时间发生漂移的原因有多种。
一个常见原因是用于训练模型的数据变得过时,无法再代表当前的实际情况。
例如,考虑一个基于历史数据训练、用于预测公司股价的机器学习模型。如果我们在稳定市场的数据上训练该模型,它起初可能表现良好。然而,若市场随时间变得更加动荡,由于数据的统计性质发生了变化,模型可能不再能准确预测股价。
另一个导致模型漂移的原因是模型本身并未设计为可处理数据的变化。有些机器学习模型较其他模型更能应对数据变化,但没有任何模型可以完全避免漂移。
漂移的类型
下面来看看需要考虑的两种不同类型的漂移:
1. 概念漂移
概念漂移(也称为模型漂移)是指模型所要完成的任务随着时间发生变化。例如,设想一个机器学习模型是基于邮件内容来检测垃圾邮件的。如果人们收到的垃圾邮件类型发生了显著变化,该模型可能不再能准确识别垃圾邮件。
概念漂移可进一步分为四类(Learning under Concept Drift: A Review, Jie Lu 等):
- 突变式漂移
- 渐进式漂移
- 增量式漂移
- 概念再现

来源:https://arxiv.org/pdf/2004.05785.pdf
2. 数据漂移
数据漂移(也称为协变量偏移)是指输入数据的分布随时间发生变化。例如,假设一个模型是基于客户年龄和收入来预测其购买产品可能性的。如果客户的年龄和收入分布随时间显著变化,模型可能不再能准确预测购买可能性。
了解概念漂移和数据漂移并采取措施预防或减轻其影响非常重要。应对漂移的一些策略包括:持续监控和评估模型性能、用新数据更新模型,以及采用对漂移更具鲁棒性的机器学习模型。
您可以在我们的 DataFramed 播客节目中,进一步了解包括漂移在内的部署后的数据科学话题。
3. LLM 与嵌入漂移
大语言模型(LLM)带来了一种上述方法并未针对的漂移。数据不再是表格中的行——而是自由文本——随时间变化的通常是用户提问的含义。现在普遍认为有三种需要监测的 LLM 漂移形式。
嵌入漂移
当用户发送给模型的文本含义发生变化,即便表面文本看起来相同,就会出现嵌入漂移。LLM 会把文本转换为称为嵌入的长数值向量,漂移可能出现在这些数字中,而不是出现在您通常会监测的任何表面特征上。
设想一个客户支持聊天机器人,最初主要处理安装和上手问题。六个月后,消息量和平均长度都没有变化,但用户现在大多在询问账单和取消。文本统计看起来稳定,但嵌入分布已经发生了变化。为检测这一点,团队会使用统计距离度量,将最近一批嵌入与基准批次进行比较。
提示或输入漂移
提示漂移与嵌入漂移思路相同,但在更高一层进行跟踪。不是直接比较原始嵌入,而是使用分类器或另一个 LLM 将传入查询分桶到类别中,并观察类别组合的变化。
例如,一个面向后端工程师的内部编码助手,可能会逐渐开始接收到来自数据科学家的流量,问题主要是 pandas 相关。助手也许仍能胜任作答,但其服务对象已不再是测试时的人群,系统提示或检索索引可能会逐渐不再适配。
评分准则漂移
评分准则漂移指的是自动评估器对模型输出给出的质量分数随时间发生变化。许多生产团队现在使用 LLM 作为裁判,为每个回答在有用性、准确性或语气等方面打分。当这些分数针对相同类型输入开始下降时,通常意味着某些东西发生了变化——比如 API 背后的模型、被检索的文档,或用户构成。
评分准则漂移的特别之处在于,它无需真实标签就能提供质量信号,而真实标签在生成式输出的实时场景中很少可得。
如何检测漂移?
我们有两种方法可以检测漂移:
1. 基于机器学习模型的方法:基于模型的方法用于检测传入输入数据是否发生了漂移。
2. 统计检验:有许多统计方法可以检测数据漂移。主要分为三类:
-
- 序贯分析方法
- 用于检测漂移的自定义模型
- 基于时间分布的方法,这类方法非常常见。
基于时间分布的方法使用统计手段来计算两个概率分布之间的差异,以检测漂移。这些方法包括人口稳定性指数、KL 散度、JS 散度、KS 检验,以及 Wasserstein 距离。
检测数据漂移的算法
Kolmogorov–Smirnov(K-S)检验
Kolmogorov–Smirnov(K-S)检验是一种非参数统计检验,用于判断两组数据是否来自相同分布。它常用于检验一个样本是否来自特定总体,或比较两个样本是否来自同一总体。
该检验的原假设是两者分布相同。如果拒绝该假设,说明模型中可能存在漂移。
K-S 检验是比较数据集、判断其是否来自同一分布的有用工具。
人口稳定性指数
人口稳定性指数(PSI)是一种统计度量,用于比较两个不同数据集中某个分类变量的分布。
人口稳定性指数(PSI)用于衡量一个变量在两个样本或随时间的分布变化程度。它常被用来监测人群特征的变化,并识别机器学习模型性能可能存在的问题。
PSI 最初用于监控风险评分卡中分数分布的变化,但如今也被用于检查所有与模型相关属性(包括因变量和自变量)的分布性漂移。
较高的 PSI 值表明两个数据集中该变量的分布存在显著差异,可能意味着模型发生了漂移。
如果某个变量的分布发生了显著变化,或多个变量在一定程度上发生了变化,可能需要对模型进行再校准或重建以提升其性能。
Page–Hinkley 方法
Page–Hinkley 方法是一种统计方法,用于检测随时间推移数据序列均值的变化。它常被用于监控机器学习模型的性能,并检测数据分布的变化以指示模型漂移。
使用 Page–Hinkley 方法的第一步是定义阈值和决策函数。阈值是判断均值变化是否显著的分界值,决策函数是在检测到变化时返回 1、未检测到变化时返回 0 的函数。
接着,在每个时间步计算数据序列的均值,并将决策函数应用于数据以判断是否发生变化。如果决策函数返回 1,则表示检测到变化,模型可能正在发生漂移。
Page–Hinkley 方法是一种简单有效的手段,可用于检测数据序列均值随时间的变化。它对在直观观察中不易察觉的小幅均值变化尤其敏感。不过,必须谨慎选择阈值和决策函数,确保方法对数据变化足够敏感,同时又不至于产生过多误报。
在 Python 中实现漂移检测
本节我们将使用 Evidently 进行漂移检测。Evidently 是一个为从事机器学习的数据科学家和工程师打造的开源 Python 库,帮助他们从验证到生产阶段,对模型进行测试、评估与性能跟踪。
导入库
import pandas as pd
import numpy as np
from sklearn import datasets
from evidently import Report
from evidently.presets import DataDriftPreset
导入数据集并创建基准与目标分区
# create ref and cur dataset for drift detection
adult_data = datasets.fetch_openml(name='adult', version=2, as_frame=True)
adult = adult_data.frame
adult_ref = adult[~adult.education.isin(['Some-college', 'HS-grad', 'Bachelors'])].copy()
adult_cur = adult[adult.education.isin(['Some-college', 'HS-grad', 'Bachelors'])].copy()
adult_cur.iloc[:2000, 3:5] = np.nan
生成漂移报告
#dataset-level metrics
report = Report([DataDriftPreset()], include_tests=True)
my_eval = report.run(current_data=adult_cur, reference_data=adult_ref)
my_eval

漂移检测仪表板 - 使用 EvidentlyAI 创建
以 JSON 格式导出漂移报告
#report in a JSON format
my_eval.json()
在此查看完整的 Datacamp Notebook:链接。
结论
数据和模型漂移会给生产环境中的机器学习系统带来重大挑战。通过了解漂移的成因与影响,并实施有效的漂移监控实践,您可以确保机器学习模型在较长时间内保持准确与可靠。
监控模型性能、使用漂移检测模型、并定期用最新数据进行再训练,都是减轻漂移风险的最佳实践之一。通过主动开展漂移监控,您可以确保机器学习系统持续为您的组织创造价值。
对机器学习模型进行漂移监控只是更广泛领域——MLOps——的一部分。对于任何数据科学家、工程师或管理者而言,理解 MLOps 概念对于将机器学习模型从本地 Notebook 推向生产环境的可用模型都至关重要。
如果您希望深入理解 MLOps 及其如何助益您的职业发展,欢迎查看我们的 MLOps 概念 课程。在这里,您将学习什么是 MLOps,了解 MLOps 流程中的不同阶段,并识别 MLOps 成熟度的不同层级。掌握这些核心概念后,您将具备持续、可靠且高效地实施机器学习的能力。
漂移检测常见问答
什么是机器学习模型漂移?
机器学习模型漂移是指模型在新数据上的表现与其在训练数据上的表现出现偏差。这可能由多种原因引起,包括数据分布随时间变化、加入不符合原模型假设的新数据,或模型自身无法适应变化的环境。
为什么模型漂移是个问题?
模型漂移会显著影响机器学习模型的性能和准确性。随着模型预测变得不可靠,可能导致错误的决策或行动,并带来负面后果。例如,在医疗场景中,模型漂移可能导致错误诊断或治疗建议;在金融场景中,可能带来不佳的投资决策。
如何检测模型漂移?
判断模型是否发生漂移的方法有多种,例如统计检验、漂移检测算法以及对模型表现的监控。有些方法旨在实时发现漂移,另一些则更适合定期或分批检测。为具体应用和数据环境选择合适的技术非常重要。
如何预防模型漂移?
防止模型漂移需要审慎的模型选择、定期监控与测试,以及主动干预。这可能包括使用对漂移更具鲁棒性的算法、定期用新数据对模型进行再训练,或在检测到漂移时实施相应策略来主动处理。同时,清楚了解可能导致漂移的因素也很重要,以便您采取预防措施。
数据分布如何影响模型漂移?
数据分布会显著影响机器学习模型的性能。如果数据分布随时间发生变化,模型可能无法再准确预测不符合其原始假设的新数据,从而导致模型漂移。这可能通过多种方式发生,例如数据的自然波动、引入新的数据源,或生成数据的底层流程或系统发生变化。
模型漂移可以逆转吗?
在某些情况下,通过用新数据再训练模型或调整其参数,可以逆转模型漂移。然而,这并非总是可行,尤其当数据分布发生了显著变化,或模型过于复杂或过度专门化时。在这种情况下,可能需要从头开始构建一个新模型。
是否可能彻底消除模型漂移?
要完全消除模型漂移很困难,甚至不可能。即便是最鲁棒、设计最完善的机器学习模型,也可能受到数据或其底层生成过程变化的影响。最佳做法是通过定期监控、测试与干预来管理并减轻模型漂移的影响。
模型漂移如何影响模型性能?
模型漂移会对机器学习模型的性能产生显著影响。随着预测变得不准确,关键指标(如准确率、精确率、召回率以及整体有效性)都会下降。在某些情况下,模型漂移甚至会导致模型彻底失效,产生错误或不可靠的预测。
模型漂移如何影响模型准确性?
模型漂移会对机器学习模型的准确性产生负面影响。随着预测变得不准确,可能导致错误决策或行动,并在现实应用中带来不良后果。例如,在医疗场景中,模型漂移可能导致错误诊断或治疗建议;在金融场景中,可能导致不佳的投资决策。为保持模型准确性,定期监测与测试模型漂移非常重要。