机器学习数据分析【免费下载链接】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 是一个面向因果推断的 Python 库它把因果图模型与潜在结果potential outcomes两大框架统一在一套 Model → Identify → Estimate → Refute 的工作流之下并提供了可对任意估计方法做假设检验的 refutation/falsification API。读完本文你将掌握 DoWhy 的完整安装与依赖配置方式能独立跑通效应识别与估计的端到端示例并能使用其 Graphical Causal ModelGCM子模块完成异常归因、干预分布采样等超出平均因果效应的复杂因果查询。一、DoWhy 是什么统一两种因果框架决策问题往往要求我们回答改变某个变量会导致什么——例如某个干预动作如何影响结果变量、当前取值是由什么造成的、或者如果某些变量被改变会发生什么。这类问题需要因果推理而 DoWhy 正是为此设计的它通过统一的接口引导用户完成因果推理的各个步骤。从源码结构看DoWhy 的公开入口非常精简。dowhy/init.py 只导出CausalModel、identify_effect、identify_effect_auto、identify_effect_id、EstimandType等符号核心对象CausalModel定义在 dowhy/causal_model.py 中负责编排完整的四步工作流。DoWhy 建立在因果推断两大最有力的框架之上并取二者之长图模型 do-calculus 阶段对效应估计问题DoWhy 使用基于图的判据和 do-calculus 来建模假设、识别非参数因果效应潜在结果阶段一旦效应被识别估计阶段切换到以潜在结果为基础的各种统计方法回归调整、倾向得分、工具变量等GCM 阶段对效应估计之外的因果问题异常归因、反事实估计等DoWhy 在每个节点上显式建模数据生成过程causal mechanisms从而支撑更复杂的因果算法。官方支持的四类因果任务与 README 中 Key Features 一致效应估计识别、平均因果效应ATE、条件平均因果效应CATE、工具变量等量化因果影响中介分析、直接箭头强度、内在因果影响intrinsic causal influenceWhat-if 分析从干预分布采样、估计反事实根因分析与解释将异常归因到原因节点、定位分布变化的来源、估计特征相关性等。其中最具特色的是refutation反证/ falsification API任何估计方法得到的结果都可以用同一套稳健性检查来检验其背后的因果假设这使推断对非专家也更具鲁棒性和可访问性。二、安装与环境要求2.1 三种安装方式当前仓库 pyproject.toml 声明的 Python 支持范围是3.9,3.14classifiers 覆盖 3.9–3.13AGENTS.md 中同样注明 Python 3.9–3.13。README 中写有 Python 3.8实际以仓库构建配置为准。安装最新 release可选 pip、poetry 或 conda 之一pip install dowhypoetry add dowhyconda install -c conda-forge dowhy如果 conda 出现 Solving environment 问题README 给出的处理顺序是先执行conda update --all再安装 dowhy若仍失败可设置conda config --set channel_priority false后重试。开发版需要把依赖工具指向项目仓库例如pip install githttps://gitcode.com/gh_mirrors/do/dowhymain2.2 依赖清单与可选扩展DoWhy 的核心依赖在 pyproject.toml 的[tool.poetry.dependencies]一节中声明关键项包括依赖约束作用cython3.0构建期依赖scipy1.10.0Python ≥3.13 时1.15数值/统计计算statsmodels0.14回归模型等numpy2.0数值计算pandas1.0数据容器networkx3.3Py≥3.10/2.8.5Py3.10因果图结构sympy1.10.1估计量的符号化表示scikit-learn1.0常用机器学习模型causal-learn0.1.4.4因果发现支持numba0.59JIT 加速被 econml 引入可选扩展[tool.poetry.extras]plottingmatplotlib用于绘图pygraphviz/pydot图可视化其中 pydot 支持以 dot 格式输入图econmleconml 0.16用于 CATE 估计见第 4 节。若安装遇到问题README 建议按版本手动安装依赖pip install dependency-nameversion。对图可视化若希望在 Ubuntu / Ubuntu WSL 上使用 pygraphviz 获得更美观的图需先安装 graphviz 及其开发头文件再安装 pygraphvizsudo apt install graphviz libgraphviz-dev graphviz-dev pkg-config pip install --global-optionbuild_ext \ --global-option-I/usr/local/include/graphviz/ \ --global-option-L/usr/local/lib/graphviz pygraphvizREADME 特别提示pygraphviz 在部分平台上可能安装失败上述方式是多数 Linux 发行版下可用的做法也可参考 pygraphviz 官方安装文档。三、效应识别与估计四步工作流实战DoWhy 中大多数因果任务只需几行代码。下面完整继承 README 的 Quick Start 示例估计一个处理变量对结果变量的因果效应。3.1 生成带已知效应的合成数据from dowhy import CausalModel import dowhy.datasets # Load some sample data data dowhy.datasets.linear_dataset( beta10, num_common_causes5, num_instruments2, num_samples10000, treatment_is_binaryTrue)linear_dataset定义在 dowhy/datasets.py其参数语义与 README 示例中的取值可以对照理解beta结果变量生成方程中处理变量v的系数即真值效应大小num_common_causes同时影响处理与结果的共同原因confounderw - v; w - y数量示例中为 5num_instruments工具变量z - v数量示例中为 2num_samples样本量示例中为 10000treatment_is_binary处理是否二值默认为True其他可选参数还包括num_effect_modifiers、num_treatments、num_frontdoor_variables前门变量v - FD - y、离散化选项stochastic_discretization、num_discrete_*与噪声尺度stddev_treatment_noise默认 1、stddev_outcome_noise默认 0.01。函数返回一个字典包含df数据帧、treatment_name、outcome_name、gml_graphGML 格式的因果图、ate数据集的真实 ATE等键变量命名约定是首字母表示角色v处理、y结果、W共同原因、Z工具变量、X效应修饰、FD前门变量。因此示例中beta10意味着真值 ATE 为 10后续可用它对照估计精度。3.2 Model → Identify → Estimate → Refute# I. Create a causal model from the data and given graph. model CausalModel( datadata[df], treatmentdata[treatment_name], outcomedata[outcome_name], graphdata[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_namebackdoor.propensity_score_matching) # IV. Refute the obtained estimate using multiple robustness checks. refute_results model.refute_estimate(identified_estimand, estimate, method_namerandom_common_cause)因果图可以用多种方式定义最常用的是通过 NetworkX 的nx.DiGraph传入示例中则直接传入数据集附带的 GML 字符串。CausalModel构造函数见 dowhy/causal_model.py还支持不显式给图、而用common_causes/instruments/effect_modifiers参数让 DoWhy 自行构建图另有两个值得注意的开关estimand_type默认nonparametric-atemissing_nodes_as_confounders数据中存在但图里没有的变量是否自动当作混杂节点proceed_when_unidentifiable在可能存在未观测混杂导致不可识别时是否继续处理。从源码结构看四个步骤分别落在CausalModel的方法identify_effect、estimate_effect、refute_estimate上另提供do、view_model、interpret、summary、refute_graph等辅助方法。method_name字符串如backdoor.propensity_score_matching会被解析为dowhy/causal_estimators/下对应的估计器类15 种实现涵盖回归、线性回归、广义线性模型、倾向得分回归/加权/匹配/分层、距离匹配、双重稳健、工具变量、两阶段回归、EconML、TabPFN 等。Refute 步骤同样通过字符串选择反证器dowhy/causal_refuters/init.py 的get_class_object会按method_name动态导入并实例化对应模块中的类random_common_cause→RandomCommonCauseplacebo_treatment→PlaceboTreatmentRefuter等。仓库内置的 refuter 包括随机共同原因、安慰剂处理、哑结果、数据子采样、bootstrap、未观测共同原因含 E-value 与敏感性模拟、图反证、多种敏感性分析器线性、部分线性、非参数/Reisz等对应文件均在 dowhy/causal_refuters/ 目录下。3.3 可解释输出DoWhy 强调输出的可解释性分析过程中任何时点都可以检查未测试的假设、已识别的估计量若有和估计值若有。上图所示即为线性回归估计器的典型输出截图源自 README 引用的regression_output.png。完整的可运行示例见 docs/source/example_notebooks/dowhy_simple_example.ipynbGetting Started with DoWhy。四、进阶使用 EconML 估计条件平均处理效应CATE如果关心对谁效果更大可以接入 EconML 的 CATE 方法。注意econml是 pyproject 中的可选 extra需要先安装如poetry install -E econml或pip install dowhy[econml]。README 给出的 DML 代码片段from sklearn.preprocessing import PolynomialFeatures from sklearn.linear_model import LassoCV from sklearn.ensemble import GradientBoostingRegressor dml_estimate model.estimate_effect(identified_estimand, method_namebackdoor.econml.dml.DML, control_value 0, treatment_value 1, target_units lambda df: df[X0]1, confidence_intervalsFalse, method_params{ init_params:{model_y:GradientBoostingRegressor(), model_t: GradientBoostingRegressor(), model_final:LassoCV(), featurizer:PolynomialFeatures(degree1, include_biasTrue)}, fit_params:{}})要点method_name采用backdoor.econml.estimator的分层命名target_units是一个对数据帧求值的 lambda用于圈定目标子群体此处为X0 1的个体init_params指定 DML 的三个 nuisance 模型结果模型model_y、处理模型model_t与最终模型model_final。更多用法可参考 docs/source/example_notebooks/dowhy-conditional-treatment-effects.ipynb。五、GCM超越效应估计的因果推断DoWhy 的 Graphical Causal ModelGCM框架基于 Pearl 的图因果模型把每个变量的数据生成过程显式建模为因果机制causal mechanisms从而支撑异常归因、反事实估计、干预分布采样、分布变化归因等复杂查询。从源码看GCM 模块的公共 API 集中在 dowhy/gcm/init.pyStructuralCausalModel/ProbabilisticCausalModel/InvertibleStructuralCausalModel三类模型anomaly_scores、attribute_anomalies等异常归因函数以及interventional_samples、counterfactual_samples、average_causal_effect等 what-if 函数。README 给出的最小 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)) # 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_draw100)流程拆解建模StructuralCausalModel接收一个 NetworkX 有向图X - Y - Zgcm.auto.assign_causal_mechanisms根据数据为每个节点自动挑选函数因果机制如线性回归、噪声模型等拟合gcm.fit把模型拟合到正常数据上随后可用gcm.evaluate_causal_model评估模型质量因果查询gcm.attribute_anomalies回答Z 的异常是哪个节点引起的示例中Y6.2明显偏离2*X的尺度Y 即根因gcm.interventional_samples则在干预do(Y : 2)下从干预分布中采样 100 个样本。GCM 的完整应用示例在线商店因果归因与根因分析见 docs/source/example_notebooks/gcm_online_shop.ipynb仓库 tests/gcm/ 目录下还有针对异常检测test_anomaly.py、归因test_anomaly_attribution.py、what-iftest_whatif.py、分布变化test_distribution_change.py等的测试用例可作为各 API 行为的验证依据。六、延伸资源、测试与引用用户指南更完整的文档位于 docs/source/user_guide/intro.rst涵盖因果任务效应估计、量化因果影响、What-if、根因分析、因果图建模与 GCM 建模等章节示例 Notebooks全部案例集中在 docs/source/example_notebooks/ 目录包括酒店订单取消、IHDP、Lalonde、中介分析、多重处理、时间序列等主题测试与工程约定仓库自带与dowhy/镜像结构的 tests/ 测试套件以及面向开发者的 AGENTS.md环境搭建、poetry run poe test等测试命令、lint 规则、依赖管理约定可用于理解各模块的验证方式相关生态DoWhy 属于 PyWhy 生态的一部分文档站、Discord 社区入口见 README 顶部。若 DoWhy 对你的工作有帮助请同时引用以下两篇文献BibTeX 同样收录在 README 中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{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: An Extension of DoWhy for Causal Inference in Graphical Causal Models}, journal {Journal of Machine Learning Research}, year {2024}, volume {25}, number {147}, pages {1--7} }适用前提与限制本文基于当前仓库快照撰写——核心依赖以 pyproject.toml 中声明的版本约束为准Python 3.9–3.13、numpy ≥ 2.0 等econml、pygraphviz 等均为可选扩展未安装时相应功能不可用源码中以 try/except 保护可选导入并给出提示性报错linear_dataset的ate等返回值可用于自校验但真实场景下识别与估计的有效性始终取决于所给因果图是否符合领域假设这正是第 3.2 节 Refute 步骤存在的意义。赞分享机器学习数据分析【免费下载链接】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因果推断库安装指南DoWhy因果推断库安装指南 前言 DoWhy是一个强大的Python因果推断库由微软研究院开发并开源。它提供了一套统一的接口来执行因果分析包括因果模型构建机器学习数据分析DoWhy因果推断库从入门到精通的技术指南DoWhy因果推断库从入门到精通的技术指南 什么是DoWhy DoWhy是一个革命性的Python因果推断库它如同机器学习库之于预测任务一样为因果分析领机器学习数据分析【亲测免费】 DoWhy因果推断的Python库DoWhy因果推断的Python库 基础介绍 DoWhy 是一个开源的 Python 库专注于因果推断领域。它提供了统一的接口帮助用户进行因果推理并支持机器学习数据分析上一篇技术方案Vue2后台管理系统 - 企业级中台架构实践下一篇JavaScript Proxy陷阱wtfjs中的代理模式案例创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
阅读完成 · 觉得有帮助?