搜尋課程與筆記

搜尋筆記

輸入主題、關鍵字或單元編號,例如 Flow Matching、U4。

    按 Esc 關閉 · ⌘ / Ctrl K 開啟搜尋

    M1.1 11 分鐘閱讀 2026年10月

    M1.1 從鞋子猜身高:Conditional Expectation

    只看鞋子

    朋友傳來一張照片,只拍到一雙鞋。你查到那是 25 公分的尺寸,然後被要求猜鞋主的身高。

    問題一:你會猜幾公分?依據是什麼?

    問題二:朋友補了一句「是男生」。你的猜測往哪邊動、動多少? 如果補的是「是女生」呢?

    一個自然的方法,是先找鞋碼相同的人,把他們的身高取平均;多知道一個條件,再縮小參考範圍。這些不同範圍的平均,彼此有什麼關係? 下面的身高與比例都是示意數字,我們要看的是條件如何改變平均的對象,不是建立真實人口的身高模型。

    課堂提問Q1

    把情境翻成數學:這裡的隨機變數有哪些?「猜身高」在數學上是在算什麼?「再知道性別」改變了哪個物件?

    先想一想,再展開看整理後的答案

    最直覺的說法是「身高是隨機變數」,然後就卡住。要多說三件事。

    隨機的來源是「這個人是誰」。 想像鞋主是從某個母體(例如台灣的成年人)裡隨機抽出來的一個人。抽到誰決定了三個數:身高 YY、鞋碼 XX、性別 GG。它們是同一次抽樣產生的三個隨機變數,彼此有關——鞋子大的人通常比較高。

    「猜」是在算一個平均。 「知道 X=25X=25,猜 YY」最自然的做法:把母體裡所有鞋碼 25 的人找出來,算他們的平均身高。這個數記成 E[Y∣X=25]\mathbb E[Y\mid X=25]。它不是「一定對」的預測(同一個鞋碼的人身高有一整個範圍),而是那一桶人的中心。

    「再知道性別」是換了一個更細的桶。 「鞋碼 25 且男性」是一桶,「鞋碼 25 且女性」是另一桶,各有自己的平均:E[Y∣X=25,G=男]\mathbb E[Y\mid X=25,G=\text{男}] 與 E[Y∣X=25,G=女]\mathbb E[Y\mid X=25,G=\text{女}]。原本那一桶,正好是這兩桶倒在一起。翻譯到這裡,問題二就變得精確:兩個細桶的平均與粗桶的平均是什麼關係? 這是 conditional expectation 的核心性質。

    分桶、取平均、再合併

    把一整個班的人按鞋碼排隊:23 的一桶、24 的一桶、25 的一桶……每桶算一個平均身高,寫在桶上。「知道鞋碼猜身高」就是看鞋碼、讀桶上的數字。所以這個猜測不是一個數,是一張表:每個鞋碼對應一個數。

    再依另一個條件細分,每個小桶各有平均。但我們沒有換掉人,只是重新分組,所以各小桶平均按人數加權,必須回到原桶平均。某個小桶的散布可以比較大;額外條件的好處要看平均後的剩餘誤差,不能保證每個小桶都更集中。

    第(二)點是這一篇的主角。它說「多一個條件」不會系統性地把猜測往某邊推——推上去的和推下去的,按人數加權後剛好抵消。

    鞋碼分桶後再依性別細分,小桶平均按人數加權會回到原桶。

    圖:條件期望是每個桶上的平均;tower property 把細桶合併回粗桶。

    把桶寫成數學

    定義。 XX、YY 是同一次抽樣得到的隨機變數。對 XX 的每個可能值 xx,

    m(x)=E[Y∣X=x]=∑yy P(Y=y∣X=x)(連續時 ∫y p(y∣x) dy)m(x)=\mathbb E[Y\mid X=x]=\sum_y y\,P(Y=y\mid X=x)\quad\Big(\text{連續時 }\int y\,p(y\mid x)\,dy\Big)

    是「X=xX=x 那一桶的 YY 平均」——一個數。把 xx 換成隨機變數 XX 本身,E[Y∣X]:=m(X)\mathbb E[Y\mid X]:=m(X) 就是「看到 XX 之後讀出來的桶上數字」——它是 XX 的函數,因此自己也是一個隨機變數(抽到誰、鞋碼就不同、讀到的數字就不同)。這是初學最容易混的一點:E[Y∣X=25]\mathbb E[Y\mid X=25] 是 165.2 這種數,E[Y∣X]\mathbb E[Y\mid X] 是整張表。

    四個性質。

    1. 總平均:E[E[Y∣X]]=E[Y]\mathbb E\big[\mathbb E[Y\mid X]\big]=\mathbb E[Y]——所有桶的數字按人數加權平均,就是全班平均。
    2. Tower property(迭代條件):對任何額外的資訊 GG,
    E[ E[Y∣X,G]  ∣  X ]=E[Y∣X].\mathbb E\big[\,\mathbb E[Y\mid X,G]\;\big|\;X\,\big]=\mathbb E[Y\mid X].

    細桶(X,GX,G 都知道)的數字,在只知道 XX 的情況下取平均,就回到粗桶。性質 1 是它在「XX 什麼都不告訴你」時的特例。 3. 提出已知的東西:E[h(X) Y∣X]=h(X) E[Y∣X]\mathbb E[h(X)\,Y\mid X]=h(X)\,\mathbb E[Y\mid X]——在桶裡 XX 是常數,h(X)h(X) 可以直接提出來。 4. 獨立:若 XX 與 YY 獨立,E[Y∣X]=E[Y]\mathbb E[Y\mid X]=\mathbb E[Y]——每桶的數字都一樣,分桶白做。

    展開細節Tower property 的證明(離散,四行)

    固定 X=xX=x。左邊是「先算細桶數字 E[Y∣X=x,G=g]\mathbb E[Y\mid X=x,G=g],再對 gg 按 P(G=g∣X=x)P(G=g\mid X=x) 加權」:

    ∑gP(g∣x)∑yy P(y∣x,g)=∑yy∑gP(y,g∣x)=∑yy P(y∣x)=E[Y∣X=x].\sum_g P(g\mid x)\sum_y y\,P(y\mid x,g)=\sum_y y\sum_g P(y,g\mid x)=\sum_y y\,P(y\mid x)=\mathbb E[Y\mid X=x].

    中間那一步用了 P(g∣x)P(y∣x,g)=P(y,g∣x)P(g\mid x)P(y\mid x,g)=P(y,g\mid x)(條件機率的乘法),以及「對 gg 加總把 gg 邊際掉」。連續情形把和換成積分,一字不改。

    兩個直覺,一個關係

    問題一。 「猜 165」就是讀 E[Y∣X=25]\mathbb E[Y\mid X=25]。它是對的做法——不過「對」在這裡有一個很具體的意思:它是那一桶的中心,同桶的人身高散在它兩側。為什麼「中心」是好猜測、以及在哪種意義下最好,是 M1.2 的事;這裡只確認它是有定義、可以算的量。

    問題二。 「男生往上調到 170、女生往下調到 162」對應 E[Y∣X=25,G]\mathbb E[Y\mid X=25,G] 的兩個值。tower property 給了直覺說不出的那件事:0.4×170+0.6×162=165.20.4\times170+0.6\times162=165.2,兩個細桶按性別比例加權回來,必須等於粗桶。所以「多一個條件」不是「往某邊修正」,而是把一個猜測拆成幾個猜測——拆得對不對,可以用加權平均是否回到原值來檢查。也因此,如果有人告訴你「鞋碼 25 的男生平均 170、女生平均 168、整體 165」,你可以立刻判斷這組數字不可能同時成立。

    多一個條件到底幫了什麼? 在 YY 有有限二階矩時,law of total variance 給出

    Var(Y∣X)=E[Var(Y∣X,G)∣X]+Var(E[Y∣X,G]∣X).\mathrm{Var}(Y\mid X) =\mathbb E[\mathrm{Var}(Y\mid X,G)\mid X] +\mathrm{Var}(\mathbb E[Y\mid X,G]\mid X).

    右邊第二項非負,因此細分後的平均桶內 variance不會增加;不是每個小桶的 variance 都一定較小。下一篇會把這件事接到平方預測誤差。

    這一切依賴什麼。 第一,E[Y∣X]\mathbb E[Y\mid X] 是對母體的聯合分佈定義的。鞋主如果不是從你腦中那個母體抽出來的(例如照片來自籃球隊聚會),表就用錯了——不是數學錯,是母體錯。第二,實務上這張表是從資料估出來的:每桶的平均由桶內的樣本算。桶分得越細,每桶樣本越少,桶上的數字越不穩。條件多到一定程度,「理論上更準」會被「估計上更抖」吃掉。

    用一個合成母體跑一次

    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}")

    大母體那一行:三個平均按比例加權後與 E[Y∣25]\mathbb E[Y\mid 25] 完全相同(這是恆等式,不是近似),而桶內標準差從約 5.8 掉到約 5(男生桶平均約 170、女生桶約 164,兩桶各自散佈 5,混在一起多出「桶間差距」那一份)——多知道性別讓散佈變小、平均不變。n=60n=60 那一行:鞋碼 25 的桶裡可能只有幾個人,分性別後有的小桶只剩一兩個、甚至是空的,桶上的數字跳來跳去——這就是「條件太細、樣本太少」。

    檢查理解

    想一想

    E[Y∣X]\mathbb E[Y\mid X] 與 E[Y∣X=25]\mathbb E[Y\mid X=25] 的差別是:

    想一想

    一家外送平台想預測每筆訂單的送達時間。它先按「距離」分桶算平均,再細分成「距離 × 是否下雨」。下列哪個敘述正確?

    想一想

    你手上只有 80 筆「鞋碼、身高、性別、年齡、居住縣市」的資料。想用所有五個欄位當條件來猜身高。最可能發生的事是:

    參考文獻

    1. Grimmett, G., Stirzaker, D. Probability and Random Processes, 3rd ed. Oxford University Press 2001.(conditional expectation 的定義與性質。)
    2. Williams, D. Probability with Martingales. Cambridge University Press 1991, Ch. 9.(把 E[Y∣X]\mathbb E[Y\mid X] 當成隨機變數、tower property 的一般形式。)
    3. Blitzstein, J. K., Hwang, J. Introduction to Probability, 2nd ed. CRC Press 2019, Ch. 9.(Adam’s law/tower property 與大量生活化例題。)