目錄
1 ARIMA理論介紹
1.1 模型構成
ARIMA模型是由三部分組成的,AR模型 I差分 MA模型。ARMA模型要求序列是平穩序列,因爲可以對序列進行平穩性處理[1](最常見就是差分處理)。
1.1.1 AR模型
1 基本思想
AR模型的基本思想是:該模型認爲通過時間序列過去時點的線性組合加上白噪聲即可預測當前時點,它是隨機遊走的一個簡單擴展。 歷史若若干期的數據(側重) + 白噪聲
Xt表示t時間點的數據。
2 使用要求
自迴歸模型要求序列是平穩序列,一般對於一個有規律的序列,剔除了長期趨勢和季節因素和隨機因素。然後就可以用AR模型來建模。
AR(p) p表示滯後p階的AR模型,當前時間點與前p個時間點的關係。p=1,當前時間和前1個時間點的關係。
3 相對於普通迴歸的特點
AR是一種自迴歸模式,AR僅通過時間序列變量的自身歷史觀測值來反映有關因素對預測目標的影響和作用,不受模型變量相互獨立的假設條件約束,所構成的模型可以消除普通迴歸預測方法中由於自變量選擇、多重共線性等造成的困難。
Note:
白噪聲:白噪聲是指功率譜密度在整個頻域內均勻分佈的噪聲
自迴歸:AutoRegressive自迴歸,描述當前值和歷史值之間的關係。
平穩序列: 見1.1.3
1.1.2 MA模型
MA模型的基本思想是用過去各個時期的隨機干擾或預測誤差的線性組合來表達當前預測值。 一個常數+歷史誤差(側重)
(Moving average滑動平均,描述誤差之間的關係)描述自迴歸部分的誤差累計。
MA(q) q表示前q個時間點的時間差
1.1.3 ARMA模型
1 業務意義舉例
上述兩節簡述了前面AR和MA模型的概況,這兩個模型並不是偶然出現,背後其實是有實際業務場景意義的。
比如“前者用收益率的歷史對未來收益率做預測,它背後的邏輯是捕捉市場參與者的有效性(或者非有效性)造成的市場的動量或者反轉效應;而後者對噪聲建模,其邏輯爲突發信息對收益率將會造成衝擊(比如上市公司超出預期的財報或者內部交易醜聞等)"。
以上引自:https://zhuanlan.zhihu.com/p/38322333
2 ARMA模型
上述兩節簡述了前面AR和MA模型的概況,很自然我們能想到將兩者結合到一塊,這樣既能利用歷史數據,又能考慮歷史誤差。用AR的歷史項+MA的誤差。
Note:這是一個新的模型,並不是說將兩者的各自所有的參數都求出來再相加,如若這樣大約就是原值的兩倍,這肯定不是科學的。
1.1.4 I差分
差分值有 觀測 + 檢驗 法來確定
怎麼數據判斷是否平穩呢?這裏使用簡單點的根據數據的 均值 和 方差 來做判斷。如果兩者都處於平穩那麼,就處於弱平穩了。差分的方法就是做差:一個數據序列r2、r3、r4、r5、rn減去r1、r2、r3、r4、rn-1的來獲取差值序列。這是一階差分,利用獲得的差序再做差分,就是二階差分。 I(d) d表示做多少階的差分。
Note:
1 當然也可以使用ARMA模型,由於ARMA模型需要平穩的時間序列,或者轉化爲弱平穩時間序列。所以ARMA模型中引入I差分,構成了ARIMA模型。ARIMA模型需要引入三個變量參數p、d、q
2 季節效應,序列的季節因素和我們常說序列的週期性其實是在表達兩個問題。季節效應潛在的語境並不是說多年中每年中的這個季節都呈現這個序列趨勢,而是在我們研究的序列中季節因素導致某一段數據變化很大導致序列不平穩,我們需要剔除這個因素,從而達到平穩序列。
1.2 模型定階
Arima的Python實現包是基於statsmodels的,而其中的ARIMA(p,d,q),d不能>2。具體是幾階,得看單位根檢驗結果。
p和q的確定可以基於AIC思想。
基本思想:AIC
過程:略
2 模型分析
2.1 是否選擇ARIMA模型
目前時序預測使用較多的有三種模型,ARIMA、winter模型以及Facebook的Prophet模型。既然定位在時序分析的範疇,其理論基礎就是數據之間的時序關係。如果某場景數據本身的時序關係就不強(比如股公司股票,收到政策,社會事件,公司運營等無規律因素的影響),那麼就不應該用時序方法來分析。
2.1.1 Prophet
先說下Facebook的Prophet模型,這個模型有如下特點:
1 安裝簡單,使用簡單,paper和title對prophet的宗旨已經有所闡述。降低預測門檻。無需調參,對異常數據的魯棒性也很好
2 本質上還是一個加法模型,是時間序列預測的一個工業級應用,最初用來在Facebook執行商業預測,在原理上並沒有什麼創新。
3 使用場景:數據量比較大,時間跨度大效果比較好
4 簡單易用:傻瓜式建模、預測,都是簡單調用,無需調參。
5 對有明顯規律的數據的效果好,對規律不那麼明顯的數據,效果不盡人意。
其實也不是什麼缺點,Prophet的paper和title對prophet的宗旨已經有所闡述。降低預測門檻,儘量在大部分場景下都能得到一個用戶差不多能接受的結果。這種情況下可以作爲baseLine
2.1.2 holt-winter模型
winter模型本質上是三次指數平滑
溫特模型預測訂單:https://tech.meituan.com/order_holtwinter.html
2.1.3 ARIMA模型
使用場景:
2.2 實現方式
2.2.1 Python實現
statsmodels包中含有ARMA模型和ARIMA模型
from statsmodels.tsa.arima_model
import ARMA
model = ARMA(timeseries, order=order.bic_min_order) result_arma = model.fit(disp=-1, method='css')
對於差分後的時間序列,運用於ARMA時該模型就被稱爲ARMIA,在代碼層面改寫爲model = ARIMA(timeseries, order=(p,d,q)),但是實際上,用差分過的序列直接進行ARMA建模更方便,之後添加一步還原的操作即可。簡單來說,如果將序列已經差分好,直接使用arma模型;如果沒有差分好,自己算好差分,將原始數據傳入模型,給差分數,其實就是讓ARIMA模型自行先算一次差分,本質都是一樣的
2.2.2 Java實現
https://github.com/chenchen199427/ARMA-Java-
2.2.3 使用步驟
-
數據預處理
-
差分及平穩性校驗(確定參數d)
-
輸出ACF和PACF圖,確定p和q的值
-
運用模型進行預測
-
還原差分運算,得到最終預測數據
3 模型實踐
3.1 訂單預測
數據來源:半年的外賣訂單量
預處理:沒有異常數據,
數據探查:趨勢圖
數據的特點是,週一至週五基本持平沒有一個明顯的規律,週末叫工作日的波動幅度在 2%左右。而且數據有非常微弱的長期趨勢。
使用了從6.1日到10.12(週五)的數據預測週六,最終數據和實際值差7% 感覺效果一般。
從6.1日到9.12日(週五)數據預測接下來的週六,最終數據和實際值差5% 效果較之前有進步,個人覺得10.12日之前是國慶節七天,數據不符合普通的規律性,會給預測帶來一定的偏差。
由於日訂單數據的特點就是
3.2 其他預測
8 問題
ARIMA和winter的從原理上來說特點如何?如何決定各自的具體適用場景?如何選擇?
9 參考資料
1 [不平穩處理] https://www.jianshu.com/p/cced6617b423
2 [ar和ma的含義 寫的不錯,推薦] https://zhuanlan.zhihu.com/p/38322333
3 [ss] https://www.jianshu.com/p/cced6617b423
4 [git java實現代碼] https://github.com/chenchen199427/ARMA-Java-
5 [java實現] https://blog.csdn.net/u013201628/article/details/62236654