ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

DoWhy 快速上手:安装配置、四步因果效应估计与 GCM 根因分析入门指南

DoWhy 快速上手:安装配置、四步因果效应估计与 GCM 根因分析入门指南 机器学习数据分析【免费下载链接】dowhyDoWhy is a Python library for causal inference that supports explicit modeling and testing of causal assumptions. DoWhy is based on a unified language for causal inference, combining causal graphical models and potential outcomes frameworks.项目地址https://gitcode.com/gh_mirrors/do/dowhy点击查看免费下载本文基于 DoWhy 官方文档的 “Getting Started” 章节docs/source/getting_started/index.rst带你完整走通 DoWhy 从安装到首个可运行示例的全流程掌握基于潜在结果框架的“建模—识别—估计—反驳”四步效应推断配方以及基于图形因果模型GCM的三步分析配方并结合仓库源码理解每一步背后的类、方法与命名约定读完即可独立复现文档示例并在自己的数据集上运行。一、安装 DoWhy最简单的安装方式是使用 pip 或 condapip install dowhy或conda install -c conda-forge dowhy关于 Python 版本与更多安装场景官方安装页 docs/source/getting_started/install.rst 明确说明DoWhy 支持 Python 3.9 至 3.13。该页面还覆盖了三类常见场景从源码安装开发版本克隆仓库后使用 Poetry 安装poetry install -E plotting会以可编辑模式安装并附带全部开发依赖可选依赖extras如需以 DOT 格式输入因果图可额外安装pydot或pygraphvizpoetry install -E pydot/poetry install -E pygraphviz。其中 pygraphviz 能渲染出更美观的图但需要先安装 graphviz 系统库官方给出的 Ubuntu 下步骤是sudo apt install graphviz libgraphviz-dev graphviz-dev pkg-config pip install pygraphviz文档同时提醒pygraphviz 在部分平台上可能安装失败需参照其官方安装说明处理Azure Machine Learning 环境在 notebook 单元格中应使用%pip install dowhy而不是!魔法命令以避开终端与 notebook 内核 conda 环境不一致的问题。安装后运行import dowhy无报错即表示成功。从 dowhy/init.py 可以看到包顶层直接导出了核心入口__all__ [ EstimandType, identify_effect_auto, identify_effect_id, identify_effect, CausalModel, enable_notebook_rendering, ]也就是说安装完成后的主要使用入口就是CausalModel因果推断对象式 API和identify_effect系列函数函数式 API以及 GCM 子包dowhy.gcm。二、“Hello causal inference world”统一语言与两大核心能力DoWhy 建立在一套统一因果推断语言之上把两套强大的框架结合起来图形因果模型Graphical Causal Models, GCM与潜在结果框架Potential Outcomes, PO。它使用基于图的准则和 do-calculus 对因果假设进行建模并识别非参数因果效应。官方入门文档选取了 DoWhy 众多功能中的两类代表性能力作为起点效应推断Effect inference切换到以潜在结果为主的方法体系遵循“建模 → 识别 → 估计 → 反驳”四步配方图形因果模型推断GCM-based inference面向根因分析、点态反事实推断、结构分析等场景遵循“建模 → 训练 → 因果分析”三步配方。下面分别展开。三、效应推断四步配方详解官方 Hello World 示例如下直接摘自入门文档from dowhy import CausalModel import dowhy.datasets # Generate some sample data data dowhy.datasets.linear_dataset( beta10, num_common_causes5, num_instruments2, num_samples10000) # Step 1: Create a causal model from the data and given graph. model CausalModel( datadata[df], treatmentdata[treatment_name], outcomedata[outcome_name], graphdata[gml_graph]) # Step 2: Identify causal effect and return target estimands identified_estimand model.identify_effect() # Step 3: Estimate the target estimand using a statistical method. estimate model.estimate_effect(identified_estimand, method_namebackdoor.propensity_score_matching) # Step 4: Refute the obtained estimate using multiple robustness checks. refute_results model.refute_estimate(identified_estimand, estimate, method_namerandom_common_cause)为什么需要四步官方建议系统阅读用户指南的因果效应估计章节也可以直接探索仓库中的基础示例 notebook。下面结合源码逐步骤说明每一步实际做了什么。3.1 Step 1创建因果模型CausalModel示例数据来自dowhy.datasets.linear_dataset其函数定义位于 dowhy/datasets.py。该示例中生成的线性数据包含真实效应beta10、5 个混杂变量common causes、2 个工具变量instruments、10000 个样本并返回包含数据框df、处理变量名、结果变量名以及 GML 格式因果图的字典。CausalModel的构造函数dowhy/causal_model.py关键参数如下参数说明data包含处理变量、结果变量及其他变量的 pandas DataFrametreatment/outcome处理变量与结果变量名支持多个graphDOT 格式的 DAG 字符串或文件路径至少要提供 graph、common_causes、instruments 三者之一否则 DoWhy 会基于数据输入自行构建图并发出警告common_causes/instruments仅在graphNone时生效的混杂变量/工具变量名列表effect_modifiers效应修正变量名不提供时从因果图中推导estimand_type目标 estimand 类型当前仅支持nonparametric-ateproceed_when_unidentifiable存在潜在未观测混杂时是否继续识别missing_nodes_as_confounders数据中未出现在图中的变量是否自动纳入为混杂节点identify_vars是否在初始化时自动计算共同原因、工具变量与效应修正变量从源码看当传入graph时会走init_graph()分支dowhy/causal_model.py把图解析为内部的CausalGraph对象并在identify_varsTrue时自动从图中提取共同原因、工具变量和效应修正变量初始化末尾还会调用summary()打印形如 “Model to find the causal effect of treatment X on outcome Y” 的模型摘要。3.2 Step 2识别因果效应identify_effectidentify_effect定义在 dowhy/causal_model.py。它根据因果图的性质判断目标效应是否可识别若可识别则返回一个概率表达式estimand。方法选择规则method_namedefault默认使用AutoIdentifier依次尝试后门准则、前门准则、工具变量准则等并可配合BackdoorAdjustment策略选择具体的调整集method_nameid-algorithm使用IDIdentifier调用完整 ID 算法求解。识别结果对象会记录所使用的识别方法供第三步的估计器读取源码中通过identified_estimand.set_identifier_method(identifier_name)完成关联见 dowhy/causal_model.py。3.3 Step 3估计效应estimate_effectestimate_effect定义在 dowhy/causal_model.py。method_name是必填参数命名约定为[识别方法].估计方法名。源码 docstring 中列出的常用方法包括倾向得分匹配backdoor.propensity_score_matching倾向得分分层backdoor.propensity_score_stratification倾向得分逆概率加权backdoor.propensity_score_weighting线性回归backdoor.linear_regression广义线性模型如逻辑回归backdoor.generalized_linear_model工具变量iv.instrumental_variable断点回归iv.regression_discontinuity两阶段回归frontdoor.two_stage_regression从方法名解析逻辑dowhy/causal_model.py可以看到当方法名包含三段及以上如backdoor.econml.dml.DML时DoWhy 会把首段当作第三方包名并动态加载对应的估计器类——这正是接入EconML等外部库的机制。对于条件效应conditional treatment effects估计你可以用同一套 API 调用 EconML 的方法参考仓库中的条件效应示例 notebook。所有内置估计器位于 dowhy/causal_estimators/ 目录例如propensity_score_matching_estimator.py、linear_regression_estimator.py、doubly_robust_estimator.py等命名规则是估计方法名_estimator对应的类。3.4 Step 4反驳估计值refute_estimaterefute_estimate定义在 dowhy/causal_model.py。它通过稳健性检查检验估计值对假设的敏感度如果加入随机混杂后估计值基本不变说明结果不是由未被考虑的共同原因驱动的。源码 docstring 列出的常用反驳方法添加随机生成的混杂random_common_causeHello World 示例所用添加与处理和结果均相关的未观测混杂add_unobserved_common_cause用随机变量替换处理安慰剂处理placebo_treatment_refuter移除数据随机子集data_subset_refuterBootstrap 重采样bootstrap_refuter用随机变量替换结果dummy_outcome_refuter全部反驳器实现位于 dowhy/causal_refuters/ 目录每个方法对应一个文件如random_common_cause.py、bootstrap_refuter.py。refute_estimate还支持通过**kwargs传入random_seed保证结果可复现。除四步主流程外CausalModel还提供了几个源码中可直接确认的辅助方法适合在实际项目中随手使用model.do(x, identified_estimand, method_name...)对干预do(Xx)后的结果取值做估计dowhy/causal_model.pymodel.view_model(layout..., size..., file_name...)可视化因果 DAGmodel.refute_graph(...)通过条件独立性检验检验因果图与数据是否匹配model.interpret(method_name...)调用 dowhy/interpreters/ 中的解释器如混杂分布、倾向得分平衡输出模型解读。四、图形因果模型推断三步配方对于根因分析、点态反事实推断、结构分析等功能DoWhy 采用图形因果模型。GCM 同样提供了一组可直接调用的因果问题接口。官方示例import networkx as nx, numpy as np, pandas as pd from dowhy import gcm # Lets generate some normal data we assume were given from our problem domain: X np.random.normal(loc0, scale1, size1000) Y 2 * X np.random.normal(loc0, scale1, size1000) Z 3 * Y np.random.normal(loc0, scale1, size1000) data pd.DataFrame(dict(XX, YY, ZZ)) # Step 1: Model our system: causal_model gcm.StructuralCausalModel(nx.DiGraph([(X, Y), (Y, Z)])) gcm.auto.assign_causal_mechanisms(causal_model, data) # Step 2: Train our causal model with the data from above: gcm.fit(causal_model, data) # Step 3: Perform a causal analysis. For instance, root cause analysis, where we observe anomalous_sample pd.DataFrame(dict(X[0.1], Y[6.2], Z[19])) # Here, Y is the root cause. # ... and would like to answer the question: # Which node is the root cause of the anomaly in Z?: anomaly_attribution gcm.attribute_anomalies(causal_model, Z, anomalous_sample)三步对应的源码位置建模gcm.StructuralCausalModel定义于 dowhy/gcm/causal_models.py经 dowhy/gcm/init.py 导出输入是一张 NetworkX 有向图gcm.auto.assign_causal_mechanisms会根据数据自动为每条边分配合适的因果机制如线性回归机制训练gcm.fit来自 dowhy/gcm/fitting_sampling.py用观测数据拟合各节点的条件分布因果分析gcm.attribute_anomalies定义于 dowhy/gcm/anomaly.py回答“异常样本中哪个节点是目标变量异常的根因”。示例中 Z19 明显偏离 Y 的期望值Y6.2 时 Z≈18.6 的倍数关系归因结果会指向真正异常的节点 Y。从 dowhy/gcm/init.py 的导出列表还可以看到 GCM 模块的完整能力面远超根因分析异常打分anomaly_scores及多种 scorer、反事实采样counterfausal_samples、干预采样interventional_samples、分布变化检测distribution_change、distribution_change_robust、置信区间confidence_intervals、特征相关性feature_relevance_sample、parent_relevance、模型验证refute_causal_structure等。想深入学习 GCM官方推荐从用户指南的GCM 建模章节开始或运行仓库中的GCM 基础示例 notebook更多完整案例还包括gcm_rca_microservice_architecture.ipynb微服务架构根因分析、gcm_supply_chain_dist_change.ipynb供应链分布变化等均位于 docs/source/example_notebooks/ 目录。五、Jupyter Notebook 渲染enable_notebook_rendering在 Jupyter notebook 中工作时可以在 notebook 顶部调用一次dowhy.enable_notebook_rendering激活 SymPy 的美化打印器把符号数学表达式如识别出的 estimand渲染为排版整齐的 LaTeX 输出import dowhy dowhy.enable_notebook_rendering()该函数实现于 dowhy/init.py内部仅调用sympy.init_printing()。文档特别强调了它不会在import dowhy时自动执行的原因sympy.init_printing会全局替换sys.displayhook可能干扰同一会话中展示非 SymPy 对象的其他库例如 PyTorch。因此这是一个显式开关需要富文本渲染的用户主动开启。仓库中所有示例 notebook 都把dowhy.enable_notebook_rendering()作为第一步调用可直接作为参考写法。六、进一步学习路径入门文档在末尾列出了若干外部教程、KDD 教程、微软研究院视频与专著作为延伸资料此处从略外链。在仓库内部以下资源可形成完整学习闭环四步因果推断方法详解用户指南·因果效应估计进一步细分为后门估计的回归方法、基于倾向得分的方法、条件效应估计、效应识别与自然实验IV/断点估计反驳与敏感性分析用户指南·因果估计反驳覆盖数据子集、随机混杂、安慰剂处理、图反驳与多种敏感性分析方法GCM 用户指南GCM 建模与推断、根因与异常解释、What-if 与反事实可运行示例docs/source/example_notebooks/ 下数十个 notebook覆盖简单示例dowhy_simple_example.ipynb、LaLonde 数据dowhy_lalonde_example.ipynb、中介分析dowhy_mediation_analysis.ipynb、GCM 反事实gcm_counterfactual_medical_dry_eyes.ipynb等。七、小结DoWhy 的入门路径可以概括为两条主线面向效应推断的CausalModel四步 API建模 → 识别 → 估计 → 反驳和面向GCM 分析的三步 API建模 → 训练 → 因果问题求解。前者用图准则保证识别的严谨性用统一的identifier.estimator方法名约定屏蔽底层估计器差异用反驳器提供假设稳健性检查后者则以StructuralCausalModel为核心把根因归因、反事实采样、分布变化检测等问题统一为对因果图的函数调用。安装pip install dowhyPython 3.9–3.13后即可按本文示例直接复现再依据各步对应的源码文件dowhy/causal_model.py、dowhy/gcm/init.py与用户指南章节继续深入。赞分享机器学习数据分析【免费下载链接】dowhyDoWhy is a Python library for causal inference that supports explicit modeling and testing of causal assumptions. DoWhy is based on a unified language for causal inference, combining causal graphical models and potential outcomes frameworks.项目地址https://gitcode.com/gh_mirrors/do/dowhy点击查看免费下载相关推荐DoWhy 因果推断库实践指南从 Model–Identify–Estimate–Refute 四步工作流到 GCM 根因分析DoWhy 因果推断库实践指南从 Model–Identify–Estimate–Refute 四步工作流到 GCM 根因分析 DoWhy 是一个面向因果推断机器学习数据分析DoWhy图形因果模型(GCM)高级应用DoWhy图形因果模型 GCM 高级应用 本文深入探讨了DoWhy图形因果模型 GCM 框架的高级应用涵盖了GCM的核心概念、结构因果模型构建与拟合、干预与反机器学习数据分析DoWhy因果推断库安装指南DoWhy因果推断库安装指南 前言 DoWhy是一个强大的Python因果推断库由微软研究院开发并开源。它提供了一套统一的接口来执行因果分析包括因果模型构建机器学习数据分析上一篇探索Neo4j Browser图形数据库的交互式探索利器下一篇终极Android图片选择权限指南解决ImagePicker在Android 7.0的文件访问难题创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进