最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

Python中的ARIMA模型、SARIMA模型和SARIMAX模型對(duì)時(shí)間序列預(yù)測(cè)|附代碼數(shù)據(jù)

2022-11-07 17:43 作者:拓端tecdat  | 我要投稿

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

使用ARIMA模型,您可以使用序列過去的值預(yù)測(cè)時(shí)間序列點(diǎn)擊文末“閱讀原文”獲取完整代碼數(shù)據(jù))。

  • 在本文中,我們從頭開始構(gòu)建了一個(gè)最佳ARIMA模型,并將其擴(kuò)展到Seasonal ARIMA(SARIMA)和SARIMAX模型。



  • ?

時(shí)間序列預(yù)測(cè)簡介

時(shí)間序列是在定期時(shí)間間隔內(nèi)記錄度量的序列。

根據(jù)頻率,時(shí)間序列可以是每年(例如:年度預(yù)算),每季度(例如:支出),每周(例如:銷售數(shù)量),每天(例如天氣),每小時(shí)(例如:股票價(jià)格),分鐘(例如:來電提示中的呼入電話),甚至是幾秒鐘(例如:網(wǎng)絡(luò)流量)。

為什么要預(yù)測(cè)?

因?yàn)轭A(yù)測(cè)時(shí)間序列(如需求和銷售)通常具有巨大的商業(yè)價(jià)值。

在大多數(shù)制造公司中,它驅(qū)動(dòng)基本的業(yè)務(wù)計(jì)劃,采購和生產(chǎn)活動(dòng)。預(yù)測(cè)中的任何錯(cuò)誤都會(huì)擴(kuò)散到整個(gè)供應(yīng)鏈或與此相關(guān)的任何業(yè)務(wù)環(huán)境中。因此,準(zhǔn)確地進(jìn)行預(yù)測(cè)很重要,以節(jié)省成本,這對(duì)于成功至關(guān)重要。

不僅在制造業(yè)中,時(shí)間序列預(yù)測(cè)背后的技術(shù)和概念還適用于任何業(yè)務(wù)。

現(xiàn)在,預(yù)測(cè)時(shí)間序列可以大致分為兩種類型。

如果僅使用時(shí)間序列的先前值來預(yù)測(cè)其未來值,則稱為??單變量時(shí)間序列預(yù)測(cè)。

如果您使用序列以外的其他預(yù)測(cè)變量(也稱為外生變量)進(jìn)行預(yù)測(cè),則稱為??多變量時(shí)間序列預(yù)測(cè)。

這篇文章重點(diǎn)介紹一種稱為ARIMA??建模的特殊類型的預(yù)測(cè)方法? 。

ARIMA是一種預(yù)測(cè)算法,其基于以下思想:時(shí)間序列的過去值中的信息可以單獨(dú)用于預(yù)測(cè)未來值。

  1. ARIMA模型簡介

那么ARIMA模型到底是什么?

ARIMA是一類模型,可以根據(jù)自身的過去值(即自身的滯后和滯后的預(yù)測(cè)誤差)“解釋”給定的時(shí)間序列,因此可以使用方程式預(yù)測(cè)未來價(jià)值。

任何具有模式且不是隨機(jī)白噪聲的“非季節(jié)性”時(shí)間序列都可以使用ARIMA模型進(jìn)行建模。

ARIMA模型的特征在于3個(gè)項(xiàng):p,d,q

p是AR項(xiàng)

q是MA項(xiàng)

d是使時(shí)間序列平穩(wěn)所需的差分階數(shù)

如果時(shí)間序列具有季節(jié)性模式,則需要添加季節(jié)性條件,該時(shí)間序列將變成SARIMA(“季節(jié)性ARIMA”的縮寫)。一旦完成ARIMA。

那么,“AR項(xiàng)的階數(shù)”到底意味著什么?我們先來看一下“ d”。

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

建立ARIMA模型的第一步是? 使時(shí)間序列平穩(wěn)。

為什么?

因?yàn)锳RIMA中的“自回歸”一詞意味著它是一個(gè)? 線性回歸模型 ?,使用自己的滯后作為預(yù)測(cè)因子。如您所知,線性回歸模型在預(yù)測(cè)變量不相關(guān)且彼此獨(dú)立時(shí)最有效。

那么如何使一序列平穩(wěn)呢?

最常見的方法是加以差分。即,從當(dāng)前值中減去先前的值。

因此,d的值是使序列平穩(wěn)所需的最小差分階數(shù)。如果時(shí)間序列已經(jīng)平穩(wěn),則d = 0。

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

“ p”是“自回歸”(AR)項(xiàng)的階數(shù)。它指的是要用作預(yù)測(cè)變量的Y的滯后階數(shù)。而“ q”是“移動(dòng)平均”(MA)項(xiàng)的階數(shù)。它是指應(yīng)輸入ARIMA模型的滯后預(yù)測(cè)誤差的數(shù)量。

什么是AR和MA模型

那么什么是AR和MA模型?AR和MA模型的實(shí)際數(shù)學(xué)公式是什么?

AR模型是Yt僅取決于其自身滯后的模型。也就是說,Yt是“ Yt滯后”的函數(shù)。

同樣,純??移動(dòng)平均線(僅MA)模型??是Yt僅取決于滯后預(yù)測(cè)誤差的模型。

誤差項(xiàng)是各個(gè)滯后的自回歸模型的誤差。誤差Et和E(t-1)是來自以下方程式的誤差:

那分別是AR和MA模型。

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

ARIMA模型是這樣的模型,其中時(shí)間序列至少差分一次以使其平穩(wěn),然后將AR和MA項(xiàng)組合在一起。因此,等式變?yōu)椋?/p>

因此,目的是識(shí)別p,d和q的值。

如何在ARIMA模型中找到差分階數(shù)(d)

進(jìn)行差分的目的是使時(shí)間序列平穩(wěn)。

但是您需要注意不要使序列過分差分。因?yàn)椋罘中蛄锌赡苋匀皇瞧椒€(wěn)的,這反過來將影響模型參數(shù)。

那么如何確定正確的差分階數(shù)呢?

正確的差分階數(shù)是獲得近似平穩(wěn)序列的最小差分,該序列圍繞定義的平均值波動(dòng),并且ACF曲線相當(dāng)快地達(dá)到零。

如果自相關(guān)對(duì)于許多階數(shù)之后(10個(gè)或更多)為正,則該序列需要進(jìn)一步求差。

在這種情況下,你不能真正確定兩個(gè)差分階數(shù)之間的差,然后選擇在差分序列中給出最小標(biāo)準(zhǔn)偏差的階數(shù)。

讓我們來看一個(gè)例子。

首先,我將使用Augmented Dickey Fuller測(cè)試()檢查該序列是否平穩(wěn)。

為什么?

因?yàn)?,僅當(dāng)序列非平穩(wěn)時(shí)才需要進(jìn)行差分。否則,不需要差分,即d = 0。

ADF檢驗(yàn)的零假設(shè)是時(shí)間序列是非平穩(wěn)的。因此,如果檢驗(yàn)的p值小于顯著性水平(0.05),則拒絕原假設(shè),并推斷時(shí)間序列確實(shí)是平穩(wěn)的。

因此,在我們的情況下,如果P值> 0.05,我們將繼續(xù)尋找差分的階數(shù)。

  1. from statsmodels.tsa.stattools import adfuller

  2. from numpy import log

  3. result = adfuller(df.value.dropna())

  4. print('ADF Statistic: %f' % result[0])

  5. print('p-value: %f' % result[1])

  1. ADF Statistic: -2.464240

  2. p-value: 0.124419

由于P值大于顯著性水平,因此讓我們對(duì)序列進(jìn)行差分,看看自相關(guān)圖的樣子。

  1. import numpy as np, pandas as pd

  2. from statsmodels.graphics.tsaplots import plot_acf, plot_pacf

  3. import matplotlib.pyplot as plt

  4. plt.rcParams.update({'figure.figsize':(9,7), 'figure.dpi':120})


  5. # 導(dǎo)入數(shù)據(jù)

  6. df = pd.read_csv('wwwusage.csv', names=['value'], header=0)


  7. # 原始數(shù)據(jù)

  8. fig, axes = plt.subplots(3, 2, sharex=True)

  9. axes[0, 0].plot(df.value); axes[0, 0].set_title('Original Series')

  10. plot_acf(df.value, ax=axes[0, 1])


  11. # 一階差分

  12. axes[1, 0].plot(df.value.diff()); axes[1, 0].set_title('1st Order Differencing')

  13. plot_acf(df.value.diff().dropna(), ax=axes[1, 1])


  14. # 二階差分

  15. axes[2, 0].plot(df.value.diff().diff()); axes[2, 0].set_title('2nd Order Differencing')

  16. plot_acf(df.value.diff().diff().dropna(), ax=axes[2, 1])


  17. plt.show()

點(diǎn)擊標(biāo)題查閱往期內(nèi)容

Python用RNN神經(jīng)網(wǎng)絡(luò):LSTM、GRU、回歸和ARIMA對(duì)COVID19新冠疫情人數(shù)時(shí)間序列預(yù)測(cè)

轉(zhuǎn)存失敗重新上傳取消

左右滑動(dòng)查看更多

轉(zhuǎn)存失敗重新上傳取消

01

02

03

04

差分

對(duì)于以上序列,時(shí)間序列達(dá)到平穩(wěn),具有兩個(gè)不同的階數(shù)。但是,在查看第二次差分的自相關(guān)圖時(shí),滯后會(huì)很快進(jìn)入負(fù)值區(qū)域,這表明該序列可能已經(jīng)過差分。

因此,即使該序列不是完全平穩(wěn)的(平穩(wěn)性較弱),我也將暫時(shí)將差分的階數(shù)設(shè)置為1。

  1. ## Adf 檢驗(yàn)

  2. ndiffs(y, test='adf') ?# 2


  3. # KPSS 檢驗(yàn)

  4. ndiffs(y, test='kpss') ?# 0


  5. # PP 檢驗(yàn):

  6. ndiffs(y, test='pp') ?# 2

2?0?2

如何找到AR項(xiàng)的階數(shù)(p)

下一步是確定模型是否需要AR。您可以通過檢查偏自相關(guān)(PACF)圖來找出所需的AR階數(shù)。

但是什么是PACF?

排除部分滯后的影響后,可以將偏自相關(guān)想象為序列與其滯后之間的相關(guān)性。因此,PACF的傳遞傳達(dá)了滯后與序列之間的純相關(guān)性。這樣,您將知道在AR中是否需要該滯后。

如何找到AR項(xiàng)的階數(shù)?

平穩(wěn)序列中的任何自相關(guān)都可以通過添加足夠的AR項(xiàng)進(jìn)行校正。因此,我們最初將AR項(xiàng)的階數(shù)等于超過PACF圖中顯著性區(qū)間的滯后階數(shù)。

  1. # 一階差分的偏自相關(guān)系數(shù)圖



  2. plt.show()

AR階數(shù)

可以觀察到,PACF滯后1階非常重要,因?yàn)樗h(yuǎn)高于顯著性線。滯后2階也很重要,稍微超過了顯著性區(qū)間(藍(lán)色區(qū)域)。

如何找到MA項(xiàng)的階數(shù)(q)

就像我們?cè)赑ACF圖上查看AR項(xiàng)的階數(shù)一樣,您也可以在ACF圖上查看MA項(xiàng)的階數(shù)。MA從技術(shù)上講是滯后預(yù)測(cè)的誤差。

ACF指示要消除平穩(wěn)序列中的自相關(guān)需要多少個(gè)MA項(xiàng)。

讓我們看一下差分序列的自相關(guān)圖。

  1. fig, axes = plt.subplots(1, 2, sharex=True)

  2. axes[0].plot(df.value.diff()); axes[0].set_title('1st Differencing')

  3. axes[1].set(ylim=(0,1.2))

  4. plot_acf(df.value.diff().dropna(), ax=axes[1])


  5. plt.show()

MA階數(shù)

幾個(gè)滯后遠(yuǎn)高于界限。因此,讓我們暫時(shí)將q固定為2。

如何處理時(shí)間序列差分值過低或過高

該如何處理?

如果您的序列差分值過低,通常添加一個(gè)或多個(gè)其他AR項(xiàng)即可。同樣,如果差分值過高,請(qǐng)嘗試添加其他MA項(xiàng)。

如何建立ARIMA模型

現(xiàn)在,已經(jīng)確定了p,d和q的值,已經(jīng)具備了擬合ARIMA模型的所有條件。

  1. ARIMA Model Results

  2. ==============================================================================

  3. Dep. Variable: ? ? ? ? ? ? ? ?D.value ? No. Observations: ? ? ? ? ? ? ? ? ? 99

  4. Model: ? ? ? ? ? ? ? ? ARIMA(1, 1, 2) ? Log Likelihood ? ? ? ? ? ? ? ?-253.790

  5. Method: ? ? ? ? ? ? ? ? ? ? ? css-mle ? S.D. of innovations ? ? ? ? ? ? ?3.119

  6. Date: ? ? ? ? ? ? ? ?Wed, 06 Feb 2019 ? AIC ? ? ? ? ? ? ? ? ? ? ? ? ? ?517.579

  7. Time: ? ? ? ? ? ? ? ? ? ? ? ?23:32:56 ? BIC ? ? ? ? ? ? ? ? ? ? ? ? ? ?530.555

  8. Sample: ? ? ? ? ? ? ? ? ? ? ? ? ? ? 1 ? HQIC ? ? ? ? ? ? ? ? ? ? ? ? ? 522.829


  9. =================================================================================

  10. coef ? ?std err ? ? ? ? ?z ? ? ?P>|z| ? ? ?[0.025 ? ? ?0.975]

  11. ---------------------------------------------------------------------------------

  12. const ? ? ? ? ? ? 1.1202 ? ? ?1.290 ? ? ?0.868 ? ? ?0.387 ? ? ?-1.409 ? ? ? 3.649

  13. ar.L1.D.value ? ? 0.6351 ? ? ?0.257 ? ? ?2.469 ? ? ?0.015 ? ? ? 0.131 ? ? ? 1.139

  14. ma.L1.D.value ? ? 0.5287 ? ? ?0.355 ? ? ?1.489 ? ? ?0.140 ? ? ?-0.167 ? ? ? 1.224

  15. ma.L2.D.value ? ?-0.0010 ? ? ?0.321 ? ? -0.003 ? ? ?0.998 ? ? ?-0.631 ? ? ? 0.629

  16. Roots

  17. =============================================================================

  18. Real ? ? ? ? ?Imaginary ? ? ? ? ? Modulus ? ? ? ? Frequency

  19. -----------------------------------------------------------------------------

  20. AR.1 ? ? ? ? ? ?1.5746 ? ? ? ? ? +0.0000j ? ? ? ? ? ?1.5746 ? ? ? ? ? ?0.0000

  21. MA.1 ? ? ? ? ? -1.8850 ? ? ? ? ? +0.0000j ? ? ? ? ? ?1.8850 ? ? ? ? ? ?0.5000

  22. MA.2 ? ? ? ? ?545.3515 ? ? ? ? ? +0.0000j ? ? ? ? ?545.3515 ? ? ? ? ? ?0.0000

  23. -----------------------------------------------------------------------------

該模型摘要揭示了很多信息。中間的表是系數(shù)表,其中“ coef”下的值是相應(yīng)項(xiàng)的權(quán)重。

請(qǐng)注意,這里的MA2項(xiàng)的系數(shù)接近零 。理想情況下,各個(gè)X的值應(yīng)小于0.05。

因此,讓我們?cè)跊]有MA2的情況下重建模型。

  1. ARIMA Model Results

  2. ==============================================================================

  3. Dep. Variable: ? ? ? ? ? ? ? ?D.value ? No. Observations: ? ? ? ? ? ? ? ? ? 99

  4. Model: ? ? ? ? ? ? ? ? ARIMA(1, 1, 1) ? Log Likelihood ? ? ? ? ? ? ? ?-253.790

  5. Method: ? ? ? ? ? ? ? ? ? ? ? css-mle ? S.D. of innovations ? ? ? ? ? ? ?3.119

  6. Date: ? ? ? ? ? ? ? ?Sat, 09 Feb 2019 ? AIC ? ? ? ? ? ? ? ? ? ? ? ? ? ?515.579

  7. Time: ? ? ? ? ? ? ? ? ? ? ? ?12:16:06 ? BIC ? ? ? ? ? ? ? ? ? ? ? ? ? ?525.960

  8. Sample: ? ? ? ? ? ? ? ? ? ? ? ? ? ? 1 ? HQIC ? ? ? ? ? ? ? ? ? ? ? ? ? 519.779


  9. =================================================================================

  10. coef ? ?std err ? ? ? ? ?z ? ? ?P>|z| ? ? ?[0.025 ? ? ?0.975]

  11. ---------------------------------------------------------------------------------

  12. const ? ? ? ? ? ? 1.1205 ? ? ?1.286 ? ? ?0.871 ? ? ?0.386 ? ? ?-1.400 ? ? ? 3.641

  13. ar.L1.D.value ? ? 0.6344 ? ? ?0.087 ? ? ?7.317 ? ? ?0.000 ? ? ? 0.464 ? ? ? 0.804

  14. ma.L1.D.value ? ? 0.5297 ? ? ?0.089 ? ? ?5.932 ? ? ?0.000 ? ? ? 0.355 ? ? ? 0.705

  15. Roots

  16. =============================================================================

  17. Real ? ? ? ? ?Imaginary ? ? ? ? ? Modulus ? ? ? ? Frequency

  18. -----------------------------------------------------------------------------

  19. AR.1 ? ? ? ? ? ?1.5764 ? ? ? ? ? +0.0000j ? ? ? ? ? ?1.5764 ? ? ? ? ? ?0.0000

  20. MA.1 ? ? ? ? ? -1.8879 ? ? ? ? ? +0.0000j ? ? ? ? ? ?1.8879 ? ? ? ? ? ?0.5000

  21. -----------------------------------------------------------------------------

AIC模型已減少,這很好。AR1和MA1項(xiàng)的P值已提高并且非常顯著(<< 0.05)。

讓我們繪制殘差 。

殘差密度

殘差似乎很好,均值接近零且方差均勻。讓我們使用繪制實(shí)際值和擬合值?。

實(shí)際vs擬合

設(shè)置??dynamic=False?樣本內(nèi)時(shí),滯后值用于預(yù)測(cè)。

也就是說,模型被訓(xùn)練到上一個(gè)值進(jìn)行下一個(gè)預(yù)測(cè)。

因此,我們似乎有一個(gè)不錯(cuò)的ARIMA模型。但是那是最好的嗎?

目前不能這么說,因?yàn)槲覀冞€沒有真正預(yù)測(cè)未來數(shù)據(jù),而是將預(yù)測(cè)與實(shí)際數(shù)據(jù)進(jìn)行了比較。

因此, 現(xiàn)在需要交叉驗(yàn)證。

如何使用交叉驗(yàn)證手動(dòng)找到最佳ARIMA模型

在“交叉驗(yàn)證”中,可以預(yù)測(cè)將來的數(shù)據(jù)。然后,您將預(yù)測(cè)值與實(shí)際值進(jìn)行比較。

要進(jìn)行交叉驗(yàn)證,您需要?jiǎng)?chuàng)建訓(xùn)練和測(cè)試數(shù)據(jù)集,方法是將時(shí)間序列按大約75:25的比例或基于序列時(shí)間頻率的合理比例分成兩個(gè)連續(xù)的部分。

為什么不隨機(jī)采樣訓(xùn)練數(shù)據(jù)?

這是因?yàn)闀r(shí)間序列的序列應(yīng)完整無缺,以便用于預(yù)測(cè)。

現(xiàn)在,您可以在訓(xùn)練數(shù)據(jù)集上構(gòu)建ARIMA模型,對(duì)其進(jìn)行預(yù)測(cè)和繪制。

  1. # 繪圖

  2. plt.figure(figsize=(12,5), dpi=100)

  3. plt.plot(train, label='training')

  4. plt.plot(test, label='actual')

  5. plt.plot(fc_series, label='forecast')

  6. plt.fill_between(lower_series.index, lower_series, upper_series,

  7. color='k', alpha=.15)

  8. plt.title('Forecast vs Actuals')

  9. plt.legend(loc='upper left', fontsize=8)

  10. plt.show()

預(yù)測(cè)與實(shí)際

從圖表中,ARIMA(1,1,1)模型似乎給出了方向正確的預(yù)測(cè)。實(shí)際觀察值在95%置信區(qū)間內(nèi)。

但是每個(gè)預(yù)測(cè)的預(yù)測(cè)始終低于實(shí)際。這意味著,通過在我們的預(yù)測(cè)中添加一個(gè)小的常數(shù),精度一定會(huì)提高。因此,肯定有改進(jìn)的余地。

所以,我要做的是將差分的階數(shù)增加到2,即進(jìn)行設(shè)置,??d=2?然后將p迭代地增加到5,然后將q增加到5,以查看哪個(gè)模型給出的AIC最小,同時(shí)還要尋找一個(gè)給出更接近實(shí)際情況和預(yù)測(cè)。

在執(zhí)行此操作時(shí),我會(huì)關(guān)注模型摘要中AR和MA項(xiàng)的P值。它們應(yīng)盡可能接近零,理想情況下應(yīng)小于0.05。

  1. ARIMA Model Results

  2. ==============================================================================

  3. Dep. Variable: ? ? ? ? ? ? ? D2.value ? No. Observations: ? ? ? ? ? ? ? ? ? 83

  4. Model: ? ? ? ? ? ? ? ? ARIMA(3, 2, 1) ? Log Likelihood ? ? ? ? ? ? ? ?-214.248

  5. Method: ? ? ? ? ? ? ? ? ? ? ? css-mle ? S.D. of innovations ? ? ? ? ? ? ?3.153

  6. Date: ? ? ? ? ? ? ? ?Sat, 09 Feb 2019 ? AIC ? ? ? ? ? ? ? ? ? ? ? ? ? ?440.497

  7. Time: ? ? ? ? ? ? ? ? ? ? ? ?12:49:01 ? BIC ? ? ? ? ? ? ? ? ? ? ? ? ? ?455.010

  8. Sample: ? ? ? ? ? ? ? ? ? ? ? ? ? ? 2 ? HQIC ? ? ? ? ? ? ? ? ? ? ? ? ? 446.327


  9. ==================================================================================

  10. coef ? ?std err ? ? ? ? ?z ? ? ?P>|z| ? ? ?[0.025 ? ? ?0.975]

  11. ----------------------------------------------------------------------------------

  12. const ? ? ? ? ? ? ?0.0483 ? ? ?0.084 ? ? ?0.577 ? ? ?0.565 ? ? ?-0.116 ? ? ? 0.212

  13. ar.L1.D2.value ? ? 1.1386 ? ? ?0.109 ? ? 10.399 ? ? ?0.000 ? ? ? 0.924 ? ? ? 1.353

  14. ar.L2.D2.value ? ?-0.5923 ? ? ?0.155 ? ? -3.827 ? ? ?0.000 ? ? ?-0.896 ? ? ?-0.289

  15. ar.L3.D2.value ? ? 0.3079 ? ? ?0.111 ? ? ?2.778 ? ? ?0.007 ? ? ? 0.091 ? ? ? 0.525

  16. ma.L1.D2.value ? ?-1.0000 ? ? ?0.035 ? ?-28.799 ? ? ?0.000 ? ? ?-1.068 ? ? ?-0.932

  17. Roots

  18. =============================================================================

  19. Real ? ? ? ? ?Imaginary ? ? ? ? ? Modulus ? ? ? ? Frequency

  20. -----------------------------------------------------------------------------

  21. AR.1 ? ? ? ? ? ?1.1557 ? ? ? ? ? -0.0000j ? ? ? ? ? ?1.1557 ? ? ? ? ? -0.0000

  22. AR.2 ? ? ? ? ? ?0.3839 ? ? ? ? ? -1.6318j ? ? ? ? ? ?1.6763 ? ? ? ? ? -0.2132

  23. AR.3 ? ? ? ? ? ?0.3839 ? ? ? ? ? +1.6318j ? ? ? ? ? ?1.6763 ? ? ? ? ? ?0.2132

  24. MA.1 ? ? ? ? ? ?1.0000 ? ? ? ? ? +0.0000j ? ? ? ? ? ?1.0000 ? ? ? ? ? ?0.0000

  25. -----------------------------------------------------------------------------


修訂后的預(yù)測(cè)與實(shí)際值

AIC已從515減少到440。X項(xiàng)的P值小于<0.05,這很好。

所以總的來說要好得多。

理想情況下,應(yīng)該返回多個(gè)時(shí)間點(diǎn),例如返回1、2、3和4個(gè)季度,并查看一年中各個(gè)時(shí)間點(diǎn)的預(yù)測(cè)效果如何。

時(shí)間序列預(yù)測(cè)的準(zhǔn)確性指標(biāo)

用來判斷預(yù)測(cè)的常用準(zhǔn)確性指標(biāo)是:

  1. 平均絕對(duì)百分比誤差(MAPE)

  2. 平均誤差(ME)

  3. 平均絕對(duì)誤差(MAE)

  4. 平均百分比誤差(MPE)

  5. 均方根誤差(RMSE)

  6. 滯后1自相關(guān)誤差(ACF1)

  7. 實(shí)際與預(yù)測(cè)之間的相關(guān)性(corr)

  8. 最小最大誤差(minmax)

通常,如果要比較兩個(gè)不同序列的預(yù)測(cè),則可以使用MAPE,Correlation和Min-Max Error。

為什么不使用其他指標(biāo)?

因?yàn)橹挥猩鲜鋈齻€(gè)是百分比誤差,所以誤差在0到1之間變化。因此,無論序列的規(guī)模如何,您都可以判斷預(yù)測(cè)的質(zhì)量如何。

其他誤差度量是數(shù)量。這意味著,平均值為1000的序列的RMSE為100,平均值為10的序列的RMSE為5。因此,不能真正使用它們來比較兩個(gè)不同比例時(shí)間序列的預(yù)測(cè)。

  1. forecast_accuracy(fc, test.values)


  2. #> {'mape': 0.02250131357314834,

  3. #> ?'me': 3.230783108990054,

  4. #> ?'mae': 4.548322194530069,

  5. #> ?'mpe': 0.016421001932706705,

  6. #> ?'rmse': 6.373238534601827,

  7. #> ?'acf1': 0.5105506325288692,

  8. #> ?'corr': 0.9674576513924394,

  9. #> ?'minmax': 0.02163154777672227}

大約2.2%的MAPE表示該模型在預(yù)測(cè)接下來的15個(gè)觀測(cè)值時(shí)的準(zhǔn)確性約為97.8%。

但是在工業(yè)應(yīng)用情況下,將給您提供很多時(shí)間序列來進(jìn)行預(yù)測(cè),并且定期重復(fù)進(jìn)行預(yù)測(cè)。

因此,我們需要一種使最佳模型選擇過程自動(dòng)化的方法。

如何在Python中進(jìn)行自動(dòng)Arima預(yù)測(cè)

使用逐步方法來搜索p,d,q參數(shù)的多個(gè)組合,并選擇具有最小AIC的最佳模型。

  1. print(model.summary())


  2. #> Fit ARIMA: order=(1, 2, 1); AIC=525.586, BIC=535.926, Fit time=0.060 seconds

  3. #> Fit ARIMA: order=(0, 2, 0); AIC=533.474, BIC=538.644, Fit time=0.005 seconds

  4. #> Fit ARIMA: order=(1, 2, 0); AIC=532.437, BIC=540.192, Fit time=0.035 seconds

  5. #> Fit ARIMA: order=(0, 2, 1); AIC=525.893, BIC=533.648, Fit time=0.040 seconds

  6. #> Fit ARIMA: order=(2, 2, 1); AIC=515.248, BIC=528.173, Fit time=0.105 seconds

  7. #> Fit ARIMA: order=(2, 2, 0); AIC=513.459, BIC=523.798, Fit time=0.063 seconds

  8. #> Fit ARIMA: order=(3, 2, 1); AIC=512.552, BIC=528.062, Fit time=0.272 seconds

  9. #> Fit ARIMA: order=(3, 2, 0); AIC=515.284, BIC=528.209, Fit time=0.042 seconds

  10. #> Fit ARIMA: order=(3, 2, 2); AIC=514.514, BIC=532.609, Fit time=0.234 seconds

  11. #> Total fit time: 0.865 seconds

  12. #> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?ARIMA Model Results

  13. #> ==============================================================================

  14. #> Dep. Variable: ? ? ? ? ? ? ? ? ? D2.y ? No. Observations: ? ? ? ? ? ? ? ? ? 98

  15. #> Model: ? ? ? ? ? ? ? ? ARIMA(3, 2, 1) ? Log Likelihood ? ? ? ? ? ? ? ?-250.276

  16. #> Method: ? ? ? ? ? ? ? ? ? ? ? css-mle ? S.D. of innovations ? ? ? ? ? ? ?3.069

  17. #> Date: ? ? ? ? ? ? ? ?Sat, 09 Feb 2019 ? AIC ? ? ? ? ? ? ? ? ? ? ? ? ? ?512.552

  18. #> Time: ? ? ? ? ? ? ? ? ? ? ? ?12:57:22 ? BIC ? ? ? ? ? ? ? ? ? ? ? ? ? ?528.062

  19. #> Sample: ? ? ? ? ? ? ? ? ? ? ? ? ? ? 2 ? HQIC ? ? ? ? ? ? ? ? ? ? ? ? ? 518.825

  20. #>

  21. #> ==============================================================================

  22. #> ? ? ? ? ? ? ? ? ?coef ? ?std err ? ? ? ? ?z ? ? ?P>|z| ? ? ?[0.025 ? ? ?0.975]

  23. #> ------------------------------------------------------------------------------

  24. #> const ? ? ? ? ?0.0234 ? ? ?0.058 ? ? ?0.404 ? ? ?0.687 ? ? ?-0.090 ? ? ? 0.137

  25. #> ar.L1.D2.y ? ? 1.1586 ? ? ?0.097 ? ? 11.965 ? ? ?0.000 ? ? ? 0.969 ? ? ? 1.348

  26. #> ar.L2.D2.y ? ?-0.6640 ? ? ?0.136 ? ? -4.890 ? ? ?0.000 ? ? ?-0.930 ? ? ?-0.398

  27. #> ar.L3.D2.y ? ? 0.3453 ? ? ?0.096 ? ? ?3.588 ? ? ?0.001 ? ? ? 0.157 ? ? ? 0.534

  28. #> ma.L1.D2.y ? ?-1.0000 ? ? ?0.028 ? ?-36.302 ? ? ?0.000 ? ? ?-1.054 ? ? ?-0.946

  29. #> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Roots

  30. #> =============================================================================

  31. #> ? ? ? ? ? ? ? ? ? Real ? ? ? ? ?Imaginary ? ? ? ? ? Modulus ? ? ? ? Frequency

  32. #> -----------------------------------------------------------------------------

  33. #> AR.1 ? ? ? ? ? ?1.1703 ? ? ? ? ? -0.0000j ? ? ? ? ? ?1.1703 ? ? ? ? ? -0.0000

  34. #> AR.2 ? ? ? ? ? ?0.3763 ? ? ? ? ? -1.5274j ? ? ? ? ? ?1.5731 ? ? ? ? ? -0.2116

  35. #> AR.3 ? ? ? ? ? ?0.3763 ? ? ? ? ? +1.5274j ? ? ? ? ? ?1.5731 ? ? ? ? ? ?0.2116

  36. #> MA.1 ? ? ? ? ? ?1.0000 ? ? ? ? ? +0.0000j ? ? ? ? ? ?1.0000 ? ? ? ? ? ?0.0000

  37. #> -----------------------------------------------------------------------------

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

讓我們查看殘差圖。

殘差圖

那么如何解釋?

左上方:??殘余誤差似乎在零均值附近波動(dòng),并且具有均勻的方差。

右上方:??密度圖建議均值為零的正態(tài)分布。

左下:??所有圓點(diǎn)應(yīng)與紅線完全一致。任何明顯的偏差都意味著分布偏斜。

右下:? Correlogram(又名ACF)圖顯示殘差誤差不是自相關(guān)的。任何自相關(guān)都將暗示殘差中存在某種模式,該模式未在模型中進(jìn)行解釋。因此,您將需要為模型尋找更多的X(預(yù)測(cè)變量)。

總體而言,模型很合適。讓我們預(yù)測(cè)一下。

如何在python中自動(dòng)構(gòu)建SARIMA模型

普通ARIMA模型的問題在于它不支持季節(jié)性。

如果您的時(shí)間序列定義了季節(jié)性,那么,請(qǐng)使用季節(jié)性差分的SARIMA。

季節(jié)性差分與常規(guī)差分相似,但是您可以從上一季節(jié)中減去該值,而不是減去連續(xù)項(xiàng)。

因此,該模型將表示為SARIMA(p,d,q)x(P,D,Q),其中P,D和Q分別是SAR,季節(jié)性差分的階數(shù)和SMA項(xiàng),并且??'x'?是時(shí)間的頻率序列。

如果您的模型具有明確定義的季節(jié)性模式,則對(duì)給定的頻率“ x”強(qiáng)制執(zhí)行D = 1。

這是有關(guān)構(gòu)建SARIMA模型的一些實(shí)用建議:

通常,將模型參數(shù)設(shè)置為D不得超過1。并且總的分'd + D'不超過2。如果模型具有季節(jié)性成分,請(qǐng)嘗試僅保留SAR或SMA項(xiàng)。

我們?cè)谒幬镤N售數(shù)據(jù)集上建立一個(gè)SARIMA模型 。

季節(jié)性差分

在應(yīng)用通常的差分(滯后1)之后,季節(jié)性峰值是完整的。鑒于此,應(yīng)在季節(jié)性差分后進(jìn)行糾正。

讓我們建立使用SARIMA模型。為此,您需要設(shè)置??seasonal=True,設(shè)置m=12?按月序列的頻率? 并強(qiáng)制執(zhí)行??D=1。

  1. Fit ARIMA: order=(1, 0, 1) seasonal_order=(0, 1, 1, 12); AIC=534.818, BIC=551.105, Fit time=1.742 seconds

  2. Fit ARIMA: order=(0, 0, 0) seasonal_order=(0, 1, 0, 12); AIC=624.061, BIC=630.576, Fit time=0.028 seconds

  3. Fit ARIMA: order=(1, 0, 0) seasonal_order=(1, 1, 0, 12); AIC=596.004, BIC=609.034, Fit time=0.683 seconds

  4. Fit ARIMA: order=(0, 0, 1) seasonal_order=(0, 1, 1, 12); AIC=611.475, BIC=624.505, Fit time=0.709 seconds

  5. Fit ARIMA: order=(1, 0, 1) seasonal_order=(1, 1, 1, 12); AIC=557.501, BIC=577.046, Fit time=3.687 seconds

  6. (...TRUNCATED...)

  7. Fit ARIMA: order=(3, 0, 0) seasonal_order=(1, 1, 1, 12); AIC=554.570, BIC=577.372, Fit time=2.431 seconds

  8. Fit ARIMA: order=(3, 0, 0) seasonal_order=(0, 1, 0, 12); AIC=554.094, BIC=570.381, Fit time=0.220 seconds

  9. Fit ARIMA: order=(3, 0, 0) seasonal_order=(0, 1, 2, 12); AIC=529.502, BIC=552.305, Fit time=2.120 seconds

  10. Fit ARIMA: order=(3, 0, 0) seasonal_order=(1, 1, 2, 12); AIC=nan, BIC=nan, Fit time=nan seconds

  11. Total fit time: 31.613 seconds

該模型估計(jì)了AIC,系數(shù)的P值看起來很重要。讓我們看一下殘差的診斷圖。

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

讓我們預(yù)測(cè)未來的24個(gè)月。

SARIMA –最終預(yù)測(cè)

如何用外生變量建立SARIMAX模型

我們構(gòu)建的SARIMA模型很好。

但是為了完整起見,讓我們嘗試將外部預(yù)測(cè)變量(也稱為“外生變量”)加到模型中。該模型稱為SARIMAX模型。

使用外生變量的唯一要求是您還需要在預(yù)測(cè)期內(nèi)知道變量的值。

為了演示,我將對(duì)最近36個(gè)月的數(shù)據(jù)使用經(jīng)典季節(jié)性分解中的季節(jié)性指數(shù)? 。

為什么要季節(jié)性指數(shù)?SARIMA是否已經(jīng)在模擬季節(jié)性?

你是對(duì)的。

而且,我想看看如果我們將最近的季節(jié)性模式強(qiáng)加到訓(xùn)練和預(yù)測(cè)中,模型將如何顯示。

其次,這是一個(gè)很好的演示目的變量。因此,你可以將其用作模板,并將任何變量插入代碼中。季節(jié)性指數(shù)是一個(gè)很好的外生變量,因?yàn)樗總€(gè)頻率周期都會(huì)重復(fù)一次,在這種情況下為12個(gè)月。

因此,你將始終知道季節(jié)性指數(shù)將對(duì)未來的預(yù)測(cè)保持何種價(jià)值。

讓我們計(jì)算季節(jié)性指數(shù),以便可以將其作為SARIMAX模型的(外部)預(yù)測(cè)變量。

外生變量(季節(jié)指數(shù))已準(zhǔn)備就緒。讓我們構(gòu)建SARIMAX模型。

  1. Fit ARIMA: order=(1, 0, 1) seasonal_order=(0, 1, 1, 12); AIC=536.818, BIC=556.362, Fit time=2.083 seconds

  2. Fit ARIMA: order=(0, 0, 0) seasonal_order=(0, 1, 0, 12); AIC=626.061, BIC=635.834, Fit time=0.033 seconds

  3. Fit ARIMA: order=(1, 0, 0) seasonal_order=(1, 1, 0, 12); AIC=598.004, BIC=614.292, Fit time=0.682 seconds

  4. Fit ARIMA: order=(0, 0, 1) seasonal_order=(0, 1, 1, 12); AIC=613.475, BIC=629.762, Fit time=0.510 seconds

  5. Fit ARIMA: order=(1, 0, 1) seasonal_order=(1, 1, 1, 12); AIC=559.530, BIC=582.332, Fit time=3.129 seconds

  6. (...Truncated...)

  7. Fit ARIMA: order=(3, 0, 0) seasonal_order=(0, 1, 0, 12); AIC=556.094, BIC=575.639, Fit time=0.260 seconds

  8. Fit ARIMA: order=(3, 0, 0) seasonal_order=(0, 1, 2, 12); AIC=531.502, BIC=557.562, Fit time=2.375 seconds

  9. Fit ARIMA: order=(3, 0, 0) seasonal_order=(1, 1, 2, 12); AIC=nan, BIC=nan, Fit time=nan seconds

  10. Total fit time: 30.781 seconds

因此,我們擁有帶有外生項(xiàng)的模型。但是該系數(shù)對(duì)于?x1來說很小?,因此該變量的貢獻(xiàn)可以忽略不計(jì)。讓我們繼續(xù)預(yù)測(cè)吧。

我們已有效地將模型中最近3年的最新季節(jié)性影響強(qiáng)加給模型。

讓我們預(yù)測(cè)下一個(gè)24個(gè)月。為此,你需要接下來24個(gè)月的季節(jié)性指數(shù)值。

SARIMAX預(yù)測(cè)

點(diǎn)擊文末“閱讀原文”

獲取全文完整資料。

本文選自《Python中的ARIMA模型、SARIMA模型和SARIMAX模型對(duì)時(shí)間序列預(yù)測(cè)》。

點(diǎn)擊標(biāo)題查閱往期內(nèi)容

Python用RNN神經(jīng)網(wǎng)絡(luò):LSTM、GRU、回歸和ARIMA對(duì)COVID19新冠疫情人數(shù)時(shí)間序列預(yù)測(cè)

數(shù)據(jù)分享|PYTHON用ARIMA ,ARIMAX預(yù)測(cè)商店商品銷售需求時(shí)間序列數(shù)據(jù)

Python用RNN神經(jīng)網(wǎng)絡(luò):LSTM、GRU、回歸和ARIMA對(duì)COVID19新冠疫情人數(shù)時(shí)間序列預(yù)測(cè)

【視頻】Python用LSTM長短期記憶神經(jīng)網(wǎng)絡(luò)對(duì)不穩(wěn)定降雨量時(shí)間序列進(jìn)行預(yù)測(cè)分析|數(shù)據(jù)分享

深度學(xué)習(xí)實(shí)現(xiàn)自編碼器Autoencoder神經(jīng)網(wǎng)絡(luò)異常檢測(cè)心電圖ECG時(shí)間序列

spss modeler用決策樹神經(jīng)網(wǎng)絡(luò)預(yù)測(cè)ST的股票

Python中TensorFlow的長短期記憶神經(jīng)網(wǎng)絡(luò)(LSTM)、指數(shù)移動(dòng)平均法預(yù)測(cè)股票市場(chǎng)和可視化

RNN循環(huán)神經(jīng)網(wǎng)絡(luò) 、LSTM長短期記憶網(wǎng)絡(luò)實(shí)現(xiàn)時(shí)間序列長期利率預(yù)測(cè)

結(jié)合新冠疫情COVID-19股票價(jià)格預(yù)測(cè):ARIMA,KNN和神經(jīng)網(wǎng)絡(luò)時(shí)間序列分析

深度學(xué)習(xí):Keras使用神經(jīng)網(wǎng)絡(luò)進(jìn)行簡單文本分類分析新聞組數(shù)據(jù)

用PyTorch機(jī)器學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)分類預(yù)測(cè)銀行客戶流失模型

PYTHON用LSTM長短期記憶神經(jīng)網(wǎng)絡(luò)的參數(shù)優(yōu)化方法預(yù)測(cè)時(shí)間序列洗發(fā)水銷售數(shù)據(jù)

Python用Keras神經(jīng)網(wǎng)絡(luò)序列模型回歸擬合預(yù)測(cè)、準(zhǔn)確度檢查和結(jié)果可視化

R語言深度學(xué)習(xí)卷積神經(jīng)網(wǎng)絡(luò) (CNN)對(duì) CIFAR 圖像進(jìn)行分類:訓(xùn)練與結(jié)果評(píng)估可視化

深度學(xué)習(xí):Keras使用神經(jīng)網(wǎng)絡(luò)進(jìn)行簡單文本分類分析新聞組數(shù)據(jù)

Python用LSTM長短期記憶神經(jīng)網(wǎng)絡(luò)對(duì)不穩(wěn)定降雨量時(shí)間序列進(jìn)行預(yù)測(cè)分析

R語言深度學(xué)習(xí)Keras循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)模型預(yù)測(cè)多輸出變量時(shí)間序列

R語言KERAS用RNN、雙向RNNS遞歸神經(jīng)網(wǎng)絡(luò)、LSTM分析預(yù)測(cè)溫度時(shí)間序列、 IMDB電影評(píng)分情感

Python用Keras神經(jīng)網(wǎng)絡(luò)序列模型回歸擬合預(yù)測(cè)、準(zhǔn)確度檢查和結(jié)果可視化

Python用LSTM長短期記憶神經(jīng)網(wǎng)絡(luò)對(duì)不穩(wěn)定降雨量時(shí)間序列進(jìn)行預(yù)測(cè)分析

R語言中的神經(jīng)網(wǎng)絡(luò)預(yù)測(cè)時(shí)間序列:多層感知器(MLP)和極限學(xué)習(xí)機(jī)(ELM)數(shù)據(jù)分析報(bào)告

R語言深度學(xué)習(xí):用keras神經(jīng)網(wǎng)絡(luò)回歸模型預(yù)測(cè)時(shí)間序列數(shù)據(jù)

Matlab用深度學(xué)習(xí)長短期記憶(LSTM)神經(jīng)網(wǎng)絡(luò)對(duì)文本數(shù)據(jù)進(jìn)行分類

R語言KERAS深度學(xué)習(xí)CNN卷積神經(jīng)網(wǎng)絡(luò)分類識(shí)別手寫數(shù)字圖像數(shù)據(jù)(MNIST)

MATLAB中用BP神經(jīng)網(wǎng)絡(luò)預(yù)測(cè)人體脂肪百分比數(shù)據(jù)

Python中用PyTorch機(jī)器學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)分類預(yù)測(cè)銀行客戶流失模型

R語言實(shí)現(xiàn)CNN(卷積神經(jīng)網(wǎng)絡(luò))模型進(jìn)行回歸數(shù)據(jù)分析

SAS使用鳶尾花(iris)數(shù)據(jù)集訓(xùn)練人工神經(jīng)網(wǎng)絡(luò)(ANN)模型

【視頻】R語言實(shí)現(xiàn)CNN(卷積神經(jīng)網(wǎng)絡(luò))模型進(jìn)行回歸數(shù)據(jù)分析

Python使用神經(jīng)網(wǎng)絡(luò)進(jìn)行簡單文本分類

R語言用神經(jīng)網(wǎng)絡(luò)改進(jìn)Nelson-Siegel模型擬合收益率曲線分析

R語言基于遞歸神經(jīng)網(wǎng)絡(luò)RNN的溫度時(shí)間序列預(yù)測(cè)

R語言神經(jīng)網(wǎng)絡(luò)模型預(yù)測(cè)車輛數(shù)量時(shí)間序列

R語言中的BP神經(jīng)網(wǎng)絡(luò)模型分析學(xué)生成績

matlab使用長短期記憶(LSTM)神經(jīng)網(wǎng)絡(luò)對(duì)序列數(shù)據(jù)進(jìn)行分類

R語言實(shí)現(xiàn)擬合神經(jīng)網(wǎng)絡(luò)預(yù)測(cè)和結(jié)果可視化

用R語言實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò)預(yù)測(cè)股票實(shí)例

使用PYTHON中KERAS的LSTM遞歸神經(jīng)網(wǎng)絡(luò)進(jìn)行時(shí)間序列預(yù)測(cè)

python用于NLP的seq2seq模型實(shí)例:用Keras實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò)機(jī)器翻譯

用于NLP的Python:使用Keras的多標(biāo)簽文本LSTM神經(jīng)網(wǎng)絡(luò)分類


Python中的ARIMA模型、SARIMA模型和SARIMAX模型對(duì)時(shí)間序列預(yù)測(cè)|附代碼數(shù)據(jù)的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國家法律
肇源县| 辰溪县| 平定县| 德江县| 平舆县| 禄丰县| 邹城市| 郁南县| 南和县| 渝中区| 宁化县| 通河县| 息烽县| 安阳县| 青神县| 洪雅县| 尼勒克县| 贵港市| 大城县| 准格尔旗| 营山县| 灵川县| 昆山市| 双桥区| 新昌县| 宁南县| 盱眙县| 兴业县| 广河县| 山西省| 前郭尔| 玛曲县| 阳西县| 会泽县| 澳门| 洛宁县| 康平县| 盐源县| 南丰县| 新昌县| 安仁县|