時間序列 - 指數平滑



在本章中,我們將討論時間序列指數平滑涉及的技術。

簡單指數平滑

指數平滑是一種透過對一段時間內的資料分配指數遞減的權重來平滑單變數時間序列的技術。

在數學上,給定時間 t 的值,時間 ‘t+1’ 處的變數值 y_(t+1|t) 定義為 -

$$y_{t+1|t}\:=\:\alpha y_{t}\:+\:\alpha\lgroup1 -\alpha\rgroup y_{t-1}\:+\alpha\lgroup1-\alpha\rgroup^{2}\:y_{t-2}\:+\:...+y_{1}$$

其中,$0\leq\alpha \leq1$ 是平滑引數,並且

$y_{1},....,y_{t}$ 是網路流量在時間 1、2、3、…、t 處的先前值。

這是一種對沒有明顯趨勢或季節性的時間序列進行建模的簡單方法。但是指數平滑也可以用於具有趨勢和季節性的時間序列。

三重指數平滑

三重指數平滑 (TES) 或 Holt-Winters 方法,將指數平滑應用三次 - 水平平滑 $l_{t}$、趨勢平滑 $b_{t}$ 和季節性平滑 $S_{t}$,其中 $\alpha$、$\beta^{*}$ 和 $\gamma$ 為平滑引數,‘m’ 為季節頻率,即一年中的季節數。

根據季節性成分的性質,TES 有兩類 -

  • Holt-Winters 加法模型 - 當季節性本質上是加法時。

  • Holt-Winters 乘法模型 - 當季節性本質上是乘法時。

對於非季節性時間序列,我們只有趨勢平滑和水平平滑,這稱為 Holt 線性趨勢方法。

讓我們嘗試將三重指數平滑應用於我們的資料。

在 [316]

from statsmodels.tsa.holtwinters import ExponentialSmoothing

model = ExponentialSmoothing(train.values, trend= )
model_fit = model.fit()

在 [322]

predictions_ = model_fit.predict(len(test))

在 [325]

plt.plot(test.values)
plt.plot(predictions_[1:1871])

輸出[325]

[<matplotlib.lines.Line2D at 0x1eab00f1cf8>]
Code Snippet 17

在這裡,我們使用訓練集訓練了一次模型,然後我們繼續進行預測。更現實的方法是在一個或多個時間步長後重新訓練模型。當我們從訓練資料“直到”時間‘t’獲得時間‘t+1’的預測時,可以使用訓練資料“直到”時間‘t+1’來進行時間‘t+2’的下一個預測,因為此時‘t+1’處的實際值將已知。這種對一個或多個未來步驟進行預測然後重新訓練模型的方法稱為滾動預測或前向滾動驗證。

廣告

© . All rights reserved.