本系列文章翻譯自NIST(美國國家標準與技術研究院)的《Engineering Statistic Handbook》(工程統計手冊) 的第6章第4節關於時間序列分析的內容。本文的翻譯會先使用翻譯軟體進行初步翻譯,筆者在對不恰當之處進行修正。由於筆者水平有限,翻譯過程難免有疏漏之處,歡迎大家評論區指出。本站所有文章均為原創,轉載請註明出處。
3. 什麼是指數平滑
這是一種非常流行的產生平滑時間序列的方案。在單一移動平均(Single Moving Averages)中,過去的觀測值的權重是相等的,而指數平滑則隨著觀測值的變久賦予指數遞減的權重。
換句話說,最近的觀測結果在預測方面比過去的觀測結果具有相對更大的權重。
在移動平均的情況下,分配給觀察值的權重是相同的,等於1/N。然而,在指數平滑中,有一個或多個平滑引數需要確定(或估計),這些選擇決定了分配給觀察的權重。
本節將介紹單指數平滑、雙指數平滑和三指數平滑。
3.1 單指數平滑(Single Exponential Smoothing)
該平滑方案首先設定\(S_2\)為\(y_1\),其中\(S_i\)為平滑觀測值或EWMA, \(y\)為原始觀測值,下標表示時間段,1,2,...n。第3期\(S_3 = αy_2 + (1-α)S_2\),等等。沒有\(S_1\),平滑序列從第2個觀察值的平滑版本開始。
對於任意時刻\(t\),通過計算得到平滑後的值\(S_t\)
這是指數平滑的基本方程,常數或引數\(α\)稱為平滑常數。
注意:有一種指數平滑的替代方法,用當前觀察值\(y_t\)替換基本方程中的\(y_{t-1}\)。這個公式,由Roberts(1959)提出,在EWMA控制圖一節中有描述。這裡的公式遵循了Hunter(1986)。
設定第一個EWMA
初始EWMA在後續所有EWMA的計算中起著重要的作用。將\(S_2\)設定為\(y_1\)是一種初始化方法。另一種方法是將其設定為處理的目標。
還有一種可能性是對前四五個觀測值進行平均。
\(α\)值越小,初始EWMA的選擇越重要。在完成設定之前,使用者最好嘗試一些方法(假設軟體有這些方法)。
為什麼叫“指數”?
讓我們把基本方程展開,先把\(S_{t-1}\)代入基本方程,得到:
再代入\(S_{t-2}\),再代入\(S_{t-3}\),以此類推,直到\(S_2\)(即\(y_1\)),可以表明展開方程可以寫成:
例如,平滑值\(S_5\)的展開方程為:
這說明了指數行為。權值\(α(1−α)^t\)呈幾何遞減,它們的和是統一的,如下圖所示,利用幾何級數的一個性質:
從上一個公式中我們可以看到,求和項表明,在每個連續的時間段內,對平滑值\(S_t\)的貢獻變小了。
α= 0.3。觀察值權重\(α(1−α)^t\)隨時間呈指數(幾何)遞減。
Value | weight | |
---|---|---|
last | y1 | 0.2100 |
y2 | 0.1470 | |
y3 | 0.1029 | |
y4 | 0.0720 |
α的最佳值是多少?
較久的響應被抑制(平滑)的速度是α值的函式。當α接近1時,衰減迅速,當α接近0時,衰減緩慢。下表說明了這一點。
--------------->過去
觀測值
α | \((1−α)\) | \((1−α)^2\) | \((1−α)^3\) | \((1−α)^4\) |
---|---|---|---|---|
0.9 | 0.1 | 0.01 | 0.001 | 0.0001 |
0.5 | 0.5 | 0.25 | 0.125 | 0.0625 |
0.1 | 0.9 | 0.81 | 0.729 | 0.6561 |
我們選擇α的最佳值,從而得到最小的均方誤差。
讓我們用一個例子來說明這個原則。考慮以下由12個觀察結果組成的資料集:
Time | yt | S(α=0.1) | Error | Error squared |
---|---|---|---|---|
1 | 71 | |||
2 | 70 | 71 | -1.00 | 1.00 |
3 | 69 | 70.9 | -1.90 | 3.61 |
4 | 68 | 70.71 | -2.71 | 7.34 |
5 | 64 | 70.44 | -6.44 | 41.47 |
6 | 65 | 69.80 | -4.80 | 23.04 |
7 | 72 | 69.32 | 2.68 | 7.18 |
8 | 78 | 69.58 | 8.42 | 70.90 |
9 | 75 | 70.43 | 4.57 | 20.88 |
10 | 75 | 70.88 | 4.12 | 16.97 |
11 | 75 | 71.29 | 3.71 | 13.76 |
12 | 70 | 71.67 | -1.67 | 2.79 |
誤差平方和(SSE) = 208.94。平方誤差的均值(MSE)是SSE /11 = 19.0。
MSE再次計算α=0.5,結果是16.29,所以在這種情況下,我們更偏向α=0.5。我們能做得更好嗎?我們可以採用經過驗證的試錯法。這是一個迭代過程,從0.1到0.9之間的α範圍開始。我們確定α的最佳初始選擇,然後在α-Δ和α+Δ之間進行搜尋。我們可以再重複一次找出最好的α到小數點後3位。
但是有更好的搜尋方法,比如Marquardt方法。這是一個非線性優化器,使殘差平方和最小化。一般來說,大多數設計良好的統計軟體程式應該能夠找到使平均誤差最小的α值。
3.2 單指數平滑預測
預測公式
預測公式是基本方程:
可以寫成這樣:
其中\(ϵ_t\)為\(t\)時期的預測誤差(實際預測)。
換句話說,新的預測是舊的預測加上對上次預測中出現的誤差的調整。
預測引導(Bootstrapping of Forecasts)
如果您希望從某個來源(通常是最後的資料點)進行預測,而又沒有實際的觀測結果,會發生什麼?在這種情況下,我們必須修改公式使之成為:
\(y_{orgin}\)保持不變。這種技術被稱為引導(bootstrapping)。
Bootstrapping例子
在前面的例子中,最後一個資料點是70,它的預測(平滑值S)是71.7。由於我們確實有資料點和可用的預測,我們可以使用α=0.1的普通公式計算下一個預測值:
但對於下一個預測,我們沒有資料點(觀測)。現在我們計算:
引導預測與常規預測的比較
兩種方法的比較如下表所示:
Period | Bootstrap forecast | Data | Single Smoothing Forecast |
---|---|---|---|
13 | 71.50 | 75 | 71.5 |
14 | 71.35 | 75 | 71.9 |
15 | 71.21 | 74 | 72.2 |
16 | 71.09 | 78 | 72.4 |
17 | 70.98 | 86 | 73.0 |
單指數平滑和趨勢
單平滑(簡稱單指數平滑)在有趨勢時不是很好。單系數α是不夠的。
讓我們用α = 0.3平滑的資料集來證明這一點:
Data | Fit |
---|---|
6.4 | |
5.6 | 6.4 |
7.8 | 6.2 |
8.8 | 6.7 |
11.0 | 7.3 |
11.6 | 8.4 |
16.7 | 9.4 |
15.3 | 11.6 |
21.6 | 12.7 |
22.4 | 15.4 |
當存在趨勢時,單指數平滑是不充分的,結果圖如下:
3.3 雙指數平滑(Double Exponential Smoothing)
正如前面所觀察到的,單平滑在有趨勢時不能很好地跟蹤資料。這種情況可以通過引入第二個方程和第二個常數γ得到改善,它必須與α相結合選擇。 這是與雙指數平滑相關的兩個方程。
注意,在雙指數平滑中,使用該序列的當前值來計算其平滑值。
初始值
與單次平滑的情況一樣,雙次平滑中\(S_t\)和\(b_t\)的初始值設定也有多種方案。 \(S_1\)通常被設為\(y_1\)。下面是對\(b_1\)的三個建議值。
註解
第一個平滑方程直接調整\(S_t\)為,前一時期的趨勢值\(b_{t−1}\) 加上最後一個平滑值\(S_{t−1}\)。這有助於消除延遲,並將\(S_t\)帶到當前值的合適基數。
然後第二個平滑方程更新趨勢,其表示為後兩個值的差值。該方程的基本形式與單次平滑相似,但在這裡應用於趨勢的更新。
α和γ的值可以通過非線性優化技術獲得,如馬夸特(Marquardt)演算法。
3.4 雙指數平滑預測(LASP)
下一階段預測值的公式:
\(F_{t+1}=S_t + b_t\)
未來m個階段的預測值公式:
\(F_{t+m}=S_t + mb_t\)
例子
再次考慮下資料集:
6.4, 5.6, 7.8, 8.8, 11, 11.6, 16.7, 15.3, 21.6, 22.4.
現在我們擬合α=0.3623和γ=1.0的雙平滑模型。這些是最低的均方誤差的引數估計結果,通過比較原始序列和提前一步預測的預測序列(因為這個版本的雙指數平滑法使用當前的系列值來計算一個平滑值,平滑系列不能用於確定一個對應最小均方誤差的α)。所選的起始值為\(S_1=y_1=6.4\) 和
為了比較起見,我們還擬合了一個α=0.977的單指數平滑模型(單指數平滑的對應了最低的MSE)。
雙平滑的MSE為3.7024。 單次平滑的MSE為8.8867。
這個例子的平滑結果是:
Data | Double | Single |
---|---|---|
6.4 | 6.4 | |
5.6 | 6.6 (Forecast = 7.2) | 6.4 |
7.8 | 7.2 (Forecast = 6.8) | 5.6 |
8.8 | 8.1 (Forecast = 7.8) | 7.8 |
11.0 | 9.8 (Forecast = 9.1) | 8.8 |
11.6 | 11.5 (Forecast = 11.4) | 10.9 |
16.7 | 14.5 (Forecast = 13.2) | 11.6 |
15.3 | 16.7 (Forecast = 17.4) | 16.6 |
21.6 | 19.9 (Forecast = 18.9) | 15.3 |
22.4 | 22.8 (Forecast = 23.1) | 21.5 |
預測比較
為了瞭解每種方法是如何預測未來的,我們從最近一次觀測中計算了前五個預測,如下所示:
Period | Single | Double |
---|---|---|
11 | 22.4 | 25.8 |
12 | 22.4 | 28.7 |
13 | 22.4 | 31.7 |
14 | 22.4 | 34.6 |
15 | 22.4 | 37.6 |
這些結果的繪圖(使用預測的雙重平滑值)是非常有啟發性的。
從圖中可以看出,二次平滑比一次平滑更貼近資料。此外,對於預測來說,單次平滑並不比預測直線水平線更好,這在現實中是不太可能發生的。所以在這種情況下,最好採用雙重平滑。
最後,讓我們比較雙平滑和線性迴歸:
這是一張有趣的圖片。這兩種技術以相似的方式遵循資料,但迴歸線更為保守。也就是說,採用迴歸線比採用雙平滑時的增長速度要慢。
技術的選擇取決於預測者。如果希望以一種更積極的方式描繪增長過程,那麼可以選擇雙重平滑。否則,迴歸可能更可取。需要注意的是,線上性迴歸中,“時間”函式是自變數。第4章討論了線性迴歸的基礎知識,以及迴歸估計的細節。
3.5 三指數平滑( Triple Exponential Smoothing)
如果資料顯示趨勢和季節性會發生什麼?
在這種情況下,雙重平滑將不起作用。現在我們引入第三個方程來考慮季節性(有時稱為週期性)。由此產生的方程組被稱為“Holt-Winters”(HW)方法,以發明者的名字命名。
其方法的基本方程為:
這裡:
y是觀測值
S是平滑的觀測值
b是趨勢因子
I是季節指數
F是m個階段後的預測值
t是一個表示時間段的指標
α, β和γ是常數,這3個引數必須根據均方誤差是最小的方式來估計出來。這最好留給一個好的軟體包處理。
為了初始化HW方法,我們至少需要一個完整的季節資料來確定季節指數\(I_{t−L}\)的初始估計。
一個完整的季節資料由L個週期組成。我們需要估計從一個時期到下一個時期的趨勢因子。要做到這一點,建議使用兩個完整的季節;也就是2L週期。
趨勢因子的初始值
估算初始趨勢的一般公式:
季節指數的初始值
正如我們將在示例中看到的,我們使用的資料包含6年,每年4個階段(即4個季度)。
Step 1: 計算6年每年每個季度的平均值。
Step 2: 將觀測結果除以適當的年平均值。
Step 3:現在,通過計算每一行的平均值來形成季節指數。因此,初始季節指數為:
我們現在知道了計算初始估計值背後的代數方法。
下一頁包含了一個三重指數平滑的例子。
零係數的情況
有時會發生,一個計算機程式的三重指數平滑輸出的趨勢(γ)或季節性(β)的最終係數為零。或者更糟的是,兩者都輸出為零!
這是否表明沒有趨勢和/或沒有季節性?
當然不是!這僅僅意味著趨勢和/或季節性的初始值恰巧是正確的。為了達到最低的可能MSE,不需要更新。我們應該檢查更新的公式來驗證這一點。
3.6 三指數平滑例子
這個例子展示了一個資料集的單指數平滑、雙指數平滑和三指數平滑的比較。
下面的資料集代表了24個觀察結果。這是六年的季度資料(每年有四個季度)。
Quarter | Period | Sales | Quarter | Period | Sales | |||
---|---|---|---|---|---|---|---|---|
90 | 1 | 1 | 362 | 93 | 1 | 13 | 544 | |
2 | 2 | 385 | 2 | 14 | 582 | |||
3 | 3 | 432 | 3 | 15 | 681 | |||
4 | 4 | 341 | 4 | 16 | 557 | |||
91 | 1 | 5 | 382 | 94 | 1 | 17 | 628 | |
2 | 6 | 409 | 2 | 18 | 707 | |||
3 | 7 | 498 | 3 | 19 | 773 | |||
4 | 8 | 387 | 4 | 20 | 592 | |||
92 | 1 | 9 | 473 | 95 | 1 | 21 | 627 | |
2 | 10 | 513 | 2 | 22 | 725 | |||
3 | 11 | 582 | 3 | 23 | 854 | |||
4 | 12 | 474 | 4 | 24 | 661 |
讀者可以以文字格式下載資料。
實際時間序列與預測
對比MSEs
MSE | α demand | γ trend | β seasonality |
---|---|---|---|
6906 | 0.4694 | ||
5054 | 0.1086 | 1.0000 | |
936 | 1.0000 | 1.0000 | |
520 | 0.7556 | 0.0000 | 0.9837 |
通過計算機程式選擇更新系數,使每一種方法的均方誤差最小。
計算初始趨勢的例子
資料集包括季度銷售資料。季節是1年,因為一年有4個季度,所以L=4。利用公式我們得到:
計算初始季節指數的例子
1 | 2 | 3 | 4 | 5 | 6 | |
---|---|---|---|---|---|---|
1 | 362 | 382 | 473 | 544 | 628 | 627 |
2 | 385 | 409 | 513 | 582 | 707 | 725 |
3 | 432 | 498 | 582 | 681 | 773 | 854 |
4 | 341 | 387 | 474 | 557 | 592 | 661 |
\(\bar{X}\) | 380 | 419 | 510.5 | 591 | 675 | 716.75 |
在這個例子中,我們使用了整整6年的資料。其他方案可能只使用3年或其他年份。也有許多方法可以計算初始估計。
3.7 指數平滑法的總結
總結
多年來,指數平滑已被證明在許多預測情況下是非常有用的。它最初是由C.C. Holt在1957年提出的,用來表示沒有趨勢的非季節性時間序列。後來,他在1958年提出了一種處理趨勢的方法。Winters(1965)將該方法推廣到包括季節因素,因此被稱為“Holt-Winters方法”。
Holt-Winters方法有3個更新方程,每個方程都有一個常數,範圍從0到1。這些方程旨在給予最近的觀測值更多的權重,而過去的觀測值會減少權重。
這些權重以常數比例呈幾何級數遞減。
HM處理過程可以通過對使用者友好的軟體實現全自動化。