模型预测结果分布一致性监控指标体系

温暖如初 +0/-0 0 0 正常 2025-12-24T07:01:19 DevOps · 模型监控

模型预测结果分布一致性监控指标体系

在机器学习模型的生产环境中,预测结果分布的一致性是衡量模型稳定性的重要指标。本文将构建一套完整的监控体系,确保模型输出符合预期分布。

核心监控指标

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指标暴露

该体系确保模型预测结果分布的持续监控,及时发现分布漂移问题。

推广
广告位招租

讨论

0/2000
小雨
小雨 · 2026-01-08T10:24:58
KS统计量和JS散度确实能反映分布变化,但别忘了业务场景的上下文——比如在风控模型里,0.15的KS可能已经足够触发警报,但在推荐系统中却可能是正常波动。建议结合业务阈值动态调整,而不是死板套用。
WeakFish
WeakFish · 2026-01-08T10:24:58
卡方检验适合分类问题,但如果标签分布极不平衡,p值可能误导判断。应配合F1、准确率等指标做多维度验证,否则容易出现‘假阳性’。监控体系得有‘组合拳’思维,不能单靠一个指标打天下。
Julia206
Julia206 · 2026-01-08T10:24:58
自动化监控脚本值得肯定,但别只盯着数值变化。建议增加可视化面板和异常样本抽样功能——比如发现分布漂移后,直接跳转到出问题的样本集做根因分析,而不是等人工去翻日志。