EMA 自適應學習:模型如何「記住」昨天的教訓

1950 年代的統計工具,至今仍是量化交易與特徵工程的主流。

為什麼模型需要「遺忘」?

任何量化模型都面臨一個根本張力:

  • 記住太多 → 對 2024 年的舊樣本過度擬合,對 2026 年的樣本適應慢
  • 記住太少 → 對最新趨勢(騎師傷病、馬匹狀態變化)反應遲鈍

理想的學習算法應該像人類學習:舊的東西慢慢淡忘,新的東西馬上記住

EMA(指數移動平均,Exponential Moving Average)就是這個直覺的數學表達。

EMA 是什麼?

對於一個時間序列 x₀, x₁, ..., xₜ,EMA 定義為:

θ̂ₜ = α × xₜ + (1 − α) × θ̂ₜ₋₁

其中:

  • α ∈ (0, 1) 是學習率(α 越大越快記住新的)
  • xₜ 是當前觀測值
  • θ̂ₜ₋₁ 是上一期的 EMA 估計

展開後可以看到,這其實是加權平均,所有過去觀測值的權重呈指數衰減:

θ̂ₜ = α × Σ (1 − α)ⁱ × xₜ₋ᵢ

一個直觀例子

假設我們追蹤某騎師近 10 場的勝率,每日更新一次:

場次12345678910
勝率0.200.300.400.500.300.400.600.700.600.65

不同學習率的 EMA:

ema_alpha_03 = 0.71   # α=0.3,較快反應
ema_alpha_01 = 0.61   # α=0.1,較慢反應
ema_alpha_005 = 0.55  # α=0.05,更慢
α=0.3 已經追上最新趨勢(場均 65%);α=0.05 還停留在歷史均值附近。

在我們的賽馬模型中怎麼用?

我們用 EMA 做三件事:

1. 騎師 / 練馬師勝率的動態更新

class EMA:
    def __init__(self, alpha=0.05):
        self.alpha = alpha
        self.value = None

    def update(self, x):
        if self.value is None:
            self.value = x
        else:
            self.value = self.alpha * x + (1 - self.alpha) * self.value

# 騎師勝率追蹤
jockey_ema = EMA(alpha=0.05)  # 大約 20 場的時間窗口
for race in races:
    jockey_ema.update(1 if won else 0)
    runner.jockey_ema = jockey_ema.value

2. 賠率走勢的平滑

odds_ema = EMA(alpha=0.1)
for snapshot in odds_snapshots:  # 每分鐘一個
    odds_ema.update(snapshot.win_odds)
    smoothed = odds_ema.value

3. 模型超參數的自適應

brier_ema = EMA(alpha=0.02)
for daily_metrics in metrics_history:
    brier_ema.update(daily_metrics.brier)
    if brier_ema.value < global_brier_baseline:
        learning_rate = base_lr * 1.5  # 模型在改善,加快學習新數據
    else:
        learning_rate = base_lr * 0.7  # 模型在惡化,保守一點

這讓模型對「市場結構變化」有自動反應。

α 怎麼選?

理論上最優 α 取決於信號的「半衰期」。半衰期 H 滿足:

(1 − α)ᴴ = 0.5   ⟹   α = 1 − 2^(−1/H)
應用場景半衰期對應 α
騎師即日狀態5 場α ≈ 0.13
騎師近月表現20 場α ≈ 0.034
馬匹長期實力100 場α ≈ 0.007
賠率短期動量30 分鐘α ≈ 0.50
賠率中期趨勢6 小時α ≈ 0.10
沒有「萬能 α」——必須按應用場景調。我們的特徵工程會為每個特徵存一個 α 配置。

與 SGD 學習率的關係

熟悉深度學習的讀者會發現:EMA 和 SGD 學習率有異曲同工之妙。

  • Adam 優化器:自適應學習率 ≈ 動態 α
  • Learning rate decay:訓練越久,學習率越小 → 對應「過去樣本權重越來越大」(雖然方向相反)
  • Momentum:EMA 的動量版本

EMA 是更簡潔、更可解釋的「在線學習」表達。在金融、量化交易領域,它至今仍是主流特徵工程手段。

為什麼我們公開這個?

EMA 不是什麼秘密——它是 1950 年代就存在的統計工具。但怎麼用、α 怎麼選、如何特徵化,是我們內部的工程細節。

我們選擇公開,原因有三:

  1. 方法論透明——研究的核心是可重現性
  2. 教育意義——讀者能從「一個 α = 0.05」理解「為什麼模型需要動態更新」
  3. 避開紅線——純統計方法論,零博彩用語,符合香港《賭博條例》第 148 章對「研究」的定義

延伸閱讀:Brier Score · LGBM 特徵工程 · Dixon-Coles 校正

參考文獻:Hunter, J. S. (1986). The Exponentially Weighted Moving Average. Journal of Quality Technology, 18(4), 203–210.

感謝閱讀。如對研究方法有疑問,歡迎透過會員中心的「聯絡研究團隊」與我們交流。

← 回到研究隨筆列表