ARIMA 模型
关于如何使用带有 Statsforecast
的 ARIMA Model
的逐步指南。
目录
- 引言
- ARIMA 模型
- ARIMA 模型中 p, d 和 q 的含义
- AR 和 MA 模型
- ARIMA 模型
- 如何找到 ARIMA 模型中的差分阶数 (d)
- 加载库和数据
- 使用 plot 方法探索数据
- 如何找到 AR 项的阶数 (p)
- 如何找到 MA 项的阶数 (q)
- 如何处理时间序列略微欠差分或过度差分的情况
- StatsForecast 中 ARIMA 的实现
- 交叉验证
- 模型评估
- 参考文献
引言
-
时间序列 被定义为在不同时间间隔记录的一系列数据点。时间顺序可以是每日、每月,甚至是每年。
-
时间序列预测是使用统计模型基于过去结果预测时间序列未来值的过程。
-
我们在之前的笔记本中讨论了时间序列预测的各个方面。
-
预测是我们希望预测序列未来值的部分。预测时间序列通常具有巨大的商业价值。
时间序列预测大致可分为两种类型。
-
如果仅使用时间序列的先前值来预测其未来值,则称为单变量时间序列预测。
-
如果使用除序列本身以外的预测变量(例如外生变量)进行预测,则称为多变量时间序列预测。
-
本笔记本重点介绍一种特定的预测方法,称为 ARIMA 建模。
ARIMA 模型简介
-
ARIMA 代表 自回归积分滑动平均模型 (Autoregressive Integrated Moving Average Model)。它属于一类基于自身过去值(即自身滞后值)和滞后预测误差解释给定时间序列的模型。该方程可用于预测未来值。任何显示模式且非随机白噪声的“非季节性”时间序列都可以使用 ARIMA 模型建模。
-
因此,ARIMA,全称 自回归积分滑动平均 (AutoRegressive Integrated Moving Average),是一种基于时间序列过去值中的信息本身可用于预测未来值的思想的预测算法。
-
ARIMA 模型由三个阶数参数指定:(p, d, q)
其中,
-
p 是 AR 项的阶数
-
q 是 MA 项的阶数
-
d 是使时间序列平稳所需的差分次数
-
-
AR(p) 自回归 - 一种回归模型,利用当前观测值与先前时期观测值之间的依赖关系。自回归 (AR(p)) 分量指的是在时间序列的回归方程中使用过去值。
-
I(d) 积分 - 使用观测值的差分(从当前时间步的观测值减去先前时间步的观测值)以使时间序列平稳。差分涉及将序列的当前值与其先前值相减 d 次。
-
MA(q) 滑动平均 - 一种模型,使用观测值与应用于滞后观测值的滑动平均模型的残差误差之间的依赖关系。滑动平均分量将模型的误差描绘为先前误差项的组合。阶数 q 表示要包含在模型中的项数。
ARIMA 模型类型
- ARIMA : 非季节性自回归积分滑动平均
- SARIMA : 季节性 ARIMA
- SARIMAX : 带有外生变量的季节性 ARIMA
如果时间序列具有季节性模式,则需要添加季节性项,它就变成了 SARIMA,全称季节性 ARIMA。
ARIMA 模型中 p, d 和 q 的含义
p 的含义
p
是自回归 (AR) 项的阶数。它指代用于预测的 Y 的滞后数。
d 的含义
-
ARIMA 中的“自回归”项意味着它是一个线性回归模型,使用其自身的滞后作为预测变量。众所周知,线性回归模型在预测变量不相关且相互独立时表现最佳。因此我们需要使时间序列平稳。
-
使序列平稳最常见的方法是进行差分。也就是说,从当前值中减去先前值。有时,根据序列的复杂性,可能需要多次差分。
-
因此,d 的值是使序列平稳所需的最小差分次数。如果时间序列已经平稳,则 d = 0。
q 的含义
- q 是滑动平均 (MA) 项的阶数。它指代应包含在 ARIMA 模型中的滞后预测误差数。
AR 和 MA 模型
AR 模型
在自回归模型中,我们使用变量过去值的线性组合来预测感兴趣的变量。自回归这个术语表明它是变量对自身的回归。
因此,p 阶自回归模型可以写成
其中 是白噪声。这就像一个多元回归模型,但使用 的滞后值作为预测变量。我们将这称为 AR( p) 模型,一个 p 阶自回归模型。
MA 模型
滑动平均模型不是在回归中使用预测变量的过去值,而是在类似回归的模型中使用过去的预测误差:
其中 是白噪声。我们将这称为 MA(q) 模型,一个 q 阶滑动平均模型。当然,我们不会观测到
的值,因此它并非通常意义上的回归模型。
注意,可以将每个 值视为过去几个预测误差的加权滑动平均(尽管系数通常不总和为一)。然而,滑动平均模型不应与滑动平均平滑混淆。滑动平均模型用于预测未来值,而滑动平均平滑用于估计过去值的趋势周期。
至此,我们分别讨论了 AR 和 MA 模型。
ARIMA 模型
如果我们将差分与自回归和滑动平均模型结合起来,就得到了一个非季节性 ARIMA 模型。ARIMA 是自回归积分滑动平均 (AutoRegressive Integrated Moving Average) 的缩写(在此上下文中,“积分”是差分的逆运算)。完整的模型可以写成
其中 是差分后的序列(可能差分过不止一次)。等号右边的“预测变量”包括 的滞后值和滞后误差。我们将这称为 ARIMA(p,d,q) 模型,其中
p | 自回归部分的阶数 |
d | 一阶差分的程度 |
q | 滑动平均部分的阶数 |
适用于自回归和滑动平均模型的平稳性和可逆性条件也适用于 ARIMA 模型。
我们已经讨论过的许多模型都是 ARIMA 模型的特殊情况,如表所示
模型 | p d q | 差分 | 方法 |
---|---|---|---|
Arima(0,0,0) | 0 0 0 | 白噪声 | |
ARIMA (0,1,0) | 0 1 0 | 随机游走 | |
ARIMA (0,2,0) | 0 2 0 | 常数 | |
ARIMA (1,0,0) | 1 0 0 | AR(1):一阶回归模型 | |
ARIMA (2, 0, 0) | 2 0 0 | AR(2):二阶回归模型 | |
ARIMA (1, 1, 0) | 1 1 0 | 一阶差分自回归模型 | |
自回归模型 | |||
ARIMA (0, 1, 1) | 0 1 1 | 简单指数 | |
平滑 | |||
ARIMA (0, 0, 1) | 0 0 1 | MA(1):一阶 | |
回归模型 | |||
ARIMA (0, 0, 2) | 0 0 2 | MA(2):二阶 | |
回归模型 | |||
ARIMA (1, 0, 1) | 1 0 1 | ARMA 模型 | |
ARIMA (1, 1, 1) | 1 1 1 | ARIMA 模型 | |
ARIMA (1, 1, 2) | 1 1 2 | 阻尼趋势线性指数平滑 | |
ARIMA (0, 2, 1) 或 (0,2,2) | 0 2 1 | 线性指数平滑 |
一旦我们开始以这种方式组合组件来形成更复杂的模型,使用后移算子记法就会容易得多。例如,上述方程可以用后移算子记法写成
文字描述的ARIMA模型
预测值 Yt = 常数 + Y 的滞后项线性组合 (最多 p 个滞后) + 滞后预测误差的线性组合 (最多 q 个滞后)
如何在ARIMA模型中找到差分阶数 (d)
-
如前所述,差分的目的是使时间序列平稳。但我们要注意不要过度差分。过度差分的序列可能仍然是平稳的,但这会影响模型参数。
-
所以我们应该确定正确的差分阶数。正确的差分阶数是使序列达到接近平稳所需的最小差分次数,该序列围绕一个确定的均值波动,并且ACF图能相当快地衰减到零。
-
如果许多滞后项的自相关系数为正(10个或更多),则序列需要进一步差分。另一方面,如果滞后1的自相关系数本身太负,则序列可能过度差分了。
-
如果我们无法确定两个差分阶数哪个更好,那么我们选择使差分后序列的标准差最小的那个阶数。
-
现在,我们将通过一个示例如下解释这些概念
-
首先,我将使用statsmodels包中的增广迪基-福勒检验 (ADF检验)来检查序列是否平稳。原因在于只有当序列非平稳时才需要差分。否则,不需要差分,即 d=0。
-
ADF检验的零假设 (Ho) 是时间序列非平稳。因此,如果检验的p值小于显著性水平 (0.05),我们就拒绝零假设,并推断时间序列确实是平稳的。
-
因此,在我们的例子中,如果P值 > 0.05,我们将继续寻找差分阶数。
-
加载库和数据
提示
需要Statsforecast。要安装,请参阅说明。
接下来,我们导入绘图库并配置绘图样式。
读取数据
年份 | 值 | |
---|---|---|
0 | 1960-01-01 | 69.123902 |
1 | 1961-01-01 | 69.760244 |
2 | 1962-01-01 | 69.149756 |
3 | 1963-01-01 | 69.248049 |
4 | 1964-01-01 | 70.311707 |
StatsForecast 的输入始终是长格式的数据框,包含三列:unique_id、ds 和 y
-
unique_id
(字符串、整数或类别)表示序列的标识符。 -
ds
(时间戳)列应采用 Pandas 期望的格式,日期最好采用 YYYY-MM-DD 格式,时间戳最好采用 YYYY-MM-DD HH:MM:SS 格式。 -
y
(数值)表示我们希望预测的度量值。
ds | y | unique_id | |
---|---|---|---|
0 | 1960-01-01 | 69.123902 | 1 |
1 | 1961-01-01 | 69.760244 | 1 |
2 | 1962-01-01 | 69.149756 | 1 |
3 | 1963-01-01 | 69.248049 | 1 |
4 | 1964-01-01 | 70.311707 | 1 |
我们需要将 ds
从 object
类型转换为 datetime。
使用 plot 方法探索数据
使用 StatsForecast 类中的 plot 方法绘制序列。此方法从数据集中打印一个随机序列,对基本 EDA 非常有用。
从图中可以看出,随着时间的推移,存在一个上升趋势。
季节性分解
如何以及为何分解时间序列?
在时间序列分析中预测新值时,了解过去的数据非常重要。更正式地说,了解值随时间变化的模式非常重要。有很多原因可能导致我们的预测值偏离正确的方向。时间序列基本上由四个组成部分构成。这些组成部分的变化导致时间序列模式的变化。这些组成部分是
- 水平分量: 这是随时间平均的主要值。
- 趋势分量: 趋势是导致时间序列出现递增或递减模式的值。
- 季节性分量: 这是一种在时间序列中短期出现的周期性事件,导致时间序列出现短期递增或递减模式。
- 残差/噪声: 这些是时间序列中的随机变化。
随着时间的推移结合这些组成部分,就形成了时间序列。大多数时间序列由水平分量和噪声/残差组成,而趋势或季节性是可选的值。
如果季节性和趋势是时间序列的一部分,那么会影响预测值。因为预测时间序列的模式可能与之前的时间序列不同。
时间序列中组成部分的组合可以是两种类型: * 加法模型 * 乘法模型
加法时间序列
如果时间序列的组成部分是相加而成。那么这种时间序列称为加法时间序列。通过可视化,如果时间序列的递增或递减模式在整个序列中相似,我们可以说它是加法时间序列。任何加法时间序列的数学函数可以表示为:
乘法时间序列
如果时间序列的组成部分是相乘而成,那么这种时间序列称为乘法时间序列。通过可视化,如果时间序列随时间呈现指数增长或下降,则可以将其视为乘法时间序列。乘法时间序列的数学函数可以表示为:
增广迪基-福勒检验
增广迪基-福勒(ADF)检验是一种统计检验,用于确定时间序列数据中是否存在单位根。单位根可能导致时间序列分析中的不可预测结果。在单位根检验中会形成一个零假设,以确定时间序列数据受趋势影响的强度。通过接受零假设,我们接受时间序列数据不平稳的证据。通过拒绝零假设或接受备择假设,我们接受时间序列数据由平稳过程生成的证据。此过程也称为平稳趋势。ADF检验统计量的值为负。较低的ADF值表明对零假设的拒绝程度更强。
增广迪基-福勒检验是用于检验给定时间序列是否平稳的常用统计检验。我们可以通过定义零假设和备择假设来实现这一点。
零假设:时间序列非平稳。它具有时间依赖的趋势。备择假设:时间序列平稳。换句话说,序列不依赖于时间。
ADF 或 t 统计量 < 临界值:拒绝零假设,时间序列平稳。ADF 或 t 统计量 > 临界值:未能拒绝零假设,时间序列非平稳。
从结果中我们可以看到,我们得到了非平稳序列,因为 p 值大于 5%。
应用ADF检验的目的之一是了解我们的序列是否平稳,知道ADF检验的结果后,我们就可以确定下一步。对于我们的情况,从之前的结果可以看出时间序列不平稳,因此我们将继续进行下一步,即对时间序列进行差分。
我们将创建一份数据的副本,以便研究查找时间序列的平稳性。
创建时间序列副本后,我们将对时间序列进行差分,然后使用增广迪基-福勒检验来研究我们的时间序列是否平稳。
ds | y | unique_id | y_diff | |
---|---|---|---|---|
1 | 1961-01-01 | 69.760244 | 1 | 0.636341 |
2 | 1962-01-01 | 69.149756 | 1 | -0.610488 |
3 | 1963-01-01 | 69.248049 | 1 | 0.098293 |
4 | 1964-01-01 | 70.311707 | 1 | 1.063659 |
5 | 1965-01-01 | 70.171707 | 1 | -0.140000 |
我们再次应用迪基-福勒检验,看看我们的时间序列是否已经平稳。
从之前的结果中我们可以观察到,现在我们的时间序列是平稳的了,p 值小于 5%。
现在我们的时间序列是平稳的了,也就是说,我们只差分了 1 次,因此,使模型平稳所需的差分阶数 。
- 对于上述数据,我们可以看到时间序列通过一次差分达到了平稳。
如何找到AR项的阶数 (p)
-
下一步是确定模型是否需要任何AR项。我们将通过检查偏自相关 (PACF) 图来找出所需的AR项数量。
-
偏自相关可以想象为序列与其滞后项之间的相关性,在排除中间滞后项的贡献后。因此,PACF 某种程度上表达了滞后项与序列之间的纯粹相关性。通过这种方式,我们将知道AR项中是否需要该滞后项。
-
序列的滞后 k 的偏自相关是该滞后项在 的自回归方程中的系数。
-
也就是说,假设如果 是当前序列,并且 是 的滞后 1,那么滞后 3 的偏自相关是上述方程中 的系数 。
-
现在,我们应该找到AR项的数量。平稳化序列中的任何自相关都可以通过添加足够的AR项来修正。因此,我们最初将AR项的阶数设为 PACF 图中超过显著性界限的滞后项数量。
- 我们可以看到 PACF 滞后 1 非常显著,因为它远高于显著性线。所以我们将 p 的值设为 1。
如何找到MA项的阶数 (q)
-
就像我们查看 PACF 图来确定 AR 项数量一样,我们将查看 ACF 图来确定 MA 项数量。MA 项在技术上是滞后预测的误差。
-
ACF 告诉我们需要多少个 MA 项来消除平稳化序列中的任何自相关。
-
让我们看看差分后序列的自相关图。
- 我们可以看到有几个滞后项远高于显著性线。所以我们将 q 设为 1。如果有疑问,我们将选择能够充分解释 Y 的更简单的模型。
如何处理时间序列轻微欠差分或过度差分的情况
-
时间序列可能存在轻微欠差分的情况。再差分一次可能会导致轻微过度差分。
-
如果序列轻微欠差分,通常可以通过添加一个或多个额外的 AR 项来弥补。同样,如果序列轻微过度差分,我们将尝试添加一个额外的 MA 项。
使用 StatsForecast 实现 ARIMA
现在,我们已经确定了 p、d 和 q 的值。我们已具备拟合 ARIMA 模型所需的一切。我们将使用 statsforecast
包中的 ARIMA() 实现。
找到的参数是:* 自回归模型参数 p 为 * 移动平均模型参数 q 为 * 以及使模型平稳所需的差分阶数 d 为
因此,我们将要测试的模型是 ARIMA(1,1,1) 模型。
实例化模型
拟合模型
进行预测
unique_id | ds | ARIMA | |
---|---|---|---|
0 | 1 | 2020-01-01 | 83.206903 |
1 | 1 | 2021-01-01 | 83.203508 |
2 | 1 | 2022-01-01 | 83.204742 |
3 | 1 | 2023-01-01 | 83.204293 |
4 | 1 | 2024-01-01 | 83.204456 |
5 | 1 | 2025-01-01 | 83.204397 |
我们可以通过添加置信区间来进行预测,例如 95% 的置信区间。
unique_id | ds | ARIMA | ARIMA-lo-95 | ARIMA-hi-95 | |
---|---|---|---|---|---|
0 | 1 | 2020-01-01 | 83.206903 | 82.412336 | 84.001469 |
1 | 1 | 2021-01-01 | 83.203508 | 82.094625 | 84.312391 |
2 | 1 | 2022-01-01 | 83.204742 | 81.848344 | 84.561139 |
3 | 1 | 2023-01-01 | 83.204293 | 81.640430 | 84.768156 |
4 | 1 | 2024-01-01 | 83.204456 | 81.457145 | 84.951767 |
5 | 1 | 2025-01-01 | 83.204397 | 81.291297 | 85.117497 |
预测方法
内存高效的预测。
此方法避免了对象存储带来的内存负担。它类似于 fit_predict,但不存储信息。它假定您预先知道预测范围。
unique_id | ds | ARIMA | ARIMA-lo-95 | ARIMA-hi-95 | |
---|---|---|---|---|---|
0 | 1 | 2020-01-01 | 83.206903 | 82.412336 | 84.001469 |
1 | 1 | 2021-01-01 | 83.203508 | 82.094625 | 84.312391 |
2 | 1 | 2022-01-01 | 83.204742 | 81.848344 | 84.561139 |
3 | 1 | 2023-01-01 | 83.204293 | 81.640430 | 84.768156 |
4 | 1 | 2024-01-01 | 83.204456 | 81.457145 | 84.951767 |
5 | 1 | 2025-01-01 | 83.204397 | 81.291297 | 85.117497 |
生成预测后,我们可以进行可视化以查看我们模型生成的行为。
模型评估
常用的预测评估指标包括
- 平均绝对百分比误差 (MAPE)
- 平均误差 (ME)
- 平均绝对误差 (MAE)
- 平均百分比误差 (MPE)
- 均方根误差 (RMSE)
- 实际值与预测值之间的相关性 (corr)
unique_id | 指标 | ARIMA | |
---|---|---|---|
0 | 1 | mse | 0.184000 |
1 | 1 | mae | 0.397932 |
2 | 1 | rmse | 0.428952 |
3 | 1 | mape | 0.004785 |