第 5 课
← 返回系列列表

Course 2:监控与持续学习

MLOps Production — 机器学习工程生产实践

数据漂移检测、模型退化监控、自动重训练。

Course 2:监控与持续学习

课程简介

数据漂移检测、模型退化监控、自动重训练。

🎬 本课程视频:MLOps Production — 机器学习工程生产实践


一、为什么需要监控

1.1 模型在生产环境中的退化

模型在生产环境中部署后,性能会随着时间推移而下降。原因包括:

  1. 数据漂移(Data Drift):输入数据的分布发生变化
  2. 概念漂移(Concept Drift):输入与输出之间的关系发生变化
  3. 系统故障:上游数据源不可用、特征计算错误
  4. 用户行为变化:用户适应了模型,行为模式改变

一个经典的例子:2020 年疫情爆发后,许多电商、出行、旅游领域的 ML 模型性能骤降——因为用户行为模式发生了根本性的变化。

1.2 监控金字塔

有效的 ML 监控应该覆盖多个层次:

  1. 业务指标:收入、留存率、用户满意度
  2. 模型指标:准确率、AUC、MAE
  3. 数据指标:特征分布、缺失率、异常值
  4. 系统指标:延迟、吞吐量、错误率

二、数据漂移(Data Drift)

2.1 什么是数据漂移

数据漂移是指模型输入特征 $X$ 的分布 $P(X)$ 随时间变化。

原因:
- 季节性变化(电商在双十一期间的流量模式)
- 外部环境变化(疫情期间的用户行为)
- 数据收集方式变化(更换了埋点工具)
- 用户群体变化(产品扩展到新市场)

2.2 检测方法

统计检验

分布距离度量

import scipy.stats as stats

def detect_data_drift(reference_data, current_data, threshold=0.05):
    drifts = {}
    for col in reference_data.columns:
        stat, p_value = stats.ks_2samp(reference_data[col], current_data[col])
        drifts[col] = {
            'statistic': stat,
            'p_value': p_value,
            'drifted': p_value < threshold
        }
    return drifts

2.3 监控频率

三、概念漂移(Concept Drift)

3.1 什么是概念漂移

概念漂移是指输入 $X$ 与输出 $Y$ 之间的关系 $P(Y|X)$ 发生了变化——同样的特征,对应了不同的输出。

类型:
- 突变(Sudden Drift):关系瞬间改变(政策法规变化)
- 渐变(Gradual Drift):关系缓慢变化(用户口味变化)
- 周期性(Recurring Drift):关系周期性变化(季节性)
- 增量(Incremental Drift):关系逐步演变(渐进式变化)

3.2 检测方法

预测误差监控:跟踪模型预测误差随时间的变化

DDM(Drift Detection Method)
- 监控在线错误率 $p_t$
- 如果 $p_t + \sigma_t \geq p_{\min} + 2\sigma_{\min}$:触发警告
- 如果 $p_t + \sigma_t \geq p_{\min} + 3\sigma_{\min}$:触发漂移

ADWIN(Adaptive Windowing)
- 维护一个可变大小的滑动窗口
- 如果窗口内两个子窗口的均值有显著差异,则检测到漂移

class DDM:
    def __init__(self, warning_level=2.0, drift_level=3.0):
        self.warning_level = warning_level
        self.drift_level = drift_level
        self.p_min = float('inf')
        self.s_min = float('inf')
        self.total = 0
        self.errors = 0

    def add_element(self, prediction, actual):
        self.total += 1
        if prediction != actual:
            self.errors += 1
        p = self.errors / self.total
        s = (p * (1 - p) / self.total) ** 0.5
        if p + s <= self.p_min + self.s_min:
            self.p_min = p
            self.s_min = s
        if p + s > self.p_min + self.drift_level * self.s_min:
            return "DRIFT"
        if p + s > self.p_min + self.warning_level * self.s_min:
            return "WARNING"
        return "OK"

3.3 数据漂移 vs 概念漂移

特性 数据漂移 概念漂移
定义 $P(X)$ 变化 $P(Y
检测 比较特征分布 监控预测误差
修复 更新训练数据分布 重新训练模型
频率 相对常见 视场景而定

四、重训练策略

4.1 重训练触发条件

  1. 固定时间间隔:每周/每月自动重训练
  2. 性能下降告警:监控指标低于阈值时触发
  3. 数据积累:积累到一定量的新数据后重训练
  4. 人工触发:业务变化或发现问题后手动触发

4.2 重训练方法

全量重训练:使用所有历史数据训练新模型
- 优点:利用全部数据
- 缺点:训练成本高,旧数据可能包含过时模式

增量训练:在新数据上继续训练
- 优点:训练成本低
- 缺点:只适用于支持增量学习的模型(SGD、树模型增量)

滑动窗口训练:只使用最近 N 天的数据
- 优点:适应分布变化
- 缺点:丢弃了可能有用的历史信息

4.3 在线学习 vs 离线重训练

离线重训练
- 定期用新数据重新训练模型
- 新模型通过 A/B 测试验证后部署
- 适合大多数场景

在线学习
- 每个新样本到达时实时更新模型
- 适合概念漂移频繁的场景
- 控制难度大,需要监控模型行为

五、告警与响应

5.1 告警层次

5.2 告警响应流程

  1. 告警触发
  2. 快速评估影响范围
  3. 确定根因(数据问题?模型问题?系统问题?)
  4. 执行回滚或修复
  5. 事后复盘,更新监控规则

六、总结

  1. 监控是 ML 系统不可缺的组件——模型在生产中必然退化
  2. 数据漂移检测 $P(X)$ 变化,概念漂移检测 $P(Y|X)$ 变化
  3. 多种检测方法:统计检验、PSI、DDM、ADWIN
  4. 重训练策略需要平衡模型新鲜度和训练成本
  5. 告警体系确保问题能被及时发现和处理

七、监控系统设计

7.1 监控数据收集

监控系统的第一步是数据收集。需要收集的数据包括:

模型输入数据
- 采样保存部分推理请求的输入特征
- 计算特征的基本统计量(均值、分位数、缺失率)
- 检测异常特征值

模型输出数据
- 预测值的分布
- 预测置信度分布
- 模型决策阈值(如果适用)

真实标签数据
- 模型预测后观察到的真实结果
- 可能存在延迟(如用户是否在推荐后点击)
- 需要与预测对齐

7.2 监控仪表盘设计

有效的监控仪表盘应该:
- 展示关键指标的趋势
- 设置合理的阈值并触发告警
- 支持下钻分析(从全局到单个特征)
- 提供时间对比(同比、环比)

7.3 告警策略设计

好的告警策略应该:
- 减少误报(避免告警疲劳)
- 快速发现真问题
- 提供足够的上下文信息

告警阈值设置:基于历史数据的统计分布设置动态阈值
- 固定阈值:PSI > 0.25 触发告警
- 动态阈值:超过均值 ± 3σ 触发告警
- 基于时间序列的异常检测

7.4 模型回滚策略

当监控系统检测到模型性能显著下降时,需要快速回滚到上一个正常版本:

  1. 自动回滚:关键指标下降超过阈值时自动触发
  2. 手动回滚:团队确认问题后手动执行
  3. 渐进式回滚:逐步减少异常模型的流量

回滚后需要立即进行根因分析,避免同一问题再次发生。

监控指标的分类与选择

构建一个有效的 ML 监控系统需要在不同层面设置指标。按照监控对象的不同,可以将指标分为以下几类:

  1. 数据质量指标:检查输入数据的完整性、有效性、时效性。如缺失值比例、特征值域范围、时间戳新鲜度等。
  2. 模型性能指标:检查模型的预测质量。对有标签的场景,可以监控 AUC、准确率、F1 等;对无标签的场景,可以监控预测置信度分布、预测类别分布等代理指标。
  3. 业务指标:监控模型对业务 KPI 的实际影响。如点击率、转化率、用户留存等。

在监控策略上,建议遵循"金字塔原则":底层是对每个特征的详细监控(特征分布、缺失率等),中间层是对模型输出的汇总监控(预测分布、置信度变化),顶层是业务指标的监控。越往底层,告警越频繁但也越容易误报;越往顶层,告警越稀少但越需要立即处理。

漂移检测的统计方法

数据漂移检测有多种统计方法。对于数值特征,常用的方法包括:两样本 Kolmogorov-Smirnov 检验(KS 检验)、Wasserstein 距离、以及 Population Stability Index(PSI)。对于分类特征,常用卡方检验或 Jensen-Shannon 散度。PSI 在金融风控领域是标准做法:PSI < 0.1 表示分布稳定,0.1-0.25 需要关注,> 0.25 表示显著漂移。

延伸阅读

← Course 2:模型部署与服务 Course 2:ML 测试策略 →