(五十一)时间序列分析二:平稳时间序列分析(ARMA)
平穩(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圖識別方法如下表:
| ACF | 拖尾 | q階截尾 | 拖尾 |
| PACF | p階截尾 | 拖尾 | 拖尾 |
所謂截尾指的是從某階開始均為(接近)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:
可以看出,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來測算:
可以發(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)人意:
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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vtkdelaunay3d的参数设置_V
- 下一篇: Win7-旗舰版-连接共享打印机时,报