在之前的章节中,我们学习了运用过往值的自回归 (AR) 模型和使用过往误差的移动平均 (MA) 模型。我们还了解到 ARMA 模型如何结合这两种思路。然而,AR、MA 和 ARMA 模型的一个重要假设是,基础的时间序列数据必须是平稳的。其统计特征,如均值和方差,不应随时间变化。当我们遇到实际数据时会怎样?这些数据经常显示出趋势或其他形式的非平稳性。将 ARMA 模型直接应用于这类数据会导致不可靠的结果。这就是 ARIMA 中“I”的作用所在。ARIMA 代表差分整合自回归移动平均。“整合”部分解决了非平稳性问题。回顾第2章“时间序列分解与平稳性”,差分是一种常用方法,用于将非平稳序列转换为平稳序列。我们通过计算连续观测值之间的差值来实现这一点。有时,如果第一次差分未能得到平稳序列,我们可能需要多次应用差分。“整合”一词表明建模过程包含了这个差分步骤。它指的是一个思路,即原始非平稳序列可以被认为是差分的逆过程,本质上是平稳差分序列的求和或(在离散意义上的)积分。ARIMA 模型的特点是三个参数:$(p, d, q)$。p (AR 阶数): 模型中包含的滞后观测值数量。这与 AR 和 ARMA 模型中的 p 相同,但它是根据差分后的序列确定的。d (差分次数): 原始观测值进行差分以达到平稳性的次数。如果原始序列已经平稳,则 $d=0$。q (MA 阶数): 移动平均窗口的大小,表示预测方程中滞后预测误差的数量。这与 MA 和 ARMA 模型中的 q 相同,应用于差分后的序列。因此,ARIMA(p, d, q) 模型实际上是将 ARMA(p, q) 模型应用于时间序列在经过 d 次差分之后。digraph ARIMA_Concept { rankdir=TB; node [shape=box, style=filled, color="#ced4da", fillcolor="#e9ecef", fontname="sans-serif", fontsize=10]; edge [color="#495057", fontname="sans-serif", fontsize=9]; RawData [label="原始非平稳\n时间序列 Y(t)", fillcolor="#ffc9c9"]; Differencing [label="应用差分\n(d 次)", shape=ellipse, fillcolor="#bac8ff"]; StationaryData [label="平稳差分后\n时间序列 Y'(t)", fillcolor="#b2f2bb"]; ARMAModel [label="确定 ARMA(p, q)\n结构", shape=ellipse, fillcolor="#a5d8ff"]; ARIMA [label="ARIMA(p, d, q) 模型", fillcolor="#ffe066", shape=cds]; RawData -> Differencing [label=" 确定达到平稳性所需 'd' 值 "]; Differencing -> StationaryData [label=" 转换数据 "]; StationaryData -> ARMAModel [label=" 分析 Y'(t) 的 ACF/PACF\n以确定 'p', 'q' "]; {RawData, ARMAModel} -> ARIMA [label=" 组合模型设定 ", style=dashed]; }流程图说明了差分 (d) 如何使数据平稳,从而可以确定 ARMA(p, q) 结构,最终将 ARIMA(p, d, q) 模型应用于原始数据。如果时间序列已经平稳,我们设置 $d=0$,ARIMA(p, 0, q) 模型将直接简化为 ARMA(p, q) 模型。ARIMA 的优点在于它能够处理更广泛的时间序列,特别是那些经过一次或多次差分后变得平稳的序列。在使用像 Python 中的 statsmodels 这样的库时,您通常指定 $(p, d, q)$ 阶数并提供原始的非平稳时间序列。库会在模型拟合过程中在内部处理差分。通常不需要在将数据传递给 ARIMA 函数之前手动进行差分,尽管理解差分步骤 (d) 对于选择正确的模型阶数很重要。在接下来的章节中,我们将讨论选择 $p$、$d$ 和 $q$ 适当值的策略,如何使用 Python 拟合模型,以及如何评估其性能。