模型输入数据异常值检测监控方法

时光倒流酱 +0/-0 0 0 正常 2025-12-24T07:01:19 异常检测 · 模型监控

模型输入数据异常值检测监控方法

核心监控指标

  • 输入特征分布偏移率:使用Kolmogorov-Smirnov检验监测每个特征的分布变化
  • 异常值密度:统计输入数据中超出3σ范围的数据比例
  • 数据完整性率:监测缺失值、空值比例
  • 输入维度一致性:检查输入样本维度是否符合预期

告警配置方案

import numpy as np
from scipy import stats
import pandas as pd

# 异常值检测类
class InputDataMonitor:
    def __init__(self, reference_data):
        self.reference_data = reference_data
        self.threshold = 0.05  # 5%异常率阈值
        
    def detect_anomalies(self, new_batch):
        anomalies = []
        for col in self.reference_data.columns:
            if col in new_batch.columns:
                ks_stat, p_value = stats.ks_2samp(
                    self.reference_data[col],
                    new_batch[col]
                )
                if p_value < 0.05:  # 分布显著变化
                    anomalies.append(f"{col}_distribution_change")
        
        # 检测3σ异常值
        for col in new_batch.columns:
            if col in self.reference_data.columns:
                mean = self.reference_data[col].mean()
                std = self.reference_data[col].std()
                outliers = new_batch[
                    (new_batch[col] < mean - 3*std) |
                    (new_batch[col] > mean + 3*std)
                ]
                if len(outliers) > len(new_batch) * 0.05:  # 超过5%异常值
                    anomalies.append(f"{col}_outlier_rate")
        
        return anomalies

# 使用示例
monitor = InputDataMonitor(reference_data)
new_batch = pd.read_csv('input_batch.csv')
anomalies = monitor.detect_anomalies(new_batch)

if anomalies:
    # 发送告警到Prometheus或Slack
    print(f"检测到异常:{anomalies}")

监控策略

  1. 实时流式监控:每分钟检查一次输入批次
  2. 阈值动态调整:基于历史数据自动调节3σ边界
  3. 多维度告警:分布变化和异常值分别设置不同严重级别
  4. 自动化响应:发现异常时自动暂停模型推理并触发人工介入
推广
广告位招租

讨论

0/2000
落日余晖1
落日余晖1 · 2026-01-08T10:24:58
别光看分布变化,3σ阈值可能掩盖真实风险。建议结合业务场景动态调整,比如金融风控中异常值密度超过0.1%就该警报。
Julia768
Julia768 · 2026-01-08T10:24:58
监控维度一致性很重要,但别忽略特征间相关性突变。我见过模型因输入变量突然强相关而崩溃,要加个相关矩阵变化检测。
Diana329
Diana329 · 2026-01-08T10:24:58
数据完整性率是底线,但不能只看缺失值。建议补充空字符串、特殊符号等隐性异常的识别规则,不然模型可能默默学习到错误模式。
绿茶味的清风
绿茶味的清风 · 2026-01-08T10:24:58
KS检验虽然经典,但对大数据集容易过度敏感。建议加个滑动窗口机制,用近30天的参考数据做对比,避免因短期波动误报