1 概念
? ? ? ?ARIMA模型,全稱為自回歸積分滑動(dòng)平均模型(Autoregressive Integrated Moving Average Model),是由博克思(Box)和詹金斯(Jenkins)于20世紀(jì)70年代初提出的一種時(shí)間序列預(yù)測方法。ARIMA模型是指在將非平穩(wěn)時(shí)間序列轉(zhuǎn)化為平穩(wěn)時(shí)間序列過程中,將因變量僅對(duì)它的滯后值以及隨機(jī)誤差項(xiàng)的現(xiàn)值和滯后值進(jìn)行回歸所建立的模型。
注:時(shí)間序列模型適用于做短期預(yù)測,即統(tǒng)計(jì)序列過去的變化模式還未發(fā)生根本性變化。
2 基本思想
? ? ? ? ARIMA模型的基本思想是:將預(yù)測對(duì)象隨時(shí)間推移而形成的數(shù)據(jù)序列視為一個(gè)隨機(jī)序列,用一定的數(shù)學(xué)模型來近似描述這個(gè)序列。這個(gè)模型一旦被識(shí)別后就可以從時(shí)間序列的過去值及現(xiàn)在值來預(yù)測未來值?,F(xiàn)代統(tǒng)計(jì)方法、計(jì)量經(jīng)濟(jì)模型在某種程度上已經(jīng)能夠幫助企業(yè)對(duì)未來進(jìn)行預(yù)測。
3 原理
? ? ? ? ARIMA(p,d,q) 稱為差分自回歸移動(dòng)平均模型,根據(jù)原序列是否平穩(wěn)以及回歸中所含部分的不同,包括移動(dòng)平均過程(MA)、自回歸過程(AR)、自回歸移動(dòng)平均過程(ARMA)和自回歸滑動(dòng)平均混合過程(ARIMA)。
移動(dòng)平均過程(MA(q))
自回歸過程(AR(p))
自回歸移動(dòng)平均過程(ARMA(p,q))
自回歸積分滑動(dòng)平均過程 (ARIMA(p,d,q))
? ? ? ? AR是自回歸,p為自回歸項(xiàng);MA為移動(dòng)平均,q為移動(dòng)平均項(xiàng)數(shù),d為時(shí)間序列變?yōu)槠椒€(wěn)時(shí)間序列時(shí)所做的差分次數(shù)。
3.1 模型預(yù)測步驟
1.獲取被觀測系統(tǒng)時(shí)間序列數(shù)據(jù);
2.對(duì)數(shù)據(jù)繪圖,觀測是否為平穩(wěn)時(shí)間序列;對(duì)于非平穩(wěn)時(shí)間序列要先進(jìn)行d階差分運(yùn)算,化為平穩(wěn)時(shí)間序列;若為平穩(wěn)序列,則直接用ARMA(p,q)模型。
3.經(jīng)過第二步處理,已經(jīng)得到平穩(wěn)時(shí)間序列。要對(duì)平穩(wěn)時(shí)間序列分別求得其自相關(guān)系數(shù)ACF和偏自相關(guān)系數(shù)PACF,通過對(duì)自相關(guān)圖和偏自相關(guān)圖的分析,得到最佳的階層 p和階數(shù) q ;
4.由以上得到的d、q、p,得到ARIMA模型。然后開始對(duì)得到的模型進(jìn)行模型檢驗(yàn)。以證實(shí)所得模型確實(shí)與所觀察到的數(shù)據(jù)特征相符。若不相符,重新回到第3步。
4 預(yù)測實(shí)例
? ? ? ?目前常用的數(shù)據(jù)分析語言為R和python,本文先采用Python在測試數(shù)據(jù)上實(shí)現(xiàn)預(yù)測過程。在后期編輯階段補(bǔ)充R語言的實(shí)現(xiàn)過程。
4.1 獲取數(shù)據(jù)
? ? ? 具有周期性(7天)的測試數(shù)據(jù),即每連續(xù)的7個(gè)數(shù)據(jù)屬于一個(gè)周期內(nèi),具體數(shù)據(jù)如下所示:
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
繪制測試數(shù)據(jù)的時(shí)間序列圖,如圖1所示:
dta=pd.Series(dta)
dta.index = pd.Index(sm.tsa.datetools.dates_from_range('2001','2100'))
dta.plot(figsize=(12,8))

4.2 ?時(shí)間序列的差分
? ? ? ARIMA 模型對(duì)時(shí)間序列的要求是平穩(wěn)型。因此,當(dāng)你得到一個(gè)非平穩(wěn)的時(shí)間序列時(shí),首先要做的即是做時(shí)間序列的差分,直到得到一個(gè)平穩(wěn)時(shí)間序列。
? ? ? 平穩(wěn):就是圍繞著一個(gè)常數(shù)上下波動(dòng)且波動(dòng)范圍有限,即有常數(shù)均值和常數(shù)方差。如果有明顯的趨勢(shì)或周期性,那它通常不是平穩(wěn)序列。一般有三種方法:
(1)直接畫出時(shí)間序列的趨勢(shì)圖,看趨勢(shì)判斷。
(2)畫自相關(guān)和偏自相關(guān)圖:平穩(wěn)的序列的自相關(guān)圖(Autocorrelation)和偏相關(guān)圖(Partial Correlation)要么拖尾,要么是截尾。
(3)單位根檢驗(yàn):檢驗(yàn)序列中是否存在單位根,如果存在單位根就是非平穩(wěn)時(shí)間序列。
? ? ? ?不平穩(wěn)序列可以通過差分轉(zhuǎn)換為平穩(wěn)序列。d階差分就是相距d期的兩個(gè)序列值之間相減。如果一個(gè)時(shí)間序列經(jīng)過差分運(yùn)算后具有平穩(wěn)性,則該序列為差分平穩(wěn)序列,可以使用ARIMA模型進(jìn)行分析。如果你對(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) ?#一階差分序列轉(zhuǎn)化
diff1.plot(ax=ax1)

fig = plt.figure(figsize=(12,8))
ax2= fig.add_subplot(111)
diff2 = dta.diff(2) ?#二階差分序列轉(zhuǎn)化
diff2.plot(ax=ax2)
? ? ? 一階差分的時(shí)間序列的均值和方差已經(jīng)基本平穩(wěn),二階差分后的時(shí)間序列與一階差分相差不大,并且二者隨著時(shí)間推移,時(shí)間序列的均值和方差保持不變。因此可以將差分次數(shù)d設(shè)置為1。
? ? ? 穩(wěn)定性的標(biāo)準(zhǔn)非常嚴(yán)格,可以通過兩種方式判斷。
? ? (1) 如果時(shí)間序列隨著時(shí)間產(chǎn)生恒定的統(tǒng)計(jì)特征,根據(jù)實(shí)際目的我們可以假設(shè)該序列是穩(wěn)定的。如下:
a. 恒定的平均數(shù)
b. 恒定的方差
c. 不隨時(shí)間變化的自協(xié)方差
? ? (2)針對(duì)平穩(wěn)的檢驗(yàn),叫“ADF單位根平穩(wěn)型檢驗(yàn)”,這是一種檢查數(shù)據(jù)穩(wěn)定性的統(tǒng)計(jì)測試。無效假設(shè):時(shí)間序列是不穩(wěn)定的。測試結(jié)果由測試統(tǒng)計(jì)量和一些置信區(qū)間的臨界值組成。如果“測試統(tǒng)計(jì)量”少于“臨界值”,我們可以拒絕無效假設(shè),并認(rèn)為序列是穩(wěn)定的。本文暫時(shí)不做討論,以后會(huì)更新。
4.3 確定合適的?p?和 q 值
經(jīng)過第2步,我們已經(jīng)得到了一個(gè)穩(wěn)定的時(shí)間序列,現(xiàn)在需要獲得p和q,從而確定選擇使用哪種模型更合適。
4.3.1 繪制平穩(wěn)時(shí)間序列的自相關(guān)圖和偏自相關(guān)圖。
dta= dta.diff(1)
fig = plt.figure(figsize=(12,8))
ax1=fig.add_subplot(211)
fig = sm.graphics.tsa.plot_acf(dta,lags=40,ax=ax1) ? #lags代表階數(shù)
ax2 = fig.add_subplot(212)
fig = sm.graphics.tsa.plot_pacf(dta,lags=40,ax=ax2)

通過觀察圖3中的acf圖和pacf圖,可以得到:
* 自相關(guān)圖顯示滯后有三個(gè)階超出了置信邊界(第一條線代表起始點(diǎn),不在滯后范圍內(nèi));
* 偏相關(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=7的自回歸模型;
3. ARMA(7,1)模型:即使得自相關(guān)和偏自相關(guān)都縮小至零。則是一個(gè)混合模型。
4. …其他供選擇的模型。
補(bǔ)充:(1) 分析得到的自相關(guān)圖和偏自相關(guān)圖,確定用AR(p)模型還是MA(q)模型亦或是ARMA(p,q)模型依據(jù)為

(2) 若都拖尾,得到ARMA(p,q)模型,自相關(guān)圖有幾個(gè)在兩倍標(biāo)準(zhǔn)差之外就能確定p,偏自相關(guān)圖突出兩倍標(biāo)準(zhǔn)差的確定q。
4.3.2 模型選擇/參數(shù)選擇
對(duì)于上述可供選擇的模型,通常采用AIC或者SBC來判斷得到的p和q參數(shù)值的好壞。我們知道:增加自由參數(shù)的數(shù)目提高了擬合的優(yōu)良性,AIC鼓勵(lì)數(shù)據(jù)擬合的優(yōu)良性但是盡量避免出現(xiàn)過度擬合(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
SBC=-2*ln(模型中的極大似然函數(shù)值)+ln(n)(模型中的未知參數(shù)的個(gè)數(shù))
SBC是對(duì)AIC的修正,并且這四個(gè)指標(biāo)越小則表示模型參數(shù)越好。構(gòu)造這些統(tǒng)計(jì)量所遵循的統(tǒng)計(jì)思想是一致的,就是在考慮擬合殘差的同時(shí),依自變量個(gè)數(shù)施加“懲罰”。但要注意的是,這些準(zhǔn)則不能說明某一個(gè)模型的精確度,也即是說,對(duì)于三個(gè)模型A,B,C,我們能夠判斷出C模型是最好的,但不能保證C模型能夠很好地刻畫數(shù)據(jù),因?yàn)橛锌赡苋齻€(gè)模型都是糟糕的。
在本文中ARMA(7,0)的aic,bic,hqic均最小,因此是最佳模型。
arma_mod20 = sm.tsa.ARMA(dta,(7,0)).fit()
print(arma_mod20.aic,arma_mod20.bic,arma_mod20.hqic)
4.4 模型檢驗(yàn)
在指數(shù)平滑模型下,觀察ARIMA模型的殘差是否是平均值為0且方差為常數(shù)的正態(tài)分布(服從零均值、方差不變的正態(tài)分布),同時(shí)也要觀察連續(xù)殘差是否(自)相關(guān)。
4.4.1 自相關(guān)圖
對(duì)ARMA(7,0)模型所產(chǎn)生的殘差做自相關(guān)圖。?
fig = sm.graphics.tsa.plot_acf(resid.values.squeeze(), lags=40, ax=ax1)
fig = sm.graphics.tsa.plot_pacf(resid, lags=40, ax=ax2)

4.4.2 D-W檢驗(yàn)
德賓-沃森(Durbin-Watson)檢驗(yàn)。德賓-沃森檢驗(yà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)。
sm.stats.durbin_watson(arma_mod20.resid.values)
檢驗(yàn)結(jié)果是2.02424743723,說明不存在自相關(guān)性。
4.5 模型預(yù)測
利用確定好的模型,預(yù)測未來十年的情況。
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ù)為測試數(shù)據(jù),最后10個(gè)為預(yù)測數(shù)據(jù);從圖形來,預(yù)測結(jié)果較為合理。

參考文獻(xiàn)資料
[1] ARIMA模型. 百度百科.
[2] 時(shí)間序列分析--ARIMA模型. http://blog.csdn.net/u013527419/article/details/52822666.
[3] [python] 時(shí)間序列分析之ARIMA. http://blog.csdn.net/u010414589/article/details/49622625.
[4] Arima預(yù)測模型(R語言). http://blog.csdn.net/desilting/article/details/39013825.
[5] Jonathan D. Cryer.時(shí)間序列分析及應(yīng)用. 原書第二版.?
[6] ARIMA時(shí)間序列建模過程—步驟和python代碼. http://www.itdecent.cn/p/cced6617b423.