模型输出值超出正常范围的实时监控踩坑记录
背景
上周上线了一个推荐系统模型,发现线上输出经常出现异常值(比如-9999、1000000等),但监控告警迟迟未触发,导致用户投诉严重。
问题分析
最初只设置了均值+3σ的简单阈值监控,结果发现:
- 正常样本分布偏移,均值漂移导致阈值失效
- 异常值在训练集里占比极低,模型学习不到异常模式
- 简单统计方法无法识别趋势性偏离
解决方案
import numpy as np
from scipy import stats
import pandas as pd
class OutputRangeMonitor:
def __init__(self, window_size=1000):
self.window_size = window_size
self.history = []
def add_sample(self, prediction):
self.history.append(prediction)
if len(self.history) > self.window_size:
self.history.pop(0)
def is_anomaly(self, current_pred):
# 1. 多维度统计
window_data = np.array(self.history)
# 基于分位数的异常检测
q1, q3 = np.percentile(window_data, [25, 75])
iqr = q3 - q1
lower_bound = q1 - 1.5 * iqr
upper_bound = q3 + 1.5 * iqr
# 基于Z-score的异常检测
mean = np.mean(window_data)
std = np.std(window_data)
z_score = abs((current_pred - mean) / (std + 1e-8))
return (current_pred < lower_bound or current_pred > upper_bound) and z_score > 3
# 告警配置示例
monitor = OutputRangeMonitor(window_size=500)
# 每次模型输出后调用
prediction = model.predict(input_data)
if monitor.add_sample(prediction):
# 实时告警处理
send_alert(f"异常输出检测: {prediction}")
关键配置
- 窗口大小:500-1000个样本
- 告警阈值:IQR方法+3σ双重验证
- 告警级别:严重(立即通知)
优化建议
- 增加滑动窗口动态调整机制
- 结合业务场景设置业务规则
- 集成到CI/CD流程中自动检测
踩坑总结:别只盯着均值,多维度统计才是王道!

讨论