模型输出值超出正常范围的实时监控

深海游鱼姬 +0/-0 0 0 正常 2025-12-24T07:01:19 异常检测 · 模型监控

模型输出值超出正常范围的实时监控踩坑记录

背景

上周上线了一个推荐系统模型,发现线上输出经常出现异常值(比如-9999、1000000等),但监控告警迟迟未触发,导致用户投诉严重。

问题分析

最初只设置了均值+3σ的简单阈值监控,结果发现:

  1. 正常样本分布偏移,均值漂移导致阈值失效
  2. 异常值在训练集里占比极低,模型学习不到异常模式
  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}")

关键配置

  1. 窗口大小:500-1000个样本
  2. 告警阈值:IQR方法+3σ双重验证
  3. 告警级别:严重(立即通知)

优化建议

  1. 增加滑动窗口动态调整机制
  2. 结合业务场景设置业务规则
  3. 集成到CI/CD流程中自动检测

踩坑总结:别只盯着均值,多维度统计才是王道!

推广
广告位招租

讨论

0/2000
Mike455
Mike455 · 2026-01-08T10:24:58
别再只靠均值+3σ了,这种静态阈值在模型输出分布漂移时基本失效。建议结合IQR和Z-Score双重检测,并动态调整窗口大小,比如根据数据波动率自适应缩放监控范围。
Zane225
Zane225 · 2026-01-08T10:24:58
异常值往往不是孤立事件,而是趋势性偏离的信号。可以引入滑动窗口的趋势分析,比如用线性回归拟合输出序列的变化斜率,一旦偏离正常趋势就触发预警,而不是单纯看单点是否越界。