有关更多示例笔记本,请参见此处!
决策涉及了解不同变量如何相互影响并预测结果时,当其中一些变为新值时。例如,给定结果变量,人们可能有兴趣确定潜在动作可能如何影响它,了解导致其当前价值的原因,或模拟如果某些变量更改,将会发生什么。回答此类问题需要因果推理。 Dowhy是一个Python库,可引导您完成因果推理的各个步骤,并提供了一个统一的界面来回答因果问题。
Dowhy为效果估计,预测,因果影响,因果结构的诊断,根本原因分析,干预措施和反事实提供了多种算法。 Dowhy的一个关键特征是它的反驳和伪造API,可以测试任何估计方法的因果假设,从而使推断更加稳健和可访问非专家。
图形因果模型和潜在结果:两全其美
Dowhy建立在因果推断的两个最强大的框架上:图形因果模型和潜在结果。为了进行效应估计,它使用基于图的标准和DO-Calculus来建模假设并识别非参数因果效应。为了估计,它主要基于潜在结果切换到方法。
对于因果问题,它超出了效果估计,它通过通过每个节点的明确因果机制对数据生成过程进行建模来使用图形因果模型的功能,例如,该机制可以解锁能力将观察到的效果归因于特定变量或估算点上的对立面。
有关因果推论的快速介绍,请查看Amit-Sharma/Causal-inperial-Tutorial,我们还在ACM知识发现和数据挖掘(KDD 2018)会议上提供了更全面的教程:Causalinference.gitlab.io/kdd-tutorial。有关因果推理的四个步骤及其对机器学习的影响的介绍,您可以从Microsoft Research Dowhy网络研讨会访问该视频教程,并介绍图形因果模型API,请参阅Dowhy的PyCon介绍。
Dowhy支持以下因果任务:
有关更多详细信息以及如何在实践中使用这些方法,请查看https://py-why.github.io/dowhy的文档
Dowhy支持Python 3.8+。要安装,您可以使用Pip,Poetry或Conda。
最新版本
使用PIP安装最新版本。
pip install dowhy
使用诗歌安装最新版本。
poetry add dowhy
使用Conda安装最新版本。
conda install -c conda-forge dowhy
如果您面对CONDA的“解决环境”问题,请尝试使用conda update --all
全部安装Dowhy。如果那不起作用,请使用conda config --set channel_priority false
然后尝试再次安装。如果问题仍然存在,请在此处添加您的问题。
开发版本
如果您希望使用最新的开发版本,则您的依赖关系管理工具将需要指向我们的GitHub存储库。
pip install git+https://github.com/py-why/dowhy@main
要求
Dowhy需要一些依赖项。有关特定版本的详细信息,请参见pyproject.toml,toot.poetry.sportencies部分。
如果您遇到任何问题,请尝试手动安装依赖项。
pip install ' <dependency-name>==<version> '
(可选),如果您希望以点格式输入图形,请安装pydot(或pygraphviz)。
对于看起来更好的图形,您可以选择安装pygraphviz。要进行,请先安装GraphViz,然后安装Pygraphviz(在Ubuntu和Ubuntu WSL上)。
笔记
安装pygraphviz可能会在某些平台上引起问题。对大多数Linux发行版有效的一种方法是首先安装GraphViz,然后是Pygraphviz,如下所示。否则,请咨询Pygraphviz的文档。
sudo apt install graphviz libgraphviz-dev graphviz-dev pkg-config
pip install --global-option=build_ext
--global-option= " -I/usr/local/include/graphviz/ "
--global-option= " -L/usr/local/lib/graphviz " pygraphviz
大多数Dowhy中的大多数因果任务只需要写几行代码。在这里,我们阐明了治疗对结果变量的因果影响:
from dowhy import CausalModel
import dowhy . datasets
# Load some sample data
data = dowhy . datasets . linear_dataset (
beta = 10 ,
num_common_causes = 5 ,
num_instruments = 2 ,
num_samples = 10000 ,
treatment_is_binary = True )
可以以不同的方式定义因果图,但最常见的方式是通过NetworkX。加载数据后,我们使用四个主要操作进行DOWHY中的效果估计:模型,识别,估计和反驳:
# I. Create a causal model from the data and given graph.
model = CausalModel (
data = data [ "df" ],
treatment = data [ "treatment_name" ],
outcome = data [ "outcome_name" ],
graph = data [ "gml_graph" ]) # Or alternatively, as nx.DiGraph
# II. Identify causal effect and return target estimands
identified_estimand = model . identify_effect ()
# III. Estimate the target estimand using a statistical method.
estimate = model . estimate_effect ( identified_estimand ,
method_name = "backdoor.propensity_score_matching" )
# IV. Refute the obtained estimate using multiple robustness checks.
refute_results = model . refute_estimate ( identified_estimand , estimate ,
method_name = "random_common_cause" )
Dowhy对其产出的解释性的应力。在分析中的任何时候,您都可以检查未经测试的假设,确定的估计值(如果有)以及估算(如果有)。这是线性回归估计器的样本输出:
有关完整的代码示例,请查看Dowhy Notebook的入门。
您还可以使用ECONML的条件平均治疗效果(CATE)估计方法,如条件治疗效果笔记本所示。这是代码段。
from sklearn . preprocessing import PolynomialFeatures
from sklearn . linear_model import LassoCV
from sklearn . ensemble import GradientBoostingRegressor
dml_estimate = model . estimate_effect ( identified_estimand , method_name = "backdoor.econml.dml.DML" ,
control_value = 0 ,
treatment_value = 1 ,
target_units = lambda df : df [ "X0" ] > 1 ,
confidence_intervals = False ,
method_params = {
"init_params" :{ 'model_y' : GradientBoostingRegressor (),
'model_t' : GradientBoostingRegressor (),
'model_final' : LassoCV (),
'featurizer' : PolynomialFeatures ( degree = 1 , include_bias = True )},
"fit_params" :{}})
Dowhy的图形因果模型框架提供了强大的工具来解决因果问题,超出了效果估计。它基于Pearl的图形因果模型框架,并通过因果机制显式地对每个变量的因果数据生成过程进行建模,以支持广泛的因果算法。有关更多详细信息,请参见因果推论的书元素。
复杂的因果查询,例如将观察到的异常归因于系统中的节点,只需几行代码即可执行:
import networkx as nx , numpy as np , pandas as pd
from dowhy import gcm
# Let's generate some "normal" data we assume we're given from our problem domain:
X = np . random . normal ( loc = 0 , scale = 1 , size = 1000 )
Y = 2 * X + np . random . normal ( loc = 0 , scale = 1 , size = 1000 )
Z = 3 * Y + np . random . normal ( loc = 0 , scale = 1 , size = 1000 )
data = pd . DataFrame ( dict ( X = X , Y = Y , Z = Z ))
# 1. Modeling cause-effect relationships as a structural causal model
# (causal graph + functional causal models):
causal_model = gcm . StructuralCausalModel ( nx . DiGraph ([( 'X' , 'Y' ), ( 'Y' , 'Z' )])) # X -> Y -> Z
gcm . auto . assign_causal_mechanisms ( causal_model , data )
# 2. Fitting the SCM to the data:
gcm . fit ( causal_model , data )
# Optional: Evaluate causal model
print ( gcm . evaluate_causal_model ( causal_model , data ))
# Step 3: Perform a causal analysis.
# results = gcm.<causal_query>(causal_model, ...)
# For instance, root cause analysis:
anomalous_sample = pd . DataFrame ( dict ( X = [ 0.1 ], Y = [ 6.2 ], Z = [ 19 ])) # Here, Y is the root cause.
# "Which node is the root cause of the anomaly in Z?":
anomaly_attribution = gcm . attribute_anomalies ( causal_model , "Z" , anomalous_sample )
# Or sampling from an interventional distribution. Here, under the intervention do(Y := 2).
samples = gcm . interventional_samples ( causal_model , interventions = { 'Y' : lambda y : 2 }, num_samples_to_draw = 100 )
除这些示例外,GCM框架提供了更多功能。有关完整的代码示例,请查看在线商店示例笔记本。
有关更多功能,请参见Dowhy的示例应用程序以及有关输出的详细信息,请参阅用户指南或结帐Jupyter笔记本。
微软研究博客|视频效果估计教程|根本原因分析的视频教程| Arxiv纸| Arxiv纸(图形因果模型扩展)|幻灯片
如果您发现Dowhy对您的工作有用,请引用以下两个参考文献:
Bibtex:
@article {dowhy, title = {dowhy:因果推理的端到端库}, 作者= {Sharma,Amit和Kiciman,Emre}, journal = {arxiv预印arxiv:2011.04216}, 年= {2020} } @Article {JMLR:V25:22-1258, 作者= {patrick bl {{“ o}} baum和Peter G {{” O}} tz和Kailash Budhathoki和Atalanti A. Mastakouri和Dominik Janzing}, title = {dowhy-gcm:在图形因果模型中用于因果推断的dowhy的扩展 日记= {机器学习研究期刊}, 年= {2024}, 音量= {25}, 数字= {147}, 页= {1--7}, url = {http://jmlr.org/papers/v25/22-1258.html} }
如果您遇到问题或对Dowhy有特定的要求,请提出问题。
该项目欢迎贡献和建议。有关贡献和所有贡献者列表的指南,请查看贡献。md和我们的文档以获取贡献代码。我们的撰稿人行为准则可在此处获得。