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

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

python用ARIMA模型預(yù)測CO2濃度時間序列實現(xiàn)|附代碼數(shù)據(jù)

2022-10-24 15:45 作者:拓端tecdat  | 我要投稿

全文下載鏈接:tecdat.cn/?p=20424

時間序列為預(yù)測未來數(shù)據(jù)提供了方法。根據(jù)先前的值,時間序列可用于預(yù)測經(jīng)濟,天氣的趨勢。時間序列數(shù)據(jù)的特定屬性意味著通常需要專門的統(tǒng)計方法。

在本教程中,我們將首先介紹和討論自相關(guān),平穩(wěn)性和季節(jié)性的概念,然后繼續(xù)應(yīng)用最常用的時間序列預(yù)測方法之一,稱為ARIMA。

Python中可用的一種用于建模和預(yù)測時間序列的未來點的方法稱為?SARIMAX,它表示帶有季節(jié)性回歸的?季節(jié)性自回歸綜合移動平均線。在這里,我們將主要關(guān)注ARIMA,用于擬合時間序列數(shù)據(jù)以更好地理解和預(yù)測時間序列中的未來點。

為了充分利用本教程,熟悉時間序列和統(tǒng)計信息可能會有所幫助。

在本教程中,我們將使用?Jupyter Notebook?處理數(shù)據(jù)。

第1步-安裝軟件包

要設(shè)置我們的時間序列預(yù)測環(huán)境:

cd environments ? . my_env/bin/activate 復(fù)制代碼

從這里開始,為我們的項目創(chuàng)建一個新目錄。

mkdir ARIMA cd ARIMA ?復(fù)制代碼

現(xiàn)在?我們安裝?statsmodels和數(shù)據(jù)繪圖軟件包?matplotlib。

pip?install?pandas numpy statsmodels matplotlib 復(fù)制代碼

第2步-導(dǎo)入包并加載數(shù)據(jù)

要開始使用我們的數(shù)據(jù),我們將啟動Jupyter Notebook:

要創(chuàng)建新的筆記本文件,請?從右上方的下拉菜單中選擇“?新建”??>“??Python 3?”:

首先導(dǎo)入所需的庫:

import warnings import itertools import pandas as pd import numpy as np import statsmodels.api as sm import matplotlib.pyplot as plt plt.style.use('fivethirtyeight') 復(fù)制代碼

我們將使用CO2數(shù)據(jù)集,該數(shù)據(jù)集收集了從1958年3月至2001年12月CO2樣本。我們可以將這些數(shù)據(jù)引入如下:

y?=?data.data 復(fù)制代碼

讓我們對數(shù)據(jù)進行一些預(yù)處理。每周數(shù)據(jù)處理起來比較麻煩,因為時間比較短,所以讓我們使用每月平均值。我們還可以使用 fillna()?函數(shù)?來確保時間序列中沒有缺失值。

# “ MS”字符串按月初將數(shù)據(jù)分組到存儲中 y = y['co2'].resample('MS').mean() # 填充缺失值 y = y.fillna(y.bfill()) 復(fù)制代碼Output co2 1958-03-01 ?316.100000 1958-04-01 ?317.200000 1958-05-01 ?317.433333 ... 2001-11-01 ?369.375000 2001-12-01 ?371.020000 復(fù)制代碼

讓我們用數(shù)據(jù)可視化探索這個時間序列:

plt.show() 復(fù)制代碼

當我們繪制數(shù)據(jù)時,可以發(fā)現(xiàn)時間序列具有明顯的季節(jié)性模式,并且總體趨勢呈上升趨勢。

點擊標題查閱往期內(nèi)容

R語言中的時間序列分析模型:ARIMA-ARCH / GARCH模型分析股票價格

左右滑動查看更多

01

02

03

04

現(xiàn)在,我們繼續(xù)使用ARIMA進行時間序列預(yù)測。

第3步-ARIMA時間序列模型

在時間序列預(yù)測中使用的最常見的方法是被稱為ARIMA模型。ARIMA是可以擬合時間序列數(shù)據(jù)的模型,以便更好地理解或預(yù)測序列中的未來點。

有三種不同的整數(shù)(p,??d,??q)是用來參數(shù)化ARIMA模型。因此,ARIMA模型用符號表示?ARIMA(p, d, q)。這三個參數(shù)共同說明了數(shù)據(jù)集中的季節(jié)性,趨勢和噪聲:

  • p?是模型的?自回歸?部分。它使我們能夠?qū)⑦^去值的影響納入模型。從直覺上講,這類似于聲明如果過去三天天氣一直溫暖,明天可能會溫暖。

  • d?是?模型的差分部分。包含了要應(yīng)用于時間序列的差分量(即,要從當前值中減去的過去時間點的數(shù)量)。從直覺上講,這類似于如果最近三天的溫差很小,則明天的溫度可能相同。

  • q?是?模型的?_移動平均_部分。這使我們可以將模型的誤差設(shè)置為過去在先前時間點觀察到的誤差值的線性組合。

在處理季節(jié)性影響時,我們使用?季節(jié)性?ARIMA(表示為)??ARIMA(p,d,q)(P,D,Q)s。這里,?(p, d, q)?是非季節(jié)參數(shù),盡管?(P, D, Q)?遵循相同的定義,但適用于時間序列的季節(jié)分量。該術(shù)語?s?是時間序列的周期性(4?季度,?12?每年)。

相關(guān)視頻

**

拓端

**

拓端

**

拓端

**

拓端

**

拓端

**

拓端

**

拓端

在下一節(jié)中,我們將描述如何為季節(jié)性ARIMA時間序列模型自動識別最佳參數(shù)的過程。

第4步-ARIMA時間序列模型的參數(shù)選擇

當希望使用季節(jié)性ARIMA模型擬合時間序列數(shù)據(jù)時,我們的首要目標是找到ARIMA(p,d,q)(P,D,Q)s?可優(yōu)化目標指標的值?。有許多準則和最佳實踐可以實現(xiàn)此目標,但是ARIMA模型的正確參數(shù)化可能是艱苦的手動過程,需要領(lǐng)域?qū)I(yè)知識和時間。其他統(tǒng)計編程語言(例如)?R?提供?解決此問題的自動化方法,但這些方法尚未移植到Python。在本節(jié)中,我們將通過編寫Python代碼以編程方式選擇ARIMA(p,d,q)(P,D,Q)s?時間序列模型的最佳參數(shù)值來解決此問題?。

我們將使用“網(wǎng)格搜索”來迭代探索參數(shù)的不同組合。對于每種參數(shù)組合,我們使用?模塊中的SARIMAX()?擬合新的季節(jié)性ARIMA模型。探索了整個參數(shù)范圍,我們的最佳參數(shù)集便會成為產(chǎn)生最佳性能的一組參數(shù)。讓我們首先生成我們要評估的各種參數(shù)組合:

#定義p,d和q參數(shù),使其取0到2之間的任何值 p = d = q = range(0, 2) # 生成p、q和q三元組的所有不同組合 pdq = list(itertools.product(p, d, q)) # 生成所有不同的季節(jié)性p,q和q組合 seasonal_pdq = [(x[0], x[1], x[2], 12) for x in list(itertools.product(p, d, q))] 復(fù)制代碼Output Examples of parameter combinations for Seasonal ARIMA... SARIMAX: (0, 0, 1) x (0, 0, 1, 12) SARIMAX: (0, 0, 1) x (0, 1, 0, 12) SARIMAX: (0, 1, 0) x (0, 1, 1, 12) SARIMAX: (0, 1, 0) x (1, 0, 0, 12) 復(fù)制代碼

現(xiàn)在,我們可以使用上面定義的三元組參數(shù)來自動化訓(xùn)練和評估不同組合上的ARIMA模型的過程。在統(tǒng)計和機器學(xué)習(xí)中,此過程稱為用于模型選擇的網(wǎng)格搜索(或超參數(shù)優(yōu)化)。

在評估和比較不同參數(shù)的統(tǒng)計模型時,可以根據(jù)其擬合數(shù)據(jù)的程度或其準確預(yù)測未來數(shù)據(jù)點的能力來對每個模型進行排名。我們將使用?AIC?(Akaike Information Criterion)值,該值可通過使用擬合的ARIMA模型方便地返回?statsmodels。AIC?在考慮模型整體復(fù)雜性的同時,?測量模型擬合數(shù)據(jù)的程度。與使用較少特征以達到相同擬合優(yōu)度的模型相比,在使用大量特征的模型將獲得更大的AIC得分。因此,我們尋找產(chǎn)生最低AIC?的模型?。

下面的代碼塊通過參數(shù)組合進行迭代,并使用中的?SARIMAX?函數(shù)?statsmodels?來擬合相應(yīng)的Season ARIMA模型。擬合每個?SARIMAX()模型后,代碼將輸出出它們各自的?AIC?分數(shù)。

warnings.filterwarnings("ignore") # 指定忽略警告消息 ? ? ? ? try: ? ? ? ? ? ? mod = sm.tsa.statespace.SARIMAX(y, ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? order=param, ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? seasonal_order=param_seasonal, ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? enforce_stationarity=False, ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? enforce_invertibility=False) 復(fù)制代碼

上面的代碼產(chǎn)生以下結(jié)果

Output SARIMAX(0, 0, 0)x(0, 0, 1, 12) - AIC:6787.3436240402125 SARIMAX(0, 0, 0)x(0, 1, 1, 12) - AIC:1596.711172764114 SARIMAX(0, 0, 0)x(1, 0, 0, 12) - AIC:1058.9388921320026 SARIMAX(0, 0, 0)x(1, 0, 1, 12) - AIC:1056.2878315690562 SARIMAX(0, 0, 0)x(1, 1, 0, 12) - AIC:1361.6578978064144 SARIMAX(0, 0, 0)x(1, 1, 1, 12) - AIC:1044.7647912940095 ... ... ... SARIMAX(1, 1, 1)x(1, 0, 0, 12) - AIC:576.8647112294245 SARIMAX(1, 1, 1)x(1, 0, 1, 12) - AIC:327.9049123596742 SARIMAX(1, 1, 1)x(1, 1, 0, 12) - AIC:444.12436865161305 SARIMAX(1, 1, 1)x(1, 1, 1, 12) - AIC:277.7801413828764 復(fù)制代碼

代碼的輸出表明,?SARIMAX(1, 1, 1)x(1, 1, 1, 12)?該AIC?值的最低?值為277.78。因此,在我們考慮的所有模型中,我們應(yīng)該將其視為最佳選擇。

步驟5 —擬合ARIMA時間序列模型

使用網(wǎng)格搜索,我們確定了一組參數(shù),這些參數(shù)對我們的時間序列數(shù)據(jù)產(chǎn)生了最佳擬合模型。我們可以繼續(xù)更深入地分析此模型。

我們將從將最佳參數(shù)值插入新?SARIMAX?模型開始:

results?= mod.fit() 復(fù)制代碼Output ============================================================================== ? ? ? ? ? ? ? ? ?coef ? ?std err ? ? ? ? ?z ? ? ?P>|z| ? ? ?[0.025 ? ? ?0.975] ------------------------------------------------------------------------------ ar.L1 ? ? ? ? ?0.3182 ? ? ?0.092 ? ? ?3.443 ? ? ?0.001 ? ? ? 0.137 ? ? ? 0.499 ma.L1 ? ? ? ? -0.6255 ? ? ?0.077 ? ? -8.165 ? ? ?0.000 ? ? ?-0.776 ? ? ?-0.475 ar.S.L12 ? ? ? 0.0010 ? ? ?0.001 ? ? ?1.732 ? ? ?0.083 ? ? ?-0.000 ? ? ? 0.002 ma.S.L12 ? ? ?-0.8769 ? ? ?0.026 ? ?-33.811 ? ? ?0.000 ? ? ?-0.928 ? ? ?-0.826 sigma2 ? ? ? ? 0.0972 ? ? ?0.004 ? ? 22.634 ? ? ?0.000 ? ? ? 0.089 ? ? ? 0.106 ============================================================================== 復(fù)制代碼

summary?輸出結(jié)果產(chǎn)生的?屬性?SARIMAX?返回了大量信息,但是我們將注意力集中在系數(shù)上。?coef?列顯示每個函數(shù)的權(quán)重(即重要性)以及每個函數(shù)如何影響時間序列。?P>|z|?列告知我們每個特征權(quán)重的重要性。在這里,每個權(quán)重的p值都小于或接近?0.05,因此將所有權(quán)重保留在我們的模型中是合理的。

在擬合季節(jié)性ARIMA模型時,重要的是運行模型診斷程序,以確保沒有違反模型所做的假設(shè)。

plt.show() 復(fù)制代碼

我們主要關(guān)心的是確保模型的殘差不相關(guān)并且零均值正態(tài)分布。如果季節(jié)性ARIMA模型不滿足這些屬性,則表明它可以進一步改善。

在這種情況下,我們的模型診斷建議根據(jù)以下內(nèi)容正態(tài)分布模型殘差:

  • 在右上角的圖中,我們看到紅線?KDE?靠近?N(0,1)?紅線,(其中?N(0,1))是均值0?和標準偏差?為的正態(tài)分布。這很好地表明了殘差呈正態(tài)分布。

  • ?左下方的 qq圖顯示,殘差(藍色點)分布遵循從標準正態(tài)分布。同樣,表明殘差是正態(tài)分布的。

  • 隨時間推移的殘差(左上圖)沒有顯示任何明顯的季節(jié)性變化,而是白噪聲。右下方的自相關(guān)(即相關(guān)圖)圖證實了這一點,該圖表明時間序列殘差有較低的相關(guān)性。

這些觀察結(jié)果使我們得出結(jié)論,我們的模型產(chǎn)生了令人滿意的擬合度,可以幫助我們理解時間序列數(shù)據(jù)并預(yù)測未來價值。

盡管我們具有令人滿意的擬合度,但可以更改季節(jié)性ARIMA模型的某些參數(shù)以改善模型擬合度。因此,如果擴大網(wǎng)格搜索范圍,我們可能會找到更好的模型。

第6步-驗證預(yù)測

我們已經(jīng)為時間序列獲得了模型,現(xiàn)在可以將其用于產(chǎn)生預(yù)測。我們首先將預(yù)測值與時間序列的實際值進行比較,這將有助于我們了解預(yù)測的準確性。

pred_ci?= pred.conf_int() 復(fù)制代碼

上面的代碼表示預(yù)測從1998年1月開始。

我們可以繪制CO2時間序列的實際值和預(yù)測值,評估我們的效果。

ax.fill_between(pred_ci.index, ? ? ? ? ? ? ? ? pred_ci.iloc[:, 0], ? ? ? ? ? ? ? ? pred_ci.iloc[:, 1], color='k', alpha=.2) plt.show() 復(fù)制代碼

總體而言,我們的預(yù)測與真實值非常吻合,顯示出總體增長趨勢。

量化我們的預(yù)測準確性也很有用。我們將使用MSE(均方誤差)來總結(jié)我們預(yù)測的平均誤差。對于每個預(yù)測值,我們計算其與真實值的差異并將結(jié)果平方。對結(jié)果進行平方,在計算總體均值時正/負差不會互相抵消。

y_truth = y['1998-01-01':] # 計算均方誤差 mse = ((y_forecasted - y_truth) ** 2).mean() 復(fù)制代碼Output 我們的預(yù)測均方誤差為 0.07 復(fù)制代碼

我們提前一步進行預(yù)測的MSE得出的值為?0.07,因為它接近于0,因此非常低。如果MSE為0,則估算以理想的精度預(yù)測參數(shù)的觀測值,這是理想的情況,但是這通常是不可能的。

但是,使用動態(tài)預(yù)測可以更好地表示我們的真實預(yù)測能力。在這種情況下,我們僅使用時間序列中直到某個特定點的信息,之后,將使用以前的預(yù)測時間點中的值生成預(yù)測。

在下面的代碼塊中,我們指定從1998年1月起開始計算動態(tài)預(yù)測和置信區(qū)間。

通過繪制時間序列的觀察值和預(yù)測值,我們可以看到,即使使用動態(tài)預(yù)測,總體預(yù)測也是準確的。所有預(yù)測值(紅線)與真實情況(藍線)非常接近,并且都在我們預(yù)測的置信區(qū)間內(nèi)。

我們再次通過計算MSE來量化預(yù)測的效果:

# 提取時間序列的預(yù)測值和真實值 y_forecasted = pred_dynamic.predicted_mean y_truth = y['1998-01-01':] # 計算均方誤差 mse = ((y_forecasted - y_truth) ** 2).mean() print('The Mean Squared Error of our forecasts is {}'.format(round(mse, 2))) 復(fù)制代碼Output 我們的預(yù)測均方誤差為 1.01 復(fù)制代碼

從動態(tài)預(yù)測獲得的預(yù)測值產(chǎn)生的MSE為1.01。這比前面的略高,這是可以預(yù)期的,因為我們所依賴的時間序列的歷史數(shù)據(jù)較少。

提前一步和動態(tài)預(yù)測都確認此時間序列模型有效。但是,時間序列預(yù)測的興趣在于能夠提前預(yù)測未來值。

第7步-生成和可視化預(yù)測

最后,我們描述了如何利用季節(jié)性ARIMA時間序列模型來預(yù)測未來數(shù)據(jù)。

# 獲取未來500步的預(yù)測 pred_uc = results.get_forecast(steps=500) # 獲取預(yù)測的置信區(qū)間 pred_ci = pred_uc.conf_int() 復(fù)制代碼

我們可以使用此代碼的輸出來繪制時間序列并預(yù)測其未來值。

?

現(xiàn)在,我們所生成的預(yù)測和相關(guān)的置信區(qū)間都可以用于進一步了解時間序列并預(yù)測預(yù)期結(jié)果。我們的預(yù)測表明,時間序列預(yù)計將繼續(xù)穩(wěn)定增長。

隨著我們對未來的進一步預(yù)測,置信區(qū)間會越來越大。

結(jié)論

在本教程中,我們描述了如何在Python中實現(xiàn)季節(jié)性ARIMA模型。展示了如何進行模型診斷以及如何生成二氧化碳時間序列的預(yù)測。

您可以嘗試以下一些其他操作:

  • 更改動態(tài)預(yù)測的開始日期,以了解這如何影響預(yù)測的整體質(zhì)量。

  • 嘗試更多的參數(shù)組合,以查看是否可以提高模型的擬合優(yōu)度。

  • 選擇其他指標選擇最佳模型。例如,我們使用該?AIC?找到最佳模型。

本文摘選??ARIMA模型預(yù)測CO2濃度時間序列-python實現(xiàn)??,點擊“閱讀原文”獲取全文完整資料。

點擊標題查閱往期內(nèi)容

R語言ARIMA-GARCH波動率模型預(yù)測股票市場蘋果公司日收益率時間序列
R語言中的時間序列分析模型:ARIMA-ARCH / GARCH模型分析股票價格
R語言多元Copula GARCH 模型時間序列預(yù)測
python中的copula:Frank、Clayton和Gumbel copula模型估計與可視化
R語言中的copula GARCH模型擬合時間序列并模擬分析
matlab使用Copula仿真優(yōu)化市場風(fēng)險數(shù)據(jù)VaR分析
R語言多元Copula GARCH 模型時間序列預(yù)測
R語言Copula函數(shù)股市相關(guān)性建模:模擬Random Walk(隨機游走)
R語言實現(xiàn) Copula 算法建模依賴性案例分析報告
R語言ARMA-GARCH-COPULA模型和金融時間序列案例
R語言基于copula的貝葉斯分層混合模型的診斷準確性研究
R語言COPULA和金融時間序列案例
matlab使用Copula仿真優(yōu)化市場風(fēng)險數(shù)據(jù)VaR分析
matlab使用Copula仿真優(yōu)化市場風(fēng)險
R語言多元CopulaGARCH模型時間序列預(yù)測
R語言Copula的貝葉斯非參數(shù)MCMC估計
R語言COPULAS和金融時間序列R語言乘法GARCH模型對高頻交易數(shù)據(jù)進行波動性預(yù)測
R語言GARCH-DCC模型和DCC(MVT)建模估計
Python使用GARCH,EGARCH,GJR-GARCH模型和蒙特卡洛模擬進行股價預(yù)測
R語言時間序列GARCH模型分析股市波動率
R語言ARMA-EGARCH模型、集成預(yù)測算法對SPX實際波動率進行預(yù)測
matlab實現(xiàn)MCMC的馬爾可夫轉(zhuǎn)換ARMA - GARCH模型估計
Python使用GARCH,EGARCH,GJR-GARCH模型和蒙特卡洛模擬進行股價預(yù)測
使用R語言對S&P500股票指數(shù)進行ARIMA + GARCH交易策略
R語言用多元ARMA,GARCH ,EWMA, ETS,隨機波動率SV模型對金融時間序列數(shù)據(jù)建模
R語言股票市場指數(shù):ARMA-GARCH模型和對數(shù)收益率數(shù)據(jù)探索性分析
R語言多元Copula GARCH 模型時間序列預(yù)測
R語言使用多元AR-GARCH模型衡量市場風(fēng)險
R語言中的時間序列分析模型:ARIMA-ARCH / GARCH模型分析股票價格
R語言用Garch模型和回歸模型對股票價格分析
GARCH(1,1),MA以及歷史模擬法的VaR比較
matlab估計arma garch 條件均值和方差模型
R語言ARMA-GARCH-COPULA模型和金融時間序列案例


python用ARIMA模型預(yù)測CO2濃度時間序列實現(xiàn)|附代碼數(shù)據(jù)的評論 (共 條)

分享到微博請遵守國家法律
嘉鱼县| 武宣县| 云霄县| 吴江市| 新泰市| 连南| 仁化县| 北流市| 衡山县| 巍山| 织金县| 沙坪坝区| 聊城市| 济宁市| 陆河县| 武鸣县| 林州市| 赤峰市| 诸暨市| 福清市| 内乡县| 石家庄市| 华阴市| 新乡县| 内江市| 泰兴市| 蛟河市| 临潭县| 郑州市| 扎赉特旗| 文山县| 青田县| 西丰县| 定陶县| 威海市| 剑阁县| 佳木斯市| 马边| 阿拉善盟| 和顺县| 仙游县|