理解 AR 和 MA 模型

最近在搞一點預測技術,用過去的數據,預測將來的數據。

比如說,在過去一週中,從週一到週日,武大郎賣的炊餅數是 20,20,20,20,20,20,20,那麼下一週他每天能賣出多少?他必須預測出來,不然潘金蓮的炊餅做多了,做少了,都要虧錢的。

大朗的炊餅好預測,看起來很簡單。但西門大官然的店鋪好多,要預測清楚,就不容易了。

我挑了不少方法,最終決定用 XGBoost,因爲要考慮颳風下雨,還有大宋國假期這些因素的影響。

在此之前,我還是花了不少時間在 ARIMA 上。 畢竟,炊餅經營,是時序數據,ARIMA 對付穩定的時序數據,那是最擅長的。

研究 ARIMA,少不了要確定 p 和 q,要看 ACF 和 PACF 的截尾和拖尾。但各種各樣的網文教程,包括大學教材,都是乾巴巴的公式,就是不給個例子。

我甚爲懷疑,好多寫教材的,自己未必真搞懂了。

越看越暈。後來,看英文資料,才明白過來。老外真是太閒,也有耐心,每一個細節都寫的明明白白,彷彿在教小學生。

先說 AR 模型,即自迴歸模型。即算一個函數,讓每一個觀察量(就是大郎每天賣的炊餅數)都依賴過去的量。比如上面武大郎的那個 20、20、20,就可以設計出一個函數,即,今天的炊餅量等於昨天的炊餅量。一般的公式爲:

R_{t} = \mu +  \phi _{1} R_{t-1} + \varepsilon _{t-1}

這是 1 階,即 AR(1) 的公式。 看看,R_{t} 和 R_{t-1} 之間相關性是個  \phi _{1}

而 AR(2) 則爲:R_{t} = \mu +  \phi _{1} R_{t-1} +  \phi _{2} R_{t-2} + \varepsilon _{t-1}

舉個例子, \phi _{1} = 0.9,用 statsmodels.tsa.arima_process 模擬一個符合 AR(1) 的時序數據。畫出圖來:

要注意的是,只有  \phi _{1} = 0.9 是我們指定的,而  \mu 和 \varepsilon _{t-1}  則是 arima_process 隨機給出的, \mu 是一個固定值,而\varepsilon _{t-1}  則是每次都隨機。

可以猜到,R_{t} 對 R_{t-1} 0.9^2 的相關性爲 0.9, 而 R_{t} 對R_{t-2} 的相關性是 0.9^2  = 0.81,對R_{t-3}的相關性,則爲 0.9^3 = 0.729 。這種相關性,會一直延續下去,傳遞下去。所以,自相關 ACF 圖爲:

看,一個漂亮的拖尾,拖的又長又整齊。

那麼,這個 AR(1) 的偏自相關應該是什麼? 這是一個讓初學者暈的概念。

做個比喻吧。 小明、小明爸爸、小明爺爺,列祖列宗,構成一個 AR(1),記住,他們萬萬不可構成 AR(2)。所以,他們的DNA 就一代代往下傳,小明和小明爸爸的自相關性是 1/2, 小明爺爺和小明爸爸的相關性是 1/2,而小明和小明爺爺的相關性是 1/4。

但小明與爺爺的偏自相關呢?太遺憾了,只能是零。 在這裏腦袋裏要擰個彎,把小明爸爸的影響去除掉,即小明爸爸給小明的那1/2基因去除掉,那小明和爺爺的偏自相關,就是零了。

如果不是零,那就壞了。 

但小明和爸爸,爸爸和爺爺的偏自相關,其實就是他們之間的自相關,都是 1/2。

所以,上面這個  \phi _{1} = 0.9 的偏自相關圖 PACF 是:

看,多麼經典的截尾,第一階截斷,如懸崖般。 

如果是 RA(2),那麼就會在第二階截斷。但是,上面那個比喻就進入一個非常艱難、難以理解的境地。

我們必須假設,小明的DNA有 1/2 來自爸爸,還有1/4 是直接來自爺爺。打字打到這裏,有點受不了。注意,1/4是直接來自,即爺爺既是爺爺,也是爸爸。

好了,就當科幻來看吧。

下面來說 MA,即移動平均模型,第一個注意,此處的“移動平均模型”,不是計算 “移動平均值” 那麼簡單。

想象一個時間序列,互相之間,毫無關係。舉個例子,三體世界,他們的天氣每天都是跌宕起伏的,壓根沒有地球上的四季分明。三體上,第一天是40度,很熱,但還能喘氣。第二天就是零下200度,全部凍死。 第三天呢? 春暖花開23度,第四天就是3000度鍊鋼廠,行星成液體。

總之,每一天都是隨機數。天與天之間毫無規律,沒有關係。

咋辦? 怎麼預測明天的溫度? 怎麼決定明天是繼續活着,還是趕緊陰乾成皮?

沒辦法,只能搞個大概的移動平均,比如,把過去10 天的天氣加總,然後除以 10。

這個三體天氣,就是一個純粹的 MA (10) 模型。

MA 的一般公式是:R_{t} = \mu + \varepsilon _{t} + \theta _{1} \varepsilon _{t-1}

注意觀察,R_{t}  和 R_{t-1}  沒有直接關係了,不是 AR 了,而是通過移動平均 \varepsilon 值才產生關係。

舉個例子,\theta_{1}  = -0.9,用 statsmodels.tsa.arima_process 模擬一個符合 MA(1) 的時序數據。畫出圖來:

一樣要注意,只有 \theta_{1}  = -0.9 是指定的,\varepsilon _{t}  \varepsilon _{t-1}  都是隨機值。

所以,可以看到 R_{t}   R_{t-1}  之間的自相關係數是 \frac{\theta }{1+\theta ^2 } ,在此處是 -0.479。而R_{t} R_{t-2}的自相關係數是 0。(這一段沒有理解,why \frac{\theta }{1+\theta ^2 } ?倒是 2階之後爲 0,好理解。有聰明人指點指點。)

所以,此 MA 的 ACF 圖是:

一個乾淨利落的截尾,止於 1 階。

而 PACF 的圖,則爲:

對於爲何一個標準的 MA(1) 的偏自相關居然是拖尾的,深思不解。 我的理解,它應該是個飄忽不定的震盪過程。 因爲從1階之後,從自相關角度看,已經沒關係,那麼偏自相關更應該沒有規律的關係纔對。

如果偏自相關還有關係,何以自相關居然沒關係了?

在時序數據中 ARMA 或者 ARIMA 中,MA 是 AR 過程中剩餘下的殘差的迴歸。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章