模型训练数据分布变化的实时监控与预警
在机器学习生产环境中,训练数据分布漂移(Data Drift)是导致模型性能下降的主要原因之一。本文将介绍如何构建一个基于统计检验的实时监控系统。
核心监控指标
- KS统计量:Kolmogorov-Smirnov距离,用于检测连续变量分布变化
- JS散度:Jensen-Shannon散度,衡量两个概率分布差异
- 卡方检验:适用于分类变量的分布变化检测
实施方案
import numpy as np
from scipy import stats
import pandas as pd
# 数据漂移检测类
class DataDriftDetector:
def __init__(self, threshold=0.1):
self.threshold = threshold
self.reference_data = None
def fit(self, data):
"""保存参考数据分布"""
self.reference_data = data
def detect_drift(self, new_data):
"""检测新数据是否发生漂移"""
drift_scores = []
for column in self.reference_data.columns:
if self.reference_data[column].dtype in ['int64', 'float64']:
# 连续变量使用KS检验
ks_stat, _ = stats.ks_2samp(
self.reference_data[column],
new_data[column]
)
drift_scores.append(ks_stat)
else:
# 分类变量使用卡方检验
chi2, _, _, _ = stats.chi2_contingency(
pd.crosstab(self.reference_data[column], new_data[column])
)
drift_scores.append(chi2)
return np.mean(drift_scores) > self.threshold
# 告警配置
# 配置监控频率:每小时检查一次
# 阈值设置:KS>0.1 或 卡方>5.0 触发告警
# 告警级别:
# - 低风险:KS=0.05-0.1
# - 中风险:KS=0.1-0.2
# - 高风险:KS>0.2
监控部署
在Kubernetes中部署监控服务,使用Prometheus收集指标,并配置以下告警规则:
# alerting rules
groups:
- name: data_drift_alerts
rules:
- alert: HighDataDrift
expr: data_drift_score > 0.2
for: 1h
labels:
severity: critical
annotations:
summary: "数据漂移严重,模型性能可能下降"
复现步骤
- 使用训练集构建参考分布
- 每小时采集生产环境数据
- 调用检测函数判断是否发生漂移
- 根据结果触发相应告警

讨论