首頁?學習  »   正文

微軟因果推理框架DoWhy入門

微軟因果推理框架DoWhy入門

人類的大腦有一種非凡的能力,能將原因與特定的事件聯系起來。從選舉的結果到掉在地板上的物體,我們不斷地把引起特定效果的一系列事件聯系起來。神經心理學將這種認知能力稱為因果推理。計算機科學和經濟學研究一種特殊形式的因果推理,稱為因果推理,主要研究兩個觀察變量之間的關系。多年來,機器學習產生了許多用于因果推理的方法,但它們在主流應用中大多難以使用。最近,微軟研究院(Microsoft Research)開發了一個用于因果思維和分析的框架DoWhy。

因果推理的挑戰不在于它是一門新的學科,而恰恰相反,而是當前的方法代表了因果推理的一個非常小而簡單的版本。大多數試圖將原因(如線性回歸)聯系起來的模型都依賴于對數據做出某種假設的經驗分析。純粹的因果推理依賴于反事實分析,而反事實分析更接近于人類如何做出決策。想象一個場景,你和家人一起去一個未知的目的地度假。假期前后,你都在糾結一些與事實相悖的問題:

  • 假期里我們應該做什么?
    我們會開心嗎?
    我們為什么會覺得開心?
    之后我們會有什么感覺?

微軟因果推理框架DoWhy入門

回答這些問題是因果推理的重點。與監督學習不同,因果推理依賴于對未觀測量的估計。這通常被稱為因果推理的“基本問題”,這意味著一個模型從來沒有通過一個剩余的測試集得到一個純粹客觀的評估。這一挑戰迫使因果推理對數據生成過程做出關鍵假設。用于因果推理的傳統機器學習框架試圖繞過“基本問題”,這給數據科學家和開發人員帶來了非常令人沮喪的體驗。

介紹Dowhy

微軟的DoWhy是一個基于python的因果推理和分析庫,它試圖簡化在機器學習應用程序中采用因果推理的過程。受到朱迪亞·珀爾的因果推理演算的啟發,DoWhy在一個簡單的編程模型下結合了幾種因果推理方法,消除了傳統方法的許多復雜性。與前人相比,DoWhy對因果推理模型的實現做出了三個關鍵貢獻。

  • 提出了一種將給定問題建模為因果圖的原則方法,使所有假設都清晰可見。
  • 為許多流行的因果推理方法提供統一的接口,結合了圖形模型和潛在結果的兩個主要框架。
  • 如果可能的話,自動測試假設的有效性,并評估對違規的估計的穩健性能。

從概念上講,DoWhy的創建遵循兩個指導原則:明確詢問因果假設,并測試對違反這些假設的估計的穩健性。換句話說,DoWhy將因果效應的識別從相關性的估計中分離出來,相關性的估計能夠推斷出非常復雜的因果關系。

為了實現其目標,DoWhy將工作流中的任何因果推理問題建模為四個基本步驟:建模、識別、估計和反駁。

微軟因果推理框架DoWhy入門

  1. 模型:DoWhy使用因果關系圖對每個問題建模。DoWhy的當前版本支持兩種圖形輸入格式:gml(首選)和dot。圖中可能包含了變量之間因果關系的先驗知識,但DoWhy不做任何直接的假設。
  2. 標識:使用輸入圖,DoWhy根據圖形模型找到所有可能的方法來標識期望的因果關系。它使用基于圖的標準和do-calculus來尋找潛在的方法,找到能夠識別因果關系的表達式
  3. 估計:DoWhy使用匹配或工具變量等統計方法估計因果效應。DoWhy的當前版本支持基于傾向性分層或傾向性評分匹配的估計方法,這些方法側重于估計處理任務,以及側重于估計響應面的回歸技術。
  4. 驗證:最后,DoWhy使用不同的robustness methods(魯棒性方法)驗證因果效應的有效性。

使用DoWhy

開發人員可以通過使用下面的命令安裝Python模塊來開始使用DoWhy:

python setup.py install

與任何其他機器學習程序一樣,DoWhy應用程序的第一步是加載數據集。在本例中,假設我們試圖推斷不同的醫療治療與以下數據集所表示的結果之間的相關性。

Treatment    Outcome        w0
0   2.964978   5.858518 -3.173399
1   3.696709   7.945649 -1.936995
2   2.125228   4.076005 -3.975566
3   6.635687  13.471594  0.772480
4   9.600072  19.577649  3.922406

DoWhy依賴于panda dataframes來捕獲輸入數據:

rvar = 1 if np.random.uniform() >0.5 else 0
data_dict = dowhy.datasets.xy_dataset(10000, effect=rvar, sd_error=0.2)
df = data_dict['df']
print(df[["Treatment", "Outcome", "w0"]].head())

在這一點上,我們只需要四個步驟來推斷變量之間的因果關系。這四個步驟對應于DoWhy的四個操作:建模、估計、推斷和反駁。我們可以從將問題建模為因果圖開始:

model= CausalModel(
data=df,
treatment=data_dict["treatment_name"],
outcome=data_dict["outcome_name"],
common_causes=data_dict["common_causes_names"],
instruments=data_dict["instrument_names"])
model.view_model(layout="dot")
from IPython.display import Image, display
display(Image(filename="causal_model.png"))

微軟因果推理框架DoWhy入門

下一步是確定圖表中的因果關系:

identified_estimand = model.identify_effect()

現在我們可以估計因果關系,并確定估計是否正確。此示例使用線性回歸來簡化:

estimate = model.estimate_effect(identified_estimand,
method_name="backdoor.linear_regression")
# Plot Slope of line between treamtent and outcome =causal effect
dowhy.plotter.plot_causal_effect(estimate, df[data_dict["treatment_name"]], df[data_dict["outcome_name"]])

微軟因果推理框架DoWhy入門

最后,我們可以使用不同的技術來反駁因果估計:

res_random=model.refute_estimate(identified_estimand, estimate, method_name="random_common_cause")

DoWhy是一個非常簡單和有用的框架來實現因果推理模型。當前版本可以作為一個獨立的庫使用,也可以集成到流行的深度學習框架中,如TensorFlow或PyTorch。在一個框架下結合多種因果推理方法和四步簡單編程模型,使得DoWhy對于處理因果推理問題的數據科學家來說非常簡單。

歡迎關注ATYUN官方公眾號,商務合作及內容投稿請聯系郵箱:[email protected]

發表評論