DoWhy是一个支持显式建模和测试因果假设的Python库,用于因果推断。
项目描述
查看文档
- 文档、用户指南、示例笔记本和其他信息可在以下网址找到:
DoWhy是PyWhy生态系统的一部分。PyWhy生态系统。有关与因果性相关的更多工具和库,请访问PyWhy GitHub组织!
有关任何问题、评论或特定用例的讨论,请加入我们的社区Discord (
)
- 立即开始一些案例研究
效应估计:酒店预订取消 | 客户忠诚度计划的影响 | 优化文章标题 | 家庭访问对婴儿健康的影响(IHDP) | 客户流失/流失的原因
根本原因分析和解释:在线商店的因果归因和根本原因分析 | 寻找微服务架构中延迟增加的根本原因 | 寻找供应链变化的原因
更多示例笔记本请见此处!
介绍 & 关键特性
决策涉及理解不同变量之间如何相互影响,并预测当其中一些变量改变为新值时的结果。例如,给定一个结果变量,人们可能感兴趣的是确定潜在行动(们)如何影响它,了解导致其当前值的原因,或者模拟如果某些变量发生变化会发生什么。回答此类问题需要因果推理。DoWhy 是一个 Python 库,它引导您通过因果推理的各个步骤,并提供一个统一的接口来回答因果问题。
DoWhy 提供了广泛的各种算法,用于效应估计、预测、因果影响的量化、因果结构的诊断、干预和反事实。DoWhy 的一个关键特性是其反驳和证伪 API,它可以测试任何估计方法的因果假设,从而使推理更加稳健,并使非专业人士能够访问。
图形因果模型和潜在结果:两者的最佳结合
DoWhy 建立在因果推理中最强大的两个框架之上:图形因果模型和潜在结果。对于效应估计,它使用基于图的准则和 do-演算来建模假设并识别非参数因果效应。对于估计,它切换到主要基于潜在结果的基于潜在结果的估计方法。
对于效应估计之外的因果问题,它通过在每个节点上通过显式因果机制来建模数据生成过程,使用图形因果模型的力量,从而解锁将观察到的效应归因于特定变量的能力或估计点估计反事实。
对于因果推理的快速介绍,请参阅amit-sharma/causal-inference-tutorial。我们还在 ACM 知识发现和数据挖掘(KDD 2018)会议上提供了一个更全面的教程:causalinference.gitlab.io/kdd-tutorial。有关因果推理的四个步骤及其对机器学习的影响的介绍,您可以访问微软研究院的视频教程DoWhy 网络研讨会,以及有关图形因果模型 API 的介绍,请参阅PyCon 上使用 DoWhy 进行根本原因分析的演示。
关键特性
DoWhy 支持以下因果任务
效应估计(识别、平均因果效应、条件平均因果效应、工具变量等)
量化因果影响(中介分析、直接箭头强度、内在因果影响)
假设分析(从干预分布生成样本、估计反事实)
根本原因分析和解释(将异常归因于其原因、寻找分布变化的起因、估计特征相关性等)
有关更多详细信息以及如何在实践中使用这些方法的说明,请查阅https://py-why.github.io/dowhy上的文档。
快速入门
DoWhy支持Python 3.8及以上版本。安装时,您可以使用pip、poetry或conda。
最新版本
使用pip安装最新版本release。
pip install dowhy
使用poetry安装最新版本release。
poetry add dowhy
使用conda安装最新版本release。
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中的tool.poetry.dependencies部分找到。
如果您遇到任何问题,请尝试手动安装依赖项。
pip install '<dependency-name>==<version>'
可选地,如果您想以dot格式输入图,则可以安装pydot(或pygraphviz)。
为了获得更好的图形外观,您可以可选地安装pygraphviz。要继续,首先安装graphviz然后安装pygraphviz(在Ubuntu和Ubuntu WSL上)。
sudo apt install graphviz libgraphviz-dev graphviz-dev pkg-config
## from https://github.com/pygraphviz/pygraphviz/issues/71
pip install pygraphviz --install-option="--include-path=/usr/include/graphviz" \
--install-option="--library-path=/usr/lib/graphviz/"
示例:效应识别和估计
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中效应估计的四个主要操作:model、identify、estimate和refute。
# 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入门笔记本。
您还可以使用来自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":{}})
示例:基于图形因果模型(GCM)的推理
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 对您的工作有所帮助,请引用以下两个参考文献中的任意一个
Amit Sharma,Emre Kiciman. DoWhy:因果推理的端到端库。2020。https://arxiv.org/abs/2011.04216
Patrick Blöbaum,Peter Götz,Kailash Budhathoki,Atalanti A. Mastakouri,Dominik Janzing. DoWhy-GCM:DoWhy 在图形因果模型中进行因果推理的扩展。2022。https://arxiv.org/abs/2206.06821
Bibtex
@article{dowhy, title={DoWhy: An End-to-End Library for Causal Inference}, author={Sharma, Amit and Kiciman, Emre}, journal={arXiv preprint arXiv:2011.04216}, year={2020} } @article{dowhy_gcm, author = {Bl{\"o}baum, Patrick and G{\"o}tz, Peter and Budhathoki, Kailash and Mastakouri, Atalanti A. and Janzing, Dominik}, title = {DoWhy-GCM: An extension of DoWhy for causal inference in graphical causal models}, journal={arXiv preprint arXiv:2206.06821}, year={2022} }
问题
如果您遇到 DoWhy 的问题或对 DoWhy 有特殊要求,请提出问题。
贡献
本项目欢迎贡献和建议。有关贡献指南和所有贡献者的列表,请参阅CONTRIBUTING.md和我们的代码贡献文档。我们的贡献者行为准则可在此处查阅。
项目详情
下载文件
下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源分布
构建分布
dowhy-0.11.1.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | b9f518ee99406303cbf88bcbf8a30cdb6e97f9b52b10b94ca407cfd86afb5062 |
|
MD5 | 137ec1f3dd5c68b850898519692ef5b7 |
|
BLAKE2b-256 | 55919b28f0c44e0d0d5a3bea270c7293c47c13818d14ef87005dbbb5bc1485d3 |
dowhy-0.11.1-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | e5e8d7ec4b7187191f62a51598bdcaaa95a7b90098d7c9f4e3a4b4d05de6d914 |
|
MD5 | f58d0e86632c38ff54f2a4e34c6e1698 |
|
BLAKE2b-256 | e10b4e7a7810130c3ee43b10453115a6f4e7367e2b95973c34ea65e5d232ca73 |