从数据中学习因果结构#
只有当我们无法基于领域知识或其他信息源构建因果图时,才需要学习因果图。如果您在特定问题中已经有了因果图,您可以跳过本章,继续阅读 反驳因果图。
在许多情况下,给定数据集的真实因果结构可能未知。我们可以利用 图发现 算法来提供与数据集一致的候选因果图。用户可以随后检查、编辑和修改这些图,使其与他们的领域专长或世界知识相匹配。请注意,这些图不应直接使用,因为在完全非参数设置下,从观测数据中进行图发现是一个已被证明不可能的问题。给定一个数据集,存在多个图会导致完全相同的联合分布,因此基于数据集是无法区分的(这样的图构成了 马尔可夫等价类)。因此,图发现算法在学习图时会做出某些假设,并且不能保证学习到的图的有效性。
DoWhy 没有实现图发现算法,但提供了一种简单的方法来输入从发现算法学习到的图。唯一的约束是 DoWhy 要求该算法输出一个有向无环图 (DAG)。未来,我们期望通过与 PyWhy 中的 causal-learn 和 dodiscover 包集成来直接支持学习因果图。
使用 CDT 进行图发现#
给定一个 pandas DataFrame 数据集,以下代码片段使用 LiNGAM 算法学习图并将其加载到 DoWhy 中。该算法实现在因果发现工具箱 (CDT) 包中,需要单独安装。
>>> from cdt.causality.graph import LiNGAM
>>> causal_graph = LiNGAM().predict(dataset)
有关使用 CDT 的完整示例,您可以参考 因果发现示例。
使用 dodiscover 进行图发现#
待定
使用 causal-learn 进行图发现#
待定