JOVANA
Explore Library Glossary Getting Started Three Levels Fields How it works Mission
Join the mission
All guides

自然實驗

當你無法隨機分派時,就讓世界替你做——工具變數、雙重差分,以及迴歸不連續。

自然實驗的核心構想

在前面的指南裡,我們學到證明因果的黃金標準是隨機對照試驗(randomized controlled trial):擲一枚硬幣來決定誰接受處理,讓兩組之間只因運氣而不同,於是之後出現的任何差異,就一定是處理造成的。但很多時候我們根本無法隨機分派。可能不合倫理、不合法、太過昂貴,或乾脆辦不到——你沒辦法隨機指派誰去抽菸、誰輟學,也沒辦法指派誰出生在經濟衰退期。

當我們放棄、改成直接拿「剛好接受了某處理的人」和「沒接受的人」相比時,就又一頭栽進前兩篇指南的陷阱:干擾(confounding)。再複習一次:干擾因子是同時影響處理與結果的「共同原因」,它會製造出一種假性、虛假的關聯(相關不等於因果)。經典例子:使用健身 App 的人比較健康——但也許是注重健康的人本來就既會下載這個 App、又會去運動,於是 App 被歸功於它其實從未造成的效果。

為什麼這能救我們?如果「決定誰接受處理」的那個東西,與各種干擾因子無關,那麼拿接受處理者和未接受者相比,就又成了一場公平的比較——我們看到的差異,也就又能被讀成因果效果。整個「準實驗」(quasi-experimental,意思是看起來像實驗、但分派並非刻意隨機)設計的精髓,就是找出處理上的某種變異來源,而這個來源能合理地與其他所有會影響結果的因素切割開來。

本篇每一種設計都在對抗的問題:干擾因子 U 是處理 X 與結果 Y 的共同原因,於是單純拿 X 對比 Y,就會被「後門路徑」X ← U → Y 汙染。

一張因果圖:一個箭頭從處理 X 指向結果 Y,另有一個干擾因子節點 U,箭頭分別指向 X 與 Y,標示出會讓天真比較產生偏誤的後門路徑。

最有用的三種自然實驗設計是:工具變數雙重差分,以及迴歸不連續。每一種都在世界中找到了一種不同的「意外隨機化」。我們會一個一個、配著真實數字認識它們,再回頭看看它們每一種都悄悄倚賴的假設。

工具變數:來自外部的一推

假設我們想知道:使用我們新的記帳功能,會不會讓人存更多錢?天真的比較完全沒救——有心存錢的人既會打開這個功能、也會多存錢,於是功能看起來很棒,原因卻和它本身毫無關係。而我們也沒辦法強迫任何人去用它。但我們可以耍一個花招:隨機寄信給一半的使用者,鼓勵他們試試這個功能。那封信,就是我們的工具(instrument)。

所謂工具變數(instrumental variable,常簡稱工具),記作 Z,是一個滿足以下條件的變數:(1) 它會把處理 X 往上或往下推一把;(2) 除了透過 X 之外,它沒有別的途徑去影響結果 Y;(3) 它本身形同隨機。一封隨機寄出的信完美符合:它會推高功能採用率、它除了讓人去用功能之外不該動到任何人的存款,而且因為我們隨機決定了誰收到它,它和每個人原本有多想存錢無關。

來看數字。在我們寄了信的使用者裡,40% 採用了這個功能,他們平均每月存 312 美元。在沒寄信的使用者裡,只有 20% 採用,他們平均每月存 300 美元。所以這封信做了兩件事:它把採用率提高了 20 個百分點(統計學家稱這為「第一階段」first stage),並把平均存款提高了 12 美元(稱為「縮減式」reduced form)。但別忘了——信本身不會動到錢。它之所以能提高存款,只可能是因為多帶動了那 20% 的人去用功能。所以這 12 美元,一定全是由那些被推動的使用者產生的。

於是我們做除法。如果這 12 美元的平均效果,完全是由多出來的那 20 個百分點採用率所產生,那麼每一位「被切換過去」的使用者,每月必定多存了大約 12 / 0.20 = 60 美元。這個比值——工具對結果的效果,除以工具對處理的效果——就是最簡單的工具變數估計,稱為瓦德估計式(Wald estimator)。

\widehat{\beta}_{\text{IV}}=\frac{\bar{Y}_{Z=1}-\bar{Y}_{Z=0}}{\bar{X}_{Z=1}-\bar{X}_{Z=0}}=\frac{312-300}{0.40-0.20}=\frac{12}{0.20}=60

瓦德估計式:信對存款的效果(縮減式,12 美元)除以它對採用率的效果(第一階段,0.20),得到功能本身造成的存款,約每月 60 美元。

import pandas as pd

# z = 1 if the user was emailed (the instrument)
# used  = 1 if they adopted the feature; saved = monthly savings in dollars
first_stage  = df[df.z == 1].used.mean()  - df[df.z == 0].used.mean()    # 0.40 - 0.20 = 0.20
reduced_form = df[df.z == 1].saved.mean() - df[df.z == 0].saved.mean()   # 312  - 300  = 12
iv_estimate  = reduced_form / first_stage                               # 12 / 0.20 = 60
print(iv_estimate)   # 60  ->  savings caused by the feature, for compliers
同樣的計算,用幾行 pandas 完成:第一階段、縮減式,然後相除。
  1. 找出或製造一個工具 Z,它會推動處理,但合理上只透過處理去影響結果(這裡是:隨機寄出的鼓勵信)。
  2. 第一階段:量測 Z 把處理改變了多少(這裡是採用率 +20 個百分點)。如果這個量很小,工具就「太弱」,估計會變得雜訊極大——到此為止別再算了。
  3. 縮減式:量測 Z 把結果改變了多少(這裡是每月存款 +12 美元)。
  4. 相除:工具變數效果就是縮減式除以第一階段(這裡是 12 / 0.20 = 60 美元)。

知名的真實工具運作方式完全相同。徵兵抽籤曾被用來研究服兵役對日後收入的影響;到最近大學的距離被當作「受教育年數」的工具;降雨量被當作某個經濟變數對另一個變數影響的工具。每一個之所以珍貴,正是因為很難說它能透過處理以外的任何途徑去碰到結果。

雙重差分:前後、實驗組與對照組

這裡是另一種形狀的意外實驗。我們公司從三月起在 A 區推出免運費,但鄰近的 B 區沒有。我們有推出前後的銷售資料。誘惑是只看 A 區:那裡每週銷售在三月前是 100 件、之後是 130 件,所以免運費一定加了 30 件。但三月對所有人來說世界都變了——春天來了、有一檔品牌行銷在跑——所以那 +30 之中,有一部分就算沒有免運費也會發生。

這正是 B 區的用途。B 區沒有免運費,但它每週銷售卻從 90 升到 110——這 +20 純粹是同樣那些季節性力量帶來的。那 +20 就是我們對「A 區若靠自己、沒有免運費會如何」的最佳猜測。所以真正由免運費造成的部分,是疊在這之上的額外上升:30 − 20 = 10 件。我們先取了一個跨時間的差,再取了「兩個差之間的差」——名字就是這麼來的。

\widehat{\text{DiD}}=\underbrace{(130-100)}_{\Delta\ \text{Region A}}-\underbrace{(110-90)}_{\Delta\ \text{Region B}}=30-20=10

雙重差分估計:實驗組的「前到後」變化,減去對照組的「前到後」變化。

一張圖看懂雙重差分:拿對照組的趨勢,作為實驗組的反事實(counterfactual),而疊在那條投影趨勢之上、被拉開的缺口,就是估計出來的因果效果。

一張折線圖,x 軸是時間。介入前,實驗組與對照組兩條線大致平行上升。在一條虛線(介入時點)之後,實驗組那條線跳到它的平行投影之上;實驗組線與那條虛線反事實之間的垂直缺口,被標示為雙重差分效果。

這裡的一切都建立在一個我們永遠無法完全證明的信念上:若沒有這個變動,A 區會與 B 區平行移動。這就是「平行趨勢」(parallel trends)假設。我們可以檢視三月之前的那段時間來增加信心——如果這兩區早就已經漸行漸遠,那平行趨勢就很可疑,方法也就出了問題。把推出前的趨勢畫出來,是一份雙重差分研究能給你看的、最重要的單一診斷。

# treated = 1 for Region A, 0 for Region B;  post = 1 after the March rollout, 0 before.
# The coefficient on the treated:post INTERACTION is exactly the difference-in-differences estimate.
fit <- lm(sales ~ treated + post + treated:post, data = df)
summary(fit)$coef['treated:post', ]   # estimate = 10  (the causal lift from free shipping)
雙重差分通常用迴歸來跑:建一個「實驗組」旗標和一個「之後」旗標,讀它們交互項的係數。它等於手算結果,但還順便附送你一個標準誤與信賴區間。

一個著名的真實例子:經濟學家 David Card 與 Alan Krueger 拿提高了最低工資的紐澤西州,與沒有提高的鄰州賓州,比較速食業就業——在調漲前後各看一次。雙重差分讓他們得以分離出這項政策的效果,而他們發現就業並沒有像簡單理論所預測的那樣下降,這個結果重新形塑了一場長年的辯論。

迴歸不連續:恰好在門檻之上

現在是第三種自然實驗,藏在帶有「明確門檻」的規則裡。假設一筆獎學金頒給每一位考試考到 80 分以上的學生。是獎學金造成了較高的畢業率,還是高分者本來就會畢業?拿考 95 分的學生和考 60 分的學生相比毫無希望——他們有上百種不同。但魔法在這裡:考 79 分的學生和考 81 分的學生,本質上是同一種人。在一場有雜訊的考試裡,差那一分基本上是運氣。然而 81 分拿到獎學金,79 分沒有。

所以就在門檻上,誰接受處理形同隨機。分數稱為「驅動變數」(running variable),80 是切點(cutoff),而處理在你一跨過它的瞬間就開啟。我們在切點兩側各對結果配一條趨勢線,量測恰好在 80 分處的跳躍——也就是那個不連續(discontinuity)。假設畢業率在切點正下方約為 55%、正上方約為 67%:這 12 個百分點的跳躍,就是獎學金對「切點附近學生」的因果效果。

\tau=\lim_{x\downarrow c}\mathbb{E}[Y\mid X=x]-\lim_{x\uparrow c}\mathbb{E}[Y\mid X=x]

用文字說:取結果趨勢在分數 X 從正上方逼近切點 c 時的值,減去從正下方逼近時的值,那道垂直缺口就是效果。這裡那道缺口約為 67% − 55% = 12 個百分點。

迴歸不連續:在切點兩側各對結果配一條直線(或平緩的曲線)。恰好在切點處、兩條配適線之間的垂直缺口,就是估計出來的因果效果。

一張散布圖,y 軸是結果、x 軸是驅動變數,切點處有一條垂直線。左側的點沿著一條配適線,右側的點沿著另一條配適線;兩條線在切點處並未相接,它們之間的垂直跳躍被標示為效果。

一旦你開始留意,現實中的門檻無所不在。勢均力敵的選舉是最愛:以 0.1% 險勝的候選人,相對於以 0.1% 落敗的候選人,形同隨機,這讓研究者得以研究「當選任職」的效果。法定飲酒年齡 21 歲也被同樣運用——拿剛滿不到 21 歲的人和剛過 21 歲的人相比——來估計取得酒精對死亡率的影響。

每種設計賴以成立的假設

這些方法的每一種,都是用「一個你必須去論證、而非單靠計算就能繞過的假設」,買來它的因果可信度。以下用白話把它們列出來,並附上各自的壓力測試方式。把這一段當成合約上的細則來讀。

工具變數需要三件事。相關性(relevance):工具確實會推動處理——這一點可檢驗,它就是第一階段;而弱工具(第一階段很小)會讓估計被雜訊撐爆。排除限制(exclusion restriction):工具只透過處理影響結果——這一點完全無法從資料檢驗,純粹是論證(我們那封信除了讓人去用功能之外,不能以任何途徑改變存款)。以及獨立性(independence):工具與干擾因子無關——一封隨機寄出的信,依其設計本就滿足這點,但像「到大學的距離」這種聰明工具,卻可能悄悄與家庭財富相關。

雙重差分最重要的是倚賴平行趨勢:若沒有處理,實驗組與對照組會平行移動。這一點部分可檢驗——把推出前的時段畫出來、看看趨勢是否相符——但永遠無法完全證明,因為「處理之後的反事實」正是我們看不到的東西。它還需要:在同一時刻沒有別的衝擊只打到實驗組,以及群體組成穩定、實驗組不會外溢影響到對照組。

迴歸不連續倚賴連續性(continuity):其他所有會影響結果的因素,都必須平滑地穿過切點,這樣在 80 分處唯一跳躍的東西就只有處理。它還需要切點附近沒有操弄或分流挑邊——可用上面提到的密度檢定來查——而且你必須記住,估計只局部適用於切點附近,就這樣,沒得商量。

批判性地閱讀準實驗研究

你會不斷遇到這些設計——在新聞標題裡、在政策報告裡,也在你自己團隊的分析裡。以下是一套簡短、實用的流程,讓你在閱讀時不被唬弄。每一次、在你允許自己相信結論之前,都把它跑一遍。

  1. 說出變異的來源。指出工具、推出時點,或切點。如果你找不到任何一個,那這多半只是一場披著華麗名字的普通相關性比較。
  2. 問它是否真的形同隨機。還有什麼可能與那個變異相關?被寄信的那組一開始就不一樣嗎?A 區在三月是不是也另外有一檔促銷?學生能不能把分數推過 80?
  3. 找出假設檢驗。雙重差分要有推出前趨勢圖;工具變數要有回報的第一階段強度;迴歸不連續要有密度/操弄檢查;任何設計都該有一張平衡表。一份這些都沒有的研究,是在要求你盲目信任。
  4. 問這是誰的效果。工具變數和迴歸不連續給的是局部效果——順從者,或切點附近的人。別不聲不響地把它推廣到所有人。
  5. 讀區間,別只看那顆星星。信賴區間會顯示與資料相容的整段效果範圍;一個微小的 p 值掛在一個微不足道的效果上,雖然「統計顯著」,實務上卻可能毫無意義。
  6. 問效果是否大到值得在意。統計顯著與實務重要性並不是同一回事——永遠把估計換回決策者真正在乎的真實單位。

自然實驗是整個資料分析中最強大的構想之一。它讓我們得以對雜亂、無法隨機的真實世界——薪資、教育、健康、公共政策——做出誠實的因果主張,而在那些地方,一場乾淨的隨機試驗往往遙不可及。但它們的力量是向假設借來的。帶著謙遜使用、並狠狠壓力測試,它們能把世界的種種意外,化為近乎一場真實實驗的真相機器。草率使用,它們就只是穿著實驗白袍的相關性。下一篇指南接著談應用工具箱——配對與傾向分數——用於連一個整齊的自然實驗都遍尋不著的時候。