Causal Inference:因果革命與 Crash course in causality 筆記

Youngmi huang
13 min readMay 5, 2021

本篇由因果革命 ( The Book of Why ) 這本書做為啟發,整理書中提到的觀念,並且搭配 Coursera 上 Penn University 開的課程「A Crash Course in Causality: Inferring Causal Effects from Observational Data」當中關於 Causal Inference 領域的知識筆記,由於因果領域知識量非常龐大,以下僅萃取部分精華,如果對因果有興趣的朋友建議可以閱讀原書 or 直接從 Coursera 課程開始入手。也歡迎和我一起協作這份 Awesome-Causal-Inference 清單 (github)。

起源

先從作者開始

Judea Pearl 是因果圖 ( Causal Diagrams )之父,現在 UCLA 擔任教授,他在 1995 年發明了貝氏網絡( Bayesian Network),並在 2012 年得到圖靈獎。Pearl 的主要研究領域圍繞在 Causality 與 Probabilistic reasoning,是近代史當中將因果推斷發揚光大的大佬(書中有不斷強調因果關係與統計頻率派學家之間研究主流的糾葛,蠻有趣的)。

因果革命這本書在 2018 出版,2019 年中文翻譯出版,可以說是他畢生研究 Causal Inference 的精華結晶。我在閱讀此書之後也整理了各章節的筆記放在 Notion。內容適合初踏入因果推斷研究者的敲門磚,這本書很棒的一點是,由於 Pearl 是學者,因此整體脈絡很清晰、文獻的延伸 reference 非常豐富。

Pearl 相關連結

統計學告訴我們:相關不等於因果,但卻沒有說因果到底是什麼。

所以因果 ( Causality )是什麼?

P(Y | do X=x)

以 Binary 的問題舉例,簡言之就是做了 X=1 與做了 X=0 得到的潛在結果的差異會是什麼。主要起源於生物學領域,用於研究基因與疾病之間的關聯以及藥物的效用/副作用實驗等,也可以應用在客群/行銷分析、反欺詐模型是否有效阻擋黑客等場景進行 A/B testing 或是隨機對照實驗(Randomized Controlled Trial)。

隨機對照試驗的基本方法是,將研究對象隨機分組,對不同組實施不同的干預,在這種嚴格的條件下對照效果的不同。 — Wiki

因果效應 Causal Effect

針對同一群體,A是一個干擾/介入因子 (Intervention) ,以用藥與否為例,假設用藥與不用藥只會產生兩種潛在結果:A=0 的世界一是不用藥的群體,A=1的世界二是用藥群體,兩個群體都會對應到潛在結果 Y0、Y1,其因果效應為 Y1- Y0。若我們考慮平均因果效應,則可以表示成 E (Y1- Y0) 。

主要發展背景脈絡

1.路徑圖-Wright-生物學領域

美國統計學家 Sewall Wright 在 1920 年代以天竺鼠的實驗,畫出變量對毛色變異的影響路徑圖,首先證明『相關不等於因果』這句名言應該改成『某些相關確實意味者因果』。在萊特的實驗中得出的結論是:假想的發育因素(D)比遺傳(H)更重要,在一群隨機培育的天竺鼠當中,毛色變異有 42%出自於遺傳,58% 出自於發育; 在近親繁殖的家族中,只有 3% 毛色變異出自於遺傳,有 92% 是出自於發育。

以路徑圖的方式,判定 D、E、H 三種變量對天竺鼠毛色變異的影響強度

2. 虛擬事實模型 (Rubin Causal Model, RCM)-Rubin

由美國統計學家 Donald Rubin 提出,又稱為 Neyman-Rubin Causal model,是基於潛在結果(Potential Outcome)框架下研究因果效應( Causal Effect )的統計方法。以用藥與否進行該藥是否有效的評估,由於 Causal Effect 不可觀測,Yt(u) 代表在單位(unit) 服用該藥的潛在結果,Yc(u) 是對照組,通常是未服用該藥的潛在結果,其中的差值即是量化不可觀測的因果效應。此外,觀察用藥與否在個體單位上的因果效應後,我們可以估算出該測試藥物在整體上的平均因果效應 ( Average Causal Effect ) ,描述該藥物在實驗組/對照組上的差異。與 RCM 模型有關的因果假設我們會在後面介紹。

Wiki Page 對 RCM 的說明與舉例

3. 因果圖 (Causal Diagram/Causal Network)-Pearl

Pearl 在書中提到了,我們能將感興趣的因果問題以因果圖表示,書中提到的一個典型的例子是吃藥對心臟病的影響,而高血壓是一個中介變量。也就是吃藥會直接導致心臟病 (Drug → Heart Attack) 或是透過高血壓作為中介的路徑導致心臟病 (Drug → Blood Pressure → Heart Attack) 。

此外,在 COVID-19 爆發後,研究學者 Dana 借鑒了 Pearl 的因果圖探討了種族與年齡對 COVID 致死的實際案例。Dana 使用了由 CDC 提供的數據(2020/06/30)畫出了以下兩張圖顯現,似乎白人在整體上有更高的 Covid 致死率。

2020/07/06 Race, COVID Morality, and Simpson’s Paradox

隨後,他以因果圖進行路徑分析,將種族對 COVID致死率的路徑分為究竟是種族基因導致了COVID致死 ( Race → Death),或是種族基因透過了年齡這個路徑而導致了 COVID致死 ( Race → Age → Death)。

除了年齡 0–4 歲以外,各年齡層白人的致死率並無較高,或許是因為白人普遍偏老,導致了看似整體上,白人容易有 COVID 致死的偏差,不過 0–4歲這個區間的白人致死率偏高,是一個值得研究的方向。此外,研究中也提到了這批數據有缺失的問題,因為有 51% 的數據沒有相關的種族資訊。如果對這個實驗有興趣,可以直接在部落格上看到實驗細節 (Title: Race, COVID Mortality, and Simpson’s Paradox)。

因果推論的概念介紹

1. Junction 是建構因果圖/因果網絡的最小單位

Junction 分為三種,從書中擷取的例子如下:

(1) 鏈: A → B → C:在鏈當中,B 是把 A 的影響傳達給 C 的機制或是『中介變項』。

以『起火 →冒煙 →警報』為例,冒煙是中介變項,將起火的影響傳達給警報,所以我們也許該把『火警』改稱為『煙警』。在這個例子中,冒煙(B) 把起火 (A) 跟警報( C )隔開,也就是只要冒煙 (B=1),不管起火與否 (A=1 or A=0),警報都會響 (C=1)。

(2) 分叉 ( Fork ): A←B →C : B 是 A 和 C 的共同原因或是干擾因子,也就是 A & C 都能被 B 解釋(已知 B 時,A & C 條件獨立)。

書中的例子給到一個問題:鞋子尺寸越大,代表閱讀能力越好嗎?作者將這個問題轉化為:『鞋子尺寸大小 ← 兒童年齡 → 閱讀能力』,兒童年齡可以解釋鞋子尺寸大小 or 閱讀能力,e.g. 年齡越大,鞋子尺寸 or 閱讀能力越好。但如果我們只關注在 7 歲兒童,則鞋子尺寸大小 (A) 與閱讀能力( C ) 無關。因為兒童年齡 (B) 這個共同原因被阻斷了。

(3) 衝突 ( Collider ): A →B←C : B成立的情況下,A 和 C 衝突。

這一種類型的連接跟自圓其說效應 ( Explain-away Effect ) or 衝突偏差 ( Collider Bias )有關,舉一個例子:當我們將名人為何有名,與他的才華與外貌做聯想時,可以將這個問題表示如下:『才華←成名 →外貌』。我們很常在留言區看到網友評論,某某名人 A 很會演戲,外貌不需優於一般人;名人 B 不會演戲,那他會紅一定就是靠臉。已知結果成名 (B=1) 時,才華和外貌反相關。當然現實生活中,也是有才華和外貌雙全的例子,這裡只是書中 Pearl 為了讓讀者更好理解衝突這個連接類型的簡單舉例。

2. 四個關於因果性的假設前提

衡量因果效應 ( Causal Effect ) 時,為了估計因果效應,有以下幾種假設:

(1) Stable Unit Treatment Value Assumption ( SUTVA )

每一個個體都是獨立的,都會有其對應的潛在結果 (Potential Outcome),我的潛在結果不會受到其他人的影響。例如:我打完疫苗會不會有副作用只跟我打/不打有關,跟其他人打完有無反應無關。

(2) Consistency

個體 i 的用藥與否 (Xi=1 or Xi=0) 所導致的潛在結果和觀察到的結果是一致的。

(Source: how do you interpret the consistency assumption in mathematical terms?)

(3) Ignorability

可表示成 Y0, Y1 ⊥ A|X。代表針對變量 (X) 相同的群體是否接受用藥實驗 (A=1 代表接受) 與潛在結果 (Y0, Y1) 互相獨立。

例如:如果我們對一種降血糖的藥進行實驗,年齡 (X) 較老的人會更傾向於接受藥物 (A),年齡越大越有可能用藥,A和 X 是正相關的,同時,年齡越大,會有高血糖的潛在可能也越高,因此 X 與 Y 也是正相關的,在這個例子中,A 與 (Y0,Y1) 並不獨立。但對於年齡 (X) 取值相同的人,是否會接受用藥實驗可以看作是隨機的。

(4) Positivity

要求對於 Xi 的所有取值存在 0<Prob(A=1|X=x) <1 。例如當一部分人無法接受用藥測試時(例如孩童),我們無法通過歷史數據去分析這個藥對孩童群體的效果。此假設在確保實驗的隨機性,讓每一種潛在結果的機率為正值。

3. 因果階梯:關聯 →介入 → 反事實

因果革命 (P37)
  • 介入

以干擾因子 ( Confounding ) 進行執行對照實驗。例如本書提到的:前門調整、後門調整,和工具變項。我們可以藉由這些方法,了解介入對某個群體的平均因果效應。

  • 反事實 ( Counterfactual )

直觀的理解是,做/不做會怎麼樣。反事實目前在科學界最風行的運用是中介分析(Mediation analysis),中介是把處理效應傳遞給結果的變項,主要目的在於區分直接效應(不經過中介變項)和間接效應。書中舉了吸菸的例子:吸菸 →焦油 →癌症(焦油是中介變項)抑或是吸菸 →癌症兩種路徑。若是第一種經過焦油作為中介,那麼吸電子菸有可能消弭癌症風險,但若吸菸不經過焦油這個中介 or 經由另一種中介變項導致癌症,那麼電子菸仍然無法解決這個問題。

如果我們能量度阻斷所有後門路徑的變項,就能藉由後門調整公式得知介入效果。如果能找出不受干擾因子影響的前門路徑,就能使用前門調整法。如果我們願意接受線性或單調性的假設,就能使用工具變項。 P.253

實踐

以 Crash Course in Causality 第三週的作業:傾向評分匹配 Propensity Score Matching (PSM) 為例。

任務介紹

PSM 主要解決隨機對照實驗的不足,在觀察研究中,由於種種原因,數據偏差 (bias) 和混雜變量 (confounding variables) 比較多,PSM方法是為了減少數據偏差和混雜變量的影響,以便對實驗組 VS 對照組進行更合理的比較。

使用工具

本來想要用 dowhy (python package) ,但 dowhy 在引用一個外部資料的 data 處理上有特定的 data 框架,在進行第三週的作業題型上,還是稍嫌吃力,而且從 dowhy 能 import 的 lalonde data 筆數不太對 (400+筆),完整數據應該是 600+筆。

以下是以 R 語言去理解,首先從拿到資料開始,接著在 Jupyter 安裝 R Kernel,如果直接在 R Studio 操作,可以跳過此步驟 。

在 Python Kernel 預處理資料

%R data(lalonde, package="MatchIt")
%R -o lalonde
lalonde['black'] = lalonde['race'].apply(lambda x:1 if x=='black' else 0)
lalonde['hispan'] = lalonde['race'].apply(lambda x:1 if x=='hispan' else 0)
lalonde = lalonde.drop(['race'], axis=1)
lalonde.to_csv('lalonde_for_r.csv', index=False)
# records = 614

Jupyter Notebook安裝 R Kernel

參考此篇安裝教學:MacOS上安裝以及使用Jupyter Notebook運行R語言,由於我先前有先裝過 R ,所以直接從環境配置的第三步(安裝IR Kernel)開始。作業細節都是一些數學公式,題目與 comment 就附在最後面的 gist 裡囉。

# 在 R Console 介面
install.packages(c( 'repr' , 'IRdisplay' , 'evaluate' , 'crayon' , 'pbdZMQ' , 'devtools' , 'uuid' , 'digest' ))
devtools::install_github( 'IRkernel/IRkernel' )IRkernel::installspec()# 在 Terminal 介面,可以檢查是否有安裝成功R
IRkernel::installspec()
安裝相關 Package
IR Kernel 成功安裝
Double check 確認 R kernel 已經安裝
Open jupyter notebook 就可以看到 R kernel 囉

--

--

Youngmi huang

Participate in data science field, fascinated by something new. (Current: fraud risk modeling with ML/DL, Past: NLP)