Python中的ARIMA模型、SARIMA模型和SARIMAX模型对时间序列预测
原⽂链接:tecdat/?p=12272
使⽤ARIMA模型,您可以使⽤序列过去的值预测时间序列。在本⽂中,我们从头开始构建了⼀个最佳ARIMA模型,并将其扩展到Seasonal ARIMA(SARIMA)和SARIMAX模型。
1.时间序列预测简介
时间序列是在定期的时间间隔内记录度量的序列。
根据频率,时间序列可以是每年(例如:年度预算),每季度(例如:⽀出),每周(例如:销售数量),每天(例如天⽓),每⼩时(例如:股票价格),分钟(例如:来电提⽰中的呼⼊电话),甚⾄是⼏秒钟(例如:⽹络流量)。
为什么要预测?
因为预测时间序列(如需求和销售)通常具有巨⼤的商业价值。
在⼤多数制造公司中,它驱动基本的业务计划,采购和⽣产活动。预测中的任何错误都会在整个供应链或与此相关的任何业务环境中蔓延。因此,准确地进⾏预测很重要,以节省成本,这对于成功⾄关重要。
不仅在制造业中,时间序列预测背后的技术和概念还适⽤于任何业务。学python需要什么
现在,预测时间序列可以⼤致分为两种类型。
如果仅使⽤时间序列的先前值来预测其未来值,则称为单变量时间序列预测
单变量时间序列预测。
多变量时间序列预测。
如果您使⽤序列以外的其他预测变量(也称为外⽣变量)进⾏预测,则称为多变量时间序列预测
这篇⽂章重点介绍⼀种称为ARIMA建模的特殊类型的预测⽅法。
ARIMA是⼀种预测算法,其基于以下思想:时间序列的过去值中的信息可以单独⽤于预测未来值。
2. ARIMA模型简介
那么ARIMA模型到底是什么?
ARIMA是⼀类模型,可以根据⾃⾝的过去值(即⾃⾝的滞后和滞后的预测误差)“解释”给定的时间序列,因此可以使⽤⽅程式预测未来价值。
任何具有模式且不是随机⽩噪声的“⾮季节性”时间序列都可以使⽤ARIMA模型进⾏建模。
ARIMA模型的特征在于3个项:p,d,q
p是AR项
q是MA项
d是使时间序列平稳所需的差分数
如果时间序列具有季节性模式,则需要添加季节性条件,该时间序列将变成SARIMA(“季节性ARIMA”的缩写)。⼀旦完成ARIMA。
那么,“AR项的顺序”到底意味着什么?在我们去那⾥之前,我们先来看⼀下“ d”。
3. ARIMA模型中的p,d和q是什么意思
建⽴ARIMA模型的第⼀步是使时间序列平稳。
为什么?
因为ARIMA中的“⾃动回归”⼀词意味着它是⼀个线性回归模型,使⽤⾃⼰的滞后作为预测因⼦。如您所知,线性回归模型在预测变量不相关且彼此独⽴时最有效。
那么如何使⼀序列稳定呢?
那么如何使⼀序列稳定呢?
最常见的⽅法是加以差分。即,从当前值中减去先前的值。
因此,d的值是使序列平稳所需的最⼩差分数。如果时间序列已经固定,则d = 0。
接下来,什么是“ p”和“ q”?
“ p”是“⾃回归”(AR)术语的顺序。它指的是要⽤作预测变量的Y的滞后次数。⽽“ q”是“移动平均”(MA)项的顺序。它是指应输⼊ARIMA模型的滞后预测误差的数量。
4.什么是AR和MA模型
那么什么是AR和MA模型?AR和MA模型的实际数学公式是什么?
模型是Yt仅取决于其⾃⾝滞后的模型。也就是说,Yt是“ Yt滞后”的函数。
仅AR模型
同样,纯移动平均线(仅MA)模型是Yt仅取决于滞后预测误差的模型。
误差项是各个滞后的⾃回归模型的误差。误差Et和E(t-1)是来⾃以下⽅程式的误差:
那分别是AR和MA模型。
那么ARIMA模型的⽅程是什么样的呢?
ARIMA模型是这样的模型,其中时间序列⾄少差分⼀次以使其稳定,然后将AR和MA项组合在⼀起。因此,等式变为:
因此,⽬的是识别p,d和q的值。
5.如何在ARIMA模型中到差分阶数(d)
进⾏差分的⽬的是使时间序列平稳。
但是您需要注意不要使系列过分差分。因为,超差分序列可能仍然是静⽌的,这反过来将影响模型参数。
那么如何确定正确的差分顺序呢?
正确的差分顺序是获得近似平稳序列的最⼩差分,该序列围绕定义的平均值漫游,并且ACF曲线相当快地达到零。
如果⾃相关对于许多之后(10个或更多)为正,则该序列需要进⼀步求差。
在这种情况下,你不能真正确定两个差分阶数之间的差,然后选择在差分序列中给出最⼩标准偏差的阶次。
让我们来看⼀个例⼦。
⾸先,我将使⽤adfuller()statsmodels包中的Augmented Dickey Fuller测试()检查该系列是否稳定。
为什么?
因为,仅当序列⾮平稳时才需要进⾏区分。否则,不需要差分,即d = 0。
ADF检验的零假设是时间序列是⾮平稳的。因此,如果检验的p值⼩于显着性⽔平(0.05),则拒绝原假设,并推断时间序列确实是平稳的。
因此,在我们的情况下,如果P值> 0.05,我们将继续寻差分的顺序。
from statsmodels.tsa.stattools import adfullerfrom numpy import logresult = adfuller(df.value.dropna())print('ADF Statistic: %f' % result[0])print('p-value: %f' % result[1])ADF Statistic: -2.464240p-value: 0.124419
由于P值⼤于显着性⽔平,因此让我们对序列进⾏差分,看看⾃相关图的样⼦。
import numpy as np, pandas as aphics.tsaplots import plot_acf, plot_pacfimport matplotlib.pyplot as
# Import datadf = pd.read_csv('wwwusage.csv', names=['value'], header=0)
# Original Seriesfig, axes = plt.subplots(3, 2, sharex=True)axes[0, 0].plot(df.value); axes[0, 0].set_title('Original Series')plot_acf(df.value, ax=axes[0, 1]) # 1st Differencingaxes[1, 0].plot(df.value.diff()); axes[1, 0].set_title('1st Order Differencing')plot_acf(df.value.diff().dropna(), ax=axes[1, 1])
# 2nd Differencingaxes[2, 0].plot(df.value.diff().diff()); axes[2, 0].set_title('2nd Order Differencing')plot_acf(df.value.diff().diff().dropna(), ax=axes[2, 1]) plt.show()
差分
对于以上序列,时间序列达到平稳,具有两个不同的阶数。但是,在查看第⼆次差分的⾃相关图时,滞后会很快进⼊负值区域,这表明该序列可能已经过差分。
因此,即使该序列不是完全平稳的(平稳性较弱),我也将暂时将差分的阶数固定为1。
## Adf Testndiffs(y, test='adf') # 2
# KPSS testndiffs(y, test='kpss') # 0
# PP test:ndiffs(y, test='pp') # 22 0 2
# PP test:ndiffs(y, test='pp') # 22 0 2
6.如何到AR项的阶数(p)
下⼀步是确定模型是否需要任何AR条款。您可以通过检查偏⾃相关(PACF)图来出所需的AR项数。
什么是PACF?
排除部分滞后的影响后,可以将部分⾃相关想象为序列与其滞后之间的相关性。因此,PACF的传递传达了滞后与序列之间的纯相关性。这样,您将知道在AR术语中是否需要该滞后。
如何到AR项的阶数?
平稳序列中的任何⾃相关都可以通过添加⾜够的AR项进⾏校正。因此,我们最初将AR项的阶数等于跨过PACF图中显着性区间的滞后阶数。
# PACF plot of 1st differenced series
plt.show()
AR阶数
可以观察到,PACF滞后1⾮常重要,因为它远⾼于显着性线。滞后2事实也很重要,稍微超过了显着性区间(蓝⾊区域)。
7.如何到MA项的阶数(q)
就像我们在PACF图上查看AR项的阶数⼀样,您也可以在ACF图上查看MA项的阶数。MA从技术上讲是滞后预测的误差。
ACF指⽰要删除平稳序列中的任何⾃相关需要多少个MA项。
让我们看⼀下差分序列的⾃相关图。
fig, axes = plt.subplots(1, 2, sharex=True)axes[0].plot(df.value.diff()); axes[0].set_title('1st Differencing')axes[1].set(ylim=
(0,1.2))plot_acf(df.value.diff().dropna(), ax=axes[1])
plt.show()
MA阶数
⼏个滞后远⾼于界限。因此,让我们暂时将q固定为2。
值是否过低或过⾼
8.如何处理时间序列差
如何处理时间序列差值是否过低或过⾼
该如何处理?
如果您的系列有少许差异,通常添加⼀个或多个其他AR即可。同样,如果略有差异,请尝试添加其他MA项。
9.如何建⽴ARIMA模型
现在,已经确定了p,d和q的值,已经具备了拟合ARIMA模型的所有条件。
ARIMA Model Results==============================================================================Dep.
Variable: D.value No. Observations: 99Model: ARIMA(1, 1, 2) Log Likelihood -253.790Method: css-mle S.D. of innovations 3.119Date: Wed, 06 Feb 2019 AIC 517.579Time: 23:32:56 BIC 530.555Sample: 1 HQIC 522.829
================================================================================= coef std err z P>|z| [0.025 0.975]---------------------------------------------------------------------------------const 1.1202 1.290 0.868 0.387 -1.409 3.649ar.L1.D.value 0.6351 0.257 2.469 0.015 0.131
1.139ma.L1.D.value 0.5287 0.355 1.489 0.140 -0.167 1.224ma.L
2.D.value -0.0010 0.321 -0.003 0.998 -0.631 0.629
Roots============================================================================= Real Imaginary Modulus Frequency-----------------------------------------------------------------------------AR.1 1.5746 +0.0000j 1.5746 0.0000MA.1 -1.8850 +0.0000j 1.8850 0.5000MA.2 545.3515 +0.0000j
545.3515 0.0000-----------------------------------------------------------------------------
该模型摘要揭⽰了很多信息。中间的表是系数表,其中“ coef”下的值是相应项的权重。
请注意,这⾥的MA2项的系数接近零。理想情况下,各个X的值应⼩于0.05。
因此,让我们在没有MA2术语的情况下重建模型。
ARIMA Model Results==============================================================================Dep. Variable: D.value No. Observations: 99Model: ARIMA(1, 1, 1) Log Likelihood -253.790Method: css-mle S.D. of innovations 3.119Date: Sat, 09 Feb 2019 AIC 515.579Time: 12:16:06 BIC 525.960Sample: 1 HQIC 519.779
================================================================================= coef std err z P>|z| [0.025 0.975]---------------------------------------------------------------------------------const 1.1205 1.286 0.871 0.386 -1.400 3.641ar.L1.D.value 0.6344 0.087 7.317 0.000 0.464
0.804ma.L1.D.value 0.5297 0.089 5.932 0.000 0.355 0.705
Roots============================================================================= Real Imaginary Modulus Frequency-----------------------------------------------------------------------------AR.1 1.5764 +0.0000j 1.5764 0.0000MA.1 -1.8879 +0.0000j 1.8879 0.5000-----------------------------------------------------------------------------
AIC模型已减少,这很好。AR1和MA1项的P值已提⾼并且⾮常显着(<< 0.05)。
让我们绘制残差。