因果发现:公鸡打鸣会导致太阳升起吗?

你必须要看看的 10 行 Python 代码,用于自动发现因果关系

照片由 埃戈尔·米兹尼克(Egor Myznik) on Unsplash

我最近的研究重点是 因果推理 客户越来越多地要求我超越机器学习预测,回答“假设”的问题,这推动了我的发展。输入问题以推动影响和结果。

最初引起我兴趣的事情之一是——“因果图是如何构建的?”。在许多在线示例中,它们似乎完全成形,但没有解释如何识别节点和链接。

这让我读了 Judea Pearl 和 Dana Mackenzie 的《The Book of Why》(读了好几遍!),其中表达的一种观点是,你无法根据数据逆向设计因果图,也称为有向无环图 (DAG)独自的。

数据可以揭示相关性,但不能揭示因果关系,那么如何“发现”因果关系呢?

注意:本文中的所有数据集均已获得公共使用许可,请参阅文章末尾的参考文献部分以了解所有来源和参考文献。

在我们深入探讨因果发现之前,请考虑……

使用我的推荐链接加入 Medium (如果您使用此链接注册,我将收到一定比例的费用)。

每当我发布新故事时订阅免费电子邮件.

快速浏览一下我之前的文章.

下载我的免费战略数据驱动决策框架.

访问我的数据科学网站 — 数据博客.

考虑以下二进制数据集中的值计数……

注:太阳升起/公鸡数据集是作者创建的合成数据,完整来源和参考详细信息请参阅文章末尾的参考文献部分。

图片作者

我们可以在90.25%的观测中看到太阳升起时公鸡打鸣,但是仅根据数据我们如何知道是太阳升起导致公鸡打鸣还是公鸡打鸣导致太阳升起呢?

太阳未升起时公鸡打鸣或太阳升起但公鸡保持沉默时公鸡打鸣的实例数量几乎相同(50,000 次与 47,500 次),因此无法通过比较相对数据量找到因果答案。

一种方法可能是着眼于时间方面。如果太阳始终在公鸡打鸣之前升起,这将是因果关系的一个很好的指标,但如果我们的公鸡是早起者呢?

答案是咨询领域专家。如果我们能组建一个由占星家、物理学家和家禽养殖者组成的团队,他们就会得出结论:太阳导致公鸡打鸣,而不是相反!

照片由 费德里科·雷斯皮尼 on Unsplash

我没有被太阳升起和公鸡打鸣吓倒,开始寻找已经存在的东西,它可能能够根据数据发挥因果发现的魔力。

有一种名为“NOTEARS”的算法确实声称能够实现因果发现,所以让我们尝试一下,看看它能做什么……

注:天花数据集是作者创建的合成数据,请参阅文章末尾的参考文献部分以获取完整的来源和参考详细信息。

图片作者

该数据集正在对天花疫苗接种的因果关系进行建模。让我们针对它运行 NOTEARS 算法,看看它能做什么……

[('反应?', '疫苗接种?'),
('天花?','反应?'),
(“死亡?”,“反应?”),
(“死亡?”、“天花?”)]

如果我们要可视化 NOTEARS 产生的结果,它会看起来像这样……

图片作者

看起来不太好是吗?根据NOTEARS的说法,死亡是导致天花的原因。从时间的角度来看,天花是先出现的,所以它不可能是由死亡引起的。天花也不会引起反应(疫苗引起反应),反应当然也不会引起疫苗接种。

利用领域专家的知识,我们可以轻松确定疫苗接种对患者是否有反应以及他们是否继续发展疾病具有因果关系,并且反应和天花都与死亡存在因果关系......

图片作者

因此,我们已经确定,即使在非常简单的因果模型中,NOTEARS 因果发现算法也不会产生正确的结果。另外,我之前一篇文章的读者指出,NOTEARS 无法在 Python 3.9 中运行,而我即将升级,这是另一个大问题。

如果您想了解更多关于 NOTEARS 不适合因果关系的信息,这里有一篇优秀的学术论文 — https://arxiv.org/pdf/2104.05441.pdf (马库斯·凯撒和马克西姆·西波斯)。

在我们放弃全自动因果发现之前,让我们看一下 NOTEARS 的替代算法,即“Lasso”算法 –

注意:人口普查收入/毕业生收入数据集已获得公共使用许可,请参阅文章末尾的参考文献部分以获取完整的来源和参考详细信息。

图片作者
图片作者

天哪,Lasso 简直就是一场灾难!它预测一切都会导致其他一切,并且节点也会导致它们自己!

我最后的尝试是尝试 GES、GIES 和 LINGAM 算法,但这些都需要 R 库。我不使用 R,即使我确实设法正确配置,我也永远无法创建其他数据科学家可以使用的可移植代码。

可用的因果发现库和算法不起作用,这强化了《为什么之书》中表达的观点,即因果关系不能仅从数据进行逆向工程。

这个结论促使我开发了自己的方法……

照片由 阿曼达·琼斯(Amanda Jones) on Unsplash

摆在桌面上的牌,我还没有写出因果发现算法。相反,我的算法以一种扭曲的方式实现了相关发现(没有双关语!)。

当我放弃因果发现库时,我仍然需要一种将因果关系可视化的方法,作为与领域专家对话的起点。

我认为我可以轻松计算特征/节点之间的相关性,这至少是一个很好的起点。

我的想法如下:在因果发现模型中,我们通常会识别“效果”,即我们感兴趣的数据特征(就像机器学习预测中的“目标”)。在天花示例中,这是“死亡?”,在毕业生收入示例中,这是收入“greaterThank50k”。

因此,如果任何特征和“效果”之间存在相关性,则因果方向必须是从其他特征到效果,因为它位于“行尾”。

我的下一步是开发一种递归算法,其可视化如下......

图片作者

必须强制排除重复和双向链接。我还希望能够显式包含或排除连接(边缘)以及显式排除特征(节点)。

这些是我为实现因果发现而编写的 10 行递归 Python 代码

为了展示该解决方案的工作原理,我选择了一些有关酒店预订取消数据的数据。

让我们首先读取数据并查看相关性……

注意:酒店预订数据集已获得公共使用许可,请参阅文章末尾的参考部分以获取完整的来源和参考详细信息。

图片作者

发现算法的第一次运行涉及将迭代次数保持在 1 次,因此我们只是查看与“效果”的相关性(应该是因果关系),即酒店预订是否被取消……

图片作者

好的,这不是一个糟糕的开始,让我们将迭代/递归/层数增加到 3,稍微调整相关阈值,看看我们会得到什么......

图片作者

好吧,也不算太糟糕,但它有点“忙”,所以下一步是排除一些我们怀疑可能会导致一些噪音的节点(注意:在现实世界的业务案例中,我们将与之交谈我们现阶段的领域专家)。

图片作者

这看起来开始好起来了。请记住,我的算法确信指向“IsCancelled”的链接是因果关系,因为它是“效果”,因此后面没有任何内容。

树的其他层只是相关的,箭头的方向只是根据算法找到它们的顺序添加的。

与领域专家(或者在这种情况下是我自己的酒店预订经验!)合作,我注意到以下几点 –

  • 从“DifferentRoomAssigned”到“LeadTime”的链接方向错误,因为较长的预订提前时间会增加房间预订更改的可能性,反之亦然。
  • “BookingChanges”和“DifferentRoomAssigned”之间的相关性低于阈值,但它可能是一个重要的因果关系,因此需要将其包括在内。

下一次尝试指示算法进行这些更正 –

图片作者

“未观察到的混杂因素”是我们认为通过提供某些节点之间的链接而影响我们的因果模型的因素,但尚未进行测量,因此未包含在图中。

我去酒店的经历以及对酒店数据集的了解让我怀疑存在一个“未被观察到的混杂因素”影响着酒店数据。

数据中有两家酒店——一家“城市”酒店和一家“度假”酒店。这让我假设这个因果模型中未被观察到的混杂因素是 “入住酒店的理由”.

我的假设是 度假者主要入住度假酒店,商务人士和城市游客主要入住城市酒店.

此外,我假设这两个群体有不同的行为,这是“未观察到的混杂因素”(未观察到是因为数据没有捕获“停留的原因”)。

NOTEARS 和其他类似的算法无法解释“未观察到的混杂因素”,但我开发的算法可以通过明确包含它们来考虑它们,如下所示……

图片作者

最终迭代的结果是酒店数据中因果关系的合理、可读和可理解的可视化,我有信心与领域专家一起探索和完善。这些是关键点……

  • 有一个“未被观察到的混杂因素”,这是停留的主要原因(度假与商务/城市休息)。
  • “国家”对未被观察到的混杂因素有因果影响——从某些国家旅行的人更有可能去度假。
  • 这同样适用于“TotalGuests”。大型聚会更有可能在度假,单身人士更有可能出差,双人则在城市度假。
  • 未被观察到的“入住原因”对“LeadTime”、“HotelType”和“DepositType”有因果影响。
  • “LeadTime”、“DifferentRoomAssigned”、“HotelType”、“DepositType”和“Reason for Stay”(U)都对“IsCanceled”有因果影响。

因果发现 是超越相关链接发现因果链接的过程(即箭头属于相关线的哪一端?)。使用像NOTEARS这样的算法来实现自动化是不可能的,或者至少是极其困难的,因为答案并不单独存在于数据中。

然而,仍然迫切需要将因果关系可视化,以便与领域专家一起探索它,从而构建因果图(也称为有向无环图或 DAG)。

在本文中,提出了一种基于增强相关性发现的算法,仅使用 10 行 Python 代码,可以与领域专家一起使用,反复细化敏感度(阈值)并纠正、添加或删除链接(箭头)并排除不相关的链接节点。

在未来的文章中,这些因果图将用于构建一个完整的因果机器学习模型,该模型可以回答复杂的“假设”问题。输入客户和业务领导者的问题。

如果您喜欢这篇文章,请考虑……

使用我的推荐链接加入 Medium (如果您使用此链接注册,我将收到一定比例的费用)。

每当我发布新故事时订阅免费电子邮件.

快速浏览一下我之前的文章.

下载我的免费战略数据驱动决策框架.

访问我的数据科学网站 — 数据博客.

太阳升起/公鸡打鸣数据

天花数据

毕业生收入/人口普查收入数据

酒店预订数据

因果发现:公鸡打鸣会导致太阳升起吗?通过 https://towardsdatascience 从来源 https://towardsdatascience.com/causal-discovery-does-the-cockerel-crowing-cause-the-sun-to-rise-f4308453ecfa?source=rss—-7f60cf5620c9—4 重新发布。 com/提要

–>

时间戳记:

更多来自 区块链顾问