最近在搞一點預測技術,用過去的數據,預測將來的數據。
比如說,在過去一週中,從週一到週日,武大郎賣的炊餅數是 20,20,20,20,20,20,20,那麼下一週他每天能賣出多少?他必須預測出來,不然潘金蓮的炊餅做多了,做少了,都要虧錢的。
大朗的炊餅好預測,看起來很簡單。但西門大官然的店鋪好多,要預測清楚,就不容易了。
我挑了不少方法,最終決定用 XGBoost,因爲要考慮颳風下雨,還有大宋國假期這些因素的影響。
在此之前,我還是花了不少時間在 ARIMA 上。 畢竟,炊餅經營,是時序數據,ARIMA 對付穩定的時序數據,那是最擅長的。
研究 ARIMA,少不了要確定 p 和 q,要看 ACF 和 PACF 的截尾和拖尾。但各種各樣的網文教程,包括大學教材,都是乾巴巴的公式,就是不給個例子。
我甚爲懷疑,好多寫教材的,自己未必真搞懂了。
越看越暈。後來,看英文資料,才明白過來。老外真是太閒,也有耐心,每一個細節都寫的明明白白,彷彿在教小學生。
先說 AR 模型,即自迴歸模型。即算一個函數,讓每一個觀察量(就是大郎每天賣的炊餅數)都依賴過去的量。比如上面武大郎的那個 20、20、20,就可以設計出一個函數,即,今天的炊餅量等於昨天的炊餅量。一般的公式爲:
這是 1 階,即 AR(1) 的公式。 看看, 和 之間相關性是個 。
而 AR(2) 則爲:
舉個例子,,用 statsmodels.tsa.arima_process 模擬一個符合 AR(1) 的時序數據。畫出圖來:
要注意的是,只有 是我們指定的,而 和 則是 arima_process 隨機給出的, 是一個固定值,而 則是每次都隨機。
可以猜到, 對 的相關性爲 0.9, 而 對 的相關性是 ,對的相關性,則爲 。這種相關性,會一直延續下去,傳遞下去。所以,自相關 ACF 圖爲:
看,一個漂亮的拖尾,拖的又長又整齊。
那麼,這個 AR(1) 的偏自相關應該是什麼? 這是一個讓初學者暈的概念。
做個比喻吧。 小明、小明爸爸、小明爺爺,列祖列宗,構成一個 AR(1),記住,他們萬萬不可構成 AR(2)。所以,他們的DNA 就一代代往下傳,小明和小明爸爸的自相關性是 1/2, 小明爺爺和小明爸爸的相關性是 1/2,而小明和小明爺爺的相關性是 1/4。
但小明與爺爺的偏自相關呢?太遺憾了,只能是零。 在這裏腦袋裏要擰個彎,把小明爸爸的影響去除掉,即小明爸爸給小明的那1/2基因去除掉,那小明和爺爺的偏自相關,就是零了。
如果不是零,那就壞了。
但小明和爸爸,爸爸和爺爺的偏自相關,其實就是他們之間的自相關,都是 1/2。
所以,上面這個 的偏自相關圖 PACF 是:
看,多麼經典的截尾,第一階截斷,如懸崖般。
如果是 RA(2),那麼就會在第二階截斷。但是,上面那個比喻就進入一個非常艱難、難以理解的境地。
我們必須假設,小明的DNA有 1/2 來自爸爸,還有1/4 是直接來自爺爺。打字打到這裏,有點受不了。注意,1/4是直接來自,即爺爺既是爺爺,也是爸爸。
好了,就當科幻來看吧。
下面來說 MA,即移動平均模型,第一個注意,此處的“移動平均模型”,不是計算 “移動平均值” 那麼簡單。
想象一個時間序列,互相之間,毫無關係。舉個例子,三體世界,他們的天氣每天都是跌宕起伏的,壓根沒有地球上的四季分明。三體上,第一天是40度,很熱,但還能喘氣。第二天就是零下200度,全部凍死。 第三天呢? 春暖花開23度,第四天就是3000度鍊鋼廠,行星成液體。
總之,每一天都是隨機數。天與天之間毫無規律,沒有關係。
咋辦? 怎麼預測明天的溫度? 怎麼決定明天是繼續活着,還是趕緊陰乾成皮?
沒辦法,只能搞個大概的移動平均,比如,把過去10 天的天氣加總,然後除以 10。
這個三體天氣,就是一個純粹的 MA (10) 模型。
MA 的一般公式是:
注意觀察, 和 沒有直接關係了,不是 AR 了,而是通過移動平均 值才產生關係。
舉個例子,,用 statsmodels.tsa.arima_process 模擬一個符合 MA(1) 的時序數據。畫出圖來:
一樣要注意,只有 是指定的, 都是隨機值。
所以,可以看到 之間的自相關係數是 ,在此處是 -0.479。而R_{t} R_{t-2}的自相關係數是 0。(這一段沒有理解,why ?倒是 2階之後爲 0,好理解。有聰明人指點指點。)
所以,此 MA 的 ACF 圖是:
一個乾淨利落的截尾,止於 1 階。
而 PACF 的圖,則爲:
對於爲何一個標準的 MA(1) 的偏自相關居然是拖尾的,深思不解。 我的理解,它應該是個飄忽不定的震盪過程。 因爲從1階之後,從自相關角度看,已經沒關係,那麼偏自相關更應該沒有規律的關係纔對。
如果偏自相關還有關係,何以自相關居然沒關係了?
在時序數據中 ARMA 或者 ARIMA 中,MA 是 AR 過程中剩餘下的殘差的迴歸。