Python实现CUSUM算法:详解及应用202


CUSUM (Cumulative Sum) 算法是一种强大的统计过程控制 (SPC) 方法,用于检测数据流中的小而持续的变化。与传统的Shewhart控制图相比,CUSUM算法对小偏移更敏感,能够更早地发现异常。 本文将详细讲解CUSUM算法的原理,并提供完整的Python代码实现,以及在不同场景下的应用示例。

一、CUSUM算法原理

CUSUM算法的核心思想是累加数据与目标值之间的偏差。假设我们有一系列数据点 {x1, x2, ..., xn},目标值是μ0。CUSUM算法计算两个累积和:一个用于检测正向偏移 (S+),另一个用于检测负向偏移 (S-)。

公式如下:

S+t = max{0, S+(t-1) + xt - (μ0 + k)} (正向偏移)

S-t = min{0, S-(t-1) + xt - (μ0 - k)}

(负向偏移)

其中,k是一个控制参数,表示允许的偏差范围的一半。 S+t 和 S-t 的初始值均为0。当 S+t 或 S-t 超过预设的决策界限 H 时,则认为发生了偏移。

k值和H值的选择取决于具体的应用场景和对误报率和漏报率的要求。k值较小,则算法对小偏移更敏感,但误报率可能较高;H值较大,则算法对偏移的检测延迟较长,但漏报率可能较低。通常需要根据经验和数据特性进行调整。

二、Python代码实现

以下Python代码实现了CUSUM算法,包含了正向和负向偏移的检测:```python
import numpy as np
import as plt
def cusum(data, mu0, k, H):
"""
CUSUM算法实现
Args:
data: 数据序列 (numpy array)
mu0: 目标值
k: 偏差范围的一半
H: 决策界限
Returns:
一个元组,包含正向偏移检测结果和负向偏移检测结果 (numpy arrays)
"""
n = len(data)
s_plus = (n)
s_minus = (n)
plus_detected = (n, dtype=bool)
minus_detected = (n, dtype=bool)
for i in range(1, n):
s_plus[i] = max(0, s_plus[i-1] + data[i] - (mu0 + k))
s_minus[i] = min(0, s_minus[i-1] + data[i] - (mu0 - k))
if s_plus[i] >= H:
plus_detected[i] = True
if s_minus[i]

2025-04-16


上一篇:Dubins Curves in Python: Implementation and Applications

下一篇:Python高效提取458格式数据:方法、技巧及优化策略