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>`_。

编辑推荐精选

AEE

AEE

AI Excel全自动制表工具

AEE 在线 AI 全自动 Excel 编辑器,提供智能录入、自动公式、数据整理、图表生成等功能,高效处理 Excel 任务,提升办公效率。支持自动高亮数据、批量计算、不规则数据录入,适用于企业、教育、金融等多场景。

UI-TARS-desktop

UI-TARS-desktop

基于 UI-TARS 视觉语言模型的桌面应用,可通过自然语言控制计算机进行多模态操作。

UI-TARS-desktop 是一款功能强大的桌面应用,基于 UI-TARS(视觉语言模型)构建。它具备自然语言控制、截图与视觉识别、精确的鼠标键盘控制等功能,支持跨平台使用(Windows/MacOS),能提供实时反馈和状态显示,且数据完全本地处理,保障隐私安全。该应用集成了多种大语言模型和搜索方式,还可进行文件系统操作。适用于需要智能交互和自动化任务的场景,如信息检索、文件管理等。其提供了详细的文档,包括快速启动、部署、贡献指南和 SDK 使用说明等,方便开发者使用和扩展。

Wan2.1

Wan2.1

开源且先进的大规模视频生成模型项目

Wan2.1 是一个开源且先进的大规模视频生成模型项目,支持文本到图像、文本到视频、图像到视频等多种生成任务。它具备丰富的配置选项,可调整分辨率、扩散步数等参数,还能对提示词进行增强。使用了多种先进技术和工具,在视频和图像生成领域具有广泛应用前景,适合研究人员和开发者使用。

爱图表

爱图表

全流程 AI 驱动的数据可视化工具,助力用户轻松创作高颜值图表

爱图表(aitubiao.com)就是AI图表,是由镝数科技推出的一款创新型智能数据可视化平台,专注于为用户提供便捷的图表生成、数据分析和报告撰写服务。爱图表是中国首个在图表场景接入DeepSeek的产品。通过接入前沿的DeepSeek系列AI模型,爱图表结合强大的数据处理能力与智能化功能,致力于帮助职场人士高效处理和表达数据,提升工作效率和报告质量。

Qwen2.5-VL

Qwen2.5-VL

一款强大的视觉语言模型,支持图像和视频输入

Qwen2.5-VL 是一款强大的视觉语言模型,支持图像和视频输入,可用于多种场景,如商品特点总结、图像文字识别等。项目提供了 OpenAI API 服务、Web UI 示例等部署方式,还包含了视觉处理工具,有助于开发者快速集成和使用,提升工作效率。

HunyuanVideo

HunyuanVideo

HunyuanVideo 是一个可基于文本生成高质量图像和视频的项目。

HunyuanVideo 是一个专注于文本到图像及视频生成的项目。它具备强大的视频生成能力,支持多种分辨率和视频长度选择,能根据用户输入的文本生成逼真的图像和视频。使用先进的技术架构和算法,可灵活调整生成参数,满足不同场景的需求,是文本生成图像视频领域的优质工具。

WebUI for Browser Use

WebUI for Browser Use

一个基于 Gradio 构建的 WebUI,支持与浏览器智能体进行便捷交互。

WebUI for Browser Use 是一个强大的项目,它集成了多种大型语言模型,支持自定义浏览器使用,具备持久化浏览器会话等功能。用户可以通过简洁友好的界面轻松控制浏览器智能体完成各类任务,无论是数据提取、网页导航还是表单填写等操作都能高效实现,有利于提高工作效率和获取信息的便捷性。该项目适合开发者、研究人员以及需要自动化浏览器操作的人群使用,在 SEO 优化方面,其关键词涵盖浏览器使用、WebUI、大型语言模型集成等,有助于提高网页在搜索引擎中的曝光度。

xiaozhi-esp32

xiaozhi-esp32

基于 ESP32 的小智 AI 开发项目,支持多种网络连接与协议,实现语音交互等功能。

xiaozhi-esp32 是一个极具创新性的基于 ESP32 的开发项目,专注于人工智能语音交互领域。项目涵盖了丰富的功能,如网络连接、OTA 升级、设备激活等,同时支持多种语言。无论是开发爱好者还是专业开发者,都能借助该项目快速搭建起高效的 AI 语音交互系统,为智能设备开发提供强大助力。

olmocr

olmocr

一个用于 OCR 的项目,支持多种模型和服务器进行 PDF 到 Markdown 的转换,并提供测试和报告功能。

olmocr 是一个专注于光学字符识别(OCR)的 Python 项目,由 Allen Institute for Artificial Intelligence 开发。它支持多种模型和服务器,如 vllm、sglang、OpenAI 等,可将 PDF 文件的页面转换为 Markdown 格式。项目还提供了测试框架和 HTML 报告生成功能,方便用户对 OCR 结果进行评估和分析。适用于科研、文档处理等领域,有助于提高工作效率和准确性。

飞书多维表格

飞书多维表格

飞书多维表格 ×DeepSeek R1 满血版

飞书多维表格联合 DeepSeek R1 模型,提供 AI 自动化解决方案,支持批量写作、数据分析、跨模态处理等功能,适用于电商、短视频、影视创作等场景,提升企业生产力与创作效率。关键词:飞书多维表格、DeepSeek R1、AI 自动化、批量处理、企业协同工具。

下拉加载更多