模型预测结果分布一致性监控指标体系
在机器学习模型的生产环境中,预测结果分布的一致性是衡量模型稳定性的重要指标。本文将构建一套完整的监控体系,确保模型输出符合预期分布。
核心监控指标
1. KS统计量(Kolmogorov-Smirnov) 用于检测新旧数据分布差异:
from scipy import stats
import numpy as np
# 计算KS统计量
ks_stat, ks_pvalue = stats.ks_2samp(old_predictions, new_predictions)
print(f'KS统计量: {ks_stat:.4f}, p值: {ks_pvalue:.4f}')
2. JS散度(Jensen-Shannon Divergence) 衡量两个概率分布间的差异:
from sklearn.metrics import pairwise_distances
import numpy as np
def js_divergence(p, q):
m = 0.5 * (p + q)
return 0.5 * (entropy(p, m) + entropy(q, m))
js_dist = js_divergence(old_dist, new_dist)
3. 卡方检验 适用于分类结果分布:
from scipy.stats import chi2_contingency
# 构建列联表
contingency_table = [[old_counts], [new_counts]]
chi2, p_value, dof, expected = chi2_contingency(contingency_table)
告警配置方案
阈值设定:
- KS统计量 > 0.15 触发严重告警
- JS散度 > 0.3 触发警告
- 卡方检验 p-value < 0.01 触发严重告警
自动化监控脚本:
import schedule
import time
from datetime import datetime
def monitor_distribution():
# 获取历史与当前预测结果
old_data = get_historical_predictions()
new_data = get_current_predictions()
ks_stat, p_value = stats.ks_2samp(old_data, new_data)
js_dist = js_divergence(calculate_distribution(old_data),
calculate_distribution(new_data))
if ks_stat > 0.15:
send_alert('严重', f'KS值异常: {ks_stat:.4f}')
elif js_dist > 0.3:
send_alert('警告', f'JS散度异常: {js_dist:.4f}')
# 每小时执行一次监控
schedule.every().hour.do(monitor_distribution)
告警通知机制:
- Slack机器人通知
- 邮件告警
- Prometheus指标暴露
该体系确保模型预测结果分布的持续监控,及时发现分布漂移问题。

讨论