模型训练集分布偏移监控

FierceDance +0/-0 0 0 正常 2025-12-24T07:01:19 DevOps · 模型监控

模型训练集分布偏移监控踩坑记录

问题背景

在生产环境中部署的机器学习模型,训练集和线上数据分布存在显著差异时,模型性能会急剧下降。最近一次模型更新后,准确率从92%跌到68%,排查发现是训练集分布偏移导致。

核心监控指标

  1. 特征分布统计量:均值、标准差、分位数等
  2. KS距离:Kolmogorov-Smirnov距离,衡量两个分布差异
  3. KL散度:相对熵,量化分布变化程度
  4. 特征相关性矩阵:检查特征间关系是否发生变化

告警配置方案

# 配置监控脚本
import pandas as pd
from scipy import stats
import numpy as np

def check_distribution_shift(train_data, online_data, threshold=0.1):
    # 计算KS统计量
    ks_stats = []
    for col in train_data.columns:
        if train_data[col].dtype in ['int64', 'float64']:
            ks_stat, p_value = stats.ks_2samp(train_data[col], online_data[col])
            ks_stats.append(ks_stat)
            
    # 告警触发条件
    if max(ks_stats) > threshold:
        return True  # 发生偏移
    return False

# 定时任务配置
schedule.every().hour.do(check_distribution_shift,
                        train_data=train_df,
                        online_data=online_df)

实践教训

  • 阈值设置:初始阈值设为0.05,过于敏感导致误报;调整为0.1后效果更佳
  • 监控频率:建议每小时检查一次,重要模型可设置每30分钟
  • 历史对比:不能只看当前vs训练集,要与过去N天的分布进行对比

复现步骤

  1. 准备训练集和线上数据样本
  2. 运行上述脚本进行KS检验
  3. 观察告警是否触发并分析偏移特征
推广
广告位招租

讨论

0/2000
Yvonne766
Yvonne766 · 2026-01-08T10:24:58
分布偏移确实是个隐蔽但致命的问题,别等到准确率崩了才回过神。建议用滑动窗口做历史对比,比如过去7天的均值作为基准,而不是死板地跟训练集比。这样能提前发现趋势性漂移。
HeavyWarrior
HeavyWarrior · 2026-01-08T10:24:58
KS检验虽然好用,但对样本量敏感,小样本容易误判。我通常会结合多个指标一起看:KS+KL散度+特征分布图,再加个业务逻辑判断,比如‘用户年龄分布’突然变成负数,那基本就是数据污染了