兩個變數一起看:聯合分布
玩完這關,你手上會多一張「同時描述兩個欄位」的分布圖 —— 而且你會知道獨立到底是什麼意思(不是 cov = 0)、迴歸線其實是一串條件平均、以及機率統計 05 關那顆橢圓是從哪裡冒出來的。
① 這關在解什麼問題
上一關給了你什麼 機率統計 03 ⑥ 讓 03 關那張 C 第一次派上用場, 做法是把兩欄壓成一個數字:wTCw 進去四個統計量、出來一個風險。 這一關反過來走 —— 不壓了,把那兩欄攤開並排看。 攤開之後 C 描述的東西還是同一個橢圓形狀, 但它會換上一個新身分:每一格填的不是「有幾筆」,是「本來該有多少機率」。
機率統計 05 關整關都在玩一顆橢圓,而那顆橢圓的正式身分是「二維常態分布的等高線」 —— 可是這份教材從頭到尾沒有教過「二維分布」是什麼東西。你看到的一直是一堆靜態的點, 然後機率統計 05 關突然開始講「機率密度」「1σ 涵蓋率」「這個點有多罕見」。中間那一層被跳過了。
還有一個更早的欠款:03 關講過「cov = 0 不等於獨立」, 但它只丟了一條拋物線當反例,從來沒告訴你「獨立」的定義是什麼。 用一個沒定義過的詞去否定另一個東西,等於什麼都沒說。
這一關把這兩筆都補掉。
先講具體的困擾。上一關做的事是把兩個變數壓成一個數字: 兩檔股票的報酬加權相加,變成投資組合的一個報酬;一句話複述就是 「Z = w1X + w2Y 的變異數要多算一項 2w1w2cov(X, Y)」。 很好用,但有一整類問題它答不了 —— 因為那些問題不能加。
這個人 175 公分、45 公斤,奇怪嗎?
- 單看身高:175 公分很正常,一點都不奇怪。
- 單看體重:45 公斤也很正常,班上一半的人都在那附近。
- 但這兩個數字湊在同一個人身上就非常奇怪 —— BMI 14.7,這是要送醫的。
你手上那兩張「只看一欄」的分布圖,物理上不可能回答這個問題。 因為「奇怪」這件事不住在身高裡、也不住在體重裡,它住在兩欄的搭配方式裡。 你把它們相加也救不了:175 + 45 = 220,這個數字跟一個 160/60 的人(220)長得一模一樣。
所以你需要一個新東西:一張同時描述兩個欄位的分布。 它要能回答「(175, 45) 這一格裡,本來應該有多少人」。這張東西叫聯合分布(joint distribution), 是這一關的主角。
③ 聯合分布把直方圖從一維推到二維,順便認識邊際分布。
④ 獨立給出正式定義,並把 03 關那個坑升級成一張看得見的圖。
⑤ 條件機率用一張 2×2 的事件表把「已知」兩個字講定,並拆掉 P(A|B) = P(B|A) 這個錯覺。
⑥ 貝氏定理把問題反過來問:檢驗陽性之後,真的有病的機率是多少。
⑦ 條件分布在圖上切一刀,然後你會發現迴歸線一直都在那裡。
⑧ 等高線把二維常態畫成地形圖 —— 那圈同心橢圓就是機率統計 05 關的主角。
依賴:機率統計 02 關的機率密度(一維常態長什麼樣、密度不是機率、面積才是機率)與 機率統計 03 關的 cov 交叉項(兩個變數一起動的時候會多出一項)。 這兩關的結論我在需要的地方會用一句話複述,不必先回去讀完。
② 先把這一頁會出現的符號講定
下面每一個都會出現在圖上、按鈕上、或讀數盤裡。看到不認得的就翻回來。
| 符號 | 怎麼唸 | 它是什麼 |
|---|---|---|
| X Y | 大寫 X、大寫 Y | 兩個隨機變數。這一頁 X = 身高(cm)、Y = 體重(kg)。 大寫是「還沒抽出來的那個欄位」,小寫 x、y 是「抽出來之後的某一個具體數值」。 |
| P(x, y) | P of x comma y | 聯合分布。「身高落在 x 這一格而且體重落在 y 這一格」的機率。 畫面上就是熱力圖某一格的顏色深淺。這一頁一律用格子(bin)來估:格子裡的人數 ÷ 總人數。 |
| P(x) P(y) | P of x、P of y | 邊際分布(marginal)。只看一個欄位時看到的分布。 數值上 P(x) = Σy P(x, y),就是「把熱力圖的一整行加起來」。 畫面上是熱力圖下方(藍)與左側(橘)那兩排長條。 |
| P(x)·P(y) | 外積 / outer product | 把兩條邊際分布相乘拼回一張二維表。它是「假如兩欄真的獨立,聯合分布應該長的樣子」。 ④ 的中間那張圖就是它。 |
| Δ | delta | Δ = P(x, y) − P(x)·P(y),實際的聯合分布減掉「假裝獨立」的版本。 ④ 右邊那張差圖畫的就是它。全白 ⇒ 獨立。 |
| TV | Total Variation | 把整張差圖的絕對值加起來再除以 2:TV = ½ Σ|Δ|。 一個 0% ~ 100% 的數字,用來回答「這張差圖到底有多不白」。0% = 完全獨立。 |
| A B | 事件 A、事件 B | 事件:一件「發生了 / 沒發生」的事,例如「今天下雨」「檢驗陽性」。 只有 ⑤⑥ 用它 —— 那兩節談的是「有沒有發生」,其餘各節談的是「落在哪一格」。 |
| A ∩ B | A 交 B | 兩件事同時發生。∩ 就是「而且」。 |
| P(A | B) | P of A given B | 條件機率:已知 B 發生了,A 發生的機率。定義是 P(A ∩ B) / P(B) —— 把分母從「整個世界」換成「B 這個小世界」。豎線 | 唸「已知」,不是除號。 |
| 先驗 後驗 | prior、posterior | ⑥ 的主角:看到證據之前與看到證據之後的機率。 例:先驗 = 隨便一個人有病的機率;後驗 = 這個人驗出陽性之後,有病的機率。 |
| 敏感度 特異度 | sensitivity、specificity | 一支檢驗的兩張成績單(⑥)。敏感度 = P(陽性 | 有病), 特異度 = P(陰性 | 沒病)。兩個都是「已知病情」問「檢驗結果」,方向跟你要的相反。 |
| E[Y | X = x] | expected Y given X equals x | 條件平均:把身高固定在 x 的那一群人,他們體重的平均。 ⑦ 下方那條大字讀數就是它。豎線 | 唸「已知」。 |
| μx μy | mu x、mu y | 兩欄各自的平均。這一頁 μx = 167.00 cm、μy = 59.00 kg (直接沿用 05 關那 12 個人算出來的)。 |
| σx σy | sigma x、sigma y | 兩欄各自的標準差(散開幅度)。⑧ 的前兩根滑桿直接控它。 |
| ρ | rho(讀「若」) | 相關係數,−1 ~ +1。就是 03 關那個 r, 只是講「分布」時習慣用希臘字母 ρ、講「手上這批資料」時習慣用 r。 ρ = cov(X, Y) / (σxσy)。 |
| n B | n、B | n = 模擬出來幾筆資料(這一頁固定 2000)。 B = 每一邊切成幾格(滑桿可調,預設 12,所以熱力圖是 12 × 12 = 144 格)。 |
| seed | 種子 | 亂數的起點。同一個 seed ⇒ 每次重整看到的數字一模一樣,所以我在文字裡引用的數值不會說謊。 按「再抽一次」才會換 seed,換完畫面上會告訴你新的是幾號。 |
③ 聯合分布:把直方圖從一維推到二維
從你已經會的東西開始:直方圖。機率統計 02 關做過一次 —— 把一整欄數字切成幾格,數每一格裡有幾個人,畫成長條。一句話複述那一關: 格子夠多、資料夠多的時候,那排長條的輪廓會逼近一條平滑的曲線,那條曲線就是機率密度。
二維的做法一模一樣,只是格子從「一條線上的區間」變成「平面上的方塊」:
最小的例子(先只用 4 個格子)。假設只有 6 個人,身高只分「高 / 矮」,體重只分「重 / 輕」:
| 體重輕 | 體重重 | 這一列加總 | |
|---|---|---|---|
| 身高矮 | 3 | 0 | 3 |
| 身高高 | 0 | 3 | 3 |
| 這一行加總 | 3 | 3 | 6 |
中間那 4 格(3 / 0 / 0 / 3)就是聯合分布;最右邊那一欄與最下面那一列就是邊際分布。 「邊際」這個名字的由來就是這麼樸素 —— 它被寫在表格的邊上(margin)。
而這張表已經藏了整關的重點:邊際告訴你「矮的 3 個、高的 3 個、輕的 3 個、重的 3 個」, 但它完全沒告訴你「矮的都輕、高的都重」。那件事只寫在中間那 4 格裡。
下面把 2 × 2 放大成 B × B,資料換成 05 關那 12 個人的身高體重 —— 只是 12 個點畫熱力圖太稀疏了, 所以我拿那 12 人算出來的 μ、σ、ρ 當種子,用固定 seed 模擬出 2000 筆同樣性格的人。合成資料,不是真人。
你會看到什麼:中間那片方格是青色熱力圖 —— 顏色越深=落在那一格的人越多,白色=沒人。下方那排藍色長條是身高的邊際分布 (把熱力圖每一直行加起來),左側那排橘色長條是體重的邊際分布(把每一橫列加起來)。
你可以動什麼:三顆「①②③」按鈕一步一步把圖疊出來; 「相關 / 洗牌」兩顆按鈕切換兩份邊際分布完全相同的資料; 滑桿改格子數;「顯示原始 2000 點」把散點疊回去;「再抽一次」換 seed。
要看出什麼:切到「洗牌」,上下兩排長條一根都不會動(讀數盤會告訴你差異是 0 根), 可是中間那片熱力圖從一條斜帶變成一團圓球。 結論就一句:邊際分布一樣的兩張聯合分布,中間可以完全不同。
熱力圖的座標是格子編號(第幾格),刻度上標的是那一格的起點值。這樣每一格都是正方形,看得出對角線。 兩排長條都是從資料格往外長出去:身高那排往下方基線上長、體重那排往左長。
邊際分布 = 只看一個欄位時看到的東西 = 把熱力圖的一整行(或一整列)加起來。 加總這個動作會把「另一個欄位是多少」這件事整個壓掉,所以邊際是有損的。
而「洗牌」那顆按鈕證明了損失有多嚴重:兩份資料的兩條邊際分布一根長條都不差 (因為洗牌只是把體重那一欄重新配對,那一欄的數字一個都沒變), 但一份是「高的人重」、另一份是「高矮胖瘦隨機亂配」。 從兩條邊際分布,你永遠無法反推中間長什麼樣。
這句話值得再說一次,因為它是下一節的全部:如果邊際不足以決定聯合,那「差在哪裡」就是一個可以量的東西。 那個差,名字叫「不獨立」。
④ 獨立的正式定義:兩條邊際的外積
先給定義,然後我會用一整張圖把它變成看得見的東西。
右邊:身高落在 x 的比例 乘上 體重落在 y 的比例。
「對每一格都成立」是重點 —— 有一格不成立,就不獨立。
白話版:知道 x 完全不改變你對 y 的看法。
為什麼「相乘」就是獨立?用最小的例子想:丟一枚硬幣、擲一顆骰子。
- 硬幣正面的機率 ½,骰子擲出 6 的機率 ⅙。
- 「正面而且 6」的機率是 ½ × ⅙ = 1/12。你會直接相乘,因為硬幣不知道骰子的事。
- 反過來,如果我告訴你「這兩個東西之間有一條線」—— 例如骰子是被硬幣的結果換掉的 —— 你就不敢相乘了,你會想先問「那硬幣是正面還是反面?」
所以「能不能直接相乘」就是獨立的操作型定義。而這給了我們一個超好用的檢查法: 把兩條邊際分布相乘,拼出一張「假如真的獨立會長的樣子」,再跟實際的聯合分布相減。 差出來的東西如果全是 0,就是獨立;差出來有花紋,那些花紋就是「不獨立」長什麼樣。
你會看到什麼:三張同樣大小的熱力圖。 (a) 青色=實際的聯合分布 P(x, y)。 (b) 綠色=把 (a) 的兩條邊際拿出來相乘拼回去的外積 P(x)·P(y), 也就是「假如獨立,應該長這樣」。 (c) =兩者相減:紅=實際比獨立版多、藍=比獨立版少、白=剛好一樣。
你可以動什麼:三顆按鈕換三份資料(相關的身高體重 / 洗牌過的身高體重 / 03 關那條拋物線); 滑桿改格子數;「再抽一次」換 seed。
要看出什麼:獨立時 (c) 幾乎全白(剩下的一點雜色是抽樣雜訊,不是結構); 相關時 (c) 會出現一條對角紋 —— 左下和右上紅、左上和右下藍。 而拋物線那組的 cov 幾乎是 0,(c) 卻明顯不白。
聯合分布 P(x, y)
2000 筆資料真的落在哪裡。
外積 P(x)·P(y)
只用兩條邊際重建的版本 —— 假如獨立,該長這樣。
Δ = (a) − (b)
獨立就全白。有花紋,花紋就是關係本人。
TV(總變異距離)= 把整張差圖的絕對值加起來除以 2。
0% 就是完全獨立;它同時也是「這兩欄的關係有多強」的一個不挑形狀的度量。
三張圖共用同一個色階:滿格=(a) 裡最濃那一格的機率。所以 (c) 的濃淡可以直接跟 (a) 比
——「差多少 vs 本來有多少」一眼就看得出來。
03 關的反例 ① 是一條拋物線(施肥太少長不好、施太多把根燒壞), 當時的結論是「cov = 0.00,可是 y 完全由 x 決定」。你按下第三顆按鈕,那條拋物線就在 (a) 裡。
現在你有能力把那句話講完整了:
- cov 幾乎是 0、r 幾乎是 0 —— 這兩個數字說的是「沒有直線傾向」,這句話是真的。
- 但 (c) 那張差圖明顯不是白的 —— 紅色沿著那條拱形排開 (中間高、兩端低,正是拋物線本人的形狀),其餘一整片是藍的。 這說的是「知道施肥量,你對收成的看法會大幅改變」,所以統計上不獨立。
- 兩件事不衝突:cov 只有一把尺,而那把尺只量直線。 拋物線在那把尺上量到 0,不是因為沒關係,是因為那把尺量不到這種關係。
正確的邏輯方向只有一邊:獨立 ⇒ cov = 0;cov = 0 ⇏ 獨立。 而外積差圖是那個「⇏」的具體長相 —— 你現在可以指著它說「就是這些紅藍花紋,cov 看不見」。
獨立的定義是 P(x, y) = P(x)·P(y),白話是「知道 x 完全不改變你對 y 的看法」。 檢查方法就是把兩條邊際相乘、跟實際相減,看剩下什麼。
而「相關」只是「不獨立」的其中一種長相 —— 對角紋那一種。 拋物線那種對稱的不獨立,cov 會誠實地回報 0,因為它真的沒有直線傾向。
⑤ 條件機率的事件版:把世界縮小
下一節要在熱力圖上切一刀。切之前,先用最小的版本把「條件」這兩個字講定 —— 小到只有「發生 / 沒發生」兩種結果,連格子都不用切。
先講一件你每天都在做的判斷:出門要不要帶傘。 你不會去查「一年裡有幾天下雨」,你會先看窗外。看窗外這個動作, 就是把「一整年」縮小成「早上像今天這樣的那些天」, 然後在縮小後的世界裡重新數一次下雨的比例。那個比例就叫條件機率。
分子 P(A ∩ B) 是「A 和 B 同時發生」,分母 P(B) 是「B 發生」。
整條式子只做一件事:把分母從「整個世界」換成「B 這個小世界」。 分子跟著只留下小世界裡的部分,所以要用 A ∩ B 而不是 A。
這一節接下來一律用同一組事件,你不用記別的:
| 符號 | 怎麼唸 | 就地翻譯(這一節固定這個意思) |
|---|---|---|
| A | 事件 A | 今天下雨 |
| B | 事件 B | 這一天有人帶了傘 |
| A ∩ B | A 交 B | 下雨而且帶了傘。∩ 就是「而且」,畫面上是左上角那一格 |
| P(A) | P of A | 下雨的天數 ÷ 總天數。分母是整個世界 |
| P(A | B) | P of A given B | 在帶傘的那些天裡,下雨的比例。分母縮小成 B |
| P(B | A) | P of B given A | 在下雨的那些天裡,帶傘的比例。分母縮小成 A —— 跟上一行不是同一件事 |
只有兩個事件、每個事件只有兩種結果,所以整個世界只有四種天: 下雨帶傘、下雨沒帶、沒下雨卻帶了、兩件都沒有。 四個數字就描述完了 —— 這就是下面那張 2 × 2 事件表。
你會看到什麼:一張 2 × 2 的表,四格各是那四種天的天數。 藍框框住「下雨」一整列(那是事件 A), 橘框框住「帶傘」一整行(那是事件 B), 兩個框重疊的左上角那一格就是 A ∩ B(綠底)。 下方兩根長條用同一個尺度畫:整根長度=那個條件機率的分母, 綠色那段=分子(兩根一模一樣,都是 A ∩ B)。
你可以動什麼:四根滑桿直接改四格的天數;或按三顆按鈕跳到現成的情況。
要看出什麼:兩根長條的綠色一樣長,整根卻不一樣長。 同一個分子、兩個不同的分母,所以 P(A | B) 和 P(B | A) 是兩個不同的數字 —— 這是這一節唯一要你帶走的事。
兩根長條的尺度相同:同樣長度代表同樣的天數,所以可以直接比。 外面那圈灰色虛線框=全部 n 天(滿格),實心那段就是那個條件機率的分母。 綠色那段是兩個條件機率共用的分子,你怎麼拖它都一樣長;會變的只有分母。
預設那組數字(100 天)算出來是:下雨的日子裡有 75% 帶傘, 但帶傘的日子裡只有 60% 真的下雨。同一批天、同一個「下雨又帶傘」的 18 天, 兩個答案差 15 個百分點。
差在哪裡?只差分母。一個除以「下雨的 24 天」,另一個除以「帶傘的 30 天」。 分子完全相同 —— 就是圖上那兩段一樣長的綠色。
把滑桿拖到極端一點會更有感:把「沒下雨 · 帶傘」拉到 60。 這時候「下雨時帶傘」還是 75%,但「帶傘時下雨」掉到 23% —— 因為這個人是那種天天帶傘的人,帶傘這件事幾乎不帶任何關於天氣的訊息。
所以「兩件事常一起出現」不等於「其中一件能推出另一件」。 能推出多少,要看你站在哪一邊問 —— 也就是分母放的是誰。
定義兩邊同乘 P(B),就得到一條更好用的式子:
從哪一邊起手都行,答案一樣 —— 這就是為什麼中間那個等號成立。 讀數盤最下面兩行就是拿你現在的數字現場驗算這一條。
這條式子是後面所有東西的接口:⑥ 的貝氏定理就是把它反過來讀, ⑦ 的 P(y | x) = P(x, y) / P(x) 就是它換成格子版。
按「調成獨立」那顆按鈕。你會看到讀數盤上 P(A | B) 跟 P(A) 變成同一個數字, P(B | A) 跟 P(B) 也是。白話: 知道帶不帶傘,完全不改變你對下不下雨的看法。
把 P(A | B) = P(A) 代進乘法法則,就掉出 P(A ∩ B) = P(A) · P(B) —— 正是 ④ 給過的獨立定義, 只是那裡的主角是「每一格」,這裡的主角是「一個事件」。同一句話,兩種顆粒度。
你現在會算 P(A | B) 了。⑥ 要問的是一個更彆扭、 但實務上天天遇到的問題:手上只有 P(B | A),可是我要的是 P(A | B),怎麼換過去?
這件事有名字,叫貝氏定理。而它會給你一個違反直覺到有點嚇人的答案。
⑥ 貝氏定理:把問題反過來問
上一節那個陷阱 —— P(A | B) ≠ P(B | A) —— 不是冷知識。 它是醫院、法庭、垃圾信過濾器每天都在踩的坑。這一節把「反過來問」變成一條可以照著算的式子。
場景很具體。有一種病,還有一支檢驗試劑,說明書上印著兩個數字:
- 敏感度 90% P(陽性 | 有病) = 0.9:有病的人,十個裡抓得到九個。
- 特異度 90% P(陰性 | 沒病) = 0.9:沒病的人,十個裡放行九個 (剩下那一個被誤判成陽性,叫偽陽性)。
你去驗了,結果是陽性。你真正想知道的是:
說明書是「已知病情,問檢驗結果」;你要的是「已知檢驗結果,問病情」。
⑤ 已經證明過:這兩個方向的答案可以差非常多。
很多人(包含不少醫師,這件事被實驗反覆驗證過)會直覺回答「90% 吧」。 在這組設定下,正確答案是 8.3%。
下面用數人頭的方式算一次。這個方法叫自然頻率(natural frequency)—— 不談 0 到 1 的機率,只談「1000 個人裡有幾個」。同一件事,換成整數就突然變得很好懂。
你會看到什麼:上圖是一棵人數樹:1000 個人先按「真的有病 / 真的沒病」分兩堆,
每一堆再按「檢驗陽性 / 陰性」分兩堆,最後四個框就是四種人。
兩個陽性的框被畫得比較重:綠色=真陽性(有病且驗出來),
橘色=偽陽性(沒病卻被誤判)。
下圖是同樣這 1000 個人,一人一個小方塊排成 40 × 25,顏色跟樹上的四個框對應。
你可以動什麼:三根滑桿分別是發生率(1000 人裡真的有病幾個)、敏感度、特異度; 「只看陽性的人」會把陰性的人淡出,剩下的就是你在診間裡真正的處境。
要看出什麼:按下「只看陽性的人」,畫面上剩下一小撮綠和一大片橘。 後驗機率就是綠色佔剩下這些人的比例。 然後把發生率往左拉(病更罕見),看綠色怎麼被橘色淹掉。
四種人的人數一律取整數(四捨五入到人),所以畫面上數得出來的方塊數量 跟讀數盤的數字永遠一致 —— 不會出現「0.7 個人」這種東西。
把數人頭寫成公式:這就是貝氏定理
剛剛你做的事,一步都沒有超出 ⑤ 的定義。把它逐字翻成符號:
分母 P(陽性) = 全部陽性的人 ÷ 1000,而陽性有兩個來源,要各算一次再加起來:
有病而且驗出陽性的人 + 沒病卻被誤判成陽性的人 = 陽性的人。
P(陽性 | 沒病) = 1 − 特異度,也就是偽陽性率。
整條式子合起來就是貝氏定理。它的通用寫法是:
中間那一坨 P(B | A) / P(B) 就是「這個證據把你的看法乘上幾倍」。
一句話:貝氏定理=把手上有的那個方向,換算成你要的那個方向。
用預設那組數字(1000 人、10 人有病、90% / 90%)數一次:
- 有病的 10 人:驗出陽性 9 人、漏掉 1 人。
- 沒病的 990 人:驗出陰性 891 人、誤判成陽性 99 人。
陽性總共 9 + 99 = 108 人,其中真的有病的只有 9 人 → 9 / 108 = 8.3%。
關鍵不在檢驗爛,而在兩邊的人數基數差太多。 沒病的人有 990 個,就算只有 10% 被誤判,那也是 99 個人 —— 比全部有病的人(10 個)還多十倍。 這個「有病的人本來就很少」的事實,叫基底率(base rate),也就是式子裡的先驗 P(有病)。
把發生率滑桿往右拉到 200(每 5 人就 1 個),同一支檢驗的後驗會跳到 69%。 同一支檢驗、同樣的敏感度特異度,答案完全不同 —— 因為先驗換了。 這就是為什麼「有症狀才驗」比「全民普篩」準:有症狀本身就把先驗拉高了。
法庭上的經典版本:「兇手的鞋印跟被告吻合,這種鞋印在人群中只有百萬分之一。 所以被告是無辜的機率只有百萬分之一。」
這句話把兩個方向掉包了。百萬分之一是 P(鞋印吻合 | 無辜);法庭要的是 P(無辜 | 鞋印吻合)。 如果嫌疑範圍是一座 2000 萬人的城市,那麼「鞋印吻合的無辜者」期望上還有 20 個。 在沒有其他證據的情況下,被告是那 21 個人(20 個無辜 + 1 個真兇)之一, 無辜的機率是 20 / 21 ≈ 95%,不是百萬分之一。
它跟偽陽性是同一個坑:分母不是「有罪的人」,是「鞋印吻合的所有人」。 看到任何「這麼巧的事只有 X 分之一機率發生」的推論, 第一個動作永遠是問:分母是誰?基數有多大?
8.3% 聽起來很失望,可是別忘了驗之前是 1%。陽性這個證據把機率乘了 8.3 倍。 這正是貝氏定理中間那一坨 P(B | A) / P(B) 在做的事。
而且它可以接力:如果再驗第二次(獨立的第二支試劑)也是陽性, 這時候的先驗就不再是 1%,而是上一輪的後驗 8.3%。同一條式子再跑一次 → 0.9 × 0.083 / (0.9 × 0.083 + 0.1 × 0.917) = 45%。
後驗變成下一輪的先驗,這就是「用證據更新看法」的完整機制。 每多一份證據就乘一次,看法就往真相移動一點 —— 不需要任何一份證據是決定性的。
⑤⑥ 兩節談的是事件:發生 / 沒發生,四種天、四種人。 從 ⑦ 開始回到分布:不再問「下不下雨」, 而是問「已知身高是 175,體重整條分布長什麼樣」。
式子一模一樣,只是把事件換成格子: P(y | x) = P(x, y) / P(x) —— 同一個分母縮小的動作, 只是這次一次縮一整行。
⑦ 條件分布:在圖上切一刀
上一節說「知道 x 會改變你對 y 的看法」。這一節把那句話變成一個可以看的動作:切一刀。
回到 ① 的問題:「175 公分、45 公斤奇怪嗎?」 你現在知道怎麼問了 —— 把身高固定在 175,只看那一直行的人,他們的體重長什麼樣? 那一行的分布就叫條件分布,寫作 P(y | x = 175), 唸「已知身高等於 175 的情況下,體重的分布」。
你會看到什麼:上圖是同一張青色熱力圖, 其中一直行被紫框框起來 —— 那就是你切的那一刀。 每一直行上還有一顆綠點=那一行的體重平均, 綠點連起來就是那條綠色折線。 下圖是被框住那一行單獨拉出來的一維直方圖(橫軸是體重), 綠色實線=這一行的平均,橘色虛線=忽略身高時的整體體重平均。
你可以動什麼:拖滑桿把那一刀左右移動(或直接按「切在 175 cm」);改格子數。
要看出什麼:兩件事。 (1) 刀往右移,下面那座小山整個往右平移 —— 這就是「知道 x 改變了你對 y 的看法」的實體。 (2) 上圖那串綠點幾乎排成一條直線,而讀數盤會告訴你那條線的斜率 跟 03 關的 cov / var(x) 對到小數點第二位。
下圖的縱軸是比例(青色除以刀裡那幾個人、淡橘除以全部 2000 人), 所以兩座山可以直接比寬窄,不會因為「刀裡人比較少」就矮一截。 下圖的格子也刻意切得比上圖細 —— 一刀切下來只剩三四根長條的話,形狀根本看不出來。
03 關給過你一條斜率 cov(X, Y) / var(X) 的直線, 當時的說法是「用最小平方法配一條線,斜率長這樣」—— 一個從幾何(把誤差平方和壓到最小)掉下來的答案。
現在你看到它的機率意義了:那條線就是一串條件平均連起來的軌跡。 迴歸線在每一個 x 上回答的問題不是「y 是多少」,而是 「已知 x 的情況下,y 平均而言是多少」,也就是 E[Y | X = x]。
斜率那一坨就是 03 關的老朋友。二維常態底下這條線是直的;換成拋物線那種資料, 條件平均連起來就會是一條曲線(迴歸這個概念還活著,只是不再是直線)。
順帶一提,這也解釋了「迴歸」為什麼叫迴歸(regression,字面是「退回去」): 斜率 cov / var(X) 換成標準化的講法是 ρ · σy / σx, 而 |ρ| ≤ 1。意思是身高高出 2 個標準差的人,體重平均只高出 ρ × 2 個標準差 —— 往平均退回去了一點。
看讀數盤裡「條件 sd」跟「邊際 sd」那兩行。切一刀之後那座小山明顯比整體的分布瘦。
這就是「解釋掉一部分」的實體:身高這個資訊吃掉了體重的一部分不確定性。 吃掉多少有公式 —— 二維常態底下 sd(Y | X) = σy√(1 − ρ²)。 這一頁 ρ ≈ 0.92,所以 √(1 − 0.92²) ≈ 0.39, 條件標準差只剩下邊際的四成。而 ρ² 這個數字,在迴歸裡就叫 R²。
⑧ 從熱力圖到等高線:橢圓是怎麼冒出來的
熱力圖有一個很煩的毛病:它是抽樣抽出來的,所以永遠毛毛的。格子切細一點就滿是雜訊, 切粗一點又看不出形狀。機率統計 02 關對一維的解法你已經見過了: 不要畫長條,畫那條長條在逼近的平滑曲線 —— 機率密度。
二維版的機率密度是一張曲面:平面上每一點 (x, y) 都有一個高度。 問題是紙是平的,畫不了山。所以我們用地圖畫山的老辦法:等高線。
等高線=把高度一樣的點連起來。登山地圖上那一圈一圈的線, 每一圈上的所有位置海拔都相同。二維常態的密度曲面是一座光滑的鐘形山, 而它的等高線 —— 這是這一節唯一要你記住的事 —— 是一圈一圈的同心橢圓。
為什麼一定是橢圓,而不是方形或菱形?因為密度公式裡那一坨指數 exp(−q/2) 中的 q 是一個二次式 (x²、y²、xy 的組合),而「二次式 = 常數」在平面上畫出來的封閉曲線只有一種:橢圓。 這件事 機率統計 05 關會把它拆到見骨。
你會看到什麼:背景那片青色濃淡是機率密度的高低(越深=越可能出現,就是那座山的俯視圖); 疊在上面的紫色橢圓是三圈等高線,分別對應 q = 1、4、9(也就是離中心 1、2、3 個「單位」); 兩根短箭頭是這顆橢圓的主軸與次軸。
你可以動什麼:三根滑桿 —— σx(橫向散多開)、 σy(縱向散多開)、ρ(兩者的相關係數)。
要看出什麼:ρ = 0 時橢圓正正的(軸平行於座標軸); ρ 一離開 0 橢圓就歪掉,而且 ρ 越接近 ±1 越扁。 歪掉的方向就是資料的主軸 —— 05 關那根 v₁ 又出現了。
圖已置中在 (μx, μy),所以座標上的 0 就是「兩欄都剛好等於平均」的那個人。
⑨ 數學長怎樣
先看程式碼,這三段就是 ③④⑦⑧ 那四個「分布」實驗的全部核心 (⑤⑥ 的事件表與人數樹只用到加減乘除,沒有值得另外抄出來的東西):
// ① 聯合分布:把平面切成 B×B 格,數每一格幾個人
const P = zeros(B, B);
for (const pt of data) P[binX(pt.x)][binY(pt.y)] += 1 / data.length;
// ② 邊際分布:把一整行 / 一整列加起來
const Px = P.map(row => sum(row)); // P(x) = Σ_y P(x, y)
const Py = range(B).map(j => sum(P.map(row => row[j]))); // P(y) = Σ_x P(x, y)
// ③ 獨立檢查:外積 vs 實際
const D = P.map((row, i) => row.map((v, j) => v - Px[i] * Py[j]));
const TV = 0.5 * sum(D.flat().map(Math.abs)); // 0 就是獨立
// ④ 條件分布:抽出一整行,重新正規化成「這一行內部」的分布
const col = P[i].map(v => v / Px[i]); // P(y | x) = P(x, y) / P(x)
const condMean = sum(col.map((p, j) => p * yMid[j])); // E[Y | X = x]
第 ④ 段那一行除法值得單獨拿出來講,因為它就是條件機率的定義:
分母:落在 x 這一直行的比例(占全部 2000 人)。
相除之後,分母的「全部」被約掉了 —— 剩下的是「占這一行的比例」。 換句話說:條件分布就是把視野縮到一行裡面,然後重新算百分比。 除以 P(x) 是為了讓那一行自己加起來等於 1(不然它只加到 P(x))。
把它跟獨立的定義擺在一起看,就會發現兩者是同一句話的兩種寫法:
右式的意思白到不能再白:已知 x 之後,y 的分布跟原本一模一樣 —— 你什麼都沒學到。 這就是「知道 x 完全不改變你對 y 的看法」的數學版。
最後是 ⑧ 那座山的公式。二維常態密度:
q = 1/(1 − ρ²) · [ (x−μx)²/σx² − 2ρ(x−μx)(y−μy)/(σxσy) + (y−μy)²/σy² ] 前面那一坨分數只是正規化常數:讓整座山下面的體積剛好等於 1(總機率是 1)。它跟形狀無關,不用細看。
形狀全在 q 裡。q 是一個二次式,而「q = 常數」畫出來就是一顆橢圓 —— 這就是等高線是橢圓的全部原因。
ρ = 0 的時候中間那個交叉項消失,q 拆成 (x−μx)²/σx² + (y−μy)²/σy², 兩個變數各過各的 —— 這時候整個 p(x, y) 剛好可以拆成「x 的一維常態 × y 的一維常態」,也就是獨立。
注意這是常態分布特有的好事:一般情況下 ρ = 0 不代表獨立(④ 的拋物線就是反例), 但兩個變數聯合起來是常態時,ρ = 0 就真的等於獨立。
用矩陣寫,q 會縮成一行 —— 而這一行就是 機率統計 05 關的門票:
這個式子叫二次型(05 關掃描曲線用的 uTCu 是它的親戚, 差別在那邊用 C、這邊用 C 的反矩陣)。
直覺:C 描述「資料本來就會怎麼散」,C−1 就是「把那種散開除掉」—— 所以 q 量的是「扣掉本來就該有的散開之後,這個點還剩多遠」。
⑩ 工程師的「原來如此」
你寫過這段 SQL:SELECT item_a, item_b, COUNT(*) FROM co_purchase GROUP BY 1, 2。
那張輸出的表叫共現矩陣(co-occurrence matrix),除以總數之後,
它就是 P(item_a, item_b) 的估計 —— 跟這一頁的熱力圖是同一個東西,
只是格子從「身高區間」換成「商品 ID」。
而推薦系統最常用的那個分數 PMI(pointwise mutual information)長這樣:
括號裡那一坨就是 ④ 的外積比。 分母 P(a)·P(b) 是「假如這兩個商品毫無關係,本來會共同出現多少次」, 分子是「實際共同出現多少次」。PMI 大於 0 就是「一起買的次數超過巧合」。
這就是為什麼光看銷量高的商品配銷量高的商品,永遠推不出好東西 —— 牛奶和麵包共現次數超高,但那只是因為兩個都是銷量冠軍(P(a)、P(b) 都大), 外積早就預測到了,Δ 其實很小。真正的訊號在 Δ 裡,不在原始次數裡。 word2vec 那一整套 embedding 的訓練目標,本質上也是在擬合這張 PMI 表。
做文字分類時你要算 P(word₁, word₂, …, word₅₀₀ | spam) —— 500 個特徵的聯合分布。如果每個詞只有「出現 / 沒出現」兩種狀態,這張表有 2500 格。宇宙裡沒有那麼多原子,你永遠估不出這張表。
naive Bayes 的解法簡單粗暴到有點好笑:直接假設所有特徵互相獨立,於是
它直接拿外積當聯合分布用。就是 ④ 中間那張 (b) 圖。 參數量從 2500 掉到 500 個,一下就估得出來了。這就是 naive 的意思 —— 不是演算法笨,是它知道自己在說謊還是說了,因為不說這個謊根本算不動。
而 Δ 那張圖就是它錯多少的地圖。所以 naive Bayes 的實務行為很好預測: 「免費」和「優惠」這兩個詞高度共現(Δ 很大),它會把這個證據數兩遍, 於是機率輸出常常貼在 0.99 或 0.01(過度自信)。但排序通常還是對的 —— 這就是為什麼它拿來當分類器堪用、拿來當機率校準就不能信。
順帶把名字裡的另一半補上:naive Bayes 的 Bayes 就是 ⑥ 那條式子。 分類器真正要的是 P(spam | 這些詞), 但好估的是 P(這些詞 | spam)(把垃圾信抓出來數詞頻就有了)—— 方向相反,所以要用貝氏定理換過來。 「naive」負責讓分子算得動(假設獨立、直接相乘),「Bayes」負責把方向轉正。 而分母 P(這些詞) 對每一個類別都一樣,所以實作上直接省掉, 只比大小 —— 這也是它機率值不準、排序卻堪用的另一個原因。
⑪ 踩坑
③ 的「洗牌」按鈕就是這個坑的實體:兩份資料的兩條邊際分布 一根長條都不差,中間卻是完全不同的世界。
實務上什麼時候會咬人:你拿到兩份「分布統計報告」(各欄位的平均、分位數、直方圖), 發現長得一樣,就以為兩份資料等價 —— 不等價。 A/B test 的兩組使用者可能年齡分布一樣、消費分布一樣,但「年輕人的消費行為」完全相反。 任何只報告單欄統計的資料摘要,都有這個盲點。
這是 03 關那個坑的正式版,也是最多人背反的一條。記法: cov 只有一把尺,那把尺只量直線。
所以看到 r = 0.02 的時候,正確反應不是「這兩欄無關」, 而是「這兩欄沒有直線傾向,我還不知道有沒有關係」。 五秒鐘的檢查動作:畫散點圖;資料量大到散點糊成一團時,畫熱力圖; 想要一個數字的話,④ 那個 TV(或它的近親 mutual information) 就是不挑形狀的版本。
⑦ 切一刀之後那座小山變瘦,是數學上必然的 (σy√(1−ρ²) ≤ σy,等號只在 ρ = 0 時成立)。 這叫「身高解釋掉了體重的一部分變異」。
會咬人的誤讀是:「加了這個特徵之後殘差變小了,所以模型變好了」。 不一定。加任何特徵(包括一欄純亂數)都會讓訓練集上的殘差變小,因為 ρ 幾乎不可能剛好是 0。 這就是 R² 會隨特徵數單調上升、所以要看 adjusted R² 或驗證集的原因。 變異數下降是加特徵的副作用,不是證據。
把 ④ 的格子滑桿從 6 拉到 20,盯著「洗牌」那組的 TV: 它會從 3.5%(B = 6)一路爬到 12.7%(B = 20)。那組資料明明是完全獨立的,TV 卻在上升。
原因是格子數是 B² 成長的:B = 6 時 36 格、每格平均 55 人, B = 20 時 400 格、每格平均 5 人。每格 5 個人的統計量就是純雜訊, 而 TV 用的是絕對值,雜訊不會互相抵消,只會累積。
所以看熱力圖有一條肉眼準則:先看「洗牌」那組(=已知獨立的對照組)的 TV 是多少 —— 那是你這個格子數下的雜訊底線。真實資料的 TV 要顯著高過那條線才算數。 沒有對照組的時候,土法煉鋼的規矩是每格平均至少 10 個樣本, 也就是 B ≤ √(n/10)。這一頁 n = 2000,所以 B 上限大約 14。
⑫ 這關回答了什麼
聯合分布跟「兩個各自的分布」差在哪裡?
差在「搭配方式」這件事有沒有被記下來。
兩個各自的分布(=兩條邊際)只回答「身高各區間有多少人」「體重各區間有多少人」。 聯合分布回答的是「身高在這一格而且體重在那一格的有多少人」—— 它記得每一對數字是怎麼配在一起的。
差多少?③ 的「洗牌」按鈕直接量給你看: 兩份資料的邊際逐格完全相同,但一份是「高的人重」、另一份是隨機亂配。 所以答案是:從兩條邊際你永遠反推不回聯合,反過來卻永遠可以(加總就是了)。 資訊量是單向的。
邊際分布是什麼?為什麼叫「邊際」?
邊際分布 = 只看一個欄位時看到的分布 = 把聯合分布的另一個維度加總掉。 公式是 P(x) = Σy P(x, y),畫面上就是把熱力圖的一整直行加起來, 變成下面那一根藍色長條。
名字的由來很土:早年統計學家把二維次數表印在紙上, 然後在表格的邊上(margin)順手寫下每一列、每一行的加總。那些寫在邊上的數字, 就叫 marginal distribution。沒有更深的意思。
一句話記住它的性格:加總 = 把「另一欄是多少」這件事整個忘掉。所以邊際是有損壓縮。
「獨立」的正式定義是什麼?
P(x, y) = P(x) · P(y),而且要對每一格 (x, y) 都成立。 等價的寫法是 P(y | x) = P(y)。
白話:知道 x 完全不改變你對 y 的看法。 你原本以為體重大概在 59 ± 10;我告訴你這個人 185 公分;如果你的猜測一動也不動, 那就是獨立。⑦ 那把刀左右移動的時候, 下面那座小山如果紋風不動,就是獨立;它跟著平移,就是不獨立。
操作上怎麼檢查:把兩條邊際相乘拼出「假如獨立會長的樣子」,跟實際的相減 (④ 那三張圖)。全白就是獨立。
cov = 0 為什麼不等於獨立?用那張外積差圖回答。
按 ④ 的第三顆按鈕(拋物線)。你會同時看到兩件事:
- 讀數盤:cov ≈ 0.00、r ≈ 0.000。
- (c) 那張差圖:紅色照著拋物線的形狀畫了一條拱,其餘一片藍,一點都不白(TV 接近 60%)。
兩個數字都沒說謊,它們在回答不同的問題。 cov 問的是「有沒有直線傾向」—— 拋物線左半邊往上、右半邊往下, 兩邊的貢獻正負剛好抵光,所以答案誠實地是 0。 差圖問的是「知道 x 會不會改變 y 的分布」—— 施肥量 10 公斤跟 19 公斤的收成分布差超多, 所以答案是「會,而且差很多」。
用一句話收:cov = 0 只保證「沒有直線傾向」,不保證「沒有關係」。 獨立是一個關於整張表的敘述,cov 只是那張表擠出來的一個數字 —— 一個數字裝不下一張表。 邏輯方向只有一邊成立:獨立 ⇒ cov = 0。
條件分布跟迴歸線是什麼關係?
迴歸線就是把每一個條件分布的平均連起來的那條軌跡。
在 ⑦ 你可以直接看到:每一直行(=一個條件分布)算一個體重平均, 畫成一顆綠點,全部連起來幾乎是一條直線。而讀數盤現場算給你看: 那條線的斜率跟 03 關的 cov(X, Y) / var(X) 對到小數點第二位。
這件事的意義是:迴歸線不是「穿過點雲中間那條看起來最順的線」這種美學說法, 它有明確的機率身分 —— 它在每一個 x 上回答 E[Y | X = x], 也就是「已知 x,y 平均而言是多少」。
兩個延伸:(1) 條件平均不一定要是直線 —— 拋物線資料的條件平均連起來就是一條曲線, 迴歸這個概念還在,只是換一種函數。(2) 條件分布不只有平均,它還有寬度; 寬度就是預測的不確定性,σy√(1−ρ²)。 只給一條迴歸線而不給這個寬度的預測,是在騙人。
為什麼二維常態的等高線是橢圓,不是別的形狀?
因為密度公式 p = 常數 × exp(−q/2) 裡, q 是一個二次式:x²、y²、 xy 的組合。
「密度相同」=「exp 裡面相同」=「q = 常數」。 而國中就學過的事實是:二次式 = 常數,在平面上畫出來的封閉曲線就是橢圓 (圓是它的特例,ρ = 0 且 σx = σy 的時候)。 不會是方形,因為方形的角需要絕對值那類不平滑的東西;不會是菱形,同理。
再往下一層:q = (v−μ)TC−1(v−μ), 而 C 是對稱正定矩陣,所以它有兩根互相垂直的特徵向量。 那兩根就是橢圓的兩根軸,半徑是 √λ。 換句話說,橢圓的方向和胖瘦,是 C 的特徵分解直接給的 —— 這就是為什麼 PCA 和機率橢圓講的是同一件事。細節在 機率統計 05 關。
ρ = 0 到底算不算獨立?我看到兩種說法。
兩種說法都對,因為它們的前提不同:
- 一般情況:ρ = 0 不等於獨立。拋物線就是反例。
- 兩個變數「聯合起來」是常態分布的時候:ρ = 0 就真的等於獨立。 原因在 ⑨ 的密度公式 —— ρ = 0 時交叉項消失, p(x, y) 剛好可以拆成 x 的一維常態乘上 y 的一維常態, 而「拆得開」正是獨立的定義。
陷阱在中間那個字:要「聯合常態」,不是「兩條邊際各自常態」。 兩條邊際都是漂亮的鐘形,聯合分布卻完全不是二維常態 —— 這種資料造得出來,而且實務上很常見。 所以看到「兩欄各自都接近常態,所以 r = 0 就是獨立」這種推論,那是錯的。
P(A|B) 跟 P(B|A) 到底差在哪?給我一個記得住的說法。
分子一樣,分母不一樣。兩者的分子都是「A 和 B 同時發生」, 差別只在你把分母縮小成誰的世界。
⑤ 那兩根長條就是這句話的圖像: 綠色那段(分子)永遠一樣長,整根(分母)不一樣長。
一個記得住的例子:「下雨的日子裡有 75% 帶傘」跟「帶傘的日子裡有 60% 下雨」, 講的是同一批天。誰在豎線右邊,誰就是分母。
檢驗準確率 90%,我驗出陽性,那我有 90% 機率有病嗎?
不是。在發生率 1% 的情況下,答案是 8.3%。
數人頭最快(⑥ 的圖就是在數):1000 人裡 10 個有病 → 驗出陽性 9 個;990 個沒病 → 誤判成陽性 99 個。 陽性共 108 人,真的有病的 9 人,9 / 108 = 8.3%。
原因不是檢驗爛,是基底率:沒病的人基數大到「只誤判 10%」都比真患者總數還多。 所以看到任何「準確率 99%」的宣稱,先問要找的東西有多罕見 —— 東西越罕見,同一支檢驗的陽性就越不可信。
反過來也要記住:8.3% 已經是驗之前 1% 的 8 倍。證據有用,只是沒有你以為的那麼用。
貝氏定理跟這一關的聯合分布是什麼關係?
它們是同一條式子的兩種讀法,接口是乘法法則。
乘法法則說 P(A ∩ B) = P(A)·P(B | A) = P(B)·P(A | B)。 中間那個等號就是貝氏定理 —— 把它除一除、換個邊,就從「已知 A 問 B」變成「已知 B 問 A」。
而聯合分布 P(x, y) 就是 P(A ∩ B) 的分布版: ⑦ 那張熱力圖的每一格都是一個「同時發生」。 所以「切一直行再正規化」(條件分布)跟「除以 P(B)」(條件機率)是同一個動作, 只是一次做一整行。