正解 C:p=0.021 < α=0.05 → 拒絕「兩組平均相等」的虛無假設、差異達統計顯著;equal_var=False=Welch t 檢定(不假設變異數相等)。本站 scipy 1.17.1 實跑(逆向工程 A 組 48 位/B 組 52 位、變異數比 3.9 倍):round(p,3)=0.021 一字不差、t=2.3644、df=76.7 帶小數(Welch 招牌)。A 認錯案型——獨立樣本硬用成對檢定,實跑 ValueError(48 vs 52 對不上);B 自創「砍半」規則——雙尾 p 直接與 α 比;D 把機率當秒數——實際差距是 26.1 秒,另外算。口訣:獨立找 ind、變異不等找 Welch——p 是機率,不是差距。
比較 A/B 兩組互相獨立使用者的平均停留時間是否有顯著差異(α=0.05),且兩組變異數可能不相等。下列程式與判讀何者正確?
from scipy import stats # 統計檢定工具箱 res = stats.ttest_ind(group_a, group_b, equal_var=False) # 獨立樣本 t 檢定(Welch 版) print(res.pvalue) # 輸出 0.021
把假設檢定想成一場法庭審判。被告是一句無聊的話:「A/B 兩組其實沒有差別」——這就是虛無假設 H0,開庭前先做無罪推定。接著檢察官呈上證據(兩組的資料),法官只問一個問題:「假如被告真的無罪(兩組真沒差),出現這麼懸殊證據的機率有多小?」——這個機率就是 p 值。實跑給你看:把 100 位使用者的組別標籤隨機重洗 10,000 次(H0 為真的平行世界),差距像本案這麼懸殊的只出現 224 次(2.24%)——夠罕見。最後看陪審團的底線:α=0.05 是社會願意「冤枉好人」的機率上限——p=0.021 < 0.05,證據罕見到超過底線 → 推翻無罪推定、判「有差異」(正解 C)。三個錯誤選項是三種法庭鬧劇:A 認錯案型(把「兩批不同的人」當成「同一批人前後測」——程式當場報錯);B 自創「底線砍半」的怪規則;D 把「證據的罕見程度」唸成「贓款金額 0.021 秒」。
equal_var=False=Welch:標準誤各用各的變異數、自由度 76.7 帶小數——手算三步與 scipy 一字不差。③ 雙尾 p 值已經涵蓋兩尾——直接與 α 比;「跟 α/2 比」是 B 的自創規則。點擊後出現漸進式說明:白話說明 → 說清楚一點 → 常見錯誤與考點。
點擊後出現漸進式說明。
五段,一段一段走完。右上角的「看位置」可以把這一段放回完整程式裡看。
from scipy import stats # SciPy 的統計工具箱 # A 組 48 位、B 組 52 位——不同使用者、互相獨立;變異數比 3.9 倍
檢定住在 scipy.stats(sklearn 管建模、scipy 管統計推論——兩個工具箱分工)。被告先驗明正身:A 組 48 位(平均 300.9 秒、標準差 35.6)、B 組 52 位(平均 274.8 秒、標準差 70.5)——不同的人、互相獨立(A 的死因埋在這)、且變異數差 3.9 倍(題目說「可能不相等」不是客套——這正是 equal_var=False 的出場理由)。
res = stats.ttest_ind(group_a, group_b, equal_var=False) # ind=獨立;False=Welch
函式名拆開讀:ttest_ind=independent(獨立樣本)——兩批不同的人各量一次;成對(同一批人前後測)才用 ttest_rel。equal_var=False=不假設兩組變異數相等——改用 Welch t 檢定:標準誤各用各的變異數、自由度用 Welch–Satterthwaite 公式(本題實跑 76.7,帶小數)。C 選項的後半句「equal_var=False 代表採用 Welch t 檢定」——逐字正確。
print(round(res.pvalue, 3)) # 實跑:0.021——與題目一字不差(全值 0.0206)
這個 0.021 不是抄題目的——本站逆向工程出一組真資料(48 vs 52 位、seed 掃描),讓 Welch 檢定跑出 round(p,3)=0.021 一字不差。p 值的身分證:「假如 H0 為真(兩組真沒差),出現至少這麼極端資料的機率」——它是機率,介於 0 與 1、沒有單位;「兩組差 0.021 秒」(D)從詞性上就錯了。
print(round(res.statistic, 4)) # 實跑:t = 2.3644 print(round(res.df, 1)) # 實跑:自由度 76.7——帶小數,Welch 的招牌
檢定統計量 t=2.3644:差距是標準誤的 2.36 倍——夠懸殊。自由度 76.7 是個彩蛋級的考點:Student t 的 df 是整數(n₁+n₂−2=98),Welch 的 df 帶小數(Welch–Satterthwaite 公式的產物)——考卷上看到 df=76.7 這種數字,就知道有人開了 equal_var=False。對照實跑:equal_var=True 時 p=0.0231、df=98——本題兩者結論相同,但別因此輕敵(03 節的病態案例天差地遠)。
se = np.sqrt(va/na + vb/nb) # 11.0506——各用各的變異數,不合併 t = (group_a.mean() - group_b.mean()) / se # 26.1 / 11.0506 = 2.3644 # df = Welch–Satterthwaite 公式 → 76.7;p = 2 × t 分布右尾 → 0.0206
黑盒子拆開驗貨:① 標準誤 se=√(s²A/nA+s²B/nB)=11.0506——注意兩組的變異數各算各的、不合併(這正是 Welch 與 Student 的分水嶺);② t=差距 26.1 ÷ 11.0506=2.3644;③ df 代 Welch–Satterthwaite 公式得 76.7、p=2 × t 分布右尾機率=0.0206。三個數字與 scipy 全部一字不差(np.isclose 三連 True)。
p 的本義(模擬 10,000 個 H0 世界)、與 α 的判決流程、B 的砍半謬誤——三回合開庭:
同一批資料、兩種算法對決——本題的溫和版、病態案例的殘酷版、手算的拆解版:
「A/B 測試」四個字容易讓人聯想到「成對」——把兩種案型攤開對質:
stats.ttest_rel(group_a, group_b) 當場 ValueError: Array shapes are incompatible for broadcasting(48 vs 52 根本配不成對)。A/B 測試的標準設計正是「隨機分流、互相獨立」——獨立樣本用 ttest_ind,A 選項連題幹的「互相獨立」四個字都沒讀。0.021 與 26.1 秒——兩個完全不同的東西,攤開來分:
t 檢定家族速查(考場最常考「選哪支」):
| 場景 | 函式 | 例子 |
|---|---|---|
| 兩組不同的人(獨立) | ttest_ind(a, b, equal_var=False) | 本題 A/B 測試(Welch 保險絲) |
| 兩組不同的人、確信變異數相等 | ttest_ind(a, b)(預設 True) | 教科書的 Student t |
| 同一批人、前後兩次 | ttest_rel(before, after) | 改版前後同一批會員的停留時間 |
| 一組 vs 已知常數 | ttest_1samp(a, popmean=300) | 本月平均是否 ≠ 300 秒的目標 |
# 對照組實跑:equal_var=True(Student)——本題溫和、病態案例天差地遠 print(stats.ttest_ind(group_a, group_b, equal_var=True).pvalue) # 0.0231(df=98 整數) # 病態案例(10 人 sd 86.7 vs 100 人 sd 9.8):Student 0.0087 vs Welch 0.4106
題幹白紙黑字「兩組互相獨立」——A/B 測試的標準設計就是隨機分流、兩批不同的人。成對檢定要「同一批人兩次測量」:實跑 ttest_rel(group_a, group_b) 當場 ValueError(48 vs 52 配不成對)。獨立找 ind、成對找 rel。
雙尾 p 值已經涵蓋兩條尾巴——判決永遠是 p 與完整的 α 比:0.021 < 0.05 → 拒絕。α/2 只活在「臨界值法」裡(兩尾各分 2.5% 去查 ±t₀.₀₂₅)——切的是 α 不是 p。順帶:0.021 其實也小於 0.025——B 連自創規則都套錯。
三個半句全對(實跑蓋章):p=0.0206、round 後 0.021 一字不差;0.021 < 0.05 → 拒絕 H0、達顯著(H0 世界實測只有 2.24% 這麼極端);equal_var=False=Welch——標準誤各用各的變異數、df=76.7 帶小數,手算三步與 scipy 一字不差。
p 值是機率——介於 0 與 1、沒有單位。實際差距要自己算:group_a.mean()−group_b.mean()=26.1 秒(Cohen's d=0.46)。兩個數字連量綱都不同;把 p 唸成秒數,報告會差出一千倍的世界觀。
再看一次同一道題。這次你手上有一句口訣了:獨立找 ind、變異不等找 Welch——p 直接比 α,它是機率不是差距。
res = stats.ttest_ind(group_a, group_b, equal_var=False) # 獨立+Welch print(round(res.pvalue, 3)) # 0.021 < α=0.05 → 拒絕 H0
八題,全部都是本題的延伸。答錯會直接告訴你錯在哪。
「假設檢定判讀」是中級科目二機率統計與資料分析的招牌考點,t 檢定、p 值、顯著水準輪流出場。最常見的六種問法:① 給程式與 p 值選正確判讀(本題——比法、案型、詞性三關);② 問 equal_var=False 是什麼(Welch——不假設變異數相等);③ 問 ttest_ind 與 ttest_rel 怎麼選(獨立 vs 成對);④ 問 p 與 α 怎麼比(直接比、不砍半);⑤ 問 p 值的定義(H0 為真時至少這麼極端的機率——不是差距、不是 H0 為真的機率);⑥ 問雙尾/單尾的差別。一句口訣:p 直接比 α——它是機率,不是差距。
四步。① 立假設:H0(虛無假設)=「沒有效果」的那句無聊話——本題「兩組平均停留時間相等」;H1(對立假設)=「有差異」(雙尾:不指定方向)。② 定底線:α=0.05——願意冤枉好人(H0 為真卻拒絕它)的機率上限,開庭前就要定好、不能看到 p 再調。③ 算證據:檢定統計量 t=2.3644 → p=0.0206。④ 判決:p < α → 拒絕 H0(「差異達統計顯著」);p ≥ α → 無法拒絕 H0——注意用詞:是「證據不足」、不是「證明兩組相等」(法庭無罪判決 ≠ 證明清白)。考場愛考第 ④ 步的措辭陷阱。
正解:「假如 H0 為真(兩組真沒差),抽到至少像手上這麼極端資料的機率」。本站用排列檢定把定義演給你看:強迫 H0 為真(100 位使用者的組別標籤隨機重洗)10,000 次,|t|≥2.3644 只出現 224 次=2.24%——與參數法 p=0.0206 對上。三大誤讀排行:① 「p 是 H0 為真的機率」——錯,p 的計算以 H0 為真為前提,不能反過來當它的機率;② 「p 是兩組的差距」——D 選項,機率沒有秒這種單位;③ 「p 大就證明兩組相等」——只能說證據不足。記法:p 是證據的罕見程度,不是效果的大小。
一個字:合併。Student t 假設兩組變異數相等,把它們合併成一個 pooled variance(df=n₁+n₂−2=98 整數);Welch 不做這個假設——標準誤 各用各的(√(s²A/nA+s²B/nB))、df 用 Welch–Satterthwaite 公式(本題 76.7 帶小數)。差多少?本題溫和(0.0206 vs 0.0231、結論相同);病態案例殘酷(實跑 10 人 sd 86.7 vs 100 人 sd 9.8):Student p=0.0087 判顯著、Welch p=0.4106 說證據不足——小組的大變異被合併稀釋、t 被灌水,df 更從 108 掉到 9.0。Welch 在變異數真相等時效率損失極小——統計學界的主流建議就是:獨立兩樣本 t 檢定,預設開 Welch。
有——但用在臨界值法:雙尾檢定把 5% 的冤枉配額分給兩條尾巴各 2.5%,查臨界值 ±t₀.₀₂₅(df),再看 t=2.3644 有沒有超出——這裡切的是 α。而軟體回報的雙尾 p 值已經把兩尾機率加總(p=2×單尾=0.0206),所以 p 值法的判決永遠是「p 與完整的 α 比」。兩套流程數學上等價(p < α ⟺ |t| > 臨界值)、混用就出事——B 把臨界值法的 α/2 錯接到 p 值上。加碼吐槽:0.021 其實也小於 0.025——B 連自己發明的規則都套錯結論,雙重死刑。
成對(paired)的定義:同一個受試單位、兩次測量——改版前後同一批會員的停留時間、同一批病人服藥前後的血壓——第 i 筆前測與第 i 筆後測天生綁定,檢定的其實是「差值的平均是否為 0」,兩組長度必然相同。A/B 測試恰恰相反:把流量隨機分流成兩批不同的使用者——互相獨立、人數通常不等(本題 48 vs 52)。實跑鐵證:stats.ttest_rel(group_a, group_b) 當場 ValueError: Array shapes are incompatible for broadcasting——配不成對連程式都過不了。順帶:成對設計若成立會更有檢定力(吃掉個體差異)——所以「能配對就配對」是實驗設計的話,但那要在收資料前就設計好,不是在算 p 時硬掰。
不代表——p 回答「是不是抽樣運氣」、效果量回答「差多大」。實跑警世:n=20,000 每組、差距只有 1.67 秒(Cohen's d=0.028,微小)——p=0.0051 照樣顯著:樣本一大,芝麻也顯著。所以正式報告兩個數字都要給:「A 組 300.9 秒 vs B 組 274.8 秒,差 26.1 秒(d=0.46 中等偏小);Welch t(76.7)=2.36、p=0.021 < 0.05,達統計顯著」。決策層面:26.1 秒的停留差距值不值得全面改版,是商業判斷——統計只負責說「這差距不像是運氣」。延伸工具:95% 信賴區間(差距的可能範圍)比單一 p 值資訊更多——考場偶爾也考。
四條線。「科目二統計線」:第 13 頁評估指標(分母判官)、第 16 頁圖表對帳、第 20 頁分位數、第 22 頁串流統計——本頁補上推論統計:從「描述資料」升級到「下統計結論」。「一字不差工法」:與第 25 頁 Apriori 同款——從題目的 0.021 逆向工程出真資料、讓 scipy 親口說出題目那一行。「不報錯的錯」:B、D 程式零修改、錯全在判讀——第 27 頁「四選項零報錯」的姐妹篇;A 反而是會爆的好錯。「A/B 測試生態」:本站 dr-abtest(設計端:隨機分流)與本頁(分析端:檢定判讀)合成完整流程——設計時分流、分析時 ind。