M1.2 天氣預報該報幾度:MSE 的最小值是 Conditional Expectation
本篇重用M1.1從鞋子猜身高:Conditional Expectation
起點:一天只能報一個數字
你是氣象主播。每天早上,根據手上的資料,你必須報一個明天的最高溫。年底,電視台把你每天的預報減掉實際溫度、平方、加起來算平均——這個數字越小,年終獎金越高。
今天的資料顯示明天是一個不好報的日子:有 60% 的機率冷鋒不會到,最高溫 30 °C;40% 的機率冷鋒到了,最高溫 22 °C。中間的溫度幾乎不可能發生。
你報幾度?
多數人的第一反應是報 30——「最可能發生的情況」。也有人說報 26 或 27,「折衷一下」,但馬上會被質疑:那是一個幾乎不會發生的溫度,報它不是很怪嗎?請寫下你的選擇與確定程度。
這一篇會算出:在平方誤差的計分下,報 26.8 是最佳的,而且比報 30 好很多;但如果電視台改用絕對誤差計分,報 30 才是對的。 直覺「報最可能的」不是無腦的錯,它只是在回答另一種計分方式的問題。要看清這件事,需要把「最佳策略」變成一個可以求極值的式子。
課堂提問Q1
把情境翻成數學:隨機變數是什麼?「策略」是什麼樣的數學物件?「長期平均的平方誤差」怎麼寫?我們在對什麼東西求最小?
先想一想,再展開看整理後的答案
最直覺的做法是直接寫 ,但這樣就停了,漏掉了「策略」這一層。
兩個隨機變數:明天的實際最高溫 ,以及你早上看到的資料 (衛星圖、模式輸出、今天的溫度……全部打包)。它們有關——資料好的時候能把 的範圍縮小。
策略是一個函數 :看到資料 ,報出 。不是一個數,是「每種資料狀況該報什麼」的一整張表——和 M1.1 裡「每個鞋碼一格」的表是同一種物件。
計分:長期平均的平方誤差是
期望對「日子」取——每天抽一組 。我們在所有函數 裡找讓它最小的那個。這聽起來很大(函數空間),但下一節會看到只要三行就能解掉,答案正好是上一篇的那張表。
蹺蹺板的支點
在一根木尺上放砝碼:60% 的重量放在 30 的位置、40% 放在 22 的位置。問:支點放哪裡,木尺會平衡?答案是重心 ——一個沒有砝碼的位置。
平方誤差在做的事和重心一樣:它問「哪一個點到所有砝碼的距離平方加權總和最小」,答案就是重心,而重心不需要落在任何砝碼上。「最可能發生的溫度」是最重的那顆砝碼,兩者是不同的問題。
如果改問「到所有砝碼的距離(不平方)加權總和最小」,答案就變了:那是中位數——把砝碼的重量從兩端往中間數,數到一半的位置。這裡就是 30。
為什麼最小值一定落在條件期望
記 (每種資料狀況下 的桶內平均)。對任何策略 ,把 拆成 再平方:
交叉項是零:先對 條件, 在桶內是常數可以提出(M1.1 的性質 3),剩下 。於是
結論: 讓 MSE 最小,而且是唯一的最小點(第二項為零迫使 )。剩下的第一項是 ——桶內的散佈,任何策略都消不掉;上一篇說「多一個條件讓桶內散佈變小」,此刻它有了精確的意義:條件越好,MSE 的下限越低。
展開細節換成絕對誤差為什麼是中位數;不對稱懲罰為什麼是 quantile
固定資料狀況(也就是在一個桶內),把 對 微分: 往右移一點,所有在 左邊的 距離增加、右邊的減少,所以導數是 。令它為零得 —— 是中位數。例子裡 在 22 與 30 之間時導數是 ,一路遞減到 30 才停,所以最佳是 30。
若低估一度罰 、高估一度罰 (例如低估讓民眾沒帶外套,罰得重),同樣的微分給 ,最佳 是 的 quantile——懲罰越不對稱,最佳預報越往被罰重的那一側偏。平方誤差是 且懲罰隨距離加速的特例,所以它選的是 mean 而不是任何 quantile。
回到情境:報 26.8,還是報 30?
平方誤差計分。 這一天 已知,桶內分佈是「30 佔 60%、22 佔 40%」,。三種做法的期望平方誤差:
| 報 | 期望平方誤差 |
|---|---|
| 30(最可能) | |
| 26.8(桶內平均) | |
| 22 |
報 26.8 比報 30 少了四成的誤差。它「幾乎不會發生」這件事與平方誤差無關——平方誤差只在乎距離,而 26.8 離兩個可能都不遠;報 30 賭對時零誤差,賭錯時 8 度的平方是 64,40% 的機率就夠拖垮它。直覺「報最可能的」錯在一個隱含假設:它以為計分只看「有沒有猜中」,那是 0–1 式的計分,不是平方誤差。
絕對誤差計分。 同一天,:報 30 是 ,報 26.8 是 。這次 30 贏。所以直覺沒有錯——它是絕對誤差(或更接近「猜中與否」)下的正確答案。 兩種計分給不同答案,數學告訴你的是「哪種計分對應哪個中心」,選哪種計分是電視台的事。
這個結論依賴什麼。 第一,桶內分佈(60/40、30/22)要對——它來自你的資料與模式,錯了兩個答案都錯。第二, 的 variance 要有限;碰到極端厚尾的量(偶爾出現離譜的值),mean 會被那幾天拖著跑,平方誤差的最佳策略本身變得不穩,中位數反而穩。第三,證明用到 可以是任何函數——實務上你用一個模型逼近 ,逼不到的部分就是第二項,不為零。
回到情境:模擬三千天
import numpy as np
rng = np.random.default_rng(2); days = 3000
Y = np.where(rng.random(days) < 0.6, 30.0, 22.0) # 60% 是 30 度、40% 是 22 度
grid = np.linspace(20, 32, 241)
mse = [((Y - a)**2).mean() for a in grid]; mae = [np.abs(Y - a).mean() for a in grid]
print(f"MSE 最佳預報 {grid[np.argmin(mse)]:.1f}(理論 26.8) MAE 最佳預報 {grid[np.argmin(mae)]:.1f}(理論 30)")
print(f"報 30 的 MSE {((Y-30)**2).mean():.1f},報 26.8 的 MSE {((Y-26.8)**2).mean():.1f}")
# 違反假設:把每天的溫度換成極厚尾的分佈(偶爾出現離譜值),看 mean 還穩不穩
Z = 26 + 2*rng.standard_t(df=1, size=days) # Cauchy 尾巴:variance 不存在
for k in (100, 1000, 3000):
print(f"前 {k} 天:mean {Z[:k].mean():8.2f} median {np.median(Z[:k]):6.2f}")
前兩行印出 MSE 最佳在 26.8、MAE 最佳在 30,兩個數字與表格一致。最後三行是刻意違反「variance 有限」:厚尾之下,累積的 mean 隨著天數不收斂(一個離譜值就把它拉走幾度),median 卻穩穩停在 26 附近——這時「MSE 最佳=mean」在數學上仍成立,但那個 mean 已經不是一個能從資料穩定估出來的量。
先消化一下
參考文獻
- Grimmett, G., Stirzaker, D. Probability and Random Processes, 3rd ed. Oxford University Press 2001.(conditional expectation 作為最佳平方誤差預測、法則與例題。)
- Bishop, C. M. Pattern Recognition and Machine Learning. Springer 2006, Ch. 1.5.5.(平方損失的最小值是 conditional mean;Minkowski loss 一族與中位數。)
- Gneiting, T. Making and Evaluating Point Forecasts. JASA 2011.(哪種計分函數對應哪個統計量——mean、median、quantile——的系統整理。)