dowhy

dowhy

支持多种因果推理任务的Python库

DoWhy是一个Python因果推理库,集成了图形因果模型和潜在结果框架。它提供统一接口支持因果效应估计、根因分析和反事实推理等多种任务。该库注重结果可解释性,并具有反驳和验证功能,增强了因果推理的稳健性。DoWhy适用于客户流失分析、营销效果评估和异常归因等多个领域。

DoWhy因果推理Python库图形因果模型潜在结果Github开源项目

|BuildStatus|_ |PyPiVersion|_ |PythonSupport|_ |Downloads|_ |discord|_

.. |PyPiVersion| image:: https://img.shields.io/pypi/v/dowhy.svg .. _PyPiVersion: https://pypi.org/project/dowhy/

.. |PythonSupport| image:: https://img.shields.io/pypi/pyversions/dowhy.svg .. _PythonSupport: https://pypi.org/project/dowhy/

.. |BuildStatus| image:: https://github.com/py-why/dowhy/actions/workflows/ci.yml/badge.svg .. _BuildStatus: https://github.com/py-why/dowhy/actions

.. |Downloads| image:: https://pepy.tech/badge/dowhy .. _Downloads: https://pepy.tech/project/dowhy

.. |discord| image:: https://img.shields.io/discord/818456847551168542 .. _discord: https://discord.gg/cSBGb3vsZb

.. image:: dowhy-logo-large.png :width: 50% :align: center

查看文档 <https://py-why.github.io/dowhy/>_

  • 文档、用户指南、示例笔记本和其他信息可在以下网址获取: https://py-why.github.io/dowhy <https://py-why.github.io/dowhy/>_
  • DoWhy 是 PyWhy 生态系统 <https://www.pywhy.org/>_ 的一部分。如需更多与因果关系相关的工具和库,请查看 PyWhy GitHub 组织 <https://github.com/py-why/>_!
  • 如有任何问题、评论或关于特定用例的讨论,请加入我们的 Discord <https://discord.gg/cSBGb3vsZb>_ 社区 (|discord|_)
  • 直接进入一些案例研究:
    • 效应估计:酒店预订取消 <https://towardsdatascience.com/beyond-predictive-models-the-causal-story-behind-hotel-booking-cancellations-d29e8558cbaf>_ | 客户忠诚度计划的效果 <https://www.pywhy.org/dowhy/main/example_notebooks/dowhy_example_effect_of_memberrewards_program.html>_ | 优化文章标题 <https://medium.com/@akelleh/introducing-the-do-sampler-for-causal-inference-a3296ea9e78d>_ | 家访对婴儿健康的影响(IHDP) <https://towardsdatascience.com/implementing-causal-inference-a-key-step-towards-agi-de2cde8ea599>_ | 客户流失/流失的原因 <https://medium.com/geekculture/a-quickstart-for-causal-analysis-decision-making-with-dowhy-2ce2d4d1efa9>_
    • 根本原因分析和解释:在线商店的因果归因和根本原因分析 <https://www.pywhy.org/dowhy/main/example_notebooks/gcm_online_shop.html>_ | 查找微服务架构中延迟升高的根本原因 <https://www.pywhy.org/dowhy/main/example_notebooks/gcm_rca_microservice_architecture.html>_ | 查找供应链变化的根本原因 <https://www.pywhy.org/dowhy/main/example_notebooks/gcm_supply_chain_dist_change.html>_

更多示例笔记本,请参见 这里! <https://www.pywhy.org/dowhy/main/example_notebooks/nb_index.html>_

简介与主要特性

决策制定涉及理解不同变量之间如何相互影响,以及当其中一些变量被改变为新值时预测结果。例如,给定一个结果变量,人们可能对确定潜在行动如何影响它、理解是什么导致了它当前的值,或模拟如果某些变量发生变化会发生什么感兴趣。回答这些问题需要因果推理。DoWhy 是一个 Python 库,它指导您完成因果推理的各个步骤,并为回答因果问题提供了统一的接口。

DoWhy 提供了广泛的算法,用于效应估计、预测、量化因果影响、诊断因果结构、根本原因分析、干预和反事实。DoWhy 的一个关键特性是其反驳和证伪 API,可以测试任何估计方法的因果假设,从而使推理更加稳健,并使非专家也能使用。

图形因果模型和潜在结果:两全其美

DoWhy 建立在因果推断最强大的两个框架之上:图形因果模型和潜在结果。对于效应估计,它使用基于图的标准和 do-calculus 来建模假设和识别非参数因果效应。对于估计,它主要切换到基于潜在结果的方法。

对于超出效应估计的因果问题,它利用图形因果模型的力量,通过在每个节点显式建模因果机制来模拟数据生成过程,这例如解锁了将观察到的效应归因于特定变量或估计点反事实的能力。

想要快速了解因果推断,请查看 amit-sharma/causal-inference-tutorial <https://github.com/amit-sharma/causal-inference-tutorial/>_ 我们还在 ACM 知识发现与数据挖掘(KDD 2018 <http://www.kdd.org/kdd2018/>)会议上提供了更全面的教程:causalinference.gitlab.io/kdd-tutorial <http://causalinference.gitlab.io/kdd-tutorial/>。 有关因果推断四个步骤及其对机器学习的影响的介绍,您可以访问微软研究院的这个视频教程 DoWhy 网络研讨会 <https://www.microsoft.com/en-us/research/video/foundations-of-causal-inference-and-its-impacts-on-machine-learning/>,关于图形因果模型 API 的介绍,请参见 PyCon 关于使用 DoWhy 进行根本原因分析的演讲 <https://www.youtube.com/watch?v=icpHrbDlGaw>

主要特性


.. image:: https://raw.githubusercontent.com/py-why/dowhy/main/docs/images/dowhy-features.png

DoWhy 支持以下因果任务:

- 效应估计(识别、平均因果效应、条件平均因果效应、工具变量等)
- 量化因果影响(中介分析、直接箭头强度、内在因果影响)
- 假设分析(从干预分布生成样本,估计反事实)
- 根本原因分析和解释(将异常归因于其原因,找出分布变化的原因,估计特征相关性等)

有关更多详细信息以及如何在实践中使用这些方法,请查看 `https://py-why.github.io/dowhy <https://py-why.github.io/dowhy/>`_ 的文档

快速开始
===========
DoWhy 支持 Python 3.8+。您可以使用 pip、poetry 或 conda 进行安装。

**最新发布版**

使用 pip 安装最新 `发布版 <https://pypi.org/project/dowhy/>`__。

.. code:: shell

   pip install dowhy

使用 poetry 安装最新 `发布版 <https://pypi.org/project/dowhy/>`__。

.. code:: shell

   poetry add dowhy

使用 conda 安装最新 `发布版 <https://anaconda.org/conda-forge/dowhy>`__。

.. code:: shell

   conda install -c conda-forge dowhy

如果您在使用 conda 时遇到"Solving environment"问题,请尝试 :code:`conda update --all` 然后安装 dowhy。如果仍然不行,请使用 :code:`conda config --set channel_priority false` 然后再次尝试安装。如果问题仍然存在,请 `在此添加您的问题 <https://github.com/microsoft/dowhy/issues/197>`_。

**开发版本**
如果您更倾向于使用最新的开发版本,您的依赖管理工具需要指向我们的GitHub仓库。

.. code:: shell

    pip install git+https://github.com/py-why/dowhy@main


**要求**

DoWhy需要一些依赖项。
具体版本的详细信息可以在`pyproject.toml <./pyproject.toml>`_文件中的`tool.poetry.dependencies`部分找到。

如果遇到任何问题,请尝试手动安装依赖项。

.. code:: shell

    pip install '<依赖项名称>==<版本>'

如果您希望以dot格式输入图形,可以选择安装pydot(或pygraphviz)。

为了获得更好看的图形,您可以选择安装pygraphviz。要进行安装,
首先安装graphviz,然后安装pygraphviz(在Ubuntu和Ubuntu WSL上)。

.. note::
    在某些平台上安装pygraphviz可能会遇到问题。
    对于大多数Linux发行版,一种有效的方法是
    首先安装graphviz,然后安装pygraphviz,如下所示。
    否则,请参考`pygraphviz文档 <https://pygraphviz.github.io/documentation/stable/install.html>`_。

.. code:: shell

    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中,大多数因果任务只需要几行代码就能完成。这里,我们举例估计一个处理变量对结果变量的因果效应:

.. code:: python

from dowhy import CausalModel
import dowhy.datasets

# 加载一些示例数据
data = dowhy.datasets.linear_dataset(
    beta=10,
    num_common_causes=5,
    num_instruments=2,
    num_samples=10000,
    treatment_is_binary=True)

因果图可以通过不同方式定义,但最常见的方式是使用NetworkX <https://networkx.org/>_。 加载数据后,我们使用DoWhy中进行效应估计的四个主要操作:模型识别估计反驳

.. code:: python

# I. 从数据和给定图创建因果模型。
model = CausalModel(
    data=data["df"],
    treatment=data["treatment_name"],
    outcome=data["outcome_name"],
    graph=data["gml_graph"])  # 或者,使用nx.DiGraph

# II. 识别因果效应并返回目标估计量
identified_estimand = model.identify_effect()

# III. 使用统计方法估计目标估计量。
estimate = model.estimate_effect(identified_estimand,
                                 method_name="backdoor.propensity_score_matching")

# IV. 使用多种稳健性检查来反驳获得的估计值。
refute_results = model.refute_estimate(identified_estimand, estimate,
                                       method_name="random_common_cause")

DoWhy强调其输出的可解释性。在分析的任何阶段, 您都可以检查未经测试的假设、已识别的估计量(如果有)以及 估计值(如果有)。以下是线性回归估计器的输出示例:

.. image:: https://raw.githubusercontent.com/py-why/dowhy/main/docs/images/regression_output.png :width: 80%

完整的代码示例,请查看DoWhy入门 <https://www.pywhy.org/dowhy/main/example_notebooks/dowhy_simple_example.html>_笔记本。

您还可以使用来自EconML <https://github.com/py-why/econml>_的条件平均处理效应(CATE)估计方法,如条件处理效应 <https://www.pywhy.org/dowhy/main/example_notebooks/dowhy-conditional-treatment-effects.html>_笔记本所示。以下是一个代码片段。

.. code:: python

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的图形因果模型框架,通过*因果机制*明确模拟每个变量的因果数据生成过程,以支持广泛的因果算法。更多详情,请参阅
`因果推断要素 <https://mitpress.mit.edu/9780262037310/elements-of-causal-inference/>`_一书。

复杂的因果查询,如将观察到的异常归因于系统中的节点,只需几行代码就可以完成:

.. code:: python

    import networkx as nx, numpy as np, pandas as pd
    from dowhy import gcm

    # 让我们生成一些假设从问题域中获得的"正常"数据:
    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. 将因果关系建模为结构因果模型
    #    (因果图 + 功能因果模型):
    causal_model = gcm.StructuralCausalModel(nx.DiGraph([('X', 'Y'), ('Y', 'Z')]))  # X -> Y -> Z
    gcm.auto.assign_causal_mechanisms(causal_model, data)

    # 2. 将SCM拟合到数据:
    gcm.fit(causal_model, data)

    # 可选:评估因果模型
    print(gcm.evaluate_causal_model(causal_model, data))

    # 第3步:进行因果分析。
    # results = gcm.<causal_query>(causal_model, ...)
    # 例如,根本原因分析:
    anomalous_sample = pd.DataFrame(dict(X=[0.1], Y=[6.2], Z=[19]))  # 这里,Y是根本原因。

    # "哪个节点是Z中异常的根本原因?":
    anomaly_attribution = gcm.attribute_anomalies(causal_model, "Z", anomalous_sample)

    # 或者从干预分布中抽样。这里,在干预do(Y := 2)下。
    samples = gcm.interventional_samples(causal_model, interventions={'Y': lambda y: 2}, num_samples_to_draw=100)

GCM框架提供了超出这些示例的更多功能。完整的代码示例,请查看`在线商店示例笔记本 <https://www.pywhy.org/dowhy/main/example_notebooks/gcm_online_shop.html>`_。

有关更多功能、DoWhy的示例应用以及输出的详细信息,请参阅`用户指南 <https://www.pywhy.org/dowhy/main/user_guide/intro.html>`_或
查看`Jupyter笔记本 <https://www.pywhy.org/dowhy/main/example_notebooks/nb_index.html>`_。
更多信息与资源
============================
`微软研究院博客 <https://www.microsoft.com/en-us/research/blog/dowhy-a-library-for-causal-inference/>`_ | `效应估计视频教程 <https://www.youtube.com/watch?v=LALfQStONEc&t=114s>`_ | `根因分析视频教程 <https://www.youtube.com/watch?v=icpHrbDlGaw>`_ | `Arxiv论文 <https://arxiv.org/abs/2011.04216>`_ | `Arxiv论文(图形因果模型扩展) <https://arxiv.org/abs/2206.06821>`_ | `幻灯片 <https://www2.slideshare.net/AmitSharma315/dowhy-an-endtoend-library-for-causal-inference>`_

引用本软件包
~~~~~~~~~~~~~~~~~~~
如果您发现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在图形因果模型中的因果推断扩展. 2024. MLOSS 25(147):1−7. https://jmlr.org/papers/v25/22-1258.html

Bibtex格式::

  @article{dowhy,
    title={DoWhy: 因果推断的端到端库},
    author={Sharma, Amit and Kiciman, Emre},
    journal={arXiv preprint arXiv:2011.04216},
    year={2020}
  }

  @article{JMLR:v25:22-1258,
  author  = {Patrick Bl{{\"o}}baum and Peter G{{\"o}}tz and Kailash Budhathoki and Atalanti A. Mastakouri and Dominik Janzing},
  title   = {DoWhy-GCM: DoWhy在图形因果模型中的因果推断扩展},
  journal = {机器学习研究期刊},
  year    = {2024},
  volume  = {25},
  number  = {147},
  pages   = {1--7},
  url     = {http://jmlr.org/papers/v25/22-1258.html}
  }

问题
~~~~~~
如果您遇到问题或对DoWhy有特定要求,请`提出问题 <https://github.com/py-why/dowhy/issues>`_。

贡献
~~~~~~~~~~~~

本项目欢迎贡献和建议。有关贡献指南和所有贡献者列表,请查看 `CONTRIBUTING.md <https://github.com/py-why/dowhy/blob/main/CONTRIBUTING.md>`_ 和我们的 `代码贡献文档 <https://github.com/py-why/dowhy/blob/main/docs/source/contributing/contributing-code.rst>`_。我们的 `贡献者行为准则可在此处获取 <https://github.com/py-why/governance/blob/main/CODE-OF-CONDUCT.md>`_。

编辑推荐精选

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

AI办公办公工具AI工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图热门
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

热门AI开发模型训练AI工具讯飞星火大模型智能问答内容创作多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

Trae

Trae

字节跳动发布的AI编程神器IDE

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

热门AI辅助写作AI工具讯飞绘文内容运营AI创作个性化文章多平台分发AI助手
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

openai-agents-python

openai-agents-python

OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。

openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。

Hunyuan3D-2

Hunyuan3D-2

高分辨率纹理 3D 资产生成

Hunyuan3D-2 是腾讯开发的用于 3D 资产生成的强大工具,支持从文本描述、单张图片或多视角图片生成 3D 模型,具备快速形状生成能力,可生成带纹理的高质量 3D 模型,适用于多个领域,为 3D 创作提供了高效解决方案。

3FS

3FS

一个具备存储、管理和客户端操作等多种功能的分布式文件系统相关项目。

3FS 是一个功能强大的分布式文件系统项目,涵盖了存储引擎、元数据管理、客户端工具等多个模块。它支持多种文件操作,如创建文件和目录、设置布局等,同时具备高效的事件循环、节点选择和协程池管理等特性。适用于需要大规模数据存储和管理的场景,能够提高系统的性能和可靠性,是分布式存储领域的优质解决方案。

下拉加载更多