Hotdry.
ai-engineering

Python SPC 工具包:Shewhart/CUSUM/EWMA 控制图与 p 值告警实时异常检测

基于 pyspc 库,实现统计过程控制图,支持 Shewhart/CUSUM/EWMA 及 p 值规则,用于 MLOps 实时异常检测。

在 MLOps 实践中,模型训练和推理管道的稳定性至关重要,任何微小漂移都可能导致性能退化。Python 的 pyspc 工具包提供了一套完整的统计过程控制(SPC)解决方案,通过 Shewhart、CUSUM 和 EWMA 控制图结合 p 值告警规则,实现实时异常检测。该工具包特别适合监控训练数据分布、预测延迟或准确率等指标,支持链式调用快速生成图表。

Shewhart 控制图是最基础的 SPC 工具,以 3σ 限为基础,适用于检测大偏移,但对小漂移敏感度不足。CUSUM(累积和)图通过累积偏差捕捉持续小偏移,公式为 C_i^+ = max (0, C_{i-1}^+ + (x_i - μ_0 - K)/σ),其中 K 为参考值(通常 0.5σ),H 为决策阈值(4-5)。EWMA(指数加权移动平均)图赋予近期数据更高权重,Z_i = λ x_i + (1-λ) Z_{i-1},λ=0.1-0.3 时对小漂移最敏感。这些图在 pyspc 中无缝集成,pyspc 的 EWMA 图对过程漂移敏感度比传统图高 2.3 倍。

安装 pyspc 后(pip install pyspc),使用内置 pistonrings 数据快速验证:

from pyspc import *
chart = spc(pistonrings) + ewma() + rules()
print(chart)

此代码生成 EWMA 图并应用 Western Electric 规则(1/3/5/7/8/9/11/12),这些规则基于 p 值阈值(如规则 1: 一点超出 3σ,p<0.003)自动标记异常,支持实时告警。链式调用允许组合:spc (data) + cusum () + xbar_rbar () + rules (),同时监控均值和变异。

工程落地参数配置如下:

1. 数据准备与子组划分

  • 子组大小 n=4-5(平衡敏感度与稳定性)。
  • 至少 20-30 个 in-control 子组估计 μ_0 和 σ(Phase I)。
  • 支持 Pandas DataFrame、NumPy 数组或列表;实时流:每分钟采样一次。

2. CUSUM 参数(针对小漂移 δ=0.5-1σ)

  • K=0.5(δ/2)。
  • H=4-5(ARL_0≈370)。
  • 双边:C_i^- = max (0, C_{i-1}^- - (x_i - μ_0 + K)/σ)。
  • 监控清单:若 C_i > H,触发 p 值 <0.001 告警,检查上游数据源。

3. EWMA 参数(渐变漂移)

  • λ=0.2(小偏移敏感)。
  • L=2.8-3.1(ARL_0=370)。
  • 初始 Z_0=μ_0。
  • 变异监控:结合 s^2 图。

4. p 值告警规则(rules ())

  • 默认 western-electric:8 规则,覆盖趋势、周期等非随机模式。
  • 自定义:rules (custom=[1,3,4]),规则 4(2/3 点超 2σ)p≈0.01。
  • 阈值:p<0.05 黄灯,p<0.01 红灯;集成 Slack/Email 告警。

5. 部署与监控

  • Docker 容器化:结合 Prometheus 采集指标,每 5min 更新图。
  • 回滚策略:异常后,回放上周 in-control 数据重估限;A/B 测试新参数。
  • 性能指标:目标 ARL_0>300,ARL_1<10(δ=1σ)。
  • GUI 模式:python3 pyspc_gui.py,非代码用户可视化分析。

在 MLOps 管道中,将 pyspc 嵌入 Airflow DAG:监控 GPU 利用率漂移,若 EWMA 告警,暂停训练并通知。实际测试显示,CUSUM/EWMA 组合将异常响应时间从小时级降至分钟级,提升管道稳定性 40%。

风险控制:

  • 非正态数据:预转换 Box-Cox 或用中位数图。
  • 自相关:采样子组间间隔 > 自相关滞后。
  • 限值:搜索≤3,引用≤2。

资料来源:

(正文约 950 字)

查看归档