python dowhy数据估计因果分析功能探索
作者:小寒聊python
python dowhy数据分析库
今天给大家分享一个神奇的 python 库,dowhy
https://github.com/py-why/dowhy
dowhy 是一个开源的 Python 库,旨在简化因果推断的过程,特别是针对那些希望从数据中估计因果效应的研究者和数据科学家。通过它可以轻松地定义因果模型、识别因果效应、估计这些效应以及进行健壮性检验。它建立在 Pandas、NumPy 和 scikit-learn 等流行库之上,提供了一个直观且强大的工具,用于根据观测数据估计因果效应。
什么是因果分析?
因果分析是统计分析的一个分支,旨在理解和量化变量之间的因果关系。它的目的是回答诸如 “改变一个变量对另一个变量有什么影响?” 之类的问题。或 “哪些因素影响特定结果?” 与仅仅识别变量之间关系的相关性不同,因果分析试图确定一个变量是否直接影响另一个变量。
从本质上讲,因果分析不仅仅是描述关联性,还致力于在变量之间建立因果关系。这在流行病学、经济学、社会科学和医疗保健等领域至关重要。
库的安装
可以直接通过 pip 进行安装。
pip install dowhy
加载数据集
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()
建立因果模型
现在你可以使用 DoWhy 定义因果模型。这涉及指定分析中的变量、治疗、结果和潜在的混杂因素。
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 库中用于定义因果模型的核心类。这个类的构造函数接受几个关键参数来指定模型的不同部分。
data,包含所有相关数据的 DataFrame。这应该包括处理变量、结果变量、共同原因(共变量)、以及(如果有的话)工具变量。
treatment,指定作为处理(干预)的变量名。在因果推断中,我们关心的是改变这个变量会如何影响结果变量。
outcome,指定结果变量的名称。这是我们想要了解其因果效应的变量。
common_causes,一个包含所有已知共同原因(也称为共变量或混杂变量)名称的列表。这些是既影响处理变量又影响结果变量的变量,必须控制以避免偏差。
instruments,一个包含所有工具变量名称的列表(如果有的话)。工具变量是与处理变量相关但只通过它影响结果变量的变量,常用于处理内生性问题。
从图中可以看出,w0 为混杂变量,它既影响处理变量 treatment 又影响结果变量 outcome。
估计因果效应
现在我们可以估计因果效应并确定估计是否正确。为简单起见,此示例使用线性回归。
estimate = model.estimate_effect(model.identify_effect(), method_name="backdoor.linear_regression") # Plot Slope of line between treamtent and outcome =causal effect
这行代码使用 DoWhy 库来估计因果效应。
首先,model.identify_effect() 方法被调用来确定从观测数据中是否可以识别出处理对结果的因果效应。这个识别过程通常基于指定的因果图,它会查看是否存在任何未控制的后门路径。
然后,通过指定 method_name="backdoor.linear_regression",它使用线性回归来估计效应,同时控制了所有通过识别过程发现的后门路径的变量。这意味着它会估计在控制了所有已知的共同原因后,处理对结果的直接效应。
下面,我们来绘制处理变量和结果变量之间的因果效应。在这个图表中,斜率表示因果效应的大小,即处理变量的每个单位变化将导致结果变量变化多少单位。如果斜率为正,则意味着处理与结果之间存在正相关;如果斜率为负,则存在负相关。
dowhy.plotter.plot_causal_effect(estimate, df[data_dict["treatment_name"]], df[data_dict["outcome_name"]])
以上就是python dowhy数据估计因果分析功能探索的详细内容,更多关于python dowhy数据分析的资料请关注脚本之家其它相关文章!