MODULE 01 — FROM A PILE OF POINTS TO A DISTRIBUTION

從一堆點到一個分布

前面七關手上永遠是「一堆固定的點」。這關把它升級成「一台會吐點的機器」—— 玩完你會知道:你算出來的每一個統計量都只是一個估計值,而且你能算出它有多不準。

① 這關在解什麼問題

前面七關給了你什麼 你已經會用線性代數的語言描述一坨點了: 01 ③ 兩條向量點一下變成一個數字、 02 ⑦ 變異數就是「自己跟自己的內積」、 03 ⑥ 把所有內積排成一張表就是 C05 ④ 自己轉一圈找出那坨點的主軸。 那坨點的形狀,你量得出來也畫得出來。 這一關開始問一句前面七關從來沒問的話:那坨點是從哪來的、下次會不會不一樣。

02 關拿七個人的月薪算出標準差 s = 1.10 萬。那時候整關都在講「這個數字怎麼算出來的」, 沒有人問過一句更基本的話:

你真正想知道的,是這七個人有多散,還是「這家公司」有多散?

當然是這家公司。那七個人只是你剛好問到的七個 —— 你去尾牙隨便換七個人問, 算出來的標準差就變成別的數字。下面這顆按鈕就在做這件事: 我先準備好一家公司(幾千個員工,薪水分布是固定的、寫死在程式裡的), 每按一次就從裡面隨機抽七個人給你,然後用 02 關一模一樣的公式算 s

這張表在幹嘛

你會看到什麼:一列就是「一次抽七個人」。中間是抽到的七筆薪水(已排序,單位萬元), 右邊兩欄是這七個人自己算出來的樣本平均 x̄樣本標準差 s。 最上面那一列是 02 關那七個人,當對照組。 最底下紫色那一列是整家公司的真值,一開始是藏起來的。

你可以動什麼:按「再抽七個人」(可以連按),按「掀開真值」把紫色那列翻出來,按「重設」回到只有 02 那一列。

要看出什麼:右邊那兩欄每一列都不一樣,而且 s 抖得比 兇很多 (常常從 0.5 跳到 2.2,相差四倍)。掀開真值之後你會發現:沒有任何一列剛好等於真值

亂數 seed (固定,所以你重新整理頁面會拿到一樣的結果)
這一組是誰抽到的七筆薪水(萬元,已排序)s

這就是整關的起點。你手上的數字有兩層,而 02 關只講了第一層:

它是什麼你看得到嗎符號
母體(population) 整家公司。或者更抽象一點:那個「會一直吐出薪水」的規則本身 看不到。你永遠問不完所有人 μσ
樣本(sample) 你實際問到的那七個人 看得到,而且只有它看得到 s

統計學整門學問就是一句話:只準看樣本,卻要講母體的事。 這關把這句話拆成可以動手玩的六塊。

上一關留下的洞(其實欠了七關)

前面從 01 關07 關, 手上的資料永遠是「一組固定的點」:七個人的薪水、12 個人的身高體重、四家公司的報酬率。 所有工具(變異數共變異數矩陣 CPCA 主軸)都是對那組點算出來的,一算出來就當成事實在用。

但那組點是抽來的。這件事後面會直接咬人:

  • 機率統計 05 關會說「這顆橢圓涵蓋 68% 的機率」—— 「機率」是什麼?母體的什麼東西的 68%?沒教。
  • 最佳化 03 關會說「平均報酬只要動一點點,最優權重就翻天覆地」—— 為什麼會動?因為那個平均報酬是估的。沒教。
  • 02 關的分母寫 n − 1,當時只留一句「關鍵字:自由度」就跳過去了。 那個 −1 的完整理由只有站在「母體 vs 樣本」上才講得清楚,這關第 ⑤ 節把它還完。

橋在哪:為什麼可以用線性代數的語言學機率統計

接下來 機率統計 01 到 05 關掛的是「機率統計」的招牌,但你不會換一套工具 —— 因為統計的原料本來就是空間裡的點,而線性代數就是描述點的形狀的那套語言。 前面七關量到的每一個東西都還在原位,只是各自多了一個身分:

一坨固定的點 ——(加上「它是抽來的」這件事)—→ 一台會吐點的機器 左邊那句是線性代數 01 到 07 關。右邊那句是機率統計 01 到 05 關。中間那個括號就是這一關。

所以這五關不是五個新主題,是把你已經有的五個幾何物件各自換一次名牌。 下面這張表就是那五張名牌 —— 左邊你都已經親手玩過,右邊是它在機率統計 01 到 05 關的新名字:

哪一關你在線性代數 01–07 已經有的東西換上「會抖」的身分之後叫什麼換掉的是哪個字
機率統計 01(本關) 01 的一個點、02 算出來的 s 隨機變數:一台會吐點的機器。你的 s 降級成「它吐出來的其中一次」( 點 → 會抖的點
機率統計 02 02 的「散開」只有一個數字 s 分布:把那個數字撐開成一整條形狀,μ 管左右、σ 管胖瘦(機率統計 02 ⑤ 一個數字 → 一條曲線
機率統計 03 03 ⑥C:四個內積排成一張表 同一張 C,但拿去回答「兩台機器加起來會抖多少」:wTCw機率統計 03 ⑥ 描述形狀 → 算出後果
機率統計 04 同樣是 C 的那兩欄,03 關只算出四個數字 聯合分布:把那兩欄攤成一張方格表,每一格填「這裡本來該有多少機率」(機率統計 04 ③ 四個數字 → 一整張機率地圖
機率統計 05 05 ④ 的主軸,加上 05 關圖上那顆沒解釋的虛線橢圓 馬氏距離:把主軸反過來用(C−1 = 除以散開),那顆橢圓變成一把尺(機率統計 05 ④ 裝飾 → 一把尺

看得出來一件事:右邊那一欄沒有一個是新的幾何物件。機率統計 01 到 05 關全部在做同一件事 —— 把線性代數 01 到 07 關量出來的東西,換成「它會抖、所以只能講機率」的講法。 你會覺得難的地方幾乎都不是幾何,是「只準看樣本,卻要講母體的事」這個限制,而那就是這一關。

② 先把符號攤開:本頁只有這 20 個

這關唯一的難點是「同一個量有兩個版本」:母體那個跟樣本那個。傳統寫法用希臘字母 = 母體、拉丁字母 = 樣本來分, 本頁全部照這個規矩,而且畫圖時紫色一律是母體真值綠色一律是樣本算出來的

符號怎麼唸它到底是什麼現在的值
X(大寫)大寫 X 隨機變數:一台會吐數字的機器,不是一個數字。③ 節整節在講它。
xxi小寫 x、x sub i 機器實際吐出來的一個數字(第 i 個)。X 是機器,x 是產品。
pip sub i 機器吐出第 i 種值的機率。全部加起來一定是 1。④ 節你會親手拉它。 Σp = 1
E[X]E of X 期望值:用機率當權重的加權平均。不是「你期待會發生的事」。④ 節
μmu(希臘字母 m) 就是 E[X] 的另一個寫法,母體平均。同一個東西兩個名字,數學書兩種都用。
σ²sigma squared 母體變異數:Σ pi(vi − μ)²。分母不用扣任何東西,因為它不是估的,它就是真值。
σsigma 母體標準差σ² 開根號。跟資料同單位(萬元)。
x bar 樣本平均:你抽到的那 n 個數字的平均。這是估計值,會抖。
s squared 樣本變異數,分母是 n − 1。用來估 σ²⑥ 節證明為什麼是 −1。
ss 樣本標準差 開根號。02 關算出的 1.10 萬就是它。
nn 樣本大小:這一次抽了幾個。02 關的 n = 7。
RR 模擬輪數:「重複抽 n 個」這件事做了幾遍。只在模擬裡存在,真實世界你只有一輪。
SEstandard error 標準誤 = σ / √n 這個估計值自己有多抖。⑧ 節
aba、b 線性變換的兩個係數aX + b 的 a 是「乘幾倍」、b 是「加多少」。 E 跟著兩個一起跑,Var 只跟著 跑。⑤ 節那兩根滑桿。 見 ⑤ 節
E[X²]E of X squared 先平方再取平均。它不等於 (E[X])²(先平均再平方), 兩者差的剛好是 σ² —— 這就是 Var(X) = E[X²] − μ² 骰子 15.167
Cov(X,Y)covariance 兩台機器一起動的程度 = E[XY] − E[X]E[Y]。獨立的時候是 0。 ⑤ 節只當預告給你看一眼,機率統計 03 關才是它的地盤。 見 ⑤ 節
kk 信賴區間的倍數:區間 = x̄ ± k·(s/√n)σ 已知時 k = 2;σ 是用 s 估的時候要換成 t。⑨ 節 見 ⑨ 節
tt t 分布的 0.975 分位:跟常態比尾巴厚一點,所以臨界值比 2 大 (n = 5 時是 2.78)。n 一大就收回 1.96。⑨ 節 見 ⑨ 節
p(p-value)p value 假設兩邊真的沒差,光靠抽樣雜訊生出「至少這麼大」的差的機率。 它是分布的尾巴面積⑪ 節正名。 見 ⑪ 節
seed種子 亂數的起始號碼。同一個 seed 一定跑出同一串亂數,所以本頁每張圖重新整理都長一樣; 按「換 seed」才會換一組。這不是裝飾,是讓你能核對數字。 見各節

「現在的值」那一欄是公司薪水那台機器的真值,加上 ⑥ 節當前那一組樣本的統計量 —— 你在 ⑥ 節按重抽,這裡的綠色數字會跟著跳,紫色數字不會動。那正是這一整關的重點。

③ 隨機變數:一台會吐數字的機器

你寫程式時的變數是這樣:let x = 5; —— 一個抽屜,裡面放一個數字,你打開就看到 5。 隨機變數不是抽屜,是一台販賣機。

一般變數 x隨機變數 X
它是什麼一個值一台會吐值的機器(一條規則)
你能拿到什麼就那個值按一下拿到一個值,再按一下可能不一樣
它的「內容」5一張表:吐出 3.0 的機率 1.3%、吐出 3.2 的機率 3.8%…
寫成程式const x = 5const X = () => sample(表) ←它是個函式,不是值

「機器 vs 產品」這個分別是後面所有東西的地基,所以本頁一律: 大寫 X 是機器,小寫 x 是它吐出來的那一個數字。 機器的性質(μσ)叫參數,是固定的死值; 產品算出來的東西(s)叫統計量,每次都不一樣。

這張圖在幹嘛

你會看到什麼:一張直方圖。橫軸是「機器吐出來的值」,縱軸是「這個值出現了幾次」。 每按一次就長高一根青色棒子紫色虛線輪廓是機器的真形狀(機率 × 你抽的總次數,也就是「理論上該長這樣」), 紫色直立線是真值 μ綠色直立線是你抽到這些數字的平均

你可以動什麼:九顆按鈕換機器 —— 上排是本頁自訂的三台(公平骰子 / 公司薪水(右偏)/ 雙峰), 下排是六台有名字的分布家族(Bernoulli / Binomial / 均勻 / 指數 / Poisson / 對數常態)。 「吐一個」一次抽一筆、「吐 100 個」一次抽一百筆、「清空」歸零重來、「換 seed」換一組亂數。

要看出什麼:抽到 20 筆的時候,青棒子跟紫輪廓長得完全不像;抽到 2000 筆就幾乎重疊。 機器(紫色)從頭到尾一動也沒動,動的只有你抽到什麼(青色)。

換機器之後直方圖會清空重來(不同機器的值域不一樣,混在一起沒意義)。 骰子只有 6 種可能值,所以按幾下就看得出形狀;薪水那台有 46 種、 指數與對數常態各有 60 格,要按「吐 100 個」好幾次才會像。

選一台機器 · 本頁自訂的三台
有名字的分布家族(下面有名牌表)
seed · 已抽 0
最後吐出來的那一個 x
機器的真值 μ = E[X]
機器的真值 σ
你抽到的 x̄
你抽到的 s
x̄ 差了多少

先看本頁自訂的三台在示範什麼

機器它的規則放在這裡是為了讓你看到
公平骰子1~6 各 1/6,寫死的 最乾淨的機器。真值 μ = 3.5 —— 骰子永遠吐不出 3.5。期望值不是「會發生的值」。
公司薪水(右偏)3.0 到 12.0 萬,每 0.2 萬一格,形狀是「左邊擠一坨、右邊拖一條尾巴」 真實薪水就是這個形狀。這台就是 ① 節那家公司,也是本頁大部分模擬用的機器。
雙峰同樣的格子,但機率集中在 3.6 萬附近和 8.4 萬附近,中間幾乎是 0 工程師一坨、主管一坨。真值 μ 落在沒有人領的那個山谷裡 —— 平均值有時候是個沒人住的地址。

另外六台有名字:常見分布家族的名牌

上面那三台是我為了講課捏出來的。但你在 scipy.stats、在論文、在面試題裡遇到的機器, 幾乎都是下面這六個有名字的家族。它們不是新東西 —— 就是「值的清單 + 機率的清單」而已, 只是這幾張機率表出現得太頻繁,所以人類給了它們名字、也把 μσ² 一次算好寫進課本,不用你每次重算。

這六台已經接在上面那個直方圖上了:按下排的按鈕就換機器, 看它的形狀、看紫線(真值 μ)停在哪、看讀數盤的 σ 有多大。 名牌表的 μσ² 兩欄一律「上面是課本公式、下面是本頁機率表實際算出來的值」, 你可以直接對帳。

名字(參數)它在描述什麼 μ
公式 / 本頁
σ²
公式 / 本頁
工程上你會在哪裡遇到它

誠實提醒(不是廢話,是這張表的讀法):離散的四台(Bernoulli / Binomial / 均勻 / Poisson) 機率表就課本公式本人,所以兩排數字完全一致。 連續的兩台(指數 / 對數常態)本頁一律切成 0.2 寬的格子、在 12 截斷, 用「格子中點的密度 × 格寬」當那一格的機率 —— 所以它們的數字會跟公式差在小數第 2~3 位。 那不是公式錯,是格子造成的(真正的連續版本要等 機率統計 02 關的機率密度)。

你早就用過 Bernoulli 了,只是沒人告訴你它的名字

⑪ 節算 A/B test 的時候會寫 σ = √(p(1−p)), p ≈ 0.04 時 σ ≈ 0.196。那條公式不是從天上掉下來的, 它就是 Bernoulli 的 σ² = p(1−p) 開根號:一個 session 轉換算 1、沒轉換算 0, 這台機器只有兩個面,機率表就兩格。

然後「2000 個 session 裡有幾個轉換」就是 Binomial(Bernoulli 按 2000 次數成功幾次), 而「每分鐘進來幾個請求」是 Poisson、「兩個請求之間隔多久」是指數、 「檔案大小 / 延遲 / 所得」是對數常態認出名字的好處只有一個,但很大:μ 和 σ² 你不用自己算,直接查表。

所以這一節的結論是:「一堆點」跟「一台機器」是兩種東西。 02 關到 07 關手上只有一堆點;從現在起,那堆點背後永遠有一台你看不到的機器。 而那台機器如果剛好是上面六個家族之一,你連 μσ² 都不用自己算。

④ 期望值:不是「你期待發生的事」,是加權平均

「期望值」這個中文譯名是個災難,它害無數人以為那是「最可能發生的事」。 它其實是你國中就會的東西 —— 加權平均,一個字都沒多。

先從段考開始(這裡沒有任何機率)

學期成績算法:平時考佔 30%、期末考佔 70%。你平時考 82 分、期末考 68 分。學期成績是幾分?

學期成績 = 0.30 × 82 + 0.70 × 68 = 24.6 + 47.6 = 72.2 不是 (82 + 68) / 2 = 75。因為兩科權重不一樣,佔比大的那科要算重一點。

注意三件事,因為期望值把它們原封不動搬過去: ① 權重加起來是 1(0.3 + 0.7); ② 每一項都是「值 × 它的權重」; ③ 答案 72.2 分不是任何一科的分數,它是個新造出來的數字。

換一個字:把「佔比」換成「機率」

骰子的六個面,就想成六「科」,每一科的權重是它出現的機率。公平骰子六面各佔 1/6:

E[X] = (1/6)·1 + (1/6)·2 + (1/6)·3 + (1/6)·4 + (1/6)·5 + (1/6)·6 = 21/6 = 3.5 寫成一般式:E[X] = Σi pi · vi —— vi 是第 i 種可能的值,pi 是它的機率, Σ 是「全部加起來」(跟 02 關的 Σ 同一個符號)。 跟段考唯一的差別:那邊的權重叫「佔比」,這邊叫「機率」。

而 02 關的平均 x̄ = (Σxi) / n 也是加權平均 —— 只是每一筆資料的權重都剛好是 1/n(大家一樣重)。 三個東西同一個模具:學期成績、期望值、平均數

這張圖在幹嘛

你會看到什麼:骰子六個面畫成兩組棒子。 橘色棒子 = 機率 pi(機器的規則,你拉滑桿決定), 青色棒子 = 實際抽 n 次得到的相對次數(同一個縱軸,都是「佔全部的幾成」,所以可以直接比高矮)。 圖下方那個橘色三角形支點,停在 E[X] 那一格 —— 跟 02 關的翹翹板是同一個東西,只是那邊掛的是七個人,這邊掛的是六個機率。 綠色直立線是實際抽 n 次算出來的

你可以動什麼:六根滑桿分別調六個面的權重(拉完會自動歸一化成機率,讓總和保持 1); n 滑桿決定「實際抽幾次」;三顆預設鈕(公平 / 灌鉛 / 兩極);「換 seed」重抽一組。

要看出什麼:橘色是規則、青色是現實。 n = 5 的時候青棒歪七扭八、綠線離支點很遠; 把 n 拉到 3000,青棒會貼上橘棒、綠線會壓在支點上。 橘色(機器)不會因為你抽多少次而改變。

把六號面的權重拉到很大(灌鉛骰),支點會往右滑;把 1 和 6 拉滿、其他歸零(兩極骰), 支點會停在 3.5 —— 跟公平骰一樣,但骰子的行為完全不同。這就是為什麼光看期望值不夠,還要看 σ

實際抽幾次 n
seed
E[X](機器的真值)
σ(機器的真值)
x̄(實際抽 n 次)
| x̄ − E[X] |
最常出現的那一面
期望值最常被誤會的三件事
  • 它不是「最可能發生的值」。那個叫眾數(mode),讀數盤裡另外標了。 公平骰子的 E[X] = 3.5,六個面沒有一面是 3.5。
  • 它不保證你會拿到。「期望報酬 8%」不是「會賺 8%」,是「同樣的賭局重複無限多次,平均下來 8%」。 你只玩一次的時候,8% 這個數字可能一次都沒出現過。
  • 兩台機器可以有一樣的 E[X],行為卻完全不同。按「兩極」試試看:E[X] 還是 3.5, 但它只吐 1 和 6。這正是 02 關開頭那兩家公司的翻版 —— 所以你永遠需要第二個數字 σ

所以這一節的結論是:E[X] 是機器的平均,用機率當權重算出來,是個死值; 是你抽 n 次得到的平均,每次都不一樣。 兩者的關係是 ⑥ 節的全部內容 —— 但在那之前, ⑤ 節要先把 E[⋯] 這個符號的運算規則交代清楚, 因為後面每一步推導都在拆它。

⑤ E 與 Var 的運算規則:後面三關每一條推導都在用它

④ 節給了 E[X]定義(機率當權重的加權平均)。但接下來的關卡不會停在定義上 —— 機率統計 03 關Var(X+Y) 展開、 機率統計 04 關算條件平均、機率統計 05 關,每一步都在把 E[⋯] 拆開重組

問題是:E[⋯] 到底能怎麼拆?目前你只知道它是一個加權和,沒人告訴你「加號可以搬出來嗎」、 「常數可以提出來嗎」、「兩個相乘的可以分開嗎」。這一節把能拆的規則一條一條列出來, 而且每一條都在讀數盤裡當場驗給你看(不是模擬近似,是把整張機率表加權加起來的精確值)。

⑤-A 先看五條規則,每一條都只用「加權和」就能證

為了讀起來不繞,本節一律 μ = E[X];規則編號一律寫成 R1 ~ R5(跟節次的圈號區隔開)。前兩條是「線性」,第三條要條件,後兩條是變異數:

R1 E[aX + b] = a·E[X] + b
R2 E[X + Y] = E[X] + E[Y]  (不需要獨立)
R3 X、Y 獨立 ⟹ E[XY] = E[X]·E[Y]  (這一條需要獨立)
R4 Var(X) = E[X²] − μ²
R5 Var(aX + b) = a²·Var(X)  (b 完全不影響) R1 + R2 合起來就是課本說的「期望值是線性運算」(linear operator)。 R1/R2/R3 之間的差別是全節最重要的一件事:加法不需要任何條件,乘法需要獨立。

R1、R2 為什麼成立,一句話:E[⋯] 就是「乘上機率再加起來」, 而加法和「乘常數」本來就可以跟加總交換順序。把 R1 拆給你看:

E[aX + b] = Σi pi(a·vi + b) = a·Σi pivi + b·Σi pi = a·E[X] + b·1 = a·E[X] + b 最後那個 Σ pi = 1 就是 ④ 節那句「權重加起來一定是 1」—— 所以 b 原封不動地跑出來。整條式子沒有用到任何新工具。

R4 那條 Var(X) = E[X²] − μ² 也一樣,只是多兩步。 起點是變異數的定義「偏離平均、平方、再取平均」:

Var(X) = E[(X − μ)²] = E[X² − 2μX + μ²]
= E[X²] − 2μ·E[X] + μ²  (用了 R1、R2:加號拆開、常數提出來)
= E[X²] − 2μ² + μ² = E[X²] − μ² 注意中間那一步把 μ 當成常數提出來 —— 它確實是常數(機器的死值), 這一步才合法。實務上這條公式的好處是只掃資料一遍:一邊累加 x、 一邊累加 ,最後相減。所有串流版的 variance 都是這麼寫的。
Var(aX + b) = E[((aX + b) − (aμ + b))²] = E[(a(X − μ))²] = a²·E[(X − μ)²] = a²·Var(X) 第一個等號用 R1 算出中心是 aμ + b(這是 R5 的證明);第二個等號裡 b 自己減掉自己就不見了。 所以「整批資料加 100 萬」不會讓它們變得更散,這件事你在 02 關去中心化時就見過一次了。

⑤-B 動手:一台骰子報酬機器,拖 a、b,看 E 和 Var 各自怎麼反應

這三張圖在幹嘛

你會看到什麼:三排機率棒子,縱軸都是機率(不是次數)。 上圖橘色是原本的 X(骰子六個面,就當成「六種報酬情境」,單位 %); 中圖綠色aX + b跟上圖共用同一條 x 軸(−20 ~ 20); 下圖青色X + Y。 每張圖上的紫色直立線是那個變數的 E橘色橫括號的半寬就是它的 σ

你可以動什麼:兩根滑桿 —— a(倍率,−2 ~ 2)與 b(平移,−7 ~ 7); 四顆預設鈕;三顆按鈕決定 YX 的關係 (獨立 / Y = X / Y = 7 − X);「換 seed」重抽對帳用的 4000 對亂數。

要看出什麼:b 的時候只有紫線在搬家,橘括號的寬度一動也不動Var 不吃 b);拖 a 的時候括號跟著縮放,而且是按 |a| 縮 (所以 Var 按 a² 縮)。下圖三顆關係鈕切著看: 「E 的那一列永遠打 ✓,Var 的那一列只有獨立才打 ✓」

兩張上圖故意用同一條又寬又空的 x 軸(−20 ~ 20)。看起來浪費,但那是重點: 骰子本人只佔中間 1~6 一小段,ab 一動, 綠色那排就跑到別的地方去了 —— 如果兩張圖各自縮放,你會誤以為什麼都沒發生。

a —— 乘幾倍(倍率 / 槓桿)
b —— 加多少(固定加減)
Y 跟 X 的關係(只影響下圖)
R1 / R4 / R5:aX + b
R2 / R3 與預告:X + Y
seed · 對帳用 4000 對
最重要的一條反例:E 不能穿過非線性的函數

R1、R2 看起來像是「E 可以隨便穿進去」,於是很多人就順手寫出 E[X²] = (E[X])²E[1/X] = 1/E[X]兩條都錯。讀數盤幫你抓:公平骰子的 E[X] = 3.5(E[X])² = 12.25,但 E[X²] = 15.167

而且差多少是有名字的:差的剛好就是 σ² = 2.917 (那就是 R4 換個寫法:E[X²] = μ² + σ²)。 所以「先平方再平均」永遠 ≥「先平均再平方」,而多出來的那一塊就是變異數。

記法:E 只能穿過「乘常數」和「加起來」,穿不過平方、開根號、取倒數、取 log。log 本身是什麼、它為什麼是非線性的,見 基礎 01 關。) 這件事在工程上會咬人 —— 例如把每台機器的延遲平均起來再算 p99, 或者拿平均報酬去算複利(機率統計 02 關的 log 那節就在處理這件事)。

機率統計 03 關的預告:那個「差出來的一塊」叫 Cov

把三顆關係鈕切到 Y = X,你會看到 Var(X+Y) 不是兩倍而是四倍; 切到 Y = 7 − X,它變成 0(X + Y 永遠是 7,下圖只剩一根棒子)。 獨立那一顆才剛好是兩倍。

所以 Var(X+Y) = Var(X) + Var(Y)特例,不是規則。一般式長這樣:

Var(X + Y) = Var(X) + Var(Y) + 2·Cov(X, Y)   Cov(X, Y) = E[XY] − E[X]·E[Y] 讀數盤最後兩列就是在驗這一條(三種關係都打 ✓)。 Cov 讀作「共變異數」:獨立時它是 0(因為 R3), 同向連動時是正的,反向連動時是負的。 它的完整身分、還有為什麼它會變成 wTCw,是 機率統計 03 關的全部內容 —— 這裡只讓你先看到它的臉。

所以這一節的結論是:E[⋯] 是一個線性運算 —— 乘常數和加起來可以自由穿進穿出,別的不行。 Var 不是線性的:它吃 、完全不吃 b, 而且兩個變數相加時會多出一項 2Cov這五條就是 10、11、12 三關的地基。

⑥ 母體 vs 樣本:本關最重要的一節

到這裡你已經有兩組數字:機器的 μ、σ²(真值,看不到)和樣本的 x̄、s²(看得到,會抖)。這一節做兩件事: 先看它們抖多少,然後還 02 關那個 n − 1 的債

⑥-A 同一台機器,抽 5 次 / 50 次 / 500 次

這兩張圖在幹嘛

你會看到什麼:兩張並排的圖,橫軸都是「這是第幾組」(每按一次重抽就多一顆點)。 上圖縱軸是那一組的樣本平均 x̄下圖縱軸是那一組的樣本變異數 s²。 兩張圖各有一條紫色橫線,那是機器的真值(μσ²)。 紅色虛線是這些點自己的平均,看它壓不壓在紫線上。

你可以動什麼:上面三顆鈕切 n = 5 / 50 / 500(切換會清空重跑), 「重抽一組」加一顆點、「連跑 20 組」加二十顆、「清空」歸零、「換 seed」換亂數。 兩張圖的縱軸刻度是鎖死的,這樣你切 n 才看得出點群縮了多少。

要看出什麼:一載入就先幫你跑了 12 組(n = 5):上圖的點撒在 4.08 ~ 6.60、 下圖撒在 0.25 ~ 5.50(真值只有 2.70!)。按兩次「連跑 20 組」跑滿 40 組,範圍會拉到 3.64 ~ 6.76 與 0.25 ~ 7.01。 切到 n = 500,兩群點都塌成貼著紫線的一條細帶(5.07 ~ 5.34 與 2.30 ~ 3.06)。 而且不管 n 多小,紅虛線都貼在紫線附近 —— 單次會歪,平均起來不歪。

圖上的記號:橫軸左邊那塊空白是專門留給兩顆標籤站的(紫=真值紅=這些組的平均), 那裡沒有資料。下圖縱軸寫的 ddof = 1 就是「分母用 n − 1」的程式庫講法(⑥-B 會解釋這個字)。 如果某一組的 大到衝出畫面上緣,那顆點會貼在上緣並標成 ↑ 12.3 這樣(箭頭後面是它真正的值)—— n = 5 的時候這種事會發生。

每組抽幾個 n
機器:公司薪水(右偏)· seed · 已跑 0
真值 μ
這些組的 x̄ 平均
這些組的 x̄ 有多抖(標準差)
x̄ 的最小 ~ 最大
真值 σ²
這些組的 s² 平均
s² 的最小 ~ 最大
最新那一組(第 R 組)

這張圖有一個容易滑過去的重點:下圖的點群比上圖歪得更厲害。 跑滿 40 組、n = 5 的時候, 最多差真值 1.56 萬(30%), 但 從真值的 9%(0.25)一路跳到 260%(7.01)。 這就是為什麼 最佳化 03 關的最優權重會亂跳 —— 它吃的是共變異數矩陣 C,而 C 裡面每一格都是這種抖得比平均更兇的東西。

⑥-B 還債:n − 1 到底為什麼

02 關的變異數分母寫的是 n − 1,當時丟了一句 「關鍵字:自由度」就跑了。現在你有母體、有樣本、有模擬,可以把它做成實驗看:

兩種算法,分子一模一樣,只有分母不同:
算法甲(÷ n):   s² = Σ(xi − x̄)² / n
算法乙(÷ n−1): s² = Σ(xi − x̄)² / (n − 1) 做法:讓機器跑 R 輪(預設 2000 輪),每輪抽 n 個(預設 5 個), 兩種算法各算一個變異數。最後把 R 個結果各自平均,跟真值 σ² 並排比。 誰的平均對準真值,誰就是對的估計量。
這張圖在幹嘛

你會看到什麼:兩疊直方圖疊在同一張圖上。橫軸是「算出來的變異數是多少」,縱軸是「R 輪裡有幾輪落在這一格」。 紅色那疊是算法甲(÷n)綠色那疊是算法乙(÷n−1)紫色直立線是真值 σ²紅虛線綠虛線分別是兩疊各自的平均位置

你可以動什麼:n 滑桿(每輪抽幾個,2~30)、輪數 R(500 / 2000 / 20000)、 三顆機器鈕、「換 seed」。

要看出什麼:紅虛線明顯落在紫線左邊(系統性偏小), 綠虛線壓在紫線上。把 n 從 5 拉到 30,紅線會慢慢爬上來 —— 因為偏差的倍率就是 (n−1)/n,n 大了就不明顯。小樣本才是重災區。

兩疊直方圖的形狀是一模一樣的,只是綠色那疊整體往右挪了 n/(n−1) 倍 —— 分母改一個數字,做的事就是把整疊往右推。

每輪抽幾個 n5
模擬輪數 R
用哪台機器
seed
真值 σ²
算法甲 ÷n 的平均
  甲 ÷ 真值
算法乙 ÷(n−1) 的平均
  乙 ÷ 真值
理論偏差倍率 (n−1)/n

為什麼 ÷n 會系統性偏小 —— 一句話版

關鍵那一句

因為你量「散開」的時候,是拿樣本自己的平均 當中心。 而 是這組資料算出來的,它永遠比真中心 μ 更貼近這組資料 —— 它就是被挑出來「離這組資料最近」的那一點。用一個偏心到自己身上的中心去量距離,量出來的散開必然偏小。

是離這組資料最近的那一點」不是比喻,那是 02 關證過的事: 02 關第 ⑦ 節把 n 筆資料看成一條 n 維向量, 把它拆成「平均那一塊」+「偏差那一塊 c」,兩塊互相垂直。 垂直就代表「偏差那一塊已經被壓到最短」—— 換任何別的中心,那條 c 都會變長。 正式寫出來就是這條恆等式:

Σ(xi − μ)² = Σ(xi − x̄)² + n(x̄ − μ)² 左邊:拿真中心 μ 量的散開(你要的東西)。 右邊第一項:拿樣本中心 x̄ 量的散開(你唯一算得出來的東西)。 右邊第二項:n(x̄ − μ)²,一定 ≥ 0 —— 它就是你少算的那一塊。
所以 Σ(xi − x̄)² 永遠小於等於 Σ(xi − μ)², 除非你運氣好到 x̄ 剛好等於 μ。這不是偶爾偏小,是每一次都偏小,所以叫「系統性」。

少算多少?平均而言,少掉的那一塊剛好是 σ² / n(那就是下一節的 標準誤平方)。所以:

平均來說 Σ(xi − x̄)² / n ≈ σ² − σ²/n = σ² · (n − 1) / n 想把它救回 σ²,兩邊乘上 n/(n−1) —— 也就是分母從 n 換成 n − 1這就是那個 −1 的全部理由。 n = 5 時倍率是 5/4 = 1.25,也就是 ÷n 只量到真值的 80%(上面模擬實測 79.7%); n = 30 時是 30/29 ≈ 1.034,差 3.4%,難怪大家在大樣本上不在乎。

補一個名詞好讓你看得懂別人的 code:那個「−1」在程式庫裡叫 ddof(delta degrees of freedom, NumPy/pandas 都用這個名字),意思是「分母要扣掉幾個自由度」。 np.var(a) 預設 ddof=0(÷n,偏小), pandas.Series.var() 預設 ddof=1(÷n−1)。 同一份資料丟兩個庫會得到兩個答案,這是真的會出包的坑。 本站 LAB.M.variance(a, ddof) 預設 ddof = 1

所以這一節的結論是: 都是會抖的估計值n−1 當分母,是為了讓它「平均而言對準」σ²。 注意「平均而言對準」不等於「這一次算對」—— 你手上那一次還是歪的。歪多少,看第 ⑧ 節。

⑦ 大數法則:抽得越多,平均越靠近真值

上一節你看到「n 越大, 越不抖」。 把這件事講成一句定理就是大數法則(Law of Large Numbers):

n → ∞ 時 x̄n → μ n 是「前 n 筆的平均」。這條式子是整個統計學能成立的地基: 它保證「多抽一點」真的有用,不是自我安慰。
這張圖在幹嘛

你會看到什麼:橫軸是「抽到第幾筆」(對數刻度:1、10、100、1000 各佔一樣寬, 這樣前幾筆的劇烈晃動才看得見),縱軸是「前 n 筆的平均 n」。 綠色折線就是這條軌跡(每多抽一筆就重算一次平均)。 紫色橫線是真值 μ兩條紅色虛曲線μ ± 2σ/√n,也就是「這個 n 之下,x̄ 大概會落在多寬的範圍」。

你可以動什麼:「換 seed 重跑」畫一條新的、「疊上一條」把舊軌跡留成淡線(最多 6 條)、 「清空」、三顆機器鈕。

要看出什麼:綠線一開始亂跳(n < 10 幾乎沒有參考價值),然後慢慢被紅色喇叭口收進去, 最後貼著紫線。疊五六條之後看得更清楚:每一條都收斂,但收斂的路徑完全不同, 而且它們始終塞在那個紅色喇叭口裡面 —— 那個喇叭口的寬度就是下一節的主角。

用哪台機器
seed · 已疊 0 條舊軌跡
真值 μ
n = 10 時的 x̄
n = 100 時的 x̄
n = 1000 時的 x̄
n=1000 還差多少

頭一兩筆的平均有可能衝出畫面上緣(例如第一筆就抽到 11 萬),那時折線會貼著上緣走一小段 —— 那不是畫錯,那正是「n 很小的時候平均完全不可信」長出來的樣子。

誠實提醒:收斂慢到你會不耐煩

大數法則保證會收斂,但沒保證收斂得快。紅色喇叭口的寬度是 2σ/√n, 注意那是 √n 不是 n:

  • 樣本從 100 加到 400(4 倍),誤差只縮到一半
  • 想再縮一半,要從 400 加到 1600。想縮到十分之一,要 100 倍樣本。
  • 翻成工程語言:資料量的邊際效益是遞減的,而且遞減得很快。 「再多蒐一點資料就會準了」通常是幻覺 —— 你要多蒐的量是平方級的。

這條 √n 就是下一節的全部內容。

⑧ 你的估計有多不準:標準誤 SE = σ / √n

前面兩節你看了兩次同一件事: 會抖,n 越大越不抖。 現在把「抖多少」變成一個能算的數字。

關鍵轉念在這裡,而且它是這一整關最需要慢下來的一句: 自己也是一台機器吐出來的東西。 你抽 n 個人、算一個平均 —— 這整套動作合起來就是一台新機器, 它吐出來的產品叫「一個樣本平均」。既然是機器,它就有自己的 μσ

原本那台機器 X「抽 n 個算平均」這台新機器
按一下吐出什麼一個人的薪水一組 n 個人的平均薪水
它的平均μμ ←一模一樣(所以 x̄ 是「不偏」的)
它的標準差σσ / √n ←小了 √n 倍,這個東西叫標準誤 SE

為什麼特別給它一個名字「標準誤」而不是繼續叫標準差?因為它量的東西不同: σ 量的是「跟人之間差多少」, SE 量的是「你這次的估計跟真值差多少」。 前者是世界的性質(你蒐再多資料都不會變小),後者是你的無知程度(會隨 n 縮小)。 報告裡混用這兩個是很常見的錯。

這張圖在幹嘛

你會看到什麼:直方圖,但橫軸不是薪水,是「 的值」—— 每一根青棒代表「500 輪模擬裡,有幾輪算出來的樣本平均落在這一格」。 這張圖就是上面那台新機器 的形狀。 紫線μ兩根紅色括號標在 μ ± SE綠色細括號標在 μ ± 2·SE(大約 95% 的輪數落在裡面)。

你可以動什麼:n 滑桿(5 → 640,每一格剛好 2 倍,所以往右推兩格 = 4 倍樣本)、 「n × 4」一鍵推兩格、「換 seed」。橫軸刻度鎖死,這樣你才看得出寬度變化。

要看出什麼:n 從 20 推到 80(4 倍),這疊直方圖的寬度正好縮成一半 (讀數盤裡「實測 SE」那格會從 0.37 掉到 0.18)。4 倍工錢,換一半誤差。

n = 5 的時候這疊東西又寬又歪(右邊拖尾巴,因為薪水機器本身右偏); n 一大就變成漂亮的鐘形,而且是對稱的鐘形 —— 不管原本那台機器多歪。 那件事本身是另一條定理(中央極限定理),下一關專門講它。

每輪抽幾個 n
用哪台機器
R = 500 輪 · seed
理論標準誤 SE = σ / √n
σ(機器真值)
√n
實測:500 個 x̄ 的標準差
實測 ÷ 理論
±2·SE 區間寬度

把 n 排成一張表,看 √n 怎麼咬人

下表是同一台薪水機器,同一個 seed,只換 n(每一列都是現場跑 500 輪算出來的):

n√n理論 SE = σ/√n實測 SE±2SE 大概是
這一節接住了後面兩關的兩個「天上掉下來」
  • 最佳化 03 關:「平均報酬只要動 0.5%,最優權重就翻天覆地」。 為什麼會動?因為那個平均報酬是拿 n 個月的歷史資料估的,它的標準誤是 σ/√n。 月報酬的 σ 大概 5%,抽 60 個月 → SE ≈ 5/√60 ≈ 0.65%。 也就是說你估出來的「平均報酬」本身就帶著 ±1.3% 的晃動, 而最佳化程式會把這個晃動當成事實,放大成完全不同的權重。 這叫 estimation error 被最佳化放大,不是最佳化 03 關的程式寫壞了。
  • 機率統計 05 關:「拿 C 當一把尺量距離」。 那把尺是 C⁻¹,而 C 是估出來的 —— 而且從 ⑥-A 那張下圖你已經看到:變異數比平均更難估。 再加上取反矩陣會把小的特徵值放大成很大的數(04 關), 所以小樣本下的馬氏距離會給出荒謬的答案。這不是馬氏距離的錯,是你資料不夠。

所以這一節的結論是:任何從資料算出來的數字,都應該附一個「它有多不準」。 平均值的那個「多不準」叫標準誤,公式是 σ/√n沒有附誤差的統計量,等於沒有單位的物理量。

⑨ 從一個點升級成一段區間:信賴區間怎麼讀

⑧ 節那張圖上有一對綠色細括號,標在 μ ± 2·SE, 當時只說「大約 95% 的輪數落在裡面」。這一節做兩件事:給那對括號一個正式的名字, 然後修掉它偷的兩個懶

先講「點估計」跟「區間估計」的差別,因為這是整節的動機:

點估計區間估計(信賴區間)
它交出什麼一個數字:x̄ = 5.12 一段範圍:[4.78, 5.46]
它有沒有承認自己會錯沒有。看起來像事實 有。寬度就是它的自白書
資料變多會怎樣還是一個數字,看不出差別 區間變窄 —— 進步是看得見的

⑨-A 把括號翻過來:從 μ ± 2SE 變成 x̄ ± 2SE

⑧ 節的括號畫在 μ 身上,那是上帝視角:我程式裡知道真值, 所以能畫「x̄ 大概會落在哪」。真實世界你不知道 μ —— 你只有一個 。所以要把那句話翻過來

落在 μ ± 2·SE 裡」  ⟺ 「μ 落在 x̄ ± 2·SE 裡」 這兩句話是同一件事(兩個數字距離小於 2SE,跟誰站中間無關), 但第二句是你真的做得到的:中心換成你手上那個 。 這就是信賴區間(confidence interval,CI)。

然後修掉第一個懶:SE = σ/√n 裡的 σ 你也不知道 —— 它是母體真值。真實世界只能拿這一組自己算出來的 s 去代替它:

信賴區間 = x̄ ± k · (s / √n) s/√n估計標準誤(standard error 的估計值)。 k 是「要幾個 SE」:σ 已知的話 k = 1.96 ≈ 2 對應 95%;σ 是用 s 估的話,k 要比 2 大一點 —— 那就是 t, ⑨-C 講。

⑨-B 動手:40 組樣本、40 條區間,只有一條紫線不動

這張圖在幹嘛

你會看到什麼:40 條水平線段,每一條 = 一組獨立抽出來的樣本所算出的信賴區間 (中間那顆小點是那一組的 ,兩端的短豎線是區間端點)。 中間那條從上貫到下的紫色直線是真值 μ。 區間綠色 = 這一組蓋到 μ紅色 = 沒蓋到

你可以動什麼:n 滑桿(5 → 640,每格 2 倍)、「n × 4」一鍵推兩格、 三顆按鈕換機器、兩顆按鈕切臨界值(用 2 / 用 t)、「換 seed」重抽 40 組。 橫軸刻度鎖死,所以區間縮短是真的縮短。

要看出什麼:紫線從頭到尾一動也沒動,抖的是那 40 條區間。 這就是信賴區間唯一正確的讀法。另外把 n 從 20 推到 80(4 倍), 所有線段的長度會縮成一半;而 n = 5 的時候切「用 2 / 用 t」, 覆蓋率會差好幾個百分點

每組抽幾個 n
臨界值 k 用哪個
用哪台機器
40 組 · seed
這 40 組裡蓋到 μ 的有幾組
CI 唯一的正確讀法:區間會抖,母體參數不會

錯的讀法(幾乎每個人第一次都這樣讀):μ 有 95% 的機率落在 [4.78, 5.46] 裡面。」

為什麼錯:μ 不是隨機的。它是那家公司真實的平均薪水,一個死值, 5.196 就是 5.196,它不會今天在區間裡、明天跑出去。上面那張圖裡唯一一動也不動的東西就是紫線。 既然它不動,講它的「機率」就沒有意義 —— 它要嘛在你這段區間裡(機率 1),要嘛不在(機率 0), 而你不知道是哪個。

對的讀法:這套造區間的程序,長期而言有 95% 的機率造出一段蓋到 μ 的區間。」 95% 是程序的成績,不是這一段區間的成績。圖上那 40 條就是「長期」的縮小版: 大部分綠、零星幾條紅,而紅色那幾組的主人不會知道自己是紅色的 —— 他們手上的區間看起來跟別人一樣正常。

一個能救你的講法:把 95% 想成這台造區間機器的良率。你買了一台良率 95% 的機器, 它剛剛吐給你一個零件 —— 日常對話說「這個零件有 95% 的機率是好的」沒問題, 但在統計裡這句話會讓你在下一步推論裡犯錯,因為它偷偷把「參數」變成了隨機變數。 把隨機性放在區間上,不要放在真值上。

⑨-C σ 未知的代價:t 分布(只給直覺,不推導)

現在講第二個懶。k = 2 這個數字是從常態分布來的:常態的中央 95% 落在 ±1.96σ 內 (機率統計 02 關會親手積出來)。但那條推導假設 σ已知的

你手上是 s,而 s 自己也會抖 —— ⑥-A 那張下圖已經給你看過:變異數比平均更難估n = 5 的時候 可以差好幾倍。 於是 (x̄ − μ)/(s/√n) 這個量比 (x̄ − μ)/(σ/√n) 更容易跑到很遠: 分子偶然大的時候,分母有時候剛好也偏小,兩件事湊起來就把它推出去。

一句話的 t 分布

t 分布就是「把分母換成估計值之後」那個量真正的分布:形狀跟常態很像,但尾巴厚一點 尾巴厚 = 極端值比常態預期的多 = 想裝住 95%,括號得張大一點。 所以臨界值從 2 變成 2.78(n = 5)、2.26(n = 10)、 2.09(n = 20)…… n 一大就收回 1.96。

它只有一個參數叫自由度(degrees of freedom)= n − 1 —— 就是 ⑥-B 那個 n − 1,同一個東西、同一個理由(中心是估出來的,用掉一個)。 自由度越小,尾巴越厚。

下表的臨界值不是抄課本的,是本頁現場積出來的(t 的密度正比於 (1 + t²/ν)−(ν+1)/2,積分再二分反解)。 你可以拿任何一本統計課本的 t 表對第 4 位小數。

n自由度 n−1 t 的 0.975 分位比 1.96 大多少

看最後一欄就知道 t 什麼時候值得在意:n ≥ 30 之後它跟 2 差不到 5%, 這就是「n 大了就可以用常態近似」那句話的真正內容。 而 n = 5 的時候差 42% —— 小樣本硬用 2,你的區間會系統性地太窄, 也就是你會比你以為的更常猜錯。上面的玩具把 n 切到 5 再切臨界值,覆蓋率的差就是這件事。

⑨-D 區間長度:又是那條 √n

下表是同一台機器、同一個臨界值設定,只換 n(長度直接套公式,沒有模擬):

n√n臨界值 k 區間長度 = 2k·σ/√n相對 n=20

n 從 20 變成 80(4 倍),長度剩下大約一半;變成 320(16 倍),剩下四分之一。 跟 ⑧ 節同一條 √n,只是這次縮的是括號的寬度而不是直方圖的寬度。 反過來用就是專案排程時最實際的那句話:想把信賴區間縮一半,準備四倍的資料收集成本。

所以這一節的結論是:交出一個數字等於什麼都沒交。 交出 x̄ ± k·(s/√n) 才算交代完 —— 而且要記得那 95% 是 程序的良率,不是這一段區間的機率。

⑩ 數學長怎樣(先給 code,再給符號)

本頁每一張圖背後就是這幾行。先看 code,符號版在下面:

// 一台機器 = 值的清單 + 對應的機率清單
const machine = { vals: [1,2,3,4,5,6], ps: [1/6,1/6,1/6,1/6,1/6,1/6] };

// 母體真值(把整張表加權加起來,沒有「抽樣」這回事)
const mu    = sum(machine.vals.map((v,i) => machine.ps[i] * v));           // E[X] = Σ pᵢvᵢ
const sigma2 = sum(machine.vals.map((v,i) => machine.ps[i] * (v-mu)**2));  // σ² = Σ pᵢ(vᵢ-μ)²

// 按一下機器 = 擲一顆 0~1 的亂數,看它落在哪一段
function draw(rng) {
  const r = rng(); let acc = 0;
  for (let i = 0; i < machine.vals.length; i++) {
    acc += machine.ps[i];
    if (r <= acc) return machine.vals[i];
  }
}

// 抽 n 個,算樣本統計量(這是你在真實世界唯一做得到的事)
function sample(n, rng) {
  const a = []; for (let i = 0; i < n; i++) a.push(draw(rng));
  const xbar = sum(a) / n;                                  // x̄
  const ss   = sum(a.map(x => (x - xbar) ** 2));             // Σ(xᵢ - x̄)²
  return { xbar, s2_biased: ss / n, s2: ss / (n - 1) };      // ÷n 偏小;÷(n-1) 才對準
}

// ⑥-B 的整個實驗就是這五行
const est = []; for (let r = 0; r < 2000; r++) est.push(sample(5, rng));
mean(est.map(e => e.s2_biased));   // → 2.32 (真值 2.92 的 79.7%,偏小)
mean(est.map(e => e.s2));          // → 2.90 (真值 2.92 的 99.6%,對準)

// ⑤ 的運算規則:全部只是「機率當權重加起來」,沒有動用任何新工具
const E = (g) => sum(machine.vals.map((v,i) => machine.ps[i] * g(v)));
E(v => 2*v + 5);              // = 2·E[X] + 5   ← E[aX+b] = aE[X] + b
E(v => v*v) - E(v => v)**2;   // = σ²           ← Var(X) = E[X²] − μ²

// ⑨ 的信賴區間:分母那個 s 是「這一組自己算的」,不是偷看 σ
const st = sample(n, rng);
const half = k * Math.sqrt(st.s2 / n);          // k = 2,或 t 的 0.975 分位(自由度 n−1)
[st.xbar - half, st.xbar + half];               // 這一組的信賴區間
母體(機器的性質,希臘字母,死值)
μ = E[X] = Σi pi vi   σ² = E[(X − μ)²] = Σi pi (vi − μ)²   σ = √(σ²) vi 是第 i 種可能的值、pi 是它的機率。 這裡沒有 n,因為機器不需要「抽幾個」。
樣本(你算得出來的,拉丁字母,會抖)
x̄ = (1/n) Σi=1n xi   s² = (1/(n−1)) Σi=1n (xi − x̄)²   s = √(s²) 02 關的式子一字不差 —— 差別只在你現在知道它們是估計值了。
兩邊的橋(這三條就是整關的成果)
E[x̄] = μ   E[s²] = σ²   SD(x̄) = σ / √n ≡ SE 讀法:E[x̄] = μ 是「把無限多組樣本的 x̄ 平均起來,剛好等於 μ」—— 這叫不偏(unbiased)。E[s²] = σ² 同理,而這一條只有分母寫 n−1 才成立 (⑥-B 就是在實測這件事)。第三條說 x̄ 自己有多抖。
注意 E[⋯] 外面那層期望值是對「所有可能的樣本」取的,不是對樣本裡的 n 筆取的。 這是全關最容易糊掉的一個下標,模擬裡的 R 輪就是在近似這一層。

運算規則(⑤ 節那五條 R1~R5,10/11/12 三關的地基)
E[aX + b] = aE[X] + b   E[X + Y] = E[X] + E[Y]   X ⫫ Y ⟹ E[XY] = E[X]E[Y]
Var(X) = E[X²] − μ²   Var(aX + b) = a²Var(X)   Var(X + Y) = Var(X) + Var(Y) + 2Cov(X, Y) 讀作「獨立」。前兩條合起來就是「E 是線性運算」; 第三條只有獨立才成立,這是全關最容易誤用的一條。 最後那個 Cov機率統計 03 關的主角,⑤ 節只讓你看一眼。

順帶把 02 關那條「變異數就是內積」接上: s² = (c · c) / (n − 1),其中 c 是中心化向量。 這一關唯一改的事情是分母的意義 —— 那個 n − 1 不再是「一個固定的分母」, 而是「為了讓 E[s²] = σ² 成立所必須的修正」。幾何沒變,只是知道了它為什麼。

⑪ 工程師的「原來如此」

A/B test 為什麼一定要先算樣本數

你上線一個新按鈕,兩天後看板顯示:舊版轉換率 4.0%、新版 4.4%。新版贏 10%,可以全量發布了嗎?

把它翻成這一關的語言:轉換率就是一台機器(點了算 1、沒點算 0), 它的 σ = √(p(1−p)),p ≈ 0.04 時 σ ≈ 0.196。 兩天各收到 2000 個 session,所以每邊的標準誤是 SE = 0.196/√2000 ≈ 0.44%。兩邊相減的誤差還要再乘 √2 ≈ 0.62%

你看到的差距 0.4%,比它自己的誤差 0.62% 還小。 換句話說:就算兩個版本完全一樣,你也很容易看到 0.4% 的差距 —— 那只是抽樣的抖動。 這就是為什麼所有 A/B 工具都會先問你「最小可偵測差異」,然後吐出一個很大的樣本數: 它在解 σ/√n < 你想偵測的差距 這個不等式。 而因為是 √n想偵測一半大的效果,要四倍的流量(⑦ 節那條)。

推論一件很實際的事:「先偷看一下,有差就停」是統計上的作弊(peeking)。 因為 的軌跡就是 ⑦ 節那條會亂晃的綠線 —— 你盯著它看, 它總有幾個瞬間會晃過你的門檻。要嘛先定 n 再看,要嘛用會處理這件事的方法(序列檢定)。

正名:上面那句「很容易看到 0.4% 的差」,那個「很容易」就叫 p-value

上一段的結論是「就算兩版完全一樣,你也很容易看到 0.4% 的差距」。 「很容易」是個形容詞,統計學把它換成一個數字,那個數字就叫 p-value。

p = P(假設兩版真的沒差,光靠抽樣雜訊生出「至少這麼大」的差) 「假設兩版真的沒差」這個假設有名字,叫虛無假設(null hypothesis,H0)。 p-value 是在這個假設底下算出來的機率 —— 它從頭到尾沒有問「新版是不是真的比較好」。

怎麼算:把「差」除以「差自己的 SE」,得到一個無單位的數字 (下一關會叫它 z),然後去看「比這個數字更極端的面積有多少」。 那塊面積就是 機率統計 02 關的累積分布(CDF)的尾巴 —— p-value 不是新概念,它是一塊面積。

本例算一次:差 = 0.4%、SE = 0.62%,所以 z = 0.4 / 0.62 ≈ 0.65,雙尾面積 p ≈ 0.52翻成人話:兩版就算一模一樣,也有超過一半的機會讓你看到「至少 0.4% 的差」。 這就是為什麼那 0.4% 什麼都證明不了。

那條「p < 0.05」的門檻叫顯著水準 α:它是你自己選的、願意承受的假陽性率 —— 沒差卻宣稱有差的機率。0.05 沒有任何數學上的必然性,是慣例。

現在回頭看上一段的「偷看」:每偷看一次,就給雜訊多一次機會越過門檻。 看 5 次,實際的假陽性率不是 5% 而是十幾趴 —— 你名目上守著 α = 0.05,實際上早就破了。 作弊的地方不是「看」,是「看完才決定要不要停」。

順手把檢定力(power)也正名,一句話:p-value 管的是「沒差卻說有差」, 檢定力管的是另一邊 —— 真的有差的時候,你抓到它的機率(= 1 − 漏抓率 β)。 SE 越小(n 越大)、真實效果越大,檢定力就越高。 所以那個「樣本數計算器」的真面目是:你在買檢定力。 n 給不夠的實驗最常見的下場不是「證明沒效」,是什麼都測不出來, 然後被誤讀成「新版沒用」。

最後三個 p-value 的誤讀,一起釘住:不是「新版比舊版好的機率」; 不是效果大小 —— n 夠大的話,0.01% 的差也能壓出 p < 0.001, 所以永遠要同時看⑨ 節那段信賴區間 p = 0.06p = 0.04 之間沒有質變, 0.05 只是一條你自己畫的線。

監控指標的 p99 在樣本少的時候根本不能信

Grafana 上一條 p99_latency,聚合視窗一分鐘。這一分鐘只有 150 個請求, 那麼 p99 是第 2 名慢的那個請求(150 × 0.01 = 1.5)。 也就是說:整個面板上那條線的高度,由單一個請求決定。

用這一關的話講:p99 也是一個從樣本算出來的估計值, 它的標準誤比平均值的 σ/√n 大得多 —— 因為它只吃分布最右邊那一小段的資料,有效樣本數不是 150,是 1~2。 於是你會得到兩個假現象:

  • 低流量時段的 p99 看起來又高又抖,尖刺一根一根的。那通常不是系統變慢,是樣本變少。
  • 把視窗從 1 分鐘拉到 10 分鐘,p99 會「變好」。指標沒變好,是 n 變大讓估計值不再被單一離群值綁架。

兩個能直接用的處理:① 面板上同時顯示該視窗的請求數,n 小到某個程度就別解讀 p99; ② 告警門檻不要只設在 p99 的值上,要求「連續 k 個視窗都超過」—— 那本質上是在偷偷把 n 加大來壓低 SE

同一件事還有第二層坑:p99 這種分位數不能平均。 把十台機器的 p99 加起來除以十,得到的東西沒有任何統計意義 (正確做法是合併原始樣本或用可合併的近似結構,例如 t-digest / HDR histogram)。 「不能平均」的理由跟 02 關「標準差不能相加」是同一種: 非線性的量,平均之後就不是原本那個量了。

⑫ 踩坑

坑 1:把「抽到的」當成「真的」

最常見的形式是把 s 直接寫成 σ、把 直接寫成 μ, 然後在後面十步計算裡都當成事實。① 節那張表就是解藥: 同一台機器抽七個人,標準差可以是 0.50 也可以是 2.24(真值 1.64)。

辨識法很簡單:問自己「這個數字如果重新蒐一次資料,會不會變?」 會變 → 它是估計值 → 它需要一個誤差。 你在論文裡看到的 x̄ ± SE 或誤差棒(error bar)就是在做這件事。

坑 2:大數法則不保證「下一把會回歸」(賭徒謬誤)

骰子連開五次 1,第六次比較容易開別的嗎?不會。骰子沒有記憶體, 第六次的機率表跟第一次一字不差。這個誤會叫賭徒謬誤(gambler's fallacy)。

大數法則說的是 n → μ,靠的不是「後面補回來」, 而是「後面的量把前面那點怪事稀釋掉」。算一次就懂: 前五筆全是 1(平均 1.0,離真值 3.5 差 2.5)。再抽 995 筆正常的, 那五筆的權重只剩 5/1000 = 0.5%,它把總平均拉低 0.005 × 2.5 ≈ 0.0125那個偏差從來沒有被抵銷,只是被除到看不見。

⑦ 節疊五六條軌跡就看得到這件事:沒有任何一條在「補償」, 它們只是被越來越大的分母壓平。反過來說 —— 前面歪掉的資料,不會因為你多蒐一點就消失, 這條路只走得通在偏差是隨機的時候。這就是下一坑。

坑 3:n 很大也救不了有偏的抽樣

SE = σ/√n 有一個前提被藏得很好:你抽的每一個都來自你想講的那台機器,而且獨立。 前提破了,n 加多少都沒用 —— 你只是越來越精確地算出一個錯的東西。

  • 只在公司內部發問卷問「你覺得我們產品好用嗎」,n = 10000 也還是內部人的意見。 SE 會漂亮地縮到 0.2%,然後你對一個錯的 μ 精確到 0.2%。
  • 1936 年美國大選,《Literary Digest》寄了 240 萬份回函(n 大到荒謬)預測 Landon 勝, 結果 Roosevelt 壓倒性當選。名單來自電話簿與車主登記 —— 大蕭條年代有電話有車的人不是全體選民。
  • 工程版:只從「成功回傳的請求」算延遲,超時斷線的那些根本沒進你的樣本。 你的 p99 永遠很漂亮,因為最慘的樣本被系統性地丟掉了(survivorship bias)。

記法:n 治的是變異(variance),治不了偏差(bias)。 變異是「抖」,多抽會平;偏差是「歪」,多抽只會讓你更確信那個歪的答案。

坑 4:獨立性沒了,√n 就是假的

「抽 n 個」在本頁一律是獨立的(我程式裡是抽完放回,每一筆都重新按一次機器)。 真實資料常常不獨立,而不獨立會讓有效樣本數遠小於 n

  • 時間序列:今天的股價跟昨天高度相關。你有 1000 個交易日,但沒有 1000 份獨立資訊, 所以 σ/√1000 是過度樂觀的。
  • 同一個使用者的多次點擊:1000 筆事件可能來自 50 個人。有效 n 接近 50,不是 1000 (這就是為什麼 A/B test 要按使用者分組而不是按 session)。

判斷法:問「這兩筆資料之間,知道其中一筆會不會讓我更能猜到另一筆?」 會 → 它們不獨立 → 你的 SE 被低估了。 機率統計 04 關會把「獨立」這個字正式定義出來。

⑬ 這關回答了什麼

隨機變數跟一般變數差在哪?

一般變數是一個抽屜裝一個值let x = 5,你打開就是 5,看一百次都是 5。 隨機變數是一台機器const X = () => sample(表),它是個函式, 你按一下拿到一個值,再按一下可能不一樣。

所以「X 等於多少」這個問題本身是壞掉的 —— 機器不等於任何一個數字。 能問的是「X 吐出 3 的機率是多少」、「X 的平均是多少(E[X])」、 「X 有多散(σ)」。

本頁一律用大小寫區分:大寫 X 是機器,小寫 x 是它吐出來的產品。 機器的性質叫參數(希臘字母,死值),產品算出來的叫統計量(拉丁字母,會抖)。 ③ 節有一張並排的對照表。

期望值是不是「最可能發生的值」?

不是。那個叫眾數(mode)。期望值是加權平均E[X] = Σ pi vi, 跟「平時考 30%+期末 70%」算學期成績是同一個模具,只是權重換成機率。

三個一眼就破的反例:① 公平骰子的 E[X] = 3.5,骰子沒有 3.5 這一面; ② ③ 節的雙峰機器 E[X] ≈ 5.75 萬, 而那個薪水一個員工都沒有(工程師一坨在 3.6、主管一坨在 8.4,5.75 是中間的山谷); ③ 平均每個家庭 1.8 個小孩。

期望值的正確語意是:同樣的事重複無限多次,每次結果加起來除以次數的極限。 它是「長期平均」,不是「這一次會怎樣」。④ 節那個支點就是它的幾何身分 —— 機率當砝碼掛在數線上,期望值是讓板子平衡的那一點(跟 02 關的翹翹板同一張圖)。

母體跟樣本怎麼分?我手上的資料是哪一個?

幾乎永遠是樣本。判斷法:問「我想講的結論,是關於這幾筆資料本身,還是關於它們背後那個更大的東西?」

  • 「這七個人的平均薪水是 5.0 萬」→ 只講這七個人 → 這七個就是母體,算完就結束,不需要統計學。
  • 「這家公司的平均薪水大約 5.0 萬」→ 想講整家公司 → 那七個是樣本,你需要誤差、需要 n−1、需要 SE

真正的分野不在資料,在你想講多大的話。同一份資料,你講小話它是母體,講大話它就變樣本。 而工程上幾乎沒有人只想講小話:你看昨天的延遲,是為了預測今天;你跑 A/B test,是為了決定要不要全量。 只要結論會外推到沒蒐到的資料上,你手上就是樣本。

符號上的規矩:母體用希臘字母(μ、σ、σ²),樣本用拉丁字母(x̄、s、s²)。 本頁的圖一律紫色 = 母體真值綠色 = 樣本估計值

為什麼變異數要除 n − 1,不是除 n?

短答:因為你用的中心 是這組資料自己算出來的,它天生比真中心 μ 更貼近這組資料,所以量出來的散開每一次都偏小。乘上 n/(n−1) 剛好補回來。

證據:⑥-B 節的模擬跑 2000 輪、每輪抽 5 個, 骰子機器真值 σ² = 2.917: ÷n 的平均是 2.324(真值的 79.7%,偏小 20%), ÷(n−1) 的平均是 2.905(真值的 99.6%,對準)。 理論偏差倍率 (n−1)/n = 4/5 = 80%,實測 79.7% —— 對上了。

為什麼剛好是 −1 而不是 −0.5 或 −2:因為你「花掉」了恰好一個自由度去估那個中心。 n 個數字本來有 n 個自由度,但偏差 (xi − x̄) 這 n 個數加起來恆為 002 關的支點證過),所以只要知道前 n−1 個,最後一個就被鎖死了 —— 真正獨立的資訊只有 n−1 份。

什麼時候該用 ÷n:當你真的在算母體的變異數(拿到全部資料、不外推), 或者你已經知道真中心 μ、不需要用 代替它。 程式庫的旗標叫 ddofnp.var 預設 0、pandas.var 預設 1、 本站 LAB.M.variance 預設 1。跨庫比數字前先確認這一格。

那我到底要抽多少才夠?

這個問題沒有普世答案,但有一個能算的版本:倒過來從「你想要多精確」去解 n

SE = σ / √n ≤ 你能忍受的誤差 e  ⟹  n ≥ (σ / e)² 兩邊平方就得到 n。注意平方 —— 精度要求嚴一倍,樣本要四倍。

舉本頁的薪水機器:σ = 1.64 萬。 想把平均薪水估到 ±0.2 萬(也就是 2·SE = 0.2SE = 0.1), 需要 n ≥ (1.64/0.1)² ≈ 269 人。想估到 ±0.1 萬 → 要 1076 人。 精度要求砍一半,人力要四倍。

三個實務上的補充:① 你還不知道 σ,所以先抽一小批估它(pilot),或用最保守的猜值; ② 如果你要估的是變異數分位數(p99),要的 n 比估平均大得多 (⑥-A 那張下圖與 ⑪ 節的 p99 那段就是這件事); ③ 資料不獨立的話,有效 n 遠小於你算的 n(坑 4)。

這跟我寫的 A/B test 有什麼關係?

關係是「全部」。A/B test 的每一個零件都是這一關的東西換個名字:

A/B test 的說法這一關的說法
對照組的真實轉換率母體參數 μA(永遠看不到)
看板上顯示的 4.0%樣本統計量 A(會抖)
「這個差異顯著嗎」差距 B − x̄A 有沒有大過它自己的 SE
樣本數計算器σ/√n ≤ 你想偵測的效果
信賴區間x̄ ± 2·SE(⑧ 節那對綠括號,⑨ 節給它正名與正確讀法)
p-value < 0.05「假設沒差,光靠雜訊生出這麼大的差」的機率小於你設的門檻(⑪ 節
「偷看一下就停」是作弊⑦ 節那條會亂晃的綠線,總有瞬間晃過門檻

具體算一次(⑪ 節有完整版):轉換率 4%、每組 2000 個 session, σ = √(0.04 × 0.96) ≈ 0.196,每組 SE ≈ 0.44%, 兩組相減的誤差 ≈ 0.62%。所以「新版 4.4% 對舊版 4.0%」這 0.4% 的差距, 比雜訊還小,什麼都證明不了。

一句話帶走:A/B test 不是在比兩個數字,是在比「兩個數字的差」跟「這個差自己的抖動」。 後者就是這一關的 SE

為什麼本頁的亂數要寫死 seed?這樣不是就不隨機了嗎?

頁面上所有模擬都用一個五行的 PRNG(mulberry32),同一個 seed 一定吐出同一串亂數。 這是刻意的,理由有兩個:

  • 解讀句才不會說謊。如果每次重新整理數字都不一樣,我在正文寫「實測 79.7%」就會變成謊話。 現在你可以自己核對:⑥-B 選骰子、n=5、R=2000、預設 seed, 讀數盤一定顯示 2.324 / 2.905。
  • 「隨機」跟「不可重現」是兩件事。好的模擬要能重跑 —— 這也是所有 ML 訓練腳本都會設 random_seed 的理由:你要能在別人的機器上得到同一個 bug。

想看別組結果就按「換 seed」,畫面上的 seed 數字會跟著變。 換 seed 之後結論不會變(÷n 一樣偏小、大數法則一樣收斂)—— 那才是「這是規律不是巧合」的證據。

E[X + Y] = E[X] + E[Y] 要不要獨立?E[XY] = E[X]E[Y] 呢?

加法不用,乘法要。這是全站最容易誤用的一組條件,所以 ⑤ 節 給了你一顆按鈕直接切三種關係去驗。

加法為什麼不用條件:因為 E[⋯] 就是「乘機率再加起來」, 而加起來的順序本來就可以換。不管 XY 怎麼糾纏, 「先各自平均再相加」跟「先相加再平均」永遠一樣。 把 ⑤ 節切到 Y = 7 − X(糾纏到極限)那一列還是打 ✓。

乘法為什麼要:骰子 Y = X 的時候 E[XY] = E[X²] = 15.167,而 E[X]E[Y] = 12.25 —— 差了 2.917,剛好是 Var(X)。那個差就是 Cov(X,Y)獨立的意思正是「這個差是 0」

連帶記住 Var(X+Y) = Var(X)+Var(Y) 也只在獨立(更準確說是 Cov = 0)時成立。 一般式要加 2Cov,那是 機率統計 03 關的主線。

「95% 信賴區間」到底在說什麼?可以說「μ 有 95% 機率在裡面」嗎?

不可以。μ 不是隨機的 —— 它是一個死值。 ⑨ 節那張圖把這件事畫成一句話: 40 條區間在抖,中間那條紫線一動也沒動。

正確讀法:「這套造區間的程序,長期而言 95% 的機率造出蓋到 μ 的區間。」 95% 是程序的良率,不是你手上這一段的機率。你手上那一段要嘛蓋到(機率 1)、 要嘛沒蓋到(機率 0),而你永遠不會知道是哪一個 —— 圖上紅色那幾組的區間看起來跟綠色的一模一樣正常。

還有一個實務上的陷阱:σ 你也不知道,只能用 s 代替。 這時臨界值不是 2 而是 t(自由度 n−1,尾巴厚一點所以比 2 大)。 n = 5 的時候是 2.776,硬用 2 的話覆蓋率會掉到 85% 附近 —— ⑨ 節那顆「用 2 / 用 t」的按鈕就是在給你看這個差。 n ≥ 30 之後兩者差不到 5%,那才是「可以用常態近似」的意思。

這關留下什麼洞 → 下一關補

你現在有九台機器(骰子、右偏薪水、雙峰,加上 ③ 節那六台有名字的),而機器有無限多種: 你可以隨便畫一張機率表出來。那為什麼全世界的統計課本、你讀過的每一篇論文、 每一個 scipy.stats 的例子,都在講同一台機器 —— 常態分布(normal / Gaussian)?

線索已經在 ⑧ 節那張圖裡了,你可能已經注意到: 我餵給它的是右偏的薪水機器,可是 n 一大, 「樣本平均」那疊直方圖就變成漂亮對稱的鐘形。餵雙峰機器也一樣。 不管原料多歪,一旦你開始取平均,出來的東西就往同一個形狀塌。

那個形狀就是常態分布,這件事叫中央極限定理下一關會:把直方圖的縱軸從「次數」換成「機率密度」 (這樣才能講 機率統計 05 關那個「68% 涵蓋率」), 給常態分布一個式子,然後把 05 關用過但沒解釋的 z-score 講清楚 —— z = (x − μ)/σ,也就是「離平均幾個 σ」這把通用的尺。