python?dowhy數(shù)據(jù)估計(jì)因果分析功能探索
python dowhy數(shù)據(jù)分析庫(kù)
今天給大家分享一個(gè)神奇的 python 庫(kù),dowhy
https://github.com/py-why/dowhy
dowhy 是一個(gè)開(kāi)源的 Python 庫(kù),旨在簡(jiǎn)化因果推斷的過(guò)程,特別是針對(duì)那些希望從數(shù)據(jù)中估計(jì)因果效應(yīng)的研究者和數(shù)據(jù)科學(xué)家。通過(guò)它可以輕松地定義因果模型、識(shí)別因果效應(yīng)、估計(jì)這些效應(yīng)以及進(jìn)行健壯性檢驗(yàn)。它建立在 Pandas、NumPy 和 scikit-learn 等流行庫(kù)之上,提供了一個(gè)直觀且強(qiáng)大的工具,用于根據(jù)觀測(cè)數(shù)據(jù)估計(jì)因果效應(yīng)。
什么是因果分析?
因果分析是統(tǒng)計(jì)分析的一個(gè)分支,旨在理解和量化變量之間的因果關(guān)系。它的目的是回答諸如 “改變一個(gè)變量對(duì)另一個(gè)變量有什么影響?” 之類(lèi)的問(wèn)題?;?“哪些因素影響特定結(jié)果?” 與僅僅識(shí)別變量之間關(guān)系的相關(guān)性不同,因果分析試圖確定一個(gè)變量是否直接影響另一個(gè)變量。
從本質(zhì)上講,因果分析不僅僅是描述關(guān)聯(lián)性,還致力于在變量之間建立因果關(guān)系。這在流行病學(xué)、經(jīng)濟(jì)學(xué)、社會(huì)科學(xué)和醫(yī)療保健等領(lǐng)域至關(guān)重要。
庫(kù)的安裝
可以直接通過(guò) pip 進(jìn)行安裝。
pip install dowhy
加載數(shù)據(jù)集
import numpy as np import pandas as pd from dowhy import CausalModel import dowhy.datasets 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'] df[["Treatment", "Outcome", "w0"]].head()
建立因果模型
現(xiàn)在你可以使用 DoWhy 定義因果模型。這涉及指定分析中的變量、治療、結(jié)果和潛在的混雜因素。
model= CausalModel( data=df, treatment=data_dict["treatment_name"], outcome=data_dict["outcome_name"], common_causes=data_dict["common_causes_names"] ) model.view_model(layout="dot")
CausalModel 是 DoWhy 庫(kù)中用于定義因果模型的核心類(lèi)。這個(gè)類(lèi)的構(gòu)造函數(shù)接受幾個(gè)關(guān)鍵參數(shù)來(lái)指定模型的不同部分。
data,包含所有相關(guān)數(shù)據(jù)的 DataFrame。這應(yīng)該包括處理變量、結(jié)果變量、共同原因(共變量)、以及(如果有的話(huà))工具變量。
treatment,指定作為處理(干預(yù))的變量名。在因果推斷中,我們關(guān)心的是改變這個(gè)變量會(huì)如何影響結(jié)果變量。
outcome,指定結(jié)果變量的名稱(chēng)。這是我們想要了解其因果效應(yīng)的變量。
common_causes,一個(gè)包含所有已知共同原因(也稱(chēng)為共變量或混雜變量)名稱(chēng)的列表。這些是既影響處理變量又影響結(jié)果變量的變量,必須控制以避免偏差。
instruments,一個(gè)包含所有工具變量名稱(chēng)的列表(如果有的話(huà))。工具變量是與處理變量相關(guān)但只通過(guò)它影響結(jié)果變量的變量,常用于處理內(nèi)生性問(wèn)題。
從圖中可以看出,w0 為混雜變量,它既影響處理變量 treatment 又影響結(jié)果變量 outcome。
估計(jì)因果效應(yīng)
現(xiàn)在我們可以估計(jì)因果效應(yīng)并確定估計(jì)是否正確。為簡(jiǎn)單起見(jiàn),此示例使用線(xiàn)性回歸。
estimate = model.estimate_effect(model.identify_effect(), method_name="backdoor.linear_regression") # Plot Slope of line between treamtent and outcome =causal effect
這行代碼使用 DoWhy 庫(kù)來(lái)估計(jì)因果效應(yīng)。
首先,model.identify_effect() 方法被調(diào)用來(lái)確定從觀測(cè)數(shù)據(jù)中是否可以識(shí)別出處理對(duì)結(jié)果的因果效應(yīng)。這個(gè)識(shí)別過(guò)程通?;谥付ǖ囊蚬麍D,它會(huì)查看是否存在任何未控制的后門(mén)路徑。
然后,通過(guò)指定 method_name="backdoor.linear_regression",它使用線(xiàn)性回歸來(lái)估計(jì)效應(yīng),同時(shí)控制了所有通過(guò)識(shí)別過(guò)程發(fā)現(xiàn)的后門(mén)路徑的變量。這意味著它會(huì)估計(jì)在控制了所有已知的共同原因后,處理對(duì)結(jié)果的直接效應(yīng)。
下面,我們來(lái)繪制處理變量和結(jié)果變量之間的因果效應(yīng)。在這個(gè)圖表中,斜率表示因果效應(yīng)的大小,即處理變量的每個(gè)單位變化將導(dǎo)致結(jié)果變量變化多少單位。如果斜率為正,則意味著處理與結(jié)果之間存在正相關(guān);如果斜率為負(fù),則存在負(fù)相關(guān)。
dowhy.plotter.plot_causal_effect(estimate, df[data_dict["treatment_name"]], df[data_dict["outcome_name"]])
以上就是python dowhy數(shù)據(jù)估計(jì)因果分析功能探索的詳細(xì)內(nèi)容,更多關(guān)于python dowhy數(shù)據(jù)分析的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- python?spotlight庫(kù)簡(jiǎn)化交互式方法探索數(shù)據(jù)分析
- python Bamboolib庫(kù)加速Pandas數(shù)據(jù)分析過(guò)程詳解
- python一行代碼就能實(shí)現(xiàn)數(shù)據(jù)分析的pandas-profiling庫(kù)
- Python數(shù)據(jù)分析庫(kù)PyGWalker的強(qiáng)大交互式功能界面探索
- 精選39道Python數(shù)據(jù)分析面試題提早備戰(zhàn)金三銀四
- Python數(shù)據(jù)分析從入門(mén)到進(jìn)階之分類(lèi)算法全面教程
- 科學(xué)計(jì)算與數(shù)據(jù)分析利器Python數(shù)據(jù)分析庫(kù)Scipy使用詳解
- Python數(shù)據(jù)分析numpy文本數(shù)據(jù)讀取索引切片實(shí)例詳解
相關(guān)文章
創(chuàng)建Shapefile文件并寫(xiě)入數(shù)據(jù)的例子
今天小編就為大家分享一篇?jiǎng)?chuàng)建Shapefile文件并寫(xiě)入數(shù)據(jù)的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-11-11Python函數(shù)中參數(shù)是傳遞值還是引用詳解
這篇文章主要介紹了深入了解Python函數(shù)中參數(shù)是傳值還是傳引用,在 C/C++ 中,傳值和傳引用是函數(shù)參數(shù)傳遞的兩種方式,在Python中參數(shù)是如何傳遞的,需要的朋友可以參考下2019-07-07Python中強(qiáng)大的函數(shù)map?filter?reduce使用詳解
Python是一門(mén)功能豐富的編程語(yǔ)言,提供了許多內(nèi)置函數(shù),以簡(jiǎn)化各種編程任務(wù),在Python中,map(),filter()和reduce()是一組非常有用的函數(shù),它們?cè)试S對(duì)可迭代對(duì)象進(jìn)行操作,從而實(shí)現(xiàn)數(shù)據(jù)轉(zhuǎn)換、篩選和累積等操作,本文將詳細(xì)介紹這三個(gè)函數(shù),包括它們的基本用法和示例代碼2023-11-1111行Python代碼實(shí)現(xiàn)解密摩斯密碼
摩爾斯電碼是一種時(shí)通時(shí)斷的信號(hào)代碼,通過(guò)不同的排列順序來(lái)表達(dá)不同的英文字母、數(shù)字和標(biāo)點(diǎn)符號(hào)。本文將通過(guò)Python代碼來(lái)實(shí)現(xiàn)解密摩斯密碼,感興趣的可以學(xué)習(xí)一下2022-04-04如何將Python代碼轉(zhuǎn)化為可執(zhí)行的程序
在Python中,將代碼轉(zhuǎn)成可以執(zhí)行的程序需要安裝庫(kù)pyinstaller,如果是Windows用戶(hù),打開(kāi)Anaconda?Prompt輸入相對(duì)應(yīng)代碼,下面小編給大家詳細(xì)講解如何將Python代碼轉(zhuǎn)化為可執(zhí)行的程序,感興趣的朋友一起看看吧2024-03-03Python?中的lambda匿名函數(shù)和三元運(yùn)算符
這篇文章主要介紹了Python?中的lambda匿名函數(shù)和三元運(yùn)算符,使用關(guān)鍵字???lambda???定義,所以匿名函數(shù)又稱(chēng)之為lambda表達(dá)式,下面文章更多相關(guān)內(nèi)容需要的小伙伴可以參考一下2022-04-04OpenCV特征提取與檢測(cè)之Shi-Tomasi角點(diǎn)檢測(cè)器
在角點(diǎn)檢測(cè)的世界里哈瑞斯無(wú)疑是最重要的方法之一,但Shi-Tomasi作為改進(jìn)的算法也有很大應(yīng)用場(chǎng)景,尤其是動(dòng)態(tài)跟蹤用的還比較多,這篇文章主要給大家介紹了關(guān)于OpenCV特征提取與檢測(cè)之Shi-Tomasi角點(diǎn)檢測(cè)器的相關(guān)資料,需要的朋友可以參考下2021-08-08