時間序列預測是将過去一段時間的資料和趨勢作為基礎,去預估未來一段時間内的資料值。應用場景比較多,例如商場根據過去的銷量資料對未來的銷量進行預測,以便備貨;股民根據過去的股票走勢來預測未來股票的漲跌情況,以便做出有利的決策。
對時間序列的預測主要有兩種方法:長短記憶LSTM和指數平滑法。長短記憶LSTM非常适合處理時間間隔比較長的任務,不過它适用于資料量比較大的場景。而本文介紹的指數平滑法在較小的資料場景也能預測比較準确,它是通過對整個時間序列分别給予不同的權重進行權重平均的一種方法。
一次指數平滑法
對于一組時間序列x1,x2,...,xi來說,可以将連續的n個時期的觀測值的平均值作為下一時期的預測值,公式如下
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5iNhZTYxIDOjN2M1UzN0YzMyQmYidDM0kTMhdTOzQmYm9CX0JXZ252bj91Ztl2Lc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
這種方法叫做移動平均法,但這個方法缺點也明顯,所有觀測值的權重都一樣。一次指數平滑法可以看成是由移動平均法演變而來的,根據上述公式,有
從近似意義角度來說,序列中的任何一個數都可以用平均數來表示,若将x_{i-n}替換為s_{i-1},并設α=1/n,那麼得到
這就是一次指數平滑法,那麼為什麼叫指數平滑呢? 先看如下推導
可以看出x_i的系數都是指數形式的,并且所有權值之和為1。
很遺憾,一次指數平滑法隻适用于水準型曆史資料預測,而不适用于斜坡型線性曆史資料預測的任務。因為對于斜坡型曆史資料,即使α再大,也仍然會産生較大的系統誤差。
二次指數平滑法
二次指數平滑法可以預測斜坡型資料,通過添加一個新的變量t來表示平滑後的趨勢,遞推公式如下
其最終預測值表示如下
一般初始化條件為
二次指數平滑法相對一次指數平滑法解決了兩個重要的問題
- 解決了不能用于有明顯趨勢的時間序列
- 解決了隻能向未來預測一期的不足問題
三次指數平滑法
三次指數平滑在二次指數平滑的基礎上增加了周期性資訊,使其可以預測帶有周期性的時間序列。三次指數平滑新增了新的參數p來表示平滑後的趨勢,有累加和累乘兩種方法,公式如下
1.累加
2.累乘
上述變量中,s_i,t_i,p_i分别表示水準趨勢,斜率趨勢和周期資訊。
R語言實戰
在R語言中HoltWinters()函數就是用來做時間序列預測的,句法如下
HoltWinters(x, alpha = NULL, beta = NULL, gamma = NULL, seasonal = c("additive