
用白話解釋指數平滑公式
指數平滑透過對每筆過去的觀測值乘上以平滑常數 α 為底、指數遞增的 (1 − α) 冪次來產生預測,給予較近期的資料較高的權重,並以指數方式遞減較舊資料的權重。遞迴形式是在 Excel 中最易撰寫的:S_t = α × Y_t + (1 − α) × S_{t-1},其中 S_t 是時間 t 的平滑值,Y_t 是實際觀測值,而 α 是介於 0 和 1 之間的平滑常數。當你展開該遞迴時,距今 k 期的觀測值所獲得的權重為 α × (1 − α)^k,而這些 (1 − α)^k 項正是指數計算機所設計用來處理的指數運算式。下一期的預測即為 F_{t+1} = S_t,所以一旦平滑序列存在,預測就是最後一個平滑值。Excel 並未內建單一可完全手動控制的 EXPONENTIAL SMOOTHING 工作表函數,但上述公式相當簡短,可直接放入任何儲存格,並複製到整個預測欄。
對一般讀者來說,可以把 α 想像成一個「信任旋鈕」。當 α = 1 時,模型只信任最新的觀測值,預測就恰好等於 Y_t;當 α 趨近於 0 時,預測幾乎依賴整段歷史,新數字進來時幾乎不會移動。現實世界的預測會使用介於兩者之間的數值,而這個「介於兩者之間」背後的數學,就是任何標準指數工具都能計算的純粹指數運算。
每個過去值的貢獻:遞迴展開
將 S_{t-1} 反覆代入自身,就能看見其底層結構。對於一個從第 1 期開始、平滑值為 S_1 = α × Y_1 + (1 − α) × S_0 的序列,第 2 期的平滑值變為:
S_2 = α × Y_2 + (1 − α) × S_1 = α × Y_2 + (1 − α) × [α × Y_1 + (1 − α) × S_0] = α × Y_2 + α × (1 − α) × Y_1 + (1 − α)² × S_0
持續展開後,每個過去的 Y 都會貢獻 α × (1 − α)^k 的權重,而最初的錨點 S_0 則乘上 (1 − α)^t。(1 − α) 的各次方正是此方法名稱的由來:歷史資料的權重會隨其年齡以指數方式衰減。作為一個具體的數值範例,當 α = 0.3 時,底數為 0.7,距今五期的觀測值所獲得的權重為 α × 0.7^5。指數部分 0.7^5 等於 0.7 × 0.7 × 0.7 × 0.7 × 0.7 = 0.16807,因此對平滑值的完整貢獻為 0.3 × 0.16807 ≈ 0.0504。如果你想要為其他任意 k 重複這個過程而不必重新輸入乘法,指數計算機能即時回傳 0.7^k,並逐步顯示展開過程。
在 Excel 中建立預測模型
這個步驟適用於一個三欄加上資料的小表格。以下是逐格建立的完整步驟,假設資料為 A 欄的每月需求數字,B 欄為平滑欄,C 欄為預測欄。
- 將實際觀測值從 A2 開始放在 A 欄,並在 A1 加上如 "Demand" 的標頭。讓 A2 成為第一個實際期,例如銷售數 100。
- 將平滑常數放在一個命名過的儲存格中。在 D1 輸入 0.3,並將其命名為 "Alpha",讓公式保持可讀性。
- 在 B2 輸入初始平滑值。一個常見的做法是將 B2 設為等於 A2(平滑值等於第一個觀測值),如此可避免使用額外的 S_0 錨點。公式為 =A2。
- 在 B3 輸入遞迴公式 =$D$1*A3 + (1-$D$1)*B2,並向下拖曳至最後一個實際觀測值。$ 符號會鎖定 alpha 參照,讓公式永遠指向 D1。
- 對於緊接在最後一個實際值之後的預測列,將同一個遞迴公式再往下複製一列,但將實際儲存格視為空白或零。最簡單的做法是將下一個 A 儲存格留空,讓 B 欄的遞公式繼續運算;其結果即為預測 F_{t+1} = S_t。
- 若要預測多個期數,將後續所有 A 儲存格留空,並把 B 欄的公式向下複製。每一列都會對前一個 B 值套用同一個迴,當 alpha 為常數時,會產生一個固定在最後一個平滑水準的平坦預測。
- 將實際序列(A 欄)和平滑序列(B 欄)繪製成折線圖,以確認平滑曲線落在實際值的雜訊之內,並確認最新的 B 值與你想報告的預測相符。
這就是完整的 Excel 設定。B 欄底部的預測值就是你的答案;其餘的部分只是把公式向下拖曳。如果你也想預測一個明確的區間,可以將預測值放在第三欄,直接參照最新的 B 儲存格:在 C14 輸入公式 =B13 即得到下一期預測,而 C15 的 =B13 則得到再下一期,因為平坦的平滑在每一步都會產生相同的數字。
指數計算機在其中的角色
遞迴公式隱藏了指數,但它其實仍在背後運作。當你想要解釋預測、向同事說明 α 的選擇,或審核模型時,你需要的是實際的權重。最快的檢視方式就是計算 α × (1 − α)^k,其中 k = 0, 1, 2, ...,並檢查權重總和是否約略等於 1 − (1 − α)^t(殘差部分會歸到 S_0 點)。
指數計算機負責處理該運算式中的 (1 − α)^k 部分。將 (1 − α) 作為底數、k 作為指數輸入,工具會立即顯示底數^指數的結果,並展開小整數指數的計算過程。當 α = 0.3 時,底數為 0.7,而 k = 5 會得到 0.7^5 = 0.16807,這表示五期前的觀測值對平滑值的貢獻約為 0.3 × 0.16807 ≈ 0.050。相同的方法也可以用來找出模型的半衰期——也就是使 (1 − α)^k 首次降至 0.5 以下的最小的 k——並告訴你對預測而言還有多少期的歷史具有實質影響。
選擇平滑常數
α 的選擇決定了預測的反應程度。並沒有一個唯一正確的數值——它取決於序列的雜訊程度,以及你認為潛在水準實際變動的速度。下表摘要說明三個常用 α 區間的定性行為;每個過去期對平滑值的精確貢獻,必須透過指數計算機代入公式才能得出,因此下表的權重僅以方向描述,而非批次計算。
| Alpha (α) 範圍 | 平滑序列的行為 | 適用情境 |
|---|---|---|
| 0.1 到 0.2 | 非常平坦;對新觀測值反應緩慢,會平均長期的歷史資料 | 低雜訊的穩定序列、長期規劃 |
| 0.3 到 0.5 | 平衡;能追蹤水準而不會對單一尖峰過度反應 | 一般性的每月需求、典型企業 KPI |
| 0.7 到 0.9 | 緊貼最新觀測值;能快速回應真正的水準變動 | 變動快速的序列、短週期作業、近期趨勢偵測 |
在 Excel 中挑選 α 的一個實用方法是建立一個小型表格。在一欄中列出候選 alpha(0.1, 0.2, ..., 0.9)。在下一欄計算每個候選值下平滑序列與實際值之間的誤差平方和。誤差平方和最小的那個 α,就是對該段歷史的最佳擬合。每個候選值背後權重的精確代數,最終仍會回到 (1 − α)^k,因此每當你想確認半衰期或並排比較兩個 alpha 時,依然是指數計算機的專長領域。
Excel 建構中需要注意的陷阱
有幾個常見的陷阱會讓第一次用試算表做指數平滑的人出錯。這些都不是致命問題,只是若忽略就會改變數字結果。
- 第一個平滑值的錨定。將 S_1 = Y_1 是乾淨且常見的做法,但它讓第一筆觀測值獲得完整的權重,並使早期預測產生偏差。如果你有穩定的長期歷史,可以改為將 B2 定在前幾筆實際值的平均,或使用整體平均作為 S_0,並從第 2 列開始以該錨點啟動遞迴。
- 忘記加上 $ 符號。若缺少 $D$1,公式往下拖曳時 alpha 參照會跟著移動到 D2、D3,模型會在不知情的情況下出錯。務必鎖定 alpha 儲存格。
- 混淆 F 與 S。S_t 是當期的平滑值;F_{t+1} 是下一期的預測。在簡單指數平滑中,兩者只有在邊界才會相等:F_{t+1} = S_t,這正是為什麼預測欄可以是最後一個平滑值的平坦複本。
- 預測非平坦的區間。上述步驟對資料以外的所有期數都會產生平坦預測,因為沒有新的 Y 值可以納入。如果你需要會變動的預測,就已經跨入了 Holt 線性法或 Holt-Winters 的領域,它們會在相同的遞迴概念上再加上趨勢項與季節項。
如果你的序列呈現明顯的趨勢或季節性,上述簡單指數平滑公式就不適用。相同的指數運算仍可沿用,但遞形式會變成兩或三條方程式,而 (1 − α)^k 的加權方式也會變成勢與季節權重的乘積。可以先從簡單平滑開始,確認基本設定在你的資料上能順利運作,然後在欄位結構就緒後,再把趨勢與季節項一層層疊加上去。
如果你正在權衡各種選項,如何在 Excel 中根據日期計算週數對此有詳細說明。
如果你正在權衡各種選項,如何在 Excel 中計算指數平滑的 Alpha對此有詳細說明。