本节摘要:ARIMA 与 EWMA 是"用历史预测现在、以残差判异常"思路的两大代表。本节讲透 ARIMA 的 (p,d,q) 三参数含义、ADF 平稳性检验、ACF/PACF 定阶流程、残差阈值设定方法,以及 EWMA 的平滑系数 α 权衡与检测流程,最后给出两者的选型对比与应用注意事项。核心思想:能预测"该有的值",就能比较"实际值"——残差是异常的信号。
阅读完本节,你应当能够:
某港口调度系统监控每日集装箱吞吐量。吞吐量有长期上涨趋势(港口在扩建),又有明显的月度波动(船期淡旺季)。某天下午,调度员发现吞吐量比预期低了 8%——这到底是不是异常?
用固定阈值判断,答案是没有答案:因为"预期"本身在变——三个月前 8 万箱是高位,现在 8 万箱可能是异常低点。真正该问的问题是:"以这个序列自己的历史规律来看,今天应该值多少?" 如果实际值显著低于"应该值",那就是异常。
这就是"预测-残差"思路的全部逻辑:先用模型把序列的规律学出来,预测"应该值",再拿实际值与预测值做差,残差超阈值即异常。 相比阈值和 SPC,这套思路的飞跃在于——它认识到了时间结构本身(趋势、季节、自相关)是"正常"的一部分,异常是"违背这种结构"的部分。
ARIMA 与 EWMA 是这个思路的两个代表。ARIMA 野心更大,把自相关结构、趋势、残差全建模;EWMA 更朴素,只用一个平滑系数跟踪"当前水平"。对带趋势季节的数据,ARIMA 是主力;对短期波动为主、要求快的数据,EWMA 更划算。
ARIMA(Autoregressive Integrated Moving Average)由三部分组成:
X(t) = c + φ1·X(t-1) + ... + φp·X(t-p) + ε(t)。它建模"值对值的记忆"。X(t) = μ + θ1·ε(t-1) + ... + θq·ε(t-q) + ε(t)。它建模"冲击的余波"。一句话记忆:p 是"看自己多少步以前",d 是"差几次才平稳",q 是"吸收多少步以前的意外冲击"。
第一步:平稳性检验(ADF 检验)。 Augmented Dickey-Fuller 检验判断序列是否平稳。p 值 < 0.05 认为平稳;不平稳就差分(d+1),再检验,直到平稳。这一步决定了"能不能用 ARIMA"——不平稳的序列直接建模,模型就是空中楼阁。
第二步:定阶(ACF/PACF 图)。 差分后的平稳序列画 ACF 和 PACF:PACF 在 p 阶后截断(掉进置信带)→ AR 阶数 p;ACF 在 q 阶后截断 → MA 阶数 q。没有明显截断就用 AIC/BIC 信息准则网格搜索定阶,这是更省事的实践做法。
第三步:拟合与检验。 用历史数据拟合模型参数,检查残差是否为白噪声(Ljung-Box 检验)。残差非白噪声说明模型没学干净,要回到第二步重新定阶。
第四步:预测与残差检测。
第五步:阈值设定。 三种方式:固定阈值(经验值);统计阈值(残差均值 ± k×残差标准差,k 取 2–3);动态阈值(随波动性变化)。推荐统计阈值——它随模型和数据自动标定,可解释性也够。
EWMA 是极简的预测器:S(t) = α·X(t) + (1-α)·S(t-1),S(t) 是当前平滑值(即"预期水平")。α 越大越相信新数据,越小越相信历史。
用 EWMA 检测异常四步:训练确定 α → 逐点计算平滑值 → 实际值减平滑值得残差 → 残差超阈值判异常。
α 的权衡是 EWMA 的全部艺术:α 大 → 响应快、抓突变强,但易被噪声骗出虚警;α 小 → 平滑稳、抗噪好,但反应慢,会漏掉急变。选 α 没有公式,交叉验证最靠谱。EWMA 特别适合在线流式场景——它只依赖上一个平滑值,是天然的增量算法,内存占用恒定。
| 维度 | ARIMA | EWMA |
|---|---|---|
| 建模能力 | 自相关+趋势+季节(SARIMA) | 只跟踪水平 |
| 计算成本 | 定阶+拟合,较重 | 极轻,O(1) 增量 |
| 在线流式 | 需滚动重估 | 天然在线 |
| 长期趋势/季节 | 擅长(配合差分与季节项) | 不擅长 |
| 短期波动 | 可处理 | 擅长 |
| 可解释性 | 参数多、解释较难 | 一个 α,极易解释 |
选型一句话:数据有明确趋势季节、要精度 → ARIMA;数据短期波动为主、要快要简单、在线流式 → EWMA。
用 ARIMA/EWMA 做检测,一定要分清主次:模型是手段,残差是对象。 别把精力全花在"让预测更准"上——检测关心的是"残差里有没有不该出现的偏离",而不是"预测误差多小"。一个预测误差大但稳定的模型,配上一个贴合残差分布的阈值,检测效果可能比"预测很准但阈值乱定"的模型好得多。
数据预处理:建模前处理缺失值、去除明显异常点——否则它们会污染模型参数,让"正常"学歪。
参数调优:ARIMA 的 (p,d,q) 和 EWMA 的 α 都影响检测灵敏度,用滚动验证而不是一次性切分来评估。
模型评估:别只看预测误差,要看检测效果——用第 7 章的召回/精确/F1 来评估"异常是否被正确检出"。
⚠️ 常见坑:ARIMA 对非线性序列强行建模。 ARIMA 本质是线性模型,对突变、间歇性脉冲、长尾这类非线性模式,残差永远"不正常",阈值形同虚设。数据里强非线性成分多,就该考虑第 5、6 章的树模型或深度模型。
💡 关键直觉:预测-残差法的思想远比 ARIMA 这个具体模型长寿。 第 5 章的机器学习、第 6 章的 LSTM/Transformer,本质都在做同一件事——预测"应该值",比残差。掌握"以残差为检测对象"的思路,你就掌握了这套方法家族的共同骨架。
ARIMA 在生产里常遇到两个升级需求:一是滚动重估(序列漂移后模型失效),二是带上季节项(SARIMA)。EWMA 则常被升级为"EWMA + 残差控制图"(把 SPC 的控制限思想用在 EWMA 残差上)。这些升级都是同一套骨架上的加料,先跑通基础版再逐步加。
假设要检测某物流仓库的每日出库量异常。过去 180 天数据有明显周内节奏(工作日高、周末低)和缓慢上升趋势。流程如下:
这个过程的价值在于"可重复、可解释"——每一步都有统计依据(ADF 的 p 值、PACF 的截断、Ljung-Box 的检验),出问题时能回溯是哪一步出了问题。这是 ARIMA 类方法在工业界长盛不衰的重要原因:它不只是给结果,还给了一整套可审计的推理链条。
EWMA 最迷人的地方是它的递推性质:算下一时刻的平滑值,只需要当前值和上一个平滑值,不需要保存整段历史。这让它成为高吞吐在线监控的天然选择——内存占用恒定、每点计算 O(1)、天然流式。
落地时三个要点:α 的选择(从 0.2–0.3 起步,看残差是否在可接受范围);残差阈值的滚动标定(用滑动窗口的残差分布更新阈值,别用固定阈值);与 SPC 控制限结合(把 EWMA 平滑值当作控制图的中心线估计,残差画到控制图上,同时吃"越界判据"和"趋势判据")。EWMA + 残差控制图,是"在线 + 渐变敏感 + 可解释"三项兼得的高性价比组合,值得作为监控系统的标准件使用。
有。用自动定阶工具(如 pmdarima 的 auto_arima)做网格搜索,按 AIC/BIC 自动选最优 (p,d,q)。但自动化不等于免检——模型出来后仍要做残差白噪声检验和验证集评估,防止自动定阶选到过拟合的阶数。
勉强能,但可信度低——ARIMA 要估计的参数不少,样本太少估计不稳。几十个点建议先 EWMA 或差分+简单统计,攒到几百个点再上 ARIMA。
两个抓手:一是交叉验证(用历史数据滚动验证不同 α 的预测误差,选最小的);二是业务节奏(想要反应快就大 α,想要稳就小 α)。经验上 0.1–0.4 是常见区间,从 0.2 起步。 注意 α 太大(>0.5)时 EWMA 几乎等于"跟着单点走",平滑意义就没了。
能。检测关心的是"残差里有没有异常偏离",不是"预测误差多小"。 一个预测误差偏大但稳定的模型,配上一个贴合残差分布的阈值,检测效果可能比"预测准但阈值乱定"的模型好得多。把关注点从"预测准"挪到"残差稳",是 ARIMA 检测的正确心态。
基础 ARIMA 不行,但**季节性 ARIMA(SARIMA)**可以——它在 (p,d,q) 之外再加季节参数 (P,D,Q,m)。不想自己配季节参数,也可以先做 STL 分解(第 2.3 节)剥离季节,再对残差用普通 ARIMA。两条路都行,前者一次建模、后者分步更直观。 实际操作里,"STL + 普通 ARIMA"往往是更省心的选择,因为分解步骤本身已经帮你把周期结构看清了,残差也更干净,检测的可解释性更强。如果季节强度不高(周期波动占比小),也可直接上带少量滞后特征的回归,没必要非 ARIMA 不可。
下一节彻底放下"分布假设"——LOF 与 DBSCAN 用密度和距离说话,能抓任意形状的异常。参数敏感是它们最大的脾气,也是最值得琢磨的地方。