做 SPC 的时候,有一种情况其实挺让人头疼。
过程没有突然出现一个特别离谱的数据,每一个点单独看好像都还正常,但最近的数据就是感觉有点不对:
连续高了一点,或者连续低了一点。
问题是,这个“一点”可能真的很小。
小到 Xbar-R、I-MR 这样的常规控制图一时还看不出来。
等控制图终于报警的时候,过程可能已经偏了一段时间了。
有没有办法把这种很小、但持续存在的变化早点找出来?
有。
这就是今天要讲的两种时间加权控制图:EWMA 和 CUSUM。
而且这篇不准备只讲概念。
我们直接用 Excel 把它们算出来。
先从普通控制图说起。
以最常见的 I-MR 控制图为例,一个新的测量值进来以后,我们主要看这个点在什么位置,有没有超过控制限,有没有触发连续点、趋势之类的判异规则。
这种方法当然很好用。
但是它有一个特点:
当前点就是当前点。
假设一个稳定过程的中心是 100,正常波动大概是:
100.2、99.7、100.4、99.6、100.1……
突然来了一个 103。
这种异常,常规控制图很容易发现。
但如果过程变成:
100.2、100.3、100.4、100.3、100.5、100.6、100.5……
每个点都不夸张。
可是如果原来的过程长期稳定在 100 附近,我们真正想知道的是:
它是不是已经开始慢慢往上走了?
这正是 EWMA 和 CUSUM 擅长的事情。
它们并不只看当前这个点。
它们会把历史带进来。
所以才叫“时间加权控制图”。
EWMA 的全称是 Exponentially Weighted Moving Average,指数加权移动平均控制图。
名字有点长,其实思想并不复杂。
它的核心公式只有一个:
Zt = λXt + (1-λ)Zt-1
其中:
比如 λ=0.2。
那么:
今天的数据占 20%,过去累计的信息占 80%。
下一次再计算的时候,又加入新的数据。
所以越久以前的数据,影响会越来越小,但不会突然消失。
这就是“指数加权”。

我们先从最简单的单值数据开始。
假设原始数据放在 A 列:
A1 输入:data
A2 开始放测量值。
首先计算过程均值:
=AVERAGE(A2:A30)
接下来还需要估计过程标准差。
单值数据没有子组标准差,所以这里采用移动极差估计。
从第二个数据开始:
MR = |Xi-Xi-1|
Excel 可以写成:
=ABS(A3-A2)
一直向下填充。
然后计算平均移动极差 MRbar。
当移动极差长度为 2 时:
σ = MRbar / 1.128
Excel 中就是:
=AVERAGE(G3:G30)/1.128
到这里,过程均值和 Sigma 都有了。
这里取:
λ = 0.2
控制限宽度:
L = 3
第一个 EWMA 值可以写成:
=0.2*A2+(1-0.2)*Mean
后面的数据递推:
=0.2*A3+(1-0.2)*前一个EWMA
再一直向下填充。
这时候会发现一个挺有意思的现象:
原始数据可能上上下下跳得比较厉害,但是 EWMA 曲线明显平滑很多。
但千万不要因此理解成:
EWMA 只是给控制图做了一条移动平均线。
不是。
真正重要的是它后面的控制限。
EWMA 第 t 个点的控制限为:
UCL = μ + Lσ√[λ/(2-λ) × (1-(1-λ)^(2t))]
CL = μ
LCL = μ-Lσ√[λ/(2-λ) × (1-(1-λ)^(2t))]
Excel 里完全可以直接写这个公式。
例如我们已经把:
那么 UCL 可以写成:
=$I$3+$I$2*$I$4*SQRT($I$1/(2-$I$1)*(1-(1-$I$1)^(2*F2)))
LCL 同理。
把公式向下拉,再把 EWMA、UCL、CL、LCL 做成折线图,一张完整的 EWMA 控制图就出来了。
这里第一次自己用 Excel 做的人,经常会发现一个奇怪现象:
为什么 EWMA 的控制限不是两条平行直线?
因为刚开始的时候,历史信息还很少。
随着 t 不断增加:
(1-λ)^(2t)
会越来越接近 0。
控制限也就逐渐趋于稳定。
所以 EWMA 前面的控制限比较窄,后面逐渐展开,最后接近稳定值。
这不是 Excel 算错了。
EWMA 本来就是这样的。

这一步很容易算错。
假设每次抽取 5 个产品:
X1、X2、X3、X4、X5。
这时候 EWMA 监控的已经不是单个测量值,而是:
每个子组的 Xbar。
所以第一步先计算每组均值:
=AVERAGE(A2:E2)
然后 EWMA 对这个 Xbar 进行递推。
但是还有一个更容易忽略的问题:
控制限不能直接使用单个产品的过程标准差。
我们先通过各子组内部的离差计算合并标准差。
每组计算:
=DEVSQ(A2:E2)
把所有子组的组内平方和加起来,再除以总的组内自由度,由此得到合并标准差。
但这个 Sigma 表示的是:
单个观测值的过程标准差。
而现在 EWMA 监控的是 Xbar。
所以真正进入控制限公式的应该是:
σXbar = σ / √n
假设每组 n=5:
=Sigma/SQRT(5)
这一点很重要。
我们自己用 Excel 和 Minitab 对结果的时候,一开始就遇到了这个问题:
合并标准差已经和 Minitab 一模一样,但 UCL、LCL 就是对不上。
最后发现原因就是这里。
Sigma 对了,但控制限里面少除了一个 √n。
补上以后,结果就一致了。
这也是自己动手做一遍控制图的价值。
很多公式看起来都懂,真正做到 Excel 里面,才会发现自己到底有没有理解它。
EXCEL中的合并标准差如何计算,请看<全网第一个讲清楚CPK**如何计算的,Step by step**,Excel和Python同时实现>
EWMA 最大的价值,不是让曲线变平滑。
而是:
让最近一段时间连续出现的小偏移逐渐积累成一个可以识别的信号。
λ 越小,历史的影响越大,曲线越平滑,对持续小偏移越敏感;
λ 越大,当前数据的影响越大,反应更快,也越来越接近常规控制图的思路。
实际使用中,λ=0.2 是一个很常见的选择。
但 EWMA 不是唯一的方法。
还有一种方法更加直接:
你偏一点,我就记一点;你继续偏,我继续往上加。
这就是 CUSUM。
CUSUM 是 Cumulative Sum Control Chart,累积和控制图。
它和 EWMA 的思想不完全一样。
EWMA 是加权。
CUSUM 是累积。
假设过程目标均值为 μ。
每来一个数据 Xi,我们先计算:
Ci = Xi-μ
如果数据围绕目标值随机波动:
一会儿正,一会儿负。
这些偏差不会长期朝同一个方向累积。
但假设过程均值真的向上移动了一点。
例如每次平均只高 0.3σ。
单独看 0.3σ 根本不算什么。
但是:
第一次 +0.3
第二次 +0.3
第三次 +0.3
第四次又 +0.3……
CUSUM 就会越来越大。
所以它对持续的小幅均值偏移非常敏感。

这里采用常见的表格式 CUSUM,也就是同时计算:
C+:向上的累积偏差
和
C-:向下的累积偏差
先设定两个参数:
k = 0.5
h = 4
其中 k 是参考值,h 是决策区间参数。
如果过程标准差为 σ,那么:
K = kσ
决策限为:
H = hσ
假设数据在 B 列,目标均值为 μ。
先计算每个点相对于目标值的偏差:
Ci = Xi-μ
Excel:
=B2-$L$1
然后计算向上的累积:
C+i = MAX(0,Ci-K+C+i-1)
Excel:
=MAX(0,C3-$L$4+D2)
向下累积:
C-i = MIN(0,Ci+K+C-i-1)
Excel:
=MIN(0,C3+$L$4+E2)
这里有一个设计很巧妙的地方。
C+ 不允许低于 0。
如果向上的趋势消失了,它会回到 0,重新开始累计。
C- 则相反,不允许高于 0。
所以:
C+ 专门盯着过程往上偏。
C- 专门盯着过程往下偏。
最后设置:
UCL = hσ
LCL = -hσ
只要 C+ 超过 UCL,或者 C- 低于 LCL,就产生信号。

如果每次不是测量一个,而是抽取一个子组,比如每组 5 个数据,道理和刚才的 EWMA 一样。
先计算:
Xbar
然后:
Ci = Xbar-μ
接下来再计算 C+ 和 C-。
这里同样有一个非常重要的地方:
如果我们通过组内数据计算出来的是过程的合并标准差 σ,那么 CUSUM 监控 Xbar 时应该使用:
σXbar = σ / √n
而不是直接拿单个观测值的 σ 去计算 K 和 H。
所以子组 CUSUM 的:
K = k × σXbar
H = h × σXbar
这一点和子组 EWMA 的逻辑其实完全一样。
只要记住一句话:
你控制图上画的统计量是谁,控制限使用的标准误就应该对应谁。
画单值,用单值的 σ。
画 Xbar,就要考虑 √n。
讲到这里,很多人自然会问:
既然两个都是发现小偏移,那到底应该用谁?
其实没必要非得分个高下。
它们解决的是非常相近的问题,只是处理历史信息的方法不同。
EWMA 是:
给过去的数据逐渐降低权重。
CUSUM 是:
把持续同方向的偏差累积起来。
从图形上看,EWMA 更像我们熟悉的传统控制图。
一条统计量曲线,在上下控制限之间运行。
所以实际现场使用时,EWMA 往往比较直观。
CUSUM 则更像是在看:
过程到底欠了多少“偏差账”。
一次小偏差没关系。
连续很多次朝同一个方向偏,这笔账就越积越多,最后触发报警。
因此 CUSUM 对持续的小均值变化非常敏感。
当然不是。
这可能反而是使用时间加权控制图时最应该注意的问题。
EWMA 和 CUSUM 并不是为了淘汰传统控制图。
如果过程突然出现一个非常大的异常点,传统 Shewhart 控制图本身就非常有效,而且图形简单、原因容易解释。
EWMA、CUSUM 真正擅长的是另一类问题:
幅度不大,但是持续存在的过程变化。
所以更准确的理解应该是:
Shewhart 控制图擅长发现较大的突然变化;
EWMA、CUSUM擅长发现较小但持续的变化。
它们是互补关系。
实际工作当然没必要每天手工拉公式。
成熟的 SPC 软件点几下就能生成 EWMA 和 CUSUM,比如斌果SPC。
但如果真的想理解这两张控制图,我还是很建议自己用 Excel 做一次。
因为做完以后,很多以前背下来的东西会突然变得很清楚:
为什么 EWMA 要有 λ?
为什么 λ 越小曲线越平滑?
为什么 EWMA 前几个点的控制限不是平行的?
CUSUM 为什么要分 C+ 和 C-?
k 到底在公式里干了什么?
为什么子组数据算出来的 Sigma 明明没错,控制限却还是和 Minitab 对不上?
尤其最后这个问题。
单个观测值的过程标准差,和子组均值的标准误,不是一回事。
σXbar = σ/√n
一个很简单的公式。
但如果没有真正自己算过一次,很容易在软件给出结果以后直接接受,而没有意识到软件背后到底做了什么。
这也是我一直觉得学习 SPC 很重要的一点:
不要只会看控制图。
最好知道这张图是怎么算出来的。
当你能用一个普通 Excel,把 EWMA 和 CUSUM 从原始数据一步一步算出来,而且结果能够和专业统计软件对应上时,这两种控制图基本上也就真正理解了。
下一次再看到一串“看起来都没超限,但总感觉过程正在慢慢变化”的数据,你大概就知道该用什么工具了。
大异常,普通控制图往往看得很清楚。
真正难发现的,反而是那些每次只偏一点点,却一直在偏的过程。
而这,恰恰是 EWMA 和 CUSUM 存在的意义。
本文基于我们用excel实现的这两个控制图(和minitab一模一样)通过AI编写。
本页面文章与公众号同步。
微信扫码关注