M1.1 從鞋子猜身高:Conditional Expectation
起點:只看鞋子
朋友傳來一張照片,只拍到一雙鞋。你查到那是 25 公分的尺寸,然後被要求猜鞋主的身高。
問題一:你會猜幾公分?依據是什麼?
問題二:朋友補了一句「是男生」。你的猜測往哪邊動、動多少? 如果補的是「是女生」呢?
請寫下兩題的答案與確定程度。多數人第一題會說「大概 165」,第二題會說「男生就往上調到 170 左右、女生往下調」。這些直覺大致對。但有一件事直覺通常說不出來:「男生的猜測」與「女生的猜測」和「不知道性別時的猜測」之間,有一個精確的關係,而且這個關係決定了「多一個條件」到底是幫了什麼。這一篇把「用已知條件去猜」寫成一個數學物件,然後回來看這個關係。
課堂提問Q1
把情境翻成數學:這裡的隨機變數有哪些?「猜身高」在數學上是在算什麼?「再知道性別」改變了哪個物件?
先想一想,再展開看整理後的答案
最直覺的說法是「身高是隨機變數」,然後就卡住。要多說三件事。
隨機的來源是「這個人是誰」。 想像鞋主是從某個母體(例如台灣的成年人)裡隨機抽出來的一個人。抽到誰決定了三個數:身高 、鞋碼 、性別 。它們是同一次抽樣產生的三個隨機變數,彼此有關——鞋子大的人通常比較高。
「猜」是在算一個平均。 「知道 ,猜 」最自然的做法:把母體裡所有鞋碼 25 的人找出來,算他們的平均身高。這個數記成 。它不是「一定對」的預測(同一個鞋碼的人身高有一整個範圍),而是那一桶人的中心。
「再知道性別」是換了一個更細的桶。 「鞋碼 25 且男性」是一桶,「鞋碼 25 且女性」是另一桶,各有自己的平均: 與 。原本那一桶,正好是這兩桶倒在一起。翻譯到這裡,問題二就變得精確:兩個細桶的平均與粗桶的平均是什麼關係? 這是 conditional expectation 的核心性質。
分桶、取平均、再合併
把一整個班的人按鞋碼排隊:23 的一桶、24 的一桶、25 的一桶……每桶算一個平均身高,寫在桶上。「知道鞋碼猜身高」就是看鞋碼、讀桶上的數字。所以這個猜測不是一個數,是一張表:每個鞋碼對應一個數。
現在把每一桶再依性別分成兩小桶,各算平均。三件事會發生:(一)男生小桶的數字通常比原桶高、女生小桶通常比原桶低;(二)把兩個小桶倒回去,總平均一定等於原桶的數字——因為那本來就是同一群人;(三)小桶裡的人彼此更像,每桶內的身高散得比較開的程度變小了。
第(二)點是這一篇的主角。它說「多一個條件」不會系統性地把猜測往某邊推——推上去的和推下去的,按人數加權後剛好抵消。
把桶寫成數學
定義。 、 是同一次抽樣得到的隨機變數。對 的每個可能值 ,
是「 那一桶的 平均」——一個數。把 換成隨機變數 本身, 就是「看到 之後讀出來的桶上數字」——它是 的函數,因此自己也是一個隨機變數(抽到誰、鞋碼就不同、讀到的數字就不同)。這是初學最容易混的一點: 是 165.2 這種數, 是整張表。
四個性質。
- 總平均:——所有桶的數字按人數加權平均,就是全班平均。
- Tower property(迭代條件):對任何額外的資訊 ,
細桶( 都知道)的數字,在只知道 的情況下取平均,就回到粗桶。性質 1 是它在「 什麼都不告訴你」時的特例。 3. 提出已知的東西:——在桶裡 是常數, 可以直接提出來。 4. 獨立:若 與 獨立,——每桶的數字都一樣,分桶白做。
展開細節Tower property 的證明(離散,四行)
固定 。左邊是「先算細桶數字 ,再對 按 加權」:
中間那一步用了 (條件機率的乘法),以及「對 加總把 邊際掉」。連續情形把和換成積分,一字不改。
回到情境:兩個直覺,一個關係
問題一。 「猜 165」就是讀 。它是對的做法——不過「對」在這裡有一個很具體的意思:它是那一桶的中心,同桶的人身高散在它兩側。為什麼「中心」是好猜測、以及在哪種意義下最好,是 M1.2 的事;這裡只確認它是有定義、可以算的量。
問題二。 「男生往上調到 170、女生往下調到 162」對應 的兩個值。tower property 給了直覺說不出的那件事:,兩個細桶按性別比例加權回來,必須等於粗桶。所以「多一個條件」不是「往某邊修正」,而是把一個猜測拆成幾個猜測——拆得對不對,可以用加權平均是否回到原值來檢查。也因此,如果有人告訴你「鞋碼 25 的男生平均 170、女生平均 168、整體 165」,你可以立刻判斷這組數字不可能同時成立。
多一個條件到底幫了什麼? 不是改變平均,而是縮小每桶內的散佈:細桶裡的人彼此更像,猜錯的幅度變小。這件事下一篇會寫成一條精確的等式。
這一切依賴什麼。 第一, 是對母體的聯合分佈定義的。鞋主如果不是從你腦中那個母體抽出來的(例如照片來自籃球隊聚會),表就用錯了——不是數學錯,是母體錯。第二,實務上這張表是從資料估出來的:每桶的平均由桶內的樣本算。桶分得越細,每桶樣本越少,桶上的數字越不穩。條件多到一定程度,「理論上更準」會被「估計上更抖」吃掉。
回到情境:用一個合成母體跑一次
import numpy as np
rng = np.random.default_rng(1)
def population(n): # 合成母體:性別 → 鞋碼 → 身高
g = rng.random(n) < 0.5 # True = 男
shoe = np.where(g, rng.normal(26.5, 1.0, n), rng.normal(23.5, 1.0, n))
height = np.where(g, 176 + 4*(shoe-26.5), 158 + 4*(shoe-23.5)) + rng.normal(0, 5, n)
return g, shoe, height
for n in (200_000, 60): # 大母體 vs 只有 60 筆資料
g, shoe, h = population(n)
b = np.abs(shoe - 25) < 0.25 # 鞋碼 25 那一桶
pm = g[b].mean() # 桶內男生比例
EY, EYm, EYf = h[b].mean(), h[b & g].mean(), h[b & ~g].mean()
print(f"n={n:>6}: 桶內 {b.sum()} 人 E[Y|25]={EY:.1f} 男={EYm:.1f} 女={EYf:.1f} "
f"加權回來={pm*EYm+(1-pm)*EYf:.1f} 桶內標準差 {h[b].std():.1f} → 男 {h[b&g].std():.1f} 女 {h[b&~g].std():.1f}")
大母體那一行:三個平均按比例加權後與 完全相同(這是恆等式,不是近似),而桶內標準差從約 5.8 掉到約 5(男生桶平均約 170、女生桶約 164,兩桶各自散佈 5,混在一起多出「桶間差距」那一份)——多知道性別讓散佈變小、平均不變。 那一行:鞋碼 25 的桶裡可能只有幾個人,分性別後有的小桶只剩一兩個、甚至是空的,桶上的數字跳來跳去——這就是「條件太細、樣本太少」。
先消化一下
參考文獻
- Grimmett, G., Stirzaker, D. Probability and Random Processes, 3rd ed. Oxford University Press 2001.(conditional expectation 的定義與性質。)
- Williams, D. Probability with Martingales. Cambridge University Press 1991, Ch. 9.(把 當成隨機變數、tower property 的一般形式。)
- Blitzstein, J. K., Hwang, J. Introduction to Probability, 2nd ed. CRC Press 2019, Ch. 9.(Adam’s law/tower property 與大量生活化例題。)