[python] 時(shí)間序列分析之ARIMA
本文關(guān)鍵詞:時(shí)間序列分析
更多相關(guān)文章: python 時(shí)間序列 分析 ARIMA
1 時(shí)間序列與時(shí)間序列分析
在生產(chǎn)和科學(xué)研究中,對(duì)某一個(gè)或者一組變量 所得到的離散數(shù)字組成的序列集合,稱之為時(shí)間序列。
時(shí)間序列分析是根據(jù)系統(tǒng)觀察得到的時(shí)間序列數(shù)據(jù),通過(guò)曲線擬合和參數(shù)估計(jì)來(lái)建立數(shù)學(xué)模型的理論和方法。時(shí)間序列分析常用于國(guó)民宏觀經(jīng)濟(jì)控制、市場(chǎng)潛力預(yù)測(cè)、氣象預(yù)測(cè)、農(nóng)作物害蟲災(zāi)害預(yù)報(bào)等各個(gè)方面。
原理大概清楚,實(shí)踐卻還是會(huì)有諸多問(wèn)題。相比較R語(yǔ)言,Python在做時(shí)間序列分析的資料相對(duì)少很多。下面就通過(guò)Python語(yǔ)言詳細(xì)解析后三個(gè)步驟的實(shí)現(xiàn)過(guò)程。
文中使用到這些基礎(chǔ)庫(kù): 。 對(duì)其調(diào)用如下
這里我們使用一個(gè)具有周期性的測(cè)試數(shù)據(jù),進(jìn)行分析。
數(shù)據(jù)如下:
dta=[10930,10318,10595,10972,7706,6756,9092,10551,9722,10913,11151,8186,6422,
6337,11649,11652,10310,12043,7937,6476,9662,9570,9981,9331,9449,6773,6304,9355,
10477,10148,10395,11261,8713,7299,10424,10795,11069,11602,11427,9095,7707,10767,
12136,12812,12006,12528,10329,7818,11719,11683,12603,11495,13670,11337,10232,
13261,13230,15535,16837,19598,14823,11622,19391,18177,19994,14723,15694,13248,
9543,12872,13101,15053,12619,13749,10228,9725,14729,12518,14564,15085,14722,
11999,9390,13481,14795,15845,15271,14686,11054,10395]
ARIMA 模型對(duì)時(shí)間序列的要求是平穩(wěn)型。因此,當(dāng)你得到一個(gè)非平穩(wěn)的時(shí)間序列時(shí),首先要做的即是做時(shí)間序列的差分,直到得到一個(gè)平穩(wěn)時(shí)間序列。如果你對(duì)時(shí)間序列做d次差分才能得到一個(gè)平穩(wěn)序列,那么可以使用ARIMA(p,d,q)模型,其中d是差分次數(shù)。
fig = plt.figure(figsize=(12,8)) ax1= fig.add_subplot(111) diff1 = dta.diff(1) diff1.plot(ax=ax1)一階差分的時(shí)間序列的均值和方差已經(jīng)基本平穩(wěn),不過(guò)我們還是可以比較一下二階差分的效果 fig = plt.figure(figsize=(12,8)) ax2= fig.add_subplot(111) diff2 = dta.diff(2) diff2.plot(ax=ax2)
可以看出二階差分后的時(shí)間序列與一階差分相差不大,并且二者隨著時(shí)間推移,時(shí)間序列的均值和方差保持不變。因此可以將差分次數(shù)d設(shè)置為1。
其實(shí)還有針對(duì)平穩(wěn)的檢驗(yàn),叫“ADF單位根平穩(wěn)型檢驗(yàn)”,以后再更。 3.3 合適的
現(xiàn)在我們已經(jīng)得到一個(gè)平穩(wěn)的時(shí)間序列,接來(lái)下就是選擇合適的ARIMA模型,即ARIMA模型中合適的。
第一步我們要先檢查平穩(wěn)時(shí)間序列的自相關(guān)圖和偏自相關(guān)圖。
其中l(wèi)ags 表示滯后的階數(shù),以上分別得到acf 圖和pacf 圖
通過(guò)兩圖觀察得到:
* 自相關(guān)圖顯示滯后有三個(gè)階超出了置信邊界;
* 偏相關(guān)圖顯示在滯后1至7階(lags 1,2,…,7)時(shí)的偏自相關(guān)系數(shù)超出了置信邊界,從lag 7之后偏自相關(guān)系數(shù)值縮小至0
則有以下模型可以供選擇:
1. ARMA(0,1)模型:即自相關(guān)圖在滯后1階之后縮小為0,且偏自相關(guān)縮小至0,則是一個(gè)階數(shù)q=1的移動(dòng)平均模型;
2. ARMA(7,0)模型:即偏自相關(guān)圖在滯后7階之后縮小為0,且自相關(guān)縮小至0,則是一個(gè)階層p=3的自回歸模型;
3. ARMA(7,1)模型:即使得自相關(guān)和偏自相關(guān)都縮小至零。則是一個(gè)混合模型。
4. …還可以有其他供選擇的模型
現(xiàn)在有以上這么多可供選擇的模型,我們通常采用ARMA模型的AIC法則。我們知道:增加自由參數(shù)的數(shù)目提高了擬合的優(yōu)良性,AIC鼓勵(lì)數(shù)據(jù)擬合的優(yōu)良性但是盡量避免出現(xiàn)過(guò)度擬合(Overfitting)的情況。所以優(yōu)先考慮的模型應(yīng)是AIC值最小的那一個(gè)。赤池信息準(zhǔn)則的方法是尋找可以最好地解釋數(shù)據(jù)但包含最少自由參數(shù)的模型。不僅僅包括AIC準(zhǔn)則,目前選擇模型常用如下準(zhǔn)則:
* AIC=-2 ln(L) + 2 k 中文名字:赤池信息量 akaike information criterion
* BIC=-2 ln(L) + ln(n)*k 中文名字:貝葉斯信息量 bayesian information criterion
* HQ=-2 ln(L) + ln(ln(n))*k hannan-quinn criterion
構(gòu)造這些統(tǒng)計(jì)量所遵循的統(tǒng)計(jì)思想是一致的,就是在考慮擬合殘差的同時(shí),依自變量個(gè)數(shù)施加“懲罰”。但要注意的是,這些準(zhǔn)則不能說(shuō)明某一個(gè)模型的精確度,也即是說(shuō),對(duì)于三個(gè)模型A,B,C,我們能夠判斷出C模型是最好的,但不能保證C模型能夠很好地刻畫數(shù)據(jù),因?yàn)橛锌赡苋齻(gè)模型都是糟糕的。 arma_mod20 = sm.tsa.ARMA(dta,(7,0)).fit() print(arma_mod20.aic,arma_mod20.bic,arma_mod20.hqic) arma_mod30 = sm.tsa.ARMA(dta,(0,1)).fit() print(arma_mod30.aic,arma_mod30.bic,arma_mod30.hqic) arma_mod40 = sm.tsa.ARMA(dta,(7,1)).fit() print(arma_mod40.aic,arma_mod40.bic,arma_mod40.hqic) arma_mod50 = sm.tsa.ARMA(dta,(8,0)).fit() print(arma_mod50.aic,arma_mod50.bic,arma_mod50.hqic)
可以看到ARMA(7,0)的aic,bic,hqic均最小,因此是最佳模型。 3.4 模型檢驗(yàn)
在指數(shù)平滑模型下,觀察ARIMA模型的殘差是否是平均值為0且方差為常數(shù)的正態(tài)分布(服從零均值、方差不變的正態(tài)分布),同時(shí)也要觀察連續(xù)殘差是否(自)相關(guān)。
3.4.1 我們對(duì)ARMA(7,0)模型所產(chǎn)生的殘差做自相關(guān)圖 fig = plt.figure(figsize=(12,8)) ax1 = fig.add_subplot(211) fig = sm.graphics.tsa.plot_acf(resid.values.squeeze(), lags=40, ax=ax1) ax2 = fig.add_subplot(212) fig = sm.graphics.tsa.plot_pacf(resid, lags=40, ax=ax2)德賓-沃森(Durbin-Watson)檢驗(yàn)。德賓-沃森檢驗(yàn),簡(jiǎn)稱D-W檢驗(yàn),是目前檢驗(yàn)自相關(guān)性最常用的方法,但它只使用于檢驗(yàn)一階自相關(guān)性。因?yàn)樽韵嚓P(guān)系數(shù)ρ的值介于-1和1之間,所以 0≤DW≤4。并且DW=O=>ρ=1 即存在正自相關(guān)性
DW=4<=>ρ=-1 即存在負(fù)自相關(guān)性
DW=2<=>ρ=0 即不存在(一階)自相關(guān)性
因此,當(dāng)DW值顯著的接近于O或4時(shí),則存在自相關(guān)性,而接近于2時(shí),則不存在(一階)自相關(guān)性。這樣只要知道DW統(tǒng)計(jì)量的概率分布,在給定的顯著水平下,根據(jù)臨界值的位置就可以對(duì)原假設(shè)H0進(jìn)行檢驗(yàn)。
檢驗(yàn)結(jié)果是2.02424743723,說(shuō)明不存在自相關(guān)性。
3.4.3 觀察是否符合正態(tài)分布這里使用QQ圖,它用于直觀驗(yàn)證一組數(shù)據(jù)是否來(lái)自某個(gè)分布,或者驗(yàn)證某兩組數(shù)據(jù)是否來(lái)自同一(族)分布。在教學(xué)和軟件中常用的是檢驗(yàn)數(shù)據(jù)是否來(lái)自于正態(tài)分布。QQ圖細(xì)節(jié),下次再更。
resid = arma_mod20.resid#殘差 fig = plt.figure(figsize=(12,8)) ax = fig.add_subplot(111) fig = qqplot(resid, line='q', ax=ax, fit=True)Ljung-Box test是對(duì)randomness的檢驗(yàn),或者說(shuō)是對(duì)時(shí)間序列是否存在滯后相關(guān)的一種統(tǒng)計(jì)檢驗(yàn)。對(duì)于滯后相關(guān)的檢驗(yàn),我們常常采用的方法還包括計(jì)算ACF和PCAF并觀察其圖像,但是無(wú)論是ACF還是PACF都僅僅考慮是否存在某一特定滯后階數(shù)的相關(guān)。LB檢驗(yàn)則是基于一系列滯后階數(shù),判斷序列總體的相關(guān)性或者說(shuō)隨機(jī)性是否存在。
時(shí)間序列中一個(gè)最基本的模型就是高斯白噪聲序列。而對(duì)于ARIMA模型,其殘差被假定為高斯白噪聲序列,所以當(dāng)我們用ARIMA模型去擬合數(shù)據(jù)時(shí),擬合后我們要對(duì)殘差的估計(jì)序列進(jìn)行LB檢驗(yàn),,判斷其是否是高斯白噪聲,如果不是,那么就說(shuō)明ARIMA模型也許并不是一個(gè)適合樣本的模型。
檢驗(yàn)的結(jié)果就是看最后一列前十二行的檢驗(yàn)概率(一般觀察滯后1~12階),如果檢驗(yàn)概率小于給定的顯著性水平,比如0.05、0.10等就拒絕原假設(shè),其原假設(shè)是相關(guān)系數(shù)為零。就結(jié)果來(lái)看,如果取顯著性水平為0.05,那么相關(guān)系數(shù)與零沒(méi)有顯著差異,即為白噪聲序列。 3.5 模型預(yù)測(cè)
模型確定之后,就可以開(kāi)始進(jìn)行預(yù)測(cè)了,我們對(duì)未來(lái)十年的數(shù)據(jù)進(jìn)行預(yù)測(cè)。
predict_sunspots = arma_mod20.predict('2090', '2100', dynamic=True) print(predict_sunspots) fig, ax = plt.subplots(figsize=(12, 8)) ax = dta.ix['2001':].plot(ax=ax) predict_sunspots.plot(ax=ax)前面90個(gè)數(shù)據(jù)為測(cè)試數(shù)據(jù),最后10個(gè)為預(yù)測(cè)數(shù)據(jù);從圖形來(lái),預(yù)測(cè)結(jié)果較為合理。至此,本案例的時(shí)間序列分析也就結(jié)束了。 參考文獻(xiàn)與推薦閱讀
本文編號(hào):871998
本文鏈接:http://sikaile.net/wenshubaike/dxkc/871998.html