「别人都说 ARIMA 更高级,我是不是该换?」
几乎每个刚做完指数平滑的团队都会问我这句话。我的回答通常是反问:你知道它们各自在「自动化」什么吗?
-
ARIMA 自动化的是「把曲线变平稳 + 定阶」;
-
Prophet 自动化的是「拆积木 + 节假日」。
两者都不是魔法,也都不吃外部变量。搞清楚这点,选型就不靠信仰了。
ARIMA 第一步:差分,把「在第几层」变成「每步迈几级」
非平稳序列(均值随时间漂移)没法直接建模。解法是差分------不看水平,看相邻两期的变化量:
dt=yt−yt−1
手算两个例子,感受「几阶才够」:
-
y = 100, 104, 109, 113, 118, 122 → 一阶差分 d = 4, 5, 4, 5, 4。平稳了(均值约 4.4、无明显漂移),d = 1。
-
y = 100, 102, 108, 118, 132 → d = 2, 6, 10, 14(还在漂)→ 二阶 d2 = 4, 4, 4。平稳了,d = 2。
第二个例子是「加速度恒定」的序列:一阶差分消掉水平但消不掉加速度,必须再差一次。实务中日销很少需要 d=2------若需要,先怀疑是否有未建模的结构突变或促销脉冲。
平稳性的廉价体检 :把序列对半切,比较两段的均值与标准差。示例:前半年均值 500、sd 30;后半年均值 620、sd 32 → 均值漂移 24%,非平稳。差分后:前段均值 2.0、后段 2.1 → 漂移 5%,可接受。比看 ADF 检验的 p 值直观得多(p 值该看,但先看这个)。
平稳之后:AR 与 MA 各吃什么
- AR(p) :用过去 p 期的(差分后)值------「最近几步迈多大,下一步差不多」;
- MA(q) :用过去 q 期的预测误差------「上次低估了,这次补一点」。
dt=c+i=1∑pϕidt−i+j=1∑qθjet−j+et
注意这里的 MA 是误差的移动平均,跟第 4 篇「销量的移动平均基线」不是一回事,别混。
AR(1) 手算一步 :设 d_t = 0.6·d_{t−1} + e_t,差分序列 4, 5, 4, 5, 4。下一期差分预测 = 0.6 × 4 = 2.4 ;还原到水平:ŷ = 122 + 2.4 = 124.4。整个 ARIMA 预测就是「差分空间里递推 + 累加还原」两步。
ACF/PACF 读图规则(定阶的传统方法):
| 形态 | ACF | PACF | 提示 |
|---|---|---|---|
| AR(p) | 拖尾(缓慢衰减) | p 阶后截尾 | 用 p 个滞后值 |
| MA(q) | q 阶后截尾 | 拖尾 | 用 q 个滞后误差 |
| 都不截尾 | 拖尾 | 拖尾 | 考虑 ARMA 或换方法 |
实务更省事:在小网格里搜 (p,d,q),取 AIC 最小------自动化工具的本质就是这个。带季节的版本 SARIMA 加一组 (P,D,Q,m),能力与第 7 篇 HW 大致对等,选谁往往取决于团队习惯而非精度。
Prophet:把拆积木做成工程
Prophet 的思路和第 2 篇经典分解一脉相承,只是做成了可加的工程化模型:
y(t)=g(t)+s(t)+h(t)+εt
g 是趋势(分段线性、自动找拐点),s 是周期(傅里叶级数拟合年/周),h 是节假日(一张表驱动的脉冲),ε 是残差。

各成分量级:
| 成分 | 均值 | 标准差 | 极差 |
|---|---|---|---|
| 趋势 g(t) | 377.90 | 50.87 | 181.80 |
| 年周期 s(t) | −0.39 | 39.02 | 109.99 |
| 周周期 | 13.03 | 15.38 | 43.00 |
| 节假日 h(t) | 6.50 | 28.33 | 130.00 |
| 残差 ε | −0.08 | 13.37 | 70.61 |
四块积木解释了 93.24% 的方差。注意节假日项极差 130------它是可加的独立一块,这正是 Prophet 真正的价值:运营可以直接说「把 618 那天的节假日项调高 20%」,不需要懂模型内部。业务能动手改的模型,才活得久。
手算可加性:若模型给某天 g=380、s=+40、weekly=+33、h=0 → 预测 453;运营把 h 改为 +130 → 预测 583。改一个数、影响可预期,这就是可干预性的含义。
选型决策树:五步走完不纠结
- 有价格/促销/流量等外部变量吗?→ 有:回归或机器学习(第 8、11 篇),别用 ARIMA/Prophet。
- 需要批量服务几千 SKU 吗?→ 是:全局机器学习(第 11 篇)。
- 单序列、强季节、无外部变量?→ HW/ETS 自动搜索。
- 单序列、无明显季节、想自动定阶?→ ARIMA。
- 需要节假日表、业务要可干预?→ Prophet。
一盆冷水:复杂模型经常赢不了简单模型
这是这个领域最反直觉、也最重要的事实:在 M3/M4 公开竞赛里,简单方法(尤其带季节的指数平滑)经常击败复杂模型。 包括神经网络、包括ensemble。
原因不神秘:零售序列的信噪比低、结构会漂移、样本(周期数)少;复杂模型的自由度在这种数据上更容易拟合噪声。复杂模型的真正价值在两点:吃外部变量 (第 8、9 篇)和批量规模化 + 分位数输出(第 11、12 篇)。单序列精度上,别指望奇迹。
所以我的建议永远是:先让 Seasonal Naive 和 HW 跑起来拿到地板,再决定要不要为「吃外部变量」付出复杂度的成本。
读者问答
Q1:ARIMA 能给区间吗? 能,基于残差正态假设的解析区间。但和 HW 的 √h 区间一样,它假设误差结构稳定;实务中我更信滚动回测的经验分位数区间(第 12 篇)。
Q2:Prophet 的拐点(changepoint)会自动乱加吗? 会,尤其数据噪声大时。对策:限制拐点数量与位置先验(如只允许在已知业务事件附近),或干脆用线性趋势 + 节假日表------多数零售场景够用。
Q3:SARIMA 和 HW 到底选谁? 误差常常在 1% 以内。选 HW 的理由:状态可解释、在线更新、实现简单、易做分位数扩展;选 SARIMA 的理由:团队熟悉、诊断工具成熟。选维护成本低的,别选论文里好看的。
实操清单
- 上 ARIMA 前先做分段均值/方差体检,确认差分阶数 d。
- 定阶用网格 + AIC,别肉眼读 ACF/PACF 定终身;读图只用于 sanity check。
- Prophet 的节假日表与促销日历共用一张表(第 9 篇),避免两套口径。
- 任何「换更高级模型」的提案,先回答:它能吃哪些 HW 吃不到的变量?吃不到就别换。
- 回测里永远保留 Seasonal Naive 与 HW 作为对照行。
带走三句话:差分把「在第几层」变成「每步迈几级」,d 阶数靠分段均值体检 + 差分验证;Prophet = 趋势+周期+节假日的可加模型,强在可干预;M3/M4 的冷水:简单方法经常赢,复杂模型的价值在外部变量与规模化。
下一篇:SKU 从 10 个变成 10 万个,「一个序列一个模型」立刻崩盘。解法是把时间序列塞进表格------附 20 列宽表 schema 和泄漏审计步骤。