日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

(五十一)时间序列分析二:平稳时间序列分析(ARMA)

發(fā)布時(shí)間:2023/12/31 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 (五十一)时间序列分析二:平稳时间序列分析(ARMA) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

平穩(wěn)時(shí)間序列

平穩(wěn)時(shí)間序列分為嚴(yán)平穩(wěn)時(shí)間序列與寬平穩(wěn)時(shí)間序列。如果在一個(gè)時(shí)間序列中,各期數(shù)據(jù)的聯(lián)合概零分布與時(shí)間 t 無關(guān),則該序列為嚴(yán)平穩(wěn)時(shí)間序列。實(shí)際中討論的平穩(wěn)時(shí)間序列是寬平穩(wěn)時(shí)間序列,指對任意時(shí)間下,序列的均值、方差存在并為常數(shù),且自協(xié)方差函數(shù)與自相關(guān)系數(shù)只與時(shí)間間隔k有關(guān)。只有平穩(wěn)時(shí)間序列才可以進(jìn)行統(tǒng)計(jì)分析,因?yàn)槠椒€(wěn)性保證了時(shí)間序列數(shù)據(jù)都是出自同一分布。可以使用單位根檢驗(yàn)來檢驗(yàn)時(shí)間序列的平穩(wěn)性。

若一個(gè)平穩(wěn)時(shí)間序列的序列值之間沒有相關(guān)性,那么就意味著這種數(shù)據(jù)前后沒有規(guī)律,也就無法挖掘出有效的信息,這種序列稱為純隨機(jī)序列。在純隨機(jī)序列中,有一種序列稱為白噪聲序列,這種序列隨機(jī)且各期的方差一致。平穩(wěn)時(shí)間序列分析在于充分挖掘時(shí)間序列之間的關(guān)系,當(dāng)時(shí)間序列中的關(guān)系被提取出來后,剩下的序列就應(yīng)該是個(gè)白噪聲序列。

時(shí)間序列自相關(guān)與概率論中的相關(guān)定義本質(zhì)是一致的,它衡量的是序列自身在不同時(shí)刻隨機(jī)變量的相關(guān)性;偏自相關(guān)系數(shù)則剔除了兩時(shí)刻之間其他隨機(jī)變量的干擾,是更加純粹的相關(guān)。

ARMA模型與定階

1、AR模型認(rèn)為通過時(shí)間序列過去時(shí)點(diǎn)的線性組合加上白噪聲即可預(yù)測當(dāng)前時(shí)點(diǎn)。
Xt = α1Xt-1 + α2Xt-2 +…+ αpXt-p + εt ,其中 εt 是一個(gè)獨(dú)立于 Xt 的白噪聲序列。AR模型在金融模型中主要是對金融序列過去的表現(xiàn)進(jìn)行建模,如交易中的動(dòng)量與均值回歸。

2、MA模型是歷史白噪聲的線性組合。與AR最大的不同之處在于,AR模型中歷史白噪聲的影響是間接影響當(dāng)前預(yù)測值的(通過影響歷史時(shí)序值)。Xt = εt - β1εt-1 - β2εt-2 -…- βqεt-q 。在金融模型中,MA常用來刻畫沖擊效應(yīng),例如預(yù)期之外的事件。

3、ARMA模型是AR和MA模型的混合,AR( p )和MA( q )共同組成了ARMA(p,q)。Xt = α1Xt-1 + α2Xt-2 +…+ αpXt-p + εt - β1εt-1 - β2εt-2 -…- βqεt-q

如何確定p、q的值就是ARMA模型的定階問題。一個(gè)常用的定階方法是利用ACF圖和PACF圖,不同模型的ACF、PACF圖識別方法如下表:

模型AR( p )MA( q )ARMA(p,q)
ACF拖尾q階截尾拖尾
PACFp階截尾拖尾拖尾

所謂截尾指的是從某階開始均為(接近)0的性質(zhì),拖尾指的是并不存在某一階突然跳變到0而是逐漸衰減為0。

使用ACF與PACF對ARMA模型進(jìn)行定階時(shí),由于估計(jì)誤差的存在,實(shí)際中有時(shí)很難判斷AR模型與MA模型的截尾期數(shù)。在實(shí)際操作中,可以通過AIC或者BIC準(zhǔn)則識別,兩個(gè)統(tǒng)計(jì)量都是越小越好。

案例

ARMA建模的基本步驟是:檢驗(yàn)數(shù)據(jù)的平穩(wěn)性→定階→ARMA建模→模型預(yù)測→殘差白噪聲檢驗(yàn)。先導(dǎo)入庫和數(shù)據(jù),查看時(shí)序圖:

import pandas as pd import numpy as np import matplotlib.pyplot as plt import statsmodels.api as sm data= pd.read_csv(r'C:\Users\lenovo\Desktop\ts_simu200.csv',index_col='t') dates=pd.date_range(start='2017/01/01', periods=200) data.set_index(dates, inplace=True) data=data['ARMA_11_b'] data.plot(figsize=(12,8)) plt.show()

1、平穩(wěn)性檢驗(yàn)

ADF是一種常用的單位根檢驗(yàn)方法,它的原假設(shè)為序列具有單位根,即非平穩(wěn),對于一個(gè)平穩(wěn)的時(shí)序數(shù)據(jù),就需要在給定的置信水平上顯著,拒絕原假設(shè)。

temp = np.array(data) t = sm.tsa.stattools.adfuller(temp) # ADF檢驗(yàn) output=pd.DataFrame(index=['Test Statistic Value', "p-value", "Lags Used", "Number of Observations Used","Critical Value(1%)","Critical Value(5%)","Critical Value(10%)"],columns=['value']) output['value']['Test Statistic Value'] = t[0] output['value']['p-value'] = t[1] output['value']['Lags Used'] = t[2] output['value']['Number of Observations Used'] = t[3] output['value']['Critical Value(1%)'] = t[4]['1%'] output['value']['Critical Value(5%)'] = t[4]['5%'] output['value']['Critical Value(10%)'] = t[4]['10%'] output Out[1]: value Test Statistic Value -4.8944 p-value 3.57598e-05 Lags Used 3 Number of Observations Used 196 Critical Value(1%) -3.46416 Critical Value(5%) -2.8764 Critical Value(10%) -2.57469

可以看出,p-value接近于0,小于顯著性水平。原假設(shè)"序列具有單位根即非平穩(wěn)"被拒絕,因此該時(shí)間序列為平穩(wěn)的。

2、ARMA模型定階

先用第一種定階方法:利用ACF圖和PACF圖找出該序列適合的模型。

#自相關(guān)和偏自相關(guān)圖 fig = plt.figure(figsize=(12,8)) fig = sm.graphics.tsa.plot_acf(data,lags=20)#lags表示展示的滯后的階數(shù) fig = sm.graphics.tsa.plot_pacf(data,lags=20) plt.show()



很明顯圖中ACF和PACF都是拖尾的,應(yīng)該建立ARMA(p,q)模型。下面分別應(yīng)用AIC和BIC法則為我們的模型定階。為了控制計(jì)算量,根據(jù)上圖我們限制AR最大階不超過5,MA最大階不超過5:

sm.tsa.arma_order_select_ic(data,max_ar=5,max_ma=5,ic='aic')['aic_min_order']# AIC Out[3]: (1, 1) sm.tsa.arma_order_select_ic(data,max_ar=5,max_ma=5,ic='bic')['bic_min_order']# BIC Out[4]: (1, 1)

可以看出,AIC和BIC法則求解的模型階次均為(1,1),下面就來建立ARMA(1,1)模型,源數(shù)據(jù)的最后20個(gè)數(shù)據(jù)用于預(yù)測。

3、ARMA(1,1)建模

為了檢驗(yàn)擬合效果,可用經(jīng)調(diào)整的R2來測算:

order = (1,1) train = data[:-20] test = data[-20:] tempModel = sm.tsa.ARMA(train,order).fit() #擬合效果打分 delta = tempModel.fittedvalues - train score = 1 - delta.var()/train.var() print (score) 0.8106057124595238

可以發(fā)現(xiàn)擬合精度較高,接著來看預(yù)測效果。

4、模型預(yù)測

由于該數(shù)據(jù)集從2017-01-01開始,共有200條,因此我們需要預(yù)測最后20條并對比,即2017-06-30至2017-07-19。

predicts = tempModel.predict(180,199,dynamic=True) comp = pd.DataFrame() comp['original'] = test comp['predict'] = predicts comp.plot()


可以發(fā)現(xiàn)預(yù)測效果不是很好。結(jié)合之前的擬合效果來看,發(fā)現(xiàn)該模型擬合歷史數(shù)據(jù)較好,而預(yù)測差強(qiáng)人意:

import datetime fig = tempModel.plot_predict(pd.to_datetime('2017-01-01'),\pd.to_datetime('2017-01-01')+datetime.timedelta(days=220), dynamic=False, plot_insample=True) plt.show()

5、殘差白噪聲檢驗(yàn)

模型是否提取了原數(shù)據(jù)足夠的信息的重要參考是ARMA模型的殘差是否是白噪聲序列:

resid = tempModel.resid sm.graphics.tsa.plot_acf(resid, lags=50) sm.graphics.tsa.plot_pacf(resid, lags=50) plt.show()



可以看出,殘差已經(jīng)無信息可提取。在ACF圖中,殘差滯后各期均無顯著的自相關(guān)性(ACF第0期代表與自身的相關(guān)性,其值恒為1),在PACF圖中,各期也無顯著的偏自相關(guān)性。可以判定,殘差序列為白噪聲序列。

參考文獻(xiàn)

常國珍等《Python數(shù)據(jù)科學(xué):技術(shù)詳解與商業(yè)實(shí)踐》,機(jī)械工業(yè)出版社;
https://uqer.datayes.com/v3/community/share/57988677228e5ba28e05faff

總結(jié)

以上是生活随笔為你收集整理的(五十一)时间序列分析二:平稳时间序列分析(ARMA)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。