如果说 Prophet 是"把业务直觉装进模型"的工程派代表,ARIMA 就是统计派的百年经典。它不依赖节假日表,也不需要分析师录入先验,只相信一件事:数据自己会说话——当前的值,可以被过去的值和过去的误差解释。这条朴素的假设撑起了半个多世纪的时间序列预测。
一、ARIMA 的前世今生:一个模型家族的进化史
ARIMA 不是一步到位的发明,而是逐级演进的结果——每一次升级都在解决前一模型的局限:

| 模型 | 全称 | 核心思想 |
|---|---|---|
| AR(p) | 自回归模型 | 前期观测数据本身影响当前数据 |
| MA(q) | 移动平均模型 | 前期观测数据的扰动影响当前数据 |
| ARMA(p,q) | 自回归移动平均模型 | 前期观测数据 + 系统扰动共同影响当前数据 |
| ARIMA(p,d,q) | 自回归差分移动平均模型 | 通过差分将有趋势的数据处理成适用于 ARMA 的平稳数据 |
| SARIMA | 季节性 ARIMA | 引入周期性的季节因素 |
| ARIMAX | 带外生变量的 ARIMA | 引入与预测对象相关程度较高的回归项 |
演进脉络可以概括为三步:AR 和 MA 分别刻画两种"记忆";ARMA 把两者组合;ARIMA 再加上差分,把"有趋势的现实数据"变成"ARMA 能吃的平稳数据"。这套体系源自统计学家 Box 和 Jenkins 在 1970 年出版的《Time Series Analysis: Forecasting and Control》,因此也常被称为 Box-Jenkins 方法。
二、AR 与 MA:时间序列的两种记忆
2.1 AR(p):值有惯性
自回归模型认为,当前值与前 p 个历史值存在线性关系:
直觉很好理解:今天的 DAU 有相当部分来自昨天的惯性——用户的使用习惯会延续,昨天活跃的用户今天大概率还活跃。阶数 p 就是"记多久",AR(1) 只看昨天,AR(7) 则把一周前的水平也纳入参考。
2.2 MA(q):事件有余波
移动平均模型认为,当前值与前 q 期预测误差(扰动项)存在线性关系:
扰动项 \varepsilon_t 代表当期无法预测的突发影响:一次 push 推送、一条热搜、一场渠道投放。MA(q) 刻画的是事件的余波——昨天一场活动带来的超额活跃,会在接下来几天逐渐消退。
2.3 两者的区别与联系
一个常用的直觉区分:AR 记得"值",MA 记得"事"。ARMA(p,q) 则把两种记忆放进同一个模型:
从理论上讲(Wold 表示定理),任何平稳序列都可以用无限阶 MA 表示,而有限阶 AR 也可以逼近它——所以 AR 和 MA 并非对立,而是同一现象的两种参数化方式,实践中靠定阶准则取舍。

三、平稳性:ARMA 成立的前提
ARMA 适用于平稳时间序列——数值围绕均值波动,均值和方差不随时间变化。而现实中的业务数据几乎都是非平稳的:增长趋势让均值持续上移(DAU 长期爬坡),业务变化让方差随之放大。

把非平稳变成平稳的标准操作是差分:
- 一阶差分:相邻两项之差,\Delta y_t = y_t - y_{t-1}。有线性趋势的序列,差分一次后趋势消失;
- 二阶差分:相邻两项一阶差分之差,处理曲线趋势(增长率还在变化的序列)。
实操中通常用 ADF 检验(单位根检验)判断序列是否平稳,不平稳则差分后重检。差分次数 d 一般不超过 2——差分过多会过度削弱信号,让模型只剩噪声。
四、ARIMA = AR + I + MA
理解了三个部件,ARIMA 就只是一个组装品:

主要思想:利用差分操作将非平稳时间序列转换成平稳时间序列,再利用历史值和历史值的预测误差对当前值进行预估。三个参数各管一件事:
- p(自回归阶数):看几个历史值;
- d(差分次数):做几次差分;
- q(移动平均阶数):记几期扰动。
建模流程(Box-Jenkins 流程的工程化版本):
- 预处理:通过差分转换成平稳时间序列(确定 d);
- 定阶:通过 ACF/PACF 寻找 p 和 q;
- 训练模型:通过历史数据训练模型;
- 输出结果:预测 + 置信区间。
定阶的经典经验法则:
| 图形特征 | 结论 |
|---|---|
| PACF 截尾、ACF 拖尾 | AR(p) |
| ACF 截尾、PACF 拖尾 | MA(q) |
| 两者都拖尾 | ARMA(p,q) |
现代实践中更常用 AIC/BIC 信息准则遍历候选参数组合自动选阶,pmdarima 库的 auto_arima 把这一步完全自动化了。
五、SARIMA 与 ARIMAX:两把外挂
SARIMA(季节性 ARIMA)引入周期性的季节因素:对周周期为 7 的数据,用间隔 7 期的差分消除季节性不平稳,再对季节项单独做 ARMA。确定周期 m 后,模型变成 SARIMA(p,d,q)(P,D,Q)m;可以说 ARIMA 就是 SARIMA 在 m=1 时的特殊情况。业务指标大多带明显周期(周/年),这也是实战中 SARIMA 比 ARIMA 更常用的原因。
ARIMAX 则引入与预测对象相关程度较高的外生回归项(exogenous variables):预测 DAU 时把当日投放预算、大促标记作为 X 项喂进模型,让"事件"不再只能靠扰动项兜底。可以理解为统计派版本的"节假日表"。
六、Prophet 还是 ARIMA:怎么选
| 维度 | Prophet | ARIMA 系 |
|---|---|---|
| 擅长场景 | 强周期、多季节性、节假日效应明显 | 短期自相关强、数据量小、结构简单 |
| 趋势突变 | 突变点机制自动适应 | 差分后趋势被"抹平",突变期容易失效 |
| 节假日 | 建模内置,录入即生效 | 原生不支持,需 ARIMAX 外挂 |
| 数据要求 | 缺失值、异常值鲁棒 | 对异常值敏感,需清洗 |
| 门槛 | 几行代码可用 | 需要平稳性检验与定阶 |
经验法则一句话:Prophet 在周期性数据上表现更好,ARIMA 在短窗口、强惯性的序列上更稳。指标监控场景下两者并不互斥——常见做法是双模型并行,预测区间取并集报警,再根据各自的误报率动态降权。
参考资料
- Box G E P, Jenkins G M. Time Series Analysis: Forecasting and Control. 1970(Box-Jenkins 方法原始出处)
- Hyndman R J, Athanasopoulos G. Forecasting: Principles and Practice(时间序列预测开源教材)
- Python 实现:statsmodels 的 SARIMAX 接口、pmdarima 的 auto_arima 自动定阶