Python中的ARIMA模型、SARIMA模型和SARIMAX模型对时间序列预测
原⽂链接:tecdat/?p=12272
使⽤ARIMA模型,您可以使⽤序列过去的值预测时间序列。在本⽂中,我们从头开始构建了⼀个最佳ARIMA模型,并将其扩展到Seasonal ARIMA(SARIMA)和SARIMAX模型。
1.时间序列预测简介
时间序列是在定期的时间间隔内记录度量的序列。
根据频率,时间序列可以是每年(例如:年度预算),每季度(例如:⽀出),每周(例如:销售数量),每天(例如天⽓),每⼩时(例如:股票价格),分钟(例如:来电提⽰中的呼⼊电话),甚⾄是⼏秒钟(例如:⽹络流量)。
为什么要预测?
因为预测时间序列(如需求和销售)通常具有巨⼤的商业价值。
在⼤多数制造公司中,它驱动基本的业务计划,采购和⽣产活动。预测中的任何错误都会在整个供应链
或与此相关的任何业务环境中蔓延。因此,准确地进⾏预测很重要,以节省成本,这对于成功⾄关重要。
不仅在制造业中,时间序列预测背后的技术和概念还适⽤于任何业务。
现在,预测时间序列可以⼤致分为两种类型。
如果仅使⽤时间序列的先前值来预测其未来值,则称为单变量时间序列预测
单变量时间序列预测。
多变量时间序列预测。
如果您使⽤序列以外的其他预测变量(也称为外⽣变量)进⾏预测,则称为多变量时间序列预测
这篇⽂章重点介绍⼀种称为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].t_title('Original Series')plot_acf(df.value, ax=axes[0, 1]) # 1st Differencingaxes[1, 0].plot(df.value.diff()); axes[1, 0].t_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].t_title('2nd Order Differencing')plot_acf(df.value.diff().diff().dropna(), ax=axes[2, 1]) plt.show()
差分
对于以上序列,时间序列达到平稳,具有两个不同的阶数。但是,在查看第⼆次差分的⾃相关图时,滞后会很快进⼊负值区域,这表明该序列可能已经过差分。
因此,即使该序列不是完全平稳的(平稳性较弱),我也将暂时将差分的阶数固定为1。
## Adf Testndiffs(y, test='adf') # 2cp什么意思
# 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 ries
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].t_title('1st Differencing')axes[1].t(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. Obrvations: 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
5月17日
545.3515 0.0000-----------------------------------------------------------------------------
该模型摘要揭⽰了很多信息。中间的表是系数表,其中“ coef”下的值是相应项的权重。
请注意,这⾥的MA2项的系数接近零。理想情况下,各个X的值应⼩于0.05。
灶王爷的来历
因此,让我们在没有MA2术语的情况下重建模型。
ARIMA Model Results==============================================================================Dep. Variable: D.value No. Obrvations: 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)。
让我们绘制残差。