時序預測之二_ARIMA

1. 說明

?ARMA回歸滑動平均模型(Autoregressive Moving Average Model,簡記ARIMA),是研究時間序列的重要方法,由自回歸模型(簡稱AR模型)與滑動平均模型(簡稱MA模型)為基礎“混合”構(gòu)成。常用于具有季節(jié)變動特征的銷售量、市場規(guī)模的預測等。ARIMA模型相對ARMA模型,僅多了差分操作。

2. 相關(guān)概念

(1) 自回歸模型(AR)

?自回歸模型autoregressive model,簡稱AR.在時序分析中,描述時間序列{yt}自身某一時刻和前p個時刻之間相互關(guān)系的模型稱自回歸模型,其形式為:



?其中Φ1, Φ2,…, Φp是模型參數(shù),εt是白噪聲序列,它反映了所有其它隨機因素的干擾.其中p為模型階次,即yt由前p個值決定.

(2) 滑動平均模型(MA)

?滑動平均模型moving average model,也稱移動平均模型,它將時間序列{yt}看成白噪聲序列的線性組合,為什么誤差能描述模型呢?假設某個值可通過之間前N個值的平均值預測,稍作變化,即實際值可以通過前一值的預測值加誤差得到.因此實際值可用多個誤差值的累加來表示.其形式為:

(3) 回歸滑動平均模型(ARMA)

?簡單地說:AR模型是建立當前值和歷史值之間的聯(lián)系,MA模型是計算AR部分累積的誤差。ARMA是兩個維度的和.

(4) 數(shù)據(jù)預處理

?ARMA要求被分析的數(shù)據(jù)呈正態(tài)分布,平穩(wěn),零均值.平穩(wěn)性一般是指:均值為常數(shù),方差為常數(shù),且自協(xié)方差為常數(shù).比如說上升的趨勢中,均值就不是常數(shù);如果震蕩幅度越來越大,則方差不是常數(shù)。
?如果僅是均值非0的情況,可減去均值;如果趨勢可用線性擬合,可以減去擬合后的趨勢;另外還可以用差分,或者季節(jié)性差分的方法使之平穩(wěn);對于非正態(tài)分布,可使用對數(shù)處理.

(5) 差分

?差分是將數(shù)據(jù)進行移動之后與原數(shù)據(jù)進行比較得出的差異數(shù)據(jù),這里的移動是指上移或者下移.簡單的說,比如對某支股票的價格數(shù)據(jù)做一階差分,就是將每日價格減去前一天的價格.
?在python中,差分運算可使用pandas的diff(periods=n)函數(shù)實現(xiàn),其中n為階數(shù),默認為一階差分,一階差分的具體操作是df.shift()-df.用于生成平穩(wěn)數(shù)據(jù),比如下面的曲線.

?一階差分后

?由此可見,差分之后,去掉了趨勢,均值趨于0.有助于分析其它特征.

(6) 自相關(guān)與偏自相關(guān)(ACF&PACF)

?自相關(guān)acf和偏自相關(guān)pacf是分析時序數(shù)據(jù)的重要方法,是在平穩(wěn)條件下求得的.
?自相關(guān)函數(shù)Auto Correlation Function,簡稱ACF.形如:

?X軸表示滯后值,Y軸從[-1,1],表示了這些值的相關(guān)性.比如左邊第一點相關(guān)性為1,就是說該點與它自己完全相關(guān).從圖中可觀察到:12個月為周期的相關(guān)性相當明顯的.調(diào)用方法如下:

from statsmodels.graphics.tsaplots import plot_acf
plot_acf(df['xxx'])

?注意時序數(shù)據(jù)中不能包括空值,如果之前用了一次一階差分和一次十二階差分,應去掉前13個為空的值.
?圖中藍色部分是描述的統(tǒng)計顯著性,如果數(shù)據(jù)隨機分布,Y軸的位置會在藍色區(qū)域之內(nèi).因此,要著重看藍色區(qū)域以外的點.
?自相關(guān)系數(shù)包含了其它變量影響下的相關(guān)關(guān)系,有時需要只考慮某兩個變量的相關(guān)關(guān)系,即偏相關(guān)系數(shù).其中的偏字,指的是只考慮首尾兩項的關(guān)系,把中間項當成常數(shù),使用了偏導數(shù)的方法.使用方法如下:

from statsmodels.graphics.tsaplots import plot_pacf
plot_pacf(df['xxx'])

(7) 拖尾和截尾

?我們通過觀察自相關(guān)圖和偏自相關(guān)圖來確使用哪種模型,以自相關(guān)圖為例,先看看圖片呈現(xiàn)的幾種形式.

?左邊的圖呈直線形式衰減,說明可能包括趨勢,需要進一步差分;中間是截尾圖,它指的是在某個值(如圖中的7)后截止為0;右則是拖尾圖,指的是按指數(shù)形式或正弦形式有規(guī)律地衰減.
?如果自相關(guān)系數(shù)拖尾,偏自相關(guān)系數(shù)p階截尾,則使用p階的AR模型.
?如果自相關(guān)系數(shù)q階截尾,偏自相關(guān)函數(shù)拖尾,則使用q階的MA模型.
?簡單的講,它們兩個都是看截尾截在哪兒.
?如果自相關(guān)函數(shù)和偏自相關(guān)函數(shù)均拖尾,則使用ARMA模型,由于AR和MA相互影響,階數(shù)需要從小到大逐步嘗試.

(8) 模型檢驗

i. 模型對訓練數(shù)據(jù)的擬合
?用模型對訓練數(shù)據(jù)做擬合,用觀察或者計算誤差的方式,查看二者差異,差異越小越好.

ii. 檢查殘差的自相關(guān)函數(shù)
?殘差的自相關(guān)函數(shù)應該沒有可識別的結(jié)構(gòu).

iii. AIC信息準則
?AIC信息準則Akaike information criterion,是衡量統(tǒng)計模型擬合優(yōu)良性的一種標準,AIC值越小越好,也有根據(jù)AIC自動選參數(shù)的工具.

3. 步驟

?具體使用python調(diào)用statsmodels庫實現(xiàn).statsmodels是一套統(tǒng)計工具集.具體需要考慮三個參數(shù):d,p,q.其中d是消除趨勢的差分階數(shù),p是AR階層,q是MA的階數(shù).步驟如下:

(1) 做時序圖觀察基本的趨勢和周期.

(2) 分析平穩(wěn)性,正態(tài)性,周期性;并對數(shù)據(jù)進行轉(zhuǎn)換.

(3) 做自相關(guān)和偏自相關(guān)圖,確定模型階次.

(4) 模型檢驗

(5) 用模型預測.

4. 問題與解答

(1) 做ARMA分析前是否應該剔除周期性因素?
?我們可以從自相關(guān)圖中看出周期性波動,比如上邊右側(cè)的拖尾圖,它說明某天與前7,14,21天都強相關(guān).如果發(fā)現(xiàn)強相關(guān),可先進行多階差分(季節(jié)差分)后,再進一步使用ARMA模型處理.需要注意的是各層次差分在預測時都需要對應的還原.

(2) 做長期預測時如何應對衰減?
?我在做鹽城上牌預測時就遇到了嚴重的衰減問題,當時需要預測之后幾百天的數(shù)據(jù),而ARMA在預測了幾十天之后,就從類似正弦波型衰減成了一條直線,導致我最終放棄了該模型,改為使用線性擬合趨勢,嚴重損失了精度.后來看復賽排名第一的大神分享,他也使用ARMA,并且也有衰減問題,不同的是他采用按月預測,相比于按日預測,衰減就好得多,非常贊!

5. 參考

(1) 第七篇時間序列分析
https://max.book118.com/html/2014/1223/10828140.shtm

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容