1. 程式人生 > >從零開始-Machine Learning學習筆記(8)-指數平滑及python實現

從零開始-Machine Learning學習筆記(8)-指數平滑及python實現

1. 指數平滑的定義及應用場景

​ 指數平滑由布朗提出、他認為時間序列的態勢具有穩定性或規則性,所以時間序列可被合理地順勢推延;他認為最近的過去態勢,在某種程度上會持續的未來,所以將較大的權數放在最近的資料。指數平滑法是移動平均法中的一種,其特點在於給過去的觀測值不一樣的權重,即較近期觀測值的權數比較遠期觀測值的權數要大。根據平滑次數不同,指數平滑法分為一次指數平滑法、二次指數平滑法和三次指數平滑法等。但它們的基本思想都是:預測值是以前觀測值的加權和,且對不同的資料給予不同的權數,新資料給予較大的權數,舊資料給予較小的權數。

​ 所以指數平滑主要用在在時間序列分析上。可以做具有時間序列的預測模型。如給出了往年某產品銷售的歷史資料,讓你預測未來某年的銷售資料等

2. 一次指數平滑

當時間序列資料沒有明顯的變化趨勢,就可以使用一次指數平滑。實際就是對歷史資料的加權平均,它可以用於任何一種沒有明顯函式規律但確實存在某種前後關聯的時間序列的短期預測。

​ 但是一次指數平滑也具有一定的侷限性:第一,預測值不能反映趨勢變動、季節波動等有規律的變動;第二,這種方法多適用於短期預測,而不適合作中長期的預測;第三,由於預測值是歷史資料的均值,因此與實際序列的變化相比有滯後現象。

​ 其預測公式如下:

yt+1=αyt+(1α)yt
其中,yt+1是t+1時期的預測值,
yt
是t時刻的實際值,yt是t時刻的預測值。

所以,在迭代的過程中,我們需要開一個list來存放yt。最後的預測值就是

yt+1=αyt[1]+(1α)yt[1]
取實際值的最後一個與預測值的最後一個就能預測出下一個時刻的值!

其中y0的確定一般有以下的規則:

  • 如果資料小於20,一般取前三項的均值
  • 大於20時,看情況調整第一項的值,一般取第一項就行,因為資料多,y0的取值對最後的預測結果影響不大

關於α的取值方法,請往下看。

3. 二次指數平滑

二次指數平滑是對一次指數平滑的再平滑。它適用於具線性趨勢的時間數列。雖然一次指數平均在產生新的數列的時候考慮了所有的歷史資料,但是僅僅考慮其靜態值,即沒有考慮時間序列當前的變化趨勢。所以二次指數平滑一方面考慮了所有的歷史資料,另一方面也兼顧了時間序列的變化趨勢。

二次指數平滑的計算公式為:

Yt+T=at+btT St(2)=αSt(1)+(1α)St1(2) at=2St(1)St(2) bt=α1α(St(1)St(2))

所以,實際上在程式上的操作就是在一次平滑的基礎上再做一次指數平滑,其中我們需要兩個list來儲存一次平滑的值和二次平滑的值,通過對應的兩次指數平滑,就可以求出對應的at,bt的值。最後呼叫公式Yt+T=at+btT就可以做出預測,其中T是向後預測的週期,如向後預測一個週期(一天/一年等),那麼T=1,往後預測兩個就是T=2,以此類推。

4. 三次指數平滑

若時間序列的變動呈現出二次曲線趨勢,則需要採用三次指數平滑法進行預測。實際上是在二次指數平滑的基礎上再進行一次指數平滑。它與二次指數平滑的區別就是三次平滑還考慮到了季節性效應。

三次指數平滑的計算公式為:

St(3)=αSt(2)+(1α)St1(3)