統計方法篇 - 你以為工具是對的,但工具的假設被你違反了

「運動畫刊封面詛咒(Sports Illustrated Jinx)」在體育迷之間流傳多年:只要運動員登上《運動畫刊》的封面,接下來表現就會變差,甚至受傷。無數球員因此拒絕上封面。

能上封面的運動員,通常是因為他們正處於職業生涯的「極端高光時刻」。但在統計學上,極端值之後往往緊接著就是向平均值的回歸,他們不可能永遠維持在運氣和實力的頂點。表現變差不是因為上了封面,而是因為那個時刻本來就特別,之後會回歸正常。

這就是統計方法陷阱的典型面孔:工具本身是合法的,但你誤解了工具告訴你的事,或者工具的假設已經被你不知不覺地違反了。這和前幾篇的陷阱性質不同:確認偏差你可以靠自我察覺來對抗,辛普森悖論你可以靠分組數據來識別,但這些方法層面的陷阱,如果你不懂那個工具底層的統計邏輯,你甚至不知道自己已經踩到了地雷。


31. 回歸謬誤(Regression to the Mean):把均值迴歸誤認為是你的干預有效

諾貝爾獎得主 Daniel Kahneman 曾講過一個故事:一位飛行教官反對「讚美學員」,理由是「每次我讚美學員做出的完美著陸後,下一次他們通常會表現得更差;反而是我大聲斥責他們糟糕的著陸後,下一次他們就會進步。所以懲罰比讚美有效。」

教官犯了回歸謬誤:

  • 學員做出「完美著陸」(極端好)後,下一次表現回歸平均(變差)是高機率事件,與你是否讚美無關。
  • 學員做出「糟糕著陸」(極端差)後,下一次表現回歸平均(變好)也是高機率事件,與你是否斥責無關。

在技術領域,這個錯誤出現在故障後的覆盤裡:「系統發生嚴重故障(極端值)後,我們實施了緊急補丁 A,隨後系統穩定性顯著回升。補丁 A 有效。」不一定。系統在極端故障後本身就有回歸正常的趨勢,除非是永久性損壞。沒有對照組,你無法分辨是補丁有效,還是均值迴歸自然發生了。

識別方式:如果你的干預總是發生在「情況特別差」的時候,然後「情況改善了」,你至少需要一個對照組才能說任何話。

32. 多重共線性(Multicollinearity):變數之間太相似,模型說不清誰是原因

在回歸模型中,如果預測變數之間高度相關,模型就無法準確估計每個變數的獨立影響。係數會變得不穩定,甚至符號反轉(本來應該是正相關,估計出來是負數)。

預測房價:面積和房間數是高度相關的變數(房子越大,通常房間越多)。當你把兩者都放進回歸模型,模型就陷入了困境:到底是面積還是房間數在影響房價?它給出的係數估計會跳動、不穩定,你沒有辦法說「每增加一個房間,房價增加 X 元」,因為面積的影響和房間數的影響已經糾纏在一起無法分開。

在機器學習的特徵工程中,多重共線性的危害常被低估:你以為加入更多相關特徵讓模型更「豐富」,實際上你在讓模型更混亂,解釋性歸零。

33. 潛在變數偏差(Omitted Variable Bias):遺漏了一個重要的解釋變數

這是模型層面的混雜因素:你的回歸模型遺漏了一個同時影響 X 和 Y 的變數,模型就把那個遺漏變數的影響,錯誤地分配給了你放進去的其他變數,導致係數偏移。

假設你想研究教育程度(X)對薪資(Y)的影響,但你忘了控制「家庭社會經濟地位」(遺漏變數 Z)。Z 同時影響了教育程度(有錢有資源的家庭更容易讓孩子受高等教育)和薪資(社會資本、人脈的直接效果)。結果,你的模型對教育程度的係數估計會偏高,因為它把「家庭背景」帶來的薪資優勢也算成了「教育程度」的功勞。

潛在變數偏差是「你不知道你不知道的」那類問題:你沒有把 Z 放進去,你看不到 Z 的影響,你甚至不一定意識到 Z 的存在。解藥是建立理論框架(先想清楚有哪些可能影響 Y 的因素),而不是只看數據。

34. 過度擬合(Overfitting):模型背熟了考古題,無法應對新試題

過度擬合的模型在訓練數據上表現完美,在新數據上一塌糊塗,它學會的是「這批數據的雜訊和特定規律」,而不是「真實世界的潛在規律」。

想像你用 2019 年的用戶行為數據訓練了一個購買預測模型,模型在 2019 年的數據上準確率 97%。2020 年 COVID 讓所有用戶行為大幅改變,模型的表現立刻崩潰,因為它學到的「規律」,很大一部分是 2019 年那個特定時期的雜訊,而不是普遍的用戶行為邏輯。

常見的過度擬合信號:模型在訓練集上的表現遠好於驗證集;使用了過多特徵(尤其當特徵數量接近甚至超過數據點數量時);不同隨機種子跑出來的結果差異很大。

35. 數據洩漏(Data Leakage):未來的資訊洩漏到了過去的訓練裡

這是機器學習中最尷尬的錯誤,因為它的信號是「模型表現出奇地好」,而這看起來像是好消息。

假設你訓練一個 AI 來預測病人是否會得肺炎,準確率 99%,你覺得自己要改變醫療行業了。上線後模型完全失靈。檢查發現:訓練數據中有一個特徵是「是否服用抗生素」。在歷史數據中,只有確診肺炎的病人才會吃抗生素。模型發現了一條捷徑:「吃抗生素 = 肺炎」。但現實中,我們是想在病人吃藥之前預測病情,這個特徵在預測時根本不存在。

類似的洩漏形式在數據預處理中更常發生也更難發現:

  • 用全部數據(包括測試集)計算了歸一化的均值和標準差,然後再拆分訓練測試集,測試集的資訊已經滲入了訓練過程。
  • 用「最後登入時間」預測用戶流失:回測時已知,但模型上線後這個特徵在流失發生前根本不知道是什麼值。

模型表現好得離譜,不是好消息,是需要認真懷疑的信號。

36. 前瞻性偏差(Look-ahead Bias):你用了「當時不可能知道」的數據

前瞻性偏差是數據洩漏在時間序列分析和金融回測中的特定版本:你用「當時不可得的未來數據」去評估一個「當時可以執行」的策略,讓歷史表現看起來好得不現實。

金融回測最常見:你用「2020 年全年的完整數據」設計了一個交易策略,然後「測試」它在 2020 年的表現,但 2020 年 3 月的交易者不可能知道 11 月的數據。回測完美的策略,上線後通常一塌糊塗。

在 ML 時間序列預測中,這個問題出現在特徵工程:你計算了「過去 7 天的移動平均」,但如果這個計算包含了預測時間點當天的數據,就產生了前瞻性偏差。嚴格區分「預測點之前」和「預測點當天及之後」是時間序列建模的基本功。

37. 外推謬誤(Extrapolation Bias):你把模型用在它沒見過的地方

外推是把模型的預測延伸到訓練數據範圍以外。問題是:模型在它見過的數據範圍內表現良好,不代表它對範圍以外的情況也有效。

你在台灣用戶的行為數據上訓練了一個推薦系統,準確率和留存率都很好。你信心滿滿地在東南亞市場上線,效果慘不忍睹,因為東南亞用戶的行為模式、文化背景、使用情境和台灣用戶完全不同。模型從來沒見過那種數據,它的「智慧」在訓練分佈之外是無效的。

在趨勢預測中,外推謬誤的形式是把線性增長趨勢外推到永遠:「我們過去半年每月新增 1 萬用戶,三年後就有 360 萬用戶。」增長曲線從來不是直線,市場有邊界,競爭對手會出現,用戶獲取成本會上升。「把現有趨勢外推」是預測中最懶的做法,也是最容易出錯的做法。

38. P 值誤解(P-value Misinterpretation):99% 確定新功能更好?不是的

A/B 測試跑完了,p = 0.03。有人說:「我們有 97% 的把握新版本比較好!」

這是 p 值最普遍的誤解,在學術界都很常見,更別提產品開發圈。

p 值的正確定義:如果虛無假設(兩個版本沒有差異)為真,觀察到「這麼極端或更極端」的數據的機率。

p = 0.03 的意思是:如果兩個版本真的沒有差異,你跑出這樣結果的機率只有 3%。

不是在說:「虛無假設為真的機率是 3%」,也不是「新版本更好的機率是 97%」。這兩種解讀在邏輯上都是錯的,p 值是在假設虛無假設為真的前提下計算的,它沒有能力直接告訴你虛無假設的機率是多少。

一個實用的理解方式:p < 0.05 是在說「如果什麼都沒有改變,這麼巧的結果只有 5% 的機率出現」。它讓你有理由懷疑「什麼都沒有改變」這個假設,但不等於「新版本一定更好」。

39. 效果量忽視(Effect Size Neglect):統計顯著 ≠ 實務重要

當 n = 1,000,000 的 A/B 測試跑完,p < 0.0001(高度顯著),新版按鈕的點擊率從 2.0000% 提升到了 2.0001%。

這個結果在統計上是真實的,不是噪音。但 0.0001 個百分點的提升,值得為此增加代碼複雜度、維護成本和上線風險嗎?

統計顯著和實務重要是兩件不同的事。樣本量足夠大,任何微小的差異都可以達到統計顯著。這就是為什麼報告效果量(Effect Size),例如 Cohen’s d、相對提升率(Relative Lift),和 p 值同等重要,甚至更重要。

效果量忽視和第 40 條的「檢定力不足」是一體兩面:樣本太小,真實效果看不到(偽陰性);樣本太大,微小效果被放大成「顯著」(把噪音當訊號)。在設計實驗時,兩個問題都需要面對。

40. 檢定力不足(Underpowered Study):你沒有能力看見真實存在的效果

A/B 測試跑了幾百人,數據顯示兩個版本沒有顯著差異,團隊結論:「新功能沒效。」

但真相可能是:效果是真實存在的,只是你的樣本量太小,讓你沒有能力「看見」它。這就是偽陰性(Type II Error),也就是錯誤地接受了虛無假設。

功效分析(Power Analysis)的目的是在實驗開始前算清楚:在你預期的效果大小(Effect Size)下,你需要多大的樣本量,才能在效果真的存在的情況下以足夠的把握偵測到它。沒有做功效分析就開始 A/B 測試,是「在不知道自己視力有多差的情況下去看黑板」。

很多公司喜歡在看到「沒有顯著差異」後立刻停止測試,把這當作「功能無效」的證明。但「無法拒絕虛無假設」和「虛無假設為真」是完全不同的兩件事。

41. 多重比較謬誤(Multiple Comparisons):你跑夠多測試,必然會出現假陽性

假設你同時對 20 種不同的按鈕顏色做 A/B 測試,每個測試的顯著性閾值是 p < 0.05。純粹基於機率,即使這 20 種顏色真的對轉換率毫無影響,你預期也會有 1 個(20 × 5% = 1)恰好跑出 p < 0.05 的假陽性結果。如果你只報告那 1 個「顯著」的結果,你就宣稱找到了最佳按鈕顏色,但那只是數學必然,不是發現。

在沒有預設假設的情況下,隨意組合變數和時間區間跑統計,直到某個組合跑出「顯著」結果,然後倒過來設計一個解釋,這叫 P-Hacking。它不一定是刻意欺騙,更常見的是自我欺騙:你真的相信那個「顯著」的結果,因為你不知道自己已經跑了多少次測試。

解法:在實驗開始前就確定假設(Pre-registration);如果確實要做多重比較,使用 Bonferroni 校正或 FDR(False Discovery Rate)控制;對每一個「顯著」結果,認真問自己「我為了找到這個結果,在這之前跑了多少次測試」。


統計方法的陷阱有一個共同特徵:工具在技術上是合法的,輸出在數字上是正確的,但解讀是錯的。這讓它們比直接的謬誤更危險,因為你沒有理由懷疑。看到完美的模型準確率,看到 p < 0.05 的顯著結果,看到回測優異的交易策略,那個讓你應該停下來仔細查的信號,往往就是「這個結果看起來很完美」本身。