常用時序預測模型的R實現 四

簡介

這篇講ARIMA。前一篇談到ETS的靈感來自於兩個極端方案的折中,一個極端是隻用最近的一次觀測,一個是求平均,折中方案是用指數衰減來用到所有點,同時又給近期觀測更高的權重。換個角度看,這兩個極端反映的其實是兩個樸素的觀念。其一,近期的數據由於recency的關係,對揭示未來也許更有幫助。其二,只依賴近期的數據又容易被outlier帶偏,所以還是需要用歷史數據點來修正預測。ARIMA的理論體系雖然和ETS完全不同,出發點卻很相似。

ARIMA的全稱是Autoregressive Integrated Moving Average。拆開來看,Autoregressive是個自動迴歸模型,通常僅用p個近期觀測值而不是所有觀測點,否則作參數估計會是個噩夢。AR這一塊,和ETS中指數權重異曲同工,只是不那麼精緻美用上所有點而已。Integrated比較好理解,假如存在趨勢之類,自動迴歸不足以捕捉到,而需要做差分。

Moving Average可能是最難理解的部分。首先它很容易和移動平均混淆,但這裏完全是另一個概念。這裏的moving average是一個q階的自動迴歸模型,只是迴歸的對象是預測誤差而非實際觀測值。那麼既然已經有了autoregressive model (AR),爲何還需要MA?這個需要用實例來理解。有個叫Dimitriy V. Masterov的好人給了個很好的例子。在美帝(以及天朝)很多市場營銷活動會發出去很多優惠券打折券啥的,這些外部噪聲會影響到銷售量。MA的自動迴歸就是用來對付這些外部噪聲導致的預測偏差的。爲什麼不直接把這些噪聲移出,而要用q階迴歸模型來處理?因爲咱家也不知道那些優惠券在某個時間點用掉了多少啊。優惠券的使用是有實效性的,有衰減並且會在有效期內衰減到0。這本身是個時序序列,故而需要另一個針對預測偏差的自動迴歸模型來模擬。在看到這個例子之前我想了三天都沒想明白MA的必要性,所以看到這裏的大兄弟大妹子,我很可能讓你們的繩命少了三天的煎熬,請遙祝我健康。

Box-Cox變換

如果存在振幅變化怎麼辦呢?這時候需要variance stablization,往往用Box-cox Transformation來處理。在數學的世界裏總是有那麼些佛系的武器,比如Fourier函數,又比如Box-Cox變換。前者可以擬合天下任意函數,後者則能擼平一切浮華。

比如,這幾行代碼構造了一個振幅有變化的體態婀娜且積極向上的時序:

> a = c(10,20,30,40,50,60,70,80)
> b = c(-1,2,-3,4,-5,6,-7,8)^3
> c = a+b
> c_ts = ts(c,start=c(1,1))
> autoplot(c_ts)


上Box-Cox,拈指一算:

> BoxCox.lambda(c_ts)
[1] 4.102259e-05

把這個lambda值代入變換函數:

> autoplot(BoxCox(c_ts,4.102259e-5))

是不是擼平了?

怎麼做到的?

祖師爺Hyndman有個很好的總結:


就靠這倆函數,不同的lambda值,擼到不服不行。

ARIMA在非季節性數據上的應用

ARIMA在季節性數據上的應用

ARIMA和Dynamic Regression





如果存在振幅變化怎麼辦呢?這時候需要variance stablization,往往用Box-cox Transformation來處理。比如
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章