乐趣区

关于数据挖掘:Python中的ARIMA模型SARIMA模型和SARIMAX模型对时间序列预测附代码数据

全文链接:http://tecdat.cn/?p=12272

应用 ARIMA 模型,您能够应用序列过来的值预测工夫序列 点击文末“浏览原文”获取残缺 代码数据 )。

  • 在本文中,咱们从头开始构建了一个最佳 ARIMA 模型,并将其扩大到 Seasonal ARIMA(SARIMA)和 SARIMAX 模型。

<!—->

  •  
    

[]()工夫序列预测简介

工夫序列是在定期工夫距离内记录度量的序列。

依据频率,工夫序列能够是每年(例如:年度预算),每季度(例如:收入),每周(例如:销售数量),每天(例如天气),每小时(例如:股票价格),分钟(例如:复电提醒中的呼入电话),甚至是几秒钟(例如:网络流量)。

[]()为什么要预测?

因为预测工夫序列(如需要和销售)通常具备微小的商业价值。

在大多数制作公司中,它驱动根本的业务打算,洽购和生产流动。预测中的任何谬误都会扩散到整个供应链或与此相关的任何业务环境中。因而,精确地进行预测很重要,以节省成本,这对于胜利至关重要。

不仅在制造业中,工夫序列预测背地的技术和概念还实用于任何业务。

当初,预测工夫序列能够大抵分为两种类型。

如果仅应用工夫序列的先前值来预测其将来值,则称为  单变量工夫序列预测。

如果您应用序列以外的其余预测变量(也称为外生变量)进行预测,则称为  多变量工夫序列预测。

这篇文章重点介绍一种称为 ARIMA  建模的非凡类型的预测办法。

ARIMA 是一种预测算法,其基于以下思维:工夫序列的过来值中的信息能够独自用于预测将来值。

  1. ARIMA 模型简介

那么 ARIMA 模型到底是什么?

ARIMA 是一类模型,能够依据本身的过来值(即本身的滞后和滞后的预测误差)“解释”给定的工夫序列,因而能够应用方程式预测将来价值。

任何具备模式且不是随机白噪声的“非季节性”工夫序列都能够应用 ARIMA 模型进行建模。

ARIMA 模型的特色在于 3 个项:p,d,q

p 是 AR 项

q 是 MA 项

d 是使工夫序列安稳所需的差分阶数

如果工夫序列具备季节性模式,则须要增加季节性条件,该工夫序列将变成 SARIMA(“季节性 ARIMA”的缩写)。一旦实现 ARIMA。

那么,“AR 项的阶数”到底意味着什么?咱们先来看一下“d”。

  1. ARIMA 模型中的 p,d 和 q 是什么意思

建设 ARIMA 模型的第一步是  使工夫序列安稳。

为什么?

因为 ARIMA 中的“自回归”一词意味着它是一个  线性回归模型,应用本人的滞后作为预测因子。如您所知,线性回归模型在预测变量不相干且彼此独立时最无效。

那么如何使一序列安稳呢?

最常见的办法是加以差分。即,从以后值中减去先前的值。

因而,d 的值是使序列安稳所需的最小差分阶数。如果工夫序列曾经安稳,则 d = 0。

接下来,什么是“p”和“q”?

“p”是“自回归”(AR)项的阶数。它指的是要用作预测变量的 Y 的滞后阶数。而“q”是“挪动均匀”(MA)项的阶数。它是指应输出 ARIMA 模型的滞后预测误差的数量。

[]()什么是 AR 和 MA 模型

那么什么是 AR 和 MA 模型?AR 和 MA 模型的理论数学公式是什么?

AR 模型是 Yt 仅取决于其本身滞后的模型。也就是说,Yt 是“Yt 滞后”的函数。

同样,纯  挪动平均线(仅 MA)模型  是 Yt 仅取决于滞后预测误差的模型。

误差项是各个滞后的自回归模型的误差。误差 Et 和 E(t-1)是来自以下方程式的误差:

那别离是 AR 和 MA 模型。

那么 ARIMA 模型的方程是什么样的呢?

ARIMA 模型是这样的模型,其中工夫序列至多差分一次以使其安稳,而后将 AR 和 MA 项组合在一起。因而,等式变为:

因而,目标是辨认 p,d 和 q 的值。

[]()如何在 ARIMA 模型中找到差分阶数(d)

进行差分的目标是使工夫序列安稳。

然而您须要留神不要使序列过分差分。因为,超差分序列可能依然是安稳的,这反过来将影响模型参数。

那么如何确定正确的差分阶数呢?

正确的差分阶数是取得近似安稳序列的最小差分,该序列围绕定义的平均值稳定,并且 ACF 曲线相当快地达到零。

如果自相干对于许多阶数之后(10 个或更多)为正,则该序列须要进一步求差。

在这种状况下,你不能真正确定两个差分阶数之间的差,而后抉择在差分序列中给出最小标准偏差的阶数。

让咱们来看一个例子。

首先,我将应用 Augmented Dickey Fuller 测试()查看该序列是否安稳。

[]()为什么?

因为,仅当序列非安稳时才须要进行差分。否则,不须要差分,即 d = 0。

ADF 测验的零假如是工夫序列是非安稳的。因而,如果测验的 p 值小于显着性程度(0.05),则回绝原假如,并推断工夫序列的确是安稳的。

因而,在咱们的状况下,如果 P 值 > 0.05,咱们将持续寻找差分的阶数。

from statsmodels.tsa.stattools import adfuller
from numpy import log
result = adfuller(df.value.dropna())
print('ADF Statistic: %f' % result[0])
print('p-value: %f' % result[1])
ADF Statistic: -2.464240
p-value: 0.124419

因为 P 值大于显着性程度,因而让咱们对序列进行差分,看看自相干图的样子。

import numpy as np, pandas as pd
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
import matplotlib.pyplot as plt
plt.rcParams.update({'figure.figsize':(9,7), 'figure.dpi':120})
# 导入数据
df = pd.read_csv('wwwusage.csv', names=['value'], header=0)
# 原始数据
fig, 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])
# 一阶差分
axes[1, 0].plot(df.value.diff()); axes[1, 0].set_title('1st Order Differencing')
plot_acf(df.value.diff().dropna(), ax=axes[1, 1])
# 二阶差分
axes[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()

点击题目查阅往期内容

Python 用 RNN 神经网络:LSTM、GRU、回归和 ARIMA 对 COVID19 新冠疫情人数工夫序列预测

转存失败从新上传勾销

左右滑动查看更多

转存失败从新上传勾销

01

02

03

04

[]()差分

对于以上序列,工夫序列达到安稳,具备两个不同的阶数。然而,在查看第二次差分的自相干图时,滞后会很快进入负值区域,这表明该序列可能曾经过差分。

因而,即便该序列不是齐全安稳的(平稳性较弱),我也将临时将差分的阶数设置为 1。

 ## Adf 测验
ndiffs(y, test='adf')  # 2
# KPSS 测验
ndiffs(y, test='kpss')  # 0
# PP 测验:
ndiffs(y, test='pp')  # 2
2 0 2

[]()如何找到 AR 项的阶数(p)

下一步是确定模型是否须要 AR。您能够通过查看偏自相干(PACF)图来找出所需的 AR 阶数。

[]()然而什么是 PACF?

排除局部滞后的影响后,能够将偏自相干设想为序列与其滞后之间的相关性。因而,PACF 的传递传播了滞后与序列之间的纯相关性。这样,您将晓得在 AR 中是否须要该滞后。

[]()如何找到 AR 项的阶数?

安稳序列中的任何自相干都能够通过增加足够的 AR 项进行校对。因而,咱们最后将 AR 项的阶数等于超过 PACF 图中显着性区间的滞后阶数。

# 一阶差分的偏自相关系数图
plt.show()

AR 阶数

能够察看到,PACF 滞后 1 阶十分重要,因为它远高于显着性线。滞后 2 阶也很重要,略微超过了显着性区间(蓝色区域)。

[]()如何找到 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。

[]()如何解决工夫序列差分值过低或过高

该如何解决?

如果您的序列差分值过低,通常增加一个或多个其余 AR 项即可。同样,如果差分值过高,请尝试增加其余 MA 项。

[]()如何建设 ARIMA 模型

当初,曾经确定了 p,d 和 q 的值,曾经具备了拟合 ARIMA 模型的所有条件。

 ARIMA Model Results
==============================================================================
Dep. Variable:                D.value   No. Observations:                   99
Model:                 ARIMA(1, 1, 2)   Log Likelihood                -253.790
Method:                       css-mle   S.D. of innovations              3.119
Date:                Wed, 06 Feb 2019   AIC                            517.579
Time:                        23:32:56   BIC                            530.555
Sample:                             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.649
ar.L1.D.value     0.6351      0.257      2.469      0.015       0.131       1.139
ma.L1.D.value     0.5287      0.355      1.489      0.140      -0.167       1.224
ma.L2.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.0000
MA.1           -1.8850           +0.0000j            1.8850            0.5000
MA.2          545.3515           +0.0000j          545.3515            0.0000
-----------------------------------------------------------------------------

该模型摘要揭示了很多信息。两头的表是系数表,其中“coef”下的值是相应项的权重。

请留神,这里的 MA2 项的系数靠近零。现实状况下,各个 X 的值应小于 0.05。

因而,让咱们在没有 MA2 的状况下重建模型。

 ARIMA Model Results
==============================================================================
Dep. Variable:                D.value   No. Observations:                   99
Model:                 ARIMA(1, 1, 1)   Log Likelihood                -253.790
Method:                       css-mle   S.D. of innovations              3.119
Date:                Sat, 09 Feb 2019   AIC                            515.579
Time:                        12:16:06   BIC                            525.960
Sample:                             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.641
ar.L1.D.value     0.6344      0.087      7.317      0.000       0.464       0.804
ma.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.0000
MA.1           -1.8879           +0.0000j            1.8879            0.5000
-----------------------------------------------------------------------------

AIC 模型已缩小,这很好。AR1 和 MA1 项的 P 值已进步并且十分显着(<< 0.05)。

让咱们绘制残差。

[]()残差密度

残差仿佛很好,均值靠近零且方差平均。让咱们应用绘制理论值和拟合值。

[]()理论 vs 拟合

设置  dynamic=False 样本内时,滞后值用于预测。

也就是说,模型被训练到上一个值进行下一个预测。

因而,咱们仿佛有一个不错的 ARIMA 模型。然而那是最好的吗?

目前不能这么说,因为咱们还没有真正预测将来数据,而是将预测与理论数据进行了比拟。

因而,当初须要穿插验证。

[]()如何应用穿插验证手动找到最佳 ARIMA 模型

在“穿插验证”中,能够预测未来的数据。而后,您将预测值与理论值进行比拟。

要进行穿插验证,您须要创立训练和测试数据集,办法是将工夫序列按大概 75:25 的比例或基于序列工夫频率的正当比例分成两个间断的局部。

[]()为什么不随机采样训练数据?

这是因为工夫序列的序列应完整无缺,以便用于预测。

当初,您能够在训练数据集上构建 ARIMA 模型,对其进行预测和绘制。

# 绘图
plt.figure(figsize=(12,5), dpi=100)
plt.plot(train, label='training')
plt.plot(test, label='actual')
plt.plot(fc_series, label='forecast')
plt.fill_between(lower_series.index, lower_series, upper_series, 
                 color='k', alpha=.15)
plt.title('Forecast vs Actuals')
plt.legend(loc='upper left', fontsize=8)
plt.show()

[]()预测与理论

从图表中,ARIMA(1,1,1)模型仿佛给出了方向正确的预测。理论察看值在 95%置信区间内。

然而每个预测的预测始终低于理论。这意味着,通过在咱们的预测中增加一个小的常数,精度肯定会进步。因而,必定有改良的余地。

所以,我要做的是将差分的阶数减少到 2,即进行设置,d=2 而后将 p 迭代地减少到 5,而后将 q 减少到 5,以查看哪个模型给出的 AIC 最小,同时还要寻找一个给出更靠近理论状况和预测。

在执行此操作时,我会关注模型摘要中 AR 和 MA 项的 P 值。它们应尽可能靠近零,现实状况下应小于 0.05。

 ARIMA Model Results
==============================================================================
Dep. Variable:               D2.value   No. Observations:                   83
Model:                 ARIMA(3, 2, 1)   Log Likelihood                -214.248
Method:                       css-mle   S.D. of innovations              3.153
Date:                Sat, 09 Feb 2019   AIC                            440.497
Time:                        12:49:01   BIC                            455.010
Sample:                             2   HQIC                           446.327
==================================================================================
                     coef    std err          z      P>|z|      [0.025      0.975]
----------------------------------------------------------------------------------
const              0.0483      0.084      0.577      0.565      -0.116       0.212
ar.L1.D2.value     1.1386      0.109     10.399      0.000       0.924       1.353
ar.L2.D2.value    -0.5923      0.155     -3.827      0.000      -0.896      -0.289
ar.L3.D2.value     0.3079      0.111      2.778      0.007       0.091       0.525
ma.L1.D2.value    -1.0000      0.035    -28.799      0.000      -1.068      -0.932
                                    Roots
=============================================================================
                  Real          Imaginary           Modulus         Frequency
-----------------------------------------------------------------------------
AR.1            1.1557           -0.0000j            1.1557           -0.0000
AR.2            0.3839           -1.6318j            1.6763           -0.2132
AR.3            0.3839           +1.6318j            1.6763            0.2132
MA.1            1.0000           +0.0000j            1.0000            0.0000
-----------------------------------------------------------------------------

[]()订正后的预测与理论值

AIC 已从 515 缩小到 440。X 项的 P 值小于 <0.05,这很好。

所以总的来说要好得多。

现实状况下,应该返回多个工夫点,例如返回 1、2、3 和 4 个季度,并查看一年中各个工夫点的预测成果如何。

[]()工夫序列预测的准确性指标

用来判断预测的罕用准确性指标是:

  1. 均匀相对百分比误差(MAPE)
  2. 平均误差(ME)
  3. 均匀绝对误差(MAE)
  4. 均匀百分比误差(MPE)
  5. 均方根误差(RMSE)
  6. 滞后 1 自相干误差(ACF1)
  7. 理论与预测之间的相关性(corr)
  8. 最小最大误差(minmax)

通常,如果要比拟两个不同序列的预测,则能够应用 MAPE,Correlation 和 Min-Max Error。

[]()为什么不应用其余指标?

因为只有上述三个是百分比误差,所以误差在 0 到 1 之间变动。因而,无论序列的规模如何,您都能够判断预测的品质如何。

其余误差度量是数量。这意味着,平均值为 1000 的序列的 RMSE 为 100,平均值为 10 的序列的 RMSE 为 5。因而,不能真正应用它们来比拟两个不同比例工夫序列的预测。

forecast_accuracy(fc, test.values)
#> {'mape': 0.02250131357314834,
#>  'me': 3.230783108990054,
#>  'mae': 4.548322194530069,
#>  'mpe': 0.016421001932706705,
#>  'rmse': 6.373238534601827,
#>  'acf1': 0.5105506325288692,
#>  'corr': 0.9674576513924394,
#>  'minmax': 0.02163154777672227}

大概 2.2%的 MAPE 示意该模型在预测接下来的 15 个观测值时的准确性约为 97.8%。

然而在工业利用状况下,将给您提供很多工夫序列来进行预测,并且定期反复进行预测。

因而,咱们须要一种使最佳模型抉择过程自动化的办法。

[]()如何在 Python 中进行主动 Arima 预测

应用逐渐办法来搜寻 p,d,q 参数的多个组合,并抉择具备最小 AIC 的最佳模型。

print(model.summary())
#> Fit ARIMA: order=(1, 2, 1); AIC=525.586, BIC=535.926, Fit time=0.060 seconds
#> Fit ARIMA: order=(0, 2, 0); AIC=533.474, BIC=538.644, Fit time=0.005 seconds
#> Fit ARIMA: order=(1, 2, 0); AIC=532.437, BIC=540.192, Fit time=0.035 seconds
#> Fit ARIMA: order=(0, 2, 1); AIC=525.893, BIC=533.648, Fit time=0.040 seconds
#> Fit ARIMA: order=(2, 2, 1); AIC=515.248, BIC=528.173, Fit time=0.105 seconds
#> Fit ARIMA: order=(2, 2, 0); AIC=513.459, BIC=523.798, Fit time=0.063 seconds
#> Fit ARIMA: order=(3, 2, 1); AIC=512.552, BIC=528.062, Fit time=0.272 seconds
#> Fit ARIMA: order=(3, 2, 0); AIC=515.284, BIC=528.209, Fit time=0.042 seconds
#> Fit ARIMA: order=(3, 2, 2); AIC=514.514, BIC=532.609, Fit time=0.234 seconds
#> Total fit time: 0.865 seconds
#>                              ARIMA Model Results
#> ==============================================================================
#> Dep. Variable:                   D2.y   No. Observations:                   98
#> Model:                 ARIMA(3, 2, 1)   Log Likelihood                -250.276
#> Method:                       css-mle   S.D. of innovations              3.069
#> Date:                Sat, 09 Feb 2019   AIC                            512.552
#> Time:                        12:57:22   BIC                            528.062
#> Sample:                             2   HQIC                           518.825
#> 
#> ==============================================================================
#>                  coef    std err          z      P>|z|      [0.025      0.975]
#> ------------------------------------------------------------------------------
#> const          0.0234      0.058      0.404      0.687      -0.090       0.137
#> ar.L1.D2.y     1.1586      0.097     11.965      0.000       0.969       1.348
#> ar.L2.D2.y    -0.6640      0.136     -4.890      0.000      -0.930      -0.398
#> ar.L3.D2.y     0.3453      0.096      3.588      0.001       0.157       0.534
#> ma.L1.D2.y    -1.0000      0.028    -36.302      0.000      -1.054      -0.946
#>                                     Roots
#> =============================================================================
#>                   Real          Imaginary           Modulus         Frequency
#> -----------------------------------------------------------------------------
#> AR.1            1.1703           -0.0000j            1.1703           -0.0000
#> AR.2            0.3763           -1.5274j            1.5731           -0.2116
#> AR.3            0.3763           +1.5274j            1.5731            0.2116
#> MA.1            1.0000           +0.0000j            1.0000            0.0000
#> -----------------------------------------------------------------------------

[]()如何解释 ARIMA 模型中的残差图

让咱们查看残差图。

[]()残差图

那么如何解释?

左上方:残余误差仿佛在零均值左近稳定,并且具备平均的方差。

右上方:密度图倡议均值为零的正态分布。

左下:所有圆点应与红线完全一致。任何显著的偏差都意味着散布偏斜。

右下:Correlogram(又名 ACF)图显示残差误差不是自相干的。任何自相干都将暗示残差中存在某种模式,该模式未在模型中进行解释。因而,您将须要为模型寻找更多的 X(预测变量)。

总体而言,模型很适合。让咱们预测一下。

[]()如何在 python 中主动构建 SARIMA 模型

一般 ARIMA 模型的问题在于它不反对季节性。

如果您的工夫序列定义了季节性,那么,请应用季节性差分的 SARIMA。

季节性差分与惯例差分类似,然而您能够从上一节令中减去该值,而不是减去间断项。

因而,该模型将示意为 SARIMA(p,d,q)x(P,D,Q),其中 P,D 和 Q 别离是 SAR,季节性差分的阶数和 SMA 项,并且  'x' 是工夫的频率序列。

如果您的模型具备明确定义的季节性模式,则对给定的频率“x”强制执行 D = 1。

这是无关构建 SARIMA 模型的一些实用倡议:

通常,将模型参数设置为 D 不得超过 1。并且总的分 ’d + D’ 不超过 2。如果模型具备季节性成分,请尝试仅保留 SAR 或 SMA 项。

咱们在药物销售数据集上建设一个 SARIMA 模型。

[]()季节性差分

在利用通常的差分(滞后 1)之后,季节性峰值是残缺的。鉴于此,应在季节性差分后进行纠正。

让咱们建设应用 SARIMA 模型。为此,您须要设置  seasonal=True,设置m=12 按月序列的频率  并强制执行  D=1

Fit ARIMA: order=(1, 0, 1) seasonal_order=(0, 1, 1, 12); AIC=534.818, BIC=551.105, Fit time=1.742 seconds
Fit ARIMA: order=(0, 0, 0) seasonal_order=(0, 1, 0, 12); AIC=624.061, BIC=630.576, Fit time=0.028 seconds
Fit ARIMA: order=(1, 0, 0) seasonal_order=(1, 1, 0, 12); AIC=596.004, BIC=609.034, Fit time=0.683 seconds
Fit ARIMA: order=(0, 0, 1) seasonal_order=(0, 1, 1, 12); AIC=611.475, BIC=624.505, Fit time=0.709 seconds
Fit ARIMA: order=(1, 0, 1) seasonal_order=(1, 1, 1, 12); AIC=557.501, BIC=577.046, Fit time=3.687 seconds
(...TRUNCATED...)
Fit ARIMA: order=(3, 0, 0) seasonal_order=(1, 1, 1, 12); AIC=554.570, BIC=577.372, Fit time=2.431 seconds
Fit ARIMA: order=(3, 0, 0) seasonal_order=(0, 1, 0, 12); AIC=554.094, BIC=570.381, Fit time=0.220 seconds
Fit ARIMA: order=(3, 0, 0) seasonal_order=(0, 1, 2, 12); AIC=529.502, BIC=552.305, Fit time=2.120 seconds
Fit ARIMA: order=(3, 0, 0) seasonal_order=(1, 1, 2, 12); AIC=nan, BIC=nan, Fit time=nan seconds
Total fit time: 31.613 seconds

该模型预计了 AIC,系数的 P 值看起来很重要。让咱们看一下残差的诊断图。

最佳模型  SARIMAX(3, 0, 0)x(0, 1, 1, 12) 的 AIC 为 528.6,P 值很重要。

让咱们预测将来的 24 个月。

SARIMA –最终预测

[]()如何用外生变量建设 SARIMAX 模型

咱们构建的 SARIMA 模型很好。

然而为了残缺起见,让咱们尝试将内部预测变量(也称为“外生变量”)加到模型中。该模型称为 SARIMAX 模型。

应用外生变量的惟一要求是您还须要在预测期内晓得变量的值。

为了演示,我将对最近 36 个月的数据应用经典季节性合成中的季节性指数。

为什么要季节性指数?SARIMA 是否曾经在模仿季节性?

你是对的。

而且,我想看看如果咱们将最近的季节性模式强加到训练和预测中,模型将如何显示。

其次,这是一个很好的演示目标变量。因而,你能够将其用作模板,并将任何变量插入代码中。季节性指数是一个很好的外生变量,因为它每个频率周期都会反复一次,在这种状况下为 12 个月。

因而,你将始终晓得季节性指数将对将来的预测放弃何种价值。

让咱们计算季节性指数,以便能够将其作为 SARIMAX 模型的(内部)预测变量。

外生变量(节令指数)已准备就绪。让咱们构建 SARIMAX 模型。

Fit ARIMA: order=(1, 0, 1) seasonal_order=(0, 1, 1, 12); AIC=536.818, BIC=556.362, Fit time=2.083 seconds
Fit ARIMA: order=(0, 0, 0) seasonal_order=(0, 1, 0, 12); AIC=626.061, BIC=635.834, Fit time=0.033 seconds
Fit ARIMA: order=(1, 0, 0) seasonal_order=(1, 1, 0, 12); AIC=598.004, BIC=614.292, Fit time=0.682 seconds
Fit ARIMA: order=(0, 0, 1) seasonal_order=(0, 1, 1, 12); AIC=613.475, BIC=629.762, Fit time=0.510 seconds
Fit ARIMA: order=(1, 0, 1) seasonal_order=(1, 1, 1, 12); AIC=559.530, BIC=582.332, Fit time=3.129 seconds
(...Truncated...)
Fit ARIMA: order=(3, 0, 0) seasonal_order=(0, 1, 0, 12); AIC=556.094, BIC=575.639, Fit time=0.260 seconds
Fit ARIMA: order=(3, 0, 0) seasonal_order=(0, 1, 2, 12); AIC=531.502, BIC=557.562, Fit time=2.375 seconds
Fit ARIMA: order=(3, 0, 0) seasonal_order=(1, 1, 2, 12); AIC=nan, BIC=nan, Fit time=nan seconds
Total fit time: 30.781 seconds

因而,咱们领有带有外生项的模型。然而该系数对于 x1来说很小,因而该变量的奉献能够忽略不计。让咱们持续预测吧。

咱们已无效地将模型中最近 3 年的最新季节性影响强加给模型。

让咱们预测下一个 24 个月。为此,你须要接下来 24 个月的季节性指数值。

SARIMAX 预测


点击文末 “浏览原文”

获取全文残缺材料。

本文选自《Python 中的 ARIMA 模型、SARIMA 模型和 SARIMAX 模型对工夫序列预测》。

点击题目查阅往期内容

Python 用 RNN 神经网络:LSTM、GRU、回归和 ARIMA 对 COVID19 新冠疫情人数工夫序列预测

数据分享 |PYTHON 用 ARIMA,ARIMAX 预测商店商品销售需要工夫序列数据

Python 用 RNN 神经网络:LSTM、GRU、回归和 ARIMA 对 COVID19 新冠疫情人数工夫序列预测

【视频】Python 用 LSTM 长短期记忆神经网络对不稳固降雨量工夫序列进行预测剖析 | 数据分享

深度学习实现自编码器 Autoencoder 神经网络异样检测心电图 ECG 工夫序列

spss modeler 用决策树神经网络预测 ST 的股票

Python 中 TensorFlow 的长短期记忆神经网络(LSTM)、指数挪动平均法预测股票市场和可视化、指数挪动平均法预测股票市场和可视化 ”)

RNN 循环神经网络、LSTM 长短期记忆网络实现工夫序列长期利率预测

联合新冠疫情 COVID-19 股票价格预测:ARIMA,KNN 和神经网络工夫序列剖析

深度学习:Keras 应用神经网络进行简略文本分类剖析新闻组数据

用 PyTorch 机器学习神经网络分类预测银行客户散失模型

PYTHON 用 LSTM 长短期记忆神经网络的参数优化办法预测工夫序列洗发水销售数据

Python 用 Keras 神经网络序列模型回归拟合预测、准确度检查和后果可视化

R 语言深度学习卷积神经网络 (CNN)对 CIFAR 图像进行分类:训练与后果评估可视化对 CIFAR 图像进行分类:训练与后果评估可视化 ”)

深度学习:Keras 应用神经网络进行简略文本分类剖析新闻组数据

Python 用 LSTM 长短期记忆神经网络对不稳固降雨量工夫序列进行预测剖析

R 语言深度学习 Keras 循环神经网络 (RNN) 模型预测多输入变量工夫序列模型预测多输入变量工夫序列 ”)

R 语言 KERAS 用 RNN、双向 RNNS 递归神经网络、LSTM 剖析预测温度工夫序列、IMDB 电影评分情感

Python 用 Keras 神经网络序列模型回归拟合预测、准确度检查和后果可视化

Python 用 LSTM 长短期记忆神经网络对不稳固降雨量工夫序列进行预测剖析

R 语言中的神经网络预测工夫序列:多层感知器(MLP)和极限学习机(ELM)数据分析报告

R 语言深度学习:用 keras 神经网络回归模型预测工夫序列数据

Matlab 用深度学习长短期记忆(LSTM)神经网络对文本数据进行分类

R 语言 KERAS 深度学习 CNN 卷积神经网络分类辨认手写数字图像数据(MNIST)

MATLAB 中用 BP 神经网络预测人体脂肪百分比数据

Python 中用 PyTorch 机器学习神经网络分类预测银行客户散失模型

R 语言实现 CNN(卷积神经网络)模型进行回归数据分析

SAS 应用鸢尾花 (iris) 数据集训练人工神经网络 (ANN) 模型数据集训练人工神经网络 (ANN) 模型 ”)

【视频】R 语言实现 CNN(卷积神经网络)模型进行回归数据分析

Python 应用神经网络进行简略文本分类

R 语言用神经网络改良 Nelson-Siegel 模型拟合收益率曲线剖析

R 语言基于递归神经网络 RNN 的温度工夫序列预测

R 语言神经网络模型预测车辆数量工夫序列

R 语言中的 BP 神经网络模型剖析学生问题

matlab 应用长短期记忆(LSTM)神经网络对序列数据进行分类

R 语言实现拟合神经网络预测和后果可视化

用 R 语言实现神经网络预测股票实例

应用 PYTHON 中 KERAS 的 LSTM 递归神经网络进行工夫序列预测

python 用于 NLP 的 seq2seq 模型实例: 用 Keras 实现神经网络机器翻译

用于 NLP 的 Python:应用 Keras 的多标签文本 LSTM 神经网络分类

退出移动版