机器学习模型输入特征分布变化检测方案
在生产环境中,机器学习模型的性能会因数据分布漂移而下降。本文提供一个完整的输入特征分布监控方案。
核心监控指标
- KL散度:衡量新旧分布差异,阈值设为0.1
- JS散度:对称的分布距离度量,阈值0.05
- 特征均值/标准差变化率:单个特征变化超过3σ时告警
- 分布直方图对比:使用Kolmogorov-Smirnov检验
实现方案
import numpy as np
from scipy import stats
import pandas as pd
class FeatureDriftDetector:
def __init__(self, threshold_kl=0.1, threshold_js=0.05):
self.threshold_kl = threshold_kl
self.threshold_js = threshold_js
self.reference_data = None
def update_reference(self, data):
self.reference_data = data
def detect_drift(self, new_data):
if self.reference_data is None:
return False, 0.0, 0.0
kl_div = stats.entropy(new_data, self.reference_data)
js_div = self._js_divergence(new_data, self.reference_data)
return (kl_div > self.threshold_kl or js_div > self.threshold_js), kl_div, js_div
def _js_divergence(self, p, q):
m = (p + q) / 2
return (stats.entropy(p, m) + stats.entropy(q, m)) / 2
告警配置
- 严重级别:KL>0.3或JS>0.1,立即通知
- 警告级别:KL>0.1或JS>0.05,邮件提醒
- 监控频率:每小时检查一次,数据窗口30天
该方案可集成到Prometheus监控系统中进行实时告警。

讨论