Python中的ARIMA模型、SARIMA模型和SARIMAX模型對時間序列預測

原文連接:http://tecdat.cn/?p=12272


使用ARIMA模型,您可使用序列過去的值預測時間序列。在本文中,咱們從頭開始構建了一個最佳ARIMA模型,並將其擴展到Seasonal ARIMA(SARIMA)和SARIMAX模型。css

1.時間序列預測簡介

時間序列是在按期時間間隔內記錄度量的序列。python

根據頻率,時間序列能夠是每一年(例如:年度預算),每季度(例如:支出),每週(例如:銷售數量),天天(例如天氣),每小時(例如:股票價格),分鐘(例如:來電提示中的呼入電話),甚至是幾秒鐘(例如:網絡流量)。算法

爲何要預測?

由於預測時間序列(如需求和銷售)一般具備巨大的商業價值。網絡

在大多數製造公司中,它驅動基本的業務計劃,採購和生產活動。預測中的任何錯誤都會擴散到整個供應鏈或與此相關的任何業務環境中。所以,準確地進行預測很重要,以節省成本,這對於成功相當重要。函數

不只在製造業中,時間序列預測背後的技術和概念還適用於任何業務。測試

如今,預測時間序列能夠大體分爲兩種類型。spa

若是僅使用時間序列的先前值來預測其將來值,則稱爲  單變量時間序列預測code

若是您使用序列之外的其餘預測變量(也稱爲外生變量)進行預測,則稱爲  多變量時間序列預測ci

這篇文章重點介紹一種稱爲ARIMA  建模的特殊類型的預測方法  。rem

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模型的滯後預測偏差的數量。

4.什麼是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的值。 

5.如何在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()

差分 

對於以上序列,時間序列達到平穩,具備兩個不一樣的階數。可是,在查看第二次差分的自相關圖時,滯後會很快進入負值區域,這代表該序列可能已通過差分。

所以,即便該序列不是徹底平穩的(平穩性較弱),我也將暫時將差分的階數設置爲1。

## Adf 檢驗
ndiffs(y, test='adf')  # 2

# KPSS 檢驗
ndiffs(y, test='kpss')  # 0

# PP 檢驗:
ndiffs(y, test='pp')  # 2

2 0 2

6.如何找到AR項的階數(p)

下一步是肯定模型是否須要AR。您能夠經過檢查偏自相關(PACF)圖來找出所需的AR階數。

可是什麼是PACF?

排除部分滯後的影響後,能夠將偏自相關想象爲序列與其滯後之間的相關性。所以,PACF的傳遞傳達了滯後與序列之間的純相關性。這樣,您將知道在AR中是否須要該滯後。

如何找到AR項的階數?

平穩序列中的任何自相關均可以經過添加足夠的AR項進行校訂。所以,咱們最初將AR項的階數等於超過PACF圖中顯着性區間的滯後階數。

# 一階差分的偏自相關係數圖


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:                   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模型。可是那是最好的嗎?

目前不能這麼說,由於咱們尚未真正預測將來數據,而是將預測與實際數據進行了比較。

所以, 如今須要交叉驗證。

10.如何使用交叉驗證手動找到最佳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,這很好。

因此總的來講要好得多。

理想狀況下,應該返回多個時間點,例如返回一、二、3和4個季度,並查看一年中各個時間點的預測效果如何。

11.時間序列預測的準確性指標

用來判斷預測的經常使用準確性指標是:

  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%。

可是在工業應用狀況下,將給您提供不少時間序列來進行預測,而且按期重複進行預測。

所以,咱們須要一種使最佳模型選擇過程自動化的方法。

12.如何在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
#> -----------------------------------------------------------------------------

13.如何解釋ARIMA模型中的殘差圖

讓咱們查看殘差圖。

殘差圖

那麼如何解釋?

左上方:  殘餘偏差彷佛在零均值附近波動,而且具備均勻的方差。

右上方:  密度圖建議均值爲零的正態分佈。

左下:  全部圓點應與紅線徹底一致。任何明顯的誤差都意味着分佈偏斜。

右下:  Correlogram(又名ACF)圖顯示殘差偏差不是自相關的。任何自相關都將暗示殘差中存在某種模式,該模式未在模型中進行解釋。所以,您將須要爲模型尋找更多的X(預測變量)。

整體而言,模型很合適。讓咱們預測一下。

14.如何在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 –最終預測

15.如何用外生變量創建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預測

-


最受歡迎的看法

1.在python中使用lstm和pytorch進行時間序列預測

2.python中利用長短時間記憶模型lstm進行時間序列預測分析

3.使用r語言進行時間序列(arima,指數平滑)分析

4.r語言多元copula-garch-模型時間序列預測

5.r語言copulas和金融時間序列案例

6.使用r語言隨機波動模型sv處理時間序列中的隨機波動

7.r語言時間序列tar閾值自迴歸模型

8.r語言k-shape時間序列聚類方法對股票價格時間序列聚類

9.python3用arima模型進行時間序列預測

相關文章
相關標籤/搜索