時間序列挖掘-預測演算法-三次指數平滑法(Holt-Winters)
在時間序列中,我們需要基於該時間序列當前已有的資料來預測其在之後的走勢,三次指數平滑(Triple/Three Order Exponential Smoothing,Holt-Winters)演算法可以很好的進行時間序列的預測。
時間序列資料一般有以下幾種特點:1.趨勢(Trend) 2. 季節性(Seasonality)。
趨勢描述的是時間序列的整體走勢,比如總體上升或者總體下降。下圖所示的時間序列是總體上升的:
季節性描述的是資料的週期性波動,比如以年或者周為週期,如下圖:
三次指數平滑演算法可以對同時含有趨勢和季節性的時間序列進行預測,該演算法是基於一次指數平滑和二次指數平滑演算法的。
一次指數平滑演算法基於以下的遞推關係:
si=αxi+(1-α)si-1
其中α是平滑引數,si是之前i個數據的平滑值,取值為[0,1],α越接近1,平滑後的值越接近當前時間的資料值,資料越不平滑,α越接近0,平滑後的值越接近前i個數據的平滑值,資料越平滑,α的值通常可以多嘗試幾次以達到最佳效果。
一次指數平滑演算法進行預測的公式為:xi+h=si,其中i為當前最後的一個數據記錄的座標,亦即預測的時間序列為一條直線,不能反映時間序列的趨勢和季節性。
二次指數平滑保留了趨勢的資訊,使得預測的時間序列可以包含之前資料的趨勢。二次指數平滑通過新增一個新的變數t來表示平滑後的趨勢:
si=αxi+(1-α)(si-1+ti-1)
ti=ß(si-si-1)+(1-ß)ti-1
二次指數平滑的預測公式為 xi+h=si+hti 二次指數平滑的預測結果是一條斜的直線。
三次指數平滑在二次指數平滑的基礎上保留了季節性的資訊,使得其可以預測帶有季節性的時間序列。三次指數平滑添加了一個新的引數p來表示平滑後的趨勢。
三次指數平滑有累加和累乘兩種方法,下面是累加的三次指數平滑
si=α(xi-pi-k)+(1-α)(si-1+ti-1)
ti=ß(si-si-1)+(1-ß)ti-1
pi=γ(xi-si)+(1-γ)pi-k 其中k為週期
累加三次指數平滑的預測公式為: xi+h=si+hti+pi-k+(h mod k) 注意:資料之魅P88此處有錯誤,根據Wikipedia修正。
下式為累乘的三次指數平滑:
si=αxi/pi-k+(1-α)(si-1+ti-1)
ti=ß(si-si-1)+(1-ß)ti-1
pi=γxi/si+(1-γ)pi-k 其中k為週期
累乘三次指數平滑的預測公式為: xi+h=(si+hti)pi-k+(h mod k) 注意:資料之魅P88此處有錯誤,根據Wikipedia修正。
α,ß,γ的值都位於[0,1]之間,可以多試驗幾次以達到最佳效果。
s,t,p初始值的選取對於演算法整體的影響不是特別大,通常的取值為s0=x0,t0=x1-x0,累加時p=0,累乘時p=1.
我們使用DataMarket的International Airline Passengers資料來測試累加和累乘三次指數平滑演算法的效能,該資料記錄的是每月的國際航線乘客數:
下圖為使用累加三次指數平滑進行預測的效果:其中紅色為源時間序列,藍色為預測的時間序列,α,ß,γ的取值為0.45,0.2,0.95:
下圖為累乘三次指數平滑進行預測的效果,α,ß,γ的取值為0.4,0.05,0.9:
可以看到三次指數平滑演算法可以很好的儲存時間序列資料的趨勢和季節性資訊,在International Airline Passengers資料集上累乘平滑指數演算法的效果更好。
參考文獻:
[1]. 資料之魅:基於開源工具的資料分析