本章内容包括:
- 为什么以及何时我们需要因果推断
- 因果推断是如何工作的
- 观察数据和实验数据之间的区别
- 相关统计概念回顾
在许多企业和组织中,当我们使用机器学习时,我们的目标通常是对未来会发生什么做出有根据的预测。例如,一家医院可能想要预测哪些患者很快会变得非常生病,以便医生可以优先治疗这些患者。通常,仅仅能够做出这样的预测就足够了;并不总是需要理解事情发生的原因。
因果推断是关于弄清楚为什么事情会发生。更重要的是,它涉及到询问可以做些什么来改变一个结果。例如,一家医院可能希望了解哪些因素会导致某种疾病。如果它知道了这些原因,就可以采取措施,例如建议公共卫生政策或支持研究,开发预防这种疾病的药物,旨在减少生病的人数。
为什么因果关系对于从事数据工作的人很重要?作为数据科学家或分析师,我们最感兴趣的问题通常涉及理解因果关系。我们说 X 导致 Y,如果我们改变 X,Y 也会发生变化。例如,如果你的目标是留住客户,你可能想知道哪些行动会使他们留下。这是一个因果问题:你试图找出导致客户保持率的原因,以便加以改善。这一理念适用于许多领域,比如设计营销策略、设定价格、为应用添加新功能、在组织中做出变革、出台新政策和开发药物等。理解因果关系帮助我们看到决策的影响,并确定哪些因素影响我们关心的结果。
思考问题
考虑一下你在查看数据时感兴趣的问题。这些问题中有多少是关于因果关系的?提示:许多因果问题涉及到观察决策的效果或识别(特别是那些你可以改变的)影响结果的因素。
理解因果关系并不简单。例如,假设你在试图弄清楚为什么有些人比其他人更容易生病。当你查看数据时,你注意到住在乡村的人似乎比住在城市的人更容易生病。这是否意味着住在乡村会导致人们生病?如果这是真的,搬到城市应该会让你生病得少一些。但这就是全部吗?住在城市也有其挑战,比如更多的污染、缺乏新鲜食物和压力。所以,城市居民生病得更少可能是因为城市人通常有更高的收入,能够负担更好的医疗保健、更有营养的食物和健身房会员。如果真是这样,搬到城市可能并不会让你更健康。实际上,如果没有足够的收入来支付医疗保健费用或缓解城市健康风险,你甚至可能会生病得更厉害。
这个例子展示了理解因果关系的一个常见挑战。仅仅因为住在城市和更健康通常是相伴发生的,并不意味着住在城市就是让人们更健康的原因。这种情况就是我们常说的“相关性不代表因果性”的原因。仅仅因为两件事情同时发生并不能证明其中一件事是另一件事的原因。可能有其他更重要的原因,比如人们拥有的金钱,这在我们的例子中就是关键因素。
这就是为什么学习因果推断对数据科学家如此重要:它为我们提供了估计因果效应的工具。换句话说,它帮助我们分辨出单纯的巧合(相关性)和真正的因果关系(因果性),从而识别出导致特定结果的实际因素。
1.1 因果推断是如何工作的
让我们继续以试图弄清楚某种疾病的原因为例。假设你有一组数据,包含了病人的详细信息(如年龄、去过医院的次数以及其他类似信息)和他们接受过的治疗。那么,你会怎么做来理解导致这种疾病的原因呢?让我们通过解决因果问题的五个步骤来探讨如何确定这些原因。我们将在本书中详细介绍这些步骤,图1.1中展示了这些步骤的流程。
1.1.1 第一步:确定数据类型
首先要理解的是你的数据是如何创建的。有时我们可以在收集数据之前设立并运行实验。这样,我们可以控制环境,确保了解我们感兴趣的某个因素的影响。当我们这样做时,我们处理的是实验数据。然而,我们并不总是能够进行实验。例如,如果我们想了解吸烟对青少年的影响,并且知道吸烟会导致癌症,我们不能在伦理上让一些青少年吸烟。或者如果我们正在查看历史数据,我们不能回到过去重新设立实验。当我们不能通过实验来获取数据时,我们就拥有了所谓的观察数据。这两种数据类型是非常不同的。通常,我们比观察数据更信任实验数据的结果。
当我们无法进行实验时,这时因果推断就派上用场了。如果你在提问因果问题时不能使用实验数据,那么你就需要因果推断。在我们城市—乡村的例子中,没有进行实验;我们只是收集了数据。这对于我们判断某些疾病原因的例子也是如此。
1.1.2 第二步:理解你的问题
如果你想弄清楚什么导致人们生病,你必须收集所有可能的原因。除了年龄、性别、地点等基本信息,你还需要患者的病史。虽然“信息越多越好”的说法可能让你联想到大数据的口号,但在这里它具有特别的重要性。在机器学习中,你可以在没有所有变量的情况下构建准确的预测模型;但在因果推断中,缺少一个相关变量可能会导致失败。
例如,对于某些疾病,了解共病(除你感兴趣的疾病外的其他疾病)可能非常重要。假设因为某种原因你无法获取患者共病的信息。在因果推断中,你将无法确定你研究的疾病的原因。然而,你可能能够用机器学习创建一个成功的预测模型。这是因为共病会导致更频繁的住院。因此,即使没有关于患者共病的详细信息,你可能也会有高度相关的信息,比如患者的就诊频率。这些信息可能足以让机器学习预测患者生病的可能性。
1.1.3 第三步:创建模型
一旦你收集了所有重要的因素,你就创建一个因果模型,试图通过考虑可能影响“原因”和“结果”变量的潜在混杂变量,来隔离真正的因果效应。因果模型是概念框架,通常使用有向无环图(DAGs)表示,这些图形直观地描绘了变量之间的因果关系,包括潜在的中介变量和混杂变量。在因果DAG中,变量表示为节点,变量之间的因果关系表示为箭头。在本书的第三章中,你将学到更多关于DAGs的因果建模内容,我们将在本书的大部分内容中使用它们。另一种因果建模的方法是使用方程式,我们将在第10章中讨论这一方法。
你可以选择简单的模型,使用较少的因素和假设。但如果模型过于简单,它可能在现实世界中表现不佳,并且无法帮助你做出准确的预测。另一方面,更复杂的模型可能在数学公式、计算方法或检查复杂假设是否在现实中成立时,处理起来会比较困难。
最终,判断一个模型是否足够好的方法是确定它是否对你的目标有用。这取决于你想要实现什么。例如,如果你为个人应用程序构建一个模型来寻找图片中的物体,某些错误可能是可以接受的。但如果这个模型是用于自动驾驶汽车,一个小错误可能会导致事故。在这种情况下,你需要一个超准确的模型,以确保它的可靠性和实用性。
1.1.4 第四步:分享你的模型
你已经有了模型,它是由特定的假设构建的,并且有一个明确的目标(通常是估计因果效应)。明确列出这些假设和目标,并与分析中涉及的专家和其他人合作是至关重要的。这一步非常重要,因为你可能忽略了重要的变量,或者误解了变量之间的联系。在这个例子中,你可能会与医生和生物学家分享你的模型,以获得他们的意见。
与他人进行沟通是一个良好的实践,有助于确保你提出了正确的问题,达成了总体目标的一致性,并准确识别了可能的变量及其关系。这个协作过程有助于减少盲点,增强分析的稳健性。
1.1.5 第五步:应用因果推断技术
在最后一步,是时候将因果推断技术应用到你的数据集,并使用你的模型来解决因果问题了。记住,仅仅因为两个变量是相关的,并不意味着一个导致了另一个。通常,当存在相关性但没有直接因果关系时,往往是因为有第三个因素影响了两个变量。这些第三因素变量被称为混杂变量,本章将详细解释它们。
非正式地讲,在因果推断中,混杂变量的存在是所有问题的根源,因为它们可能导致误导性的结论。幸运的是,因果推断提供了一系列公式、算法和方法来处理它们。这包括一系列步骤:
- 问问自己,你能用现有的信息回答哪些问题,并确定哪些因果问题可以通过模型和数据来回答。有时,缺乏关于混杂变量的信息会成为一个问题。识别哪些情况可以克服,并考虑为其余问题提供替代方案,例如收集新数据或找到替代变量。
- 使用你的数据来辨别相关性和因果性,并估计因果效应。这是通过一组特定的公式来完成的。本书的大部分内容将专门讲解如何、何时以及为何使用这些公式;如何为不同类型的问题选择适当的公式;以及如何通过统计学和机器学习技术有效应用它们。
在本书中,你将看到三种估计因果效应的不同技术。我们将讨论每种技术的应用时机和方式:
- 调整公式 — 调整公式是一个数学公式,旨在去除混杂变量的影响:也就是说,去除那些同时影响处理或决策变量和结果的因素。本书的主要内容将涉及这一公式及其应用。主要公式在第二章中解释,其变体将在第四至第八章中详细讲解。
- 工具变量 — 一些方法使用一个额外的变量,称为工具变量。工具变量是一个与任何混杂变量无关的变量,仅直接影响处理而不影响结果。它作为一个独立的变化来源。本书将讲解这种技术的基本形式,详见第十章。
- 时间序列相关技术 — 这些技术是计量经济学家发现的,特别适用于时间序列数据,包括差异中的差异、回归不连续设计和合成控制。就像工具变量一样,这些技术有很多版本,本书将只专注于它们在时间序列中的应用,详见第十一章。
除了获取因果估计外,你还需要计算置信区间,详见第八章。计算置信区间有一般方法,如自助法(bootstrapping),以及针对这三种技术的特定方法,通常包含在各自的软件包中。
正如我所说,因果推断有两种框架可以使用。一个由图达奖得主Judea Pearl主要推广,使用DAGs。另一个是基于潜在结果(POs)的,这种方法更接近统计学和计量经济学的思维方式,由Donald Rubin、James Robins、Guido Imbens和诺贝尔奖得主Joshua Angrist等人开发和推广。在本书的第一部分和第二部分,我们将使用DAGs的语言;在第三部分,我们将使用POs。每个框架使用不同的符号和基本概念,但它们本质上是相似的。对于许多问题,两者会给出相同的结果,但在某些情况下,选择其中一个框架更为合适。
1.2 因果模型与机器学习预测模型的对比
本书的主要原则很简单:你对因果推断工具和问题背景的理解越深刻,你从因果分析中得出的结论就会越可靠。目标是让你具备扎实的理解,以便你能够自信地在日常工作中应用因果推断。因此,我们将深入探讨数学内容,包括算法和统计计算。如果你来自机器学习领域,刚开始你可能会觉得这些细节有些压倒性,并且会想知道为什么需要学习这些内容。从某种意义上讲,因果推断更接近统计学而非机器学习。简而言之,你需要了解因果推断的理论基础,因为与机器学习的预测模型不同,因果结论的准确性很难直接确定。因此,为了评估结论的正确性,因果推断的实践者需要对他们的模型内部机制有更深的理解。
例如,了解模型设计的复杂性或具备领域知识,并不是成功构建预测机器学习模型的前提。例如,你可能在没有任何领域知识的情况下赢得Kaggle竞赛。你也可以使用支持向量机(SVM)创建成功的预测模型,而不需要理解模型背后的复杂数学。同样,你可以使用一组嵌入向量(embeddings)来制作非常准确的文本分类器,而不需要知道这些嵌入是如何创建的。你还可以训练可靠的神经网络,而不理解不同梯度下降策略之间的数学差异。
当然,在预测模型之上构建一个值得信赖的产品确实需要了解模型是如何运作的。如果没有这种理解,你的模型可能会引入偏差,或者在更严重的情况下,对社会造成危害。这就是我们在机器学习中关注公平性和可解释性的原因——它们帮助我们解决这些问题,确保技术的负责任和伦理使用。
与预测建模不同,因果推断需要对问题的四个关键领域有扎实的理解:
- 定义:像虚假相关、混杂变量、干预等概念非常复杂,但它们反映了现实的各个方面。如果没有清晰的理解,你的因果模型可能会存在缺陷。
- 假设:知道何时应用特定技术由假设指导。在本书中,许多假设内在地嵌入在有向无环图(DAG)中。
- 风险和局限性:识别哪些信息可以从数据中推断出来,哪些不能,以及理解忽略相关变量的后果,对于因果推断至关重要。这些考虑会显著影响你的结论。
- 目标:清晰定义你试图估计的内容至关重要。定义目标有助于指导整个因果推断过程。
让我们用一个例子来说明这两种模型之间的区别。当你使用建筑师的设计图建造房子时,你可以检查完工后的房子,确保每个细节(墙壁、天花板、门等)都符合设计图。这样,你就能知道房子是否建造得正确。类似地,在机器学习中,你可以通过在测试数据集上进行交叉验证来评估训练后的模型是否会按预期工作。本质上,一旦你的模型完成,假设未来的数据与过去的数据相似,你就可以评估模型的表现如何。
但是,假设你想确保你的房子能够承受地震。你如何评估房子是否抗震?这是一个因果问题(地震会对房子的结构完整性产生什么影响?),需要采用因果方法。等待一次真正的地震是不现实的,因此你会探索其他方法来增加信心:
- 确定正确的抗震建筑过程:你依赖于有关地震如何影响房屋的理论,并根据该理论建造房子。这确保了你按正确的方式建造了房子,并且你会仔细监督每个建造步骤,以确保其遵循理论。
- 模拟情景:如果理论不完全适用,或者你希望获得更多的保证,你可以创建一个模型并模拟小规模地震,观察房子的反应。在因果推断中,这相当于创建合成数据来测试你计划使用的技术的有效性。
虽然确保正确的建筑过程和模拟情景增加了信心,但它们并不是决定性的解决方案。尽管如此,它们会增强你对结果的信心。即使你的发现是正确的,如果你不相信它们,你也不会根据结论采取行动。
你可能会想,因果推断问题是否有类似于交叉验证的工具。不幸的是,正如本书中将讨论的那样,这样的工具并不存在。知道你的结论是否正确的唯一方法是将它们在现实世界中进行测试,或进行像A/B测试或随机对照试验(RCT)这样的实验。本质上,因果推断的目标——理解在与实际情况不同的情境下会发生什么——意味着没有测试,实现对结论准确性的100%确定几乎是不可能的。
1.3 实验研究
正如我们之前讨论的,是否拥有实验数据决定了我们是否需要因果推断。在本节中,我们将介绍A/B测试,也称为随机对照试验(RCTs),并探讨它们为何被视为建立因果关系的金标准。尽管本书并不专注于A/B测试,许多因果推断方法试图模仿A/B测试的做法。这就是为什么理解A/B测试非常重要。
1.3.1 动机实例:部署一个新网站
假设你在一个在线商业公司工作,比如一个电子商务网站。这个网站对公司至关重要,因为高质量的网站能让用户感到舒适,提供更好的体验并带来更多的销售。过去两年里,常客们告诉你他们对网站的不满,因此你清楚需要改进的地方。公司决定对网站进行全面更新,加入所有客户要求的新功能。在IT部门的六个月辛勤工作后,更新版的网站上线了。
现在你开始质疑这些努力是否值得。新网站是否提高了用户的参与度和销售额?你基于最忠实客户的反馈进行了更新,这些反馈看起来很可靠。但是,对一个群体有效的功能可能并不适合所有人。你的常客有特定的需求,这些需求可能并不代表大多数用户。因此,你意识到,监控网站的性能指标,以确定新版本是否成功,是至关重要的。
一个月后,你开始跟踪数据,查看网站访问量随时间变化的图表(见图1.2)。乍一看,似乎网站在新版本上线之前失去了访问量,而在新版本上线后,访问量开始增加。这似乎表明你的努力得到了回报!
你在假期后发布了新网站,你意识到这个时机可能解释了初期访问量的下降和随后访问量的增加。访问量的下降可能仅仅是由于假期的冷清,而访问量的回升可能是正常的假期后增长,而不一定是新网站功能的结果。但你有一种直觉,如果没有新网站,这一增长可能会更小。为了真正理解网站更新的效果,你考虑将当前的访客数据与去年同期的数据进行比较。
但复杂性并不仅仅在于考虑季节性因素。其他因素也可能影响网站流量。例如,最近的营销活动可能在吸引更多访客方面发挥了重要作用。这一层复杂性表明,评估新网站的成功需要考虑各种潜在的影响因素,而不仅仅是其发布时机。
先思考,再阅读
还有哪些因素可能会影响网站访问量? 除了季节性因素,可能还存在其他影响因素:
- 营销活动可能提升了网站流量。
- 也许你的竞争对手犯了一个错误,将他们的客户吸引到了你这里。
- 新的规定(例如欧盟的《通用数据保护条例》[GDPR])可能影响了客户的信任和网站的可用性。
- 新的优秀员工可能发挥了重要作用。
- 与去年相比,整体的社会经济形势可能有所改善。
当你深入分析时,会发现评估新网站效果并不是一件简单的事。要真正比较新旧网站,理想情况下,你需要两种情境:一种是非常稳定的环境,其中除了网站,其他一切都和去年相同——这种情境在今天瞬息万变的商业环境中很少见。另一种情境则是识别并考虑所有可能影响网站访问量的因素,包括那些你甚至没有意识到的因素。例如,或许某个竞争对手进行了重大变动,间接影响了你的流量,但你无法准确指出他们做了什么。还有一些未知因素——这些影响你网站流量的变量,而你对此毫无察觉。这些未知因素特别具有挑战性。
鉴于实现这两种理想情境的难度,问题随之而来:有没有其他方法可以自信地判断新网站是否成功?这个挑战突显了在现实环境中进行因果推断的复杂性,因为在实际情况中,控制甚至识别所有变量往往是不可能的。
1.3.2 A/B测试
避免我们讨论过的这些问题的最有效方法是进行A/B测试:一种旨在提供我们所需清晰度的特殊实验。然而,在深入探讨A/B测试之前,理解事件之间为何会产生因果关系非常关键。这一基础理解为我们欣赏A/B测试如何隔离改变一个变量(如网站设计)对结果(如网站访问量或销售额)的影响铺平了道路,帮助我们更清晰地了解因果关系。
培养你的直觉
我们的主要目标是弄清楚哪一个版本能获得更多的访问量。为此,我们将首先查看图1.2中的数据,并分析其中的挑战。然后,我们将逐步提出解决方案并进行改进。这个过程将自然引导我们解释什么是A/B测试。
我们曾大致地说,X导致Y,如果改变X会导致Y的变化。在我们的情境中,X是网站版本,Y是网站的访问量。根据这个定义,要实证地衡量X对Y的影响,你需要改变X并看看Y是否变化。但你面临的挑战是,在改变X时,不能同时改变可能影响Y的其他因素。例如,如果你在推出新网站的同时进行了一次新的营销活动,那么很难确定Y的任何变化是由于网站本身还是营销活动引起的。
在理想的情况下,为了准确评估新网站对访问量的影响,你需要两个完全相同的宇宙:一个使用旧网站,另一个使用新网站。然后,任何访问量的差异都可以直接归因于网站版本的不同。不幸的是,创建这样的平行宇宙并不现实,因此你必须找到另一种方法。
一般来说,两个主要因素可能会在任何给定时间影响网站的访问量:环境或背景因素和访问网站的用户类型。为了公平比较新旧网站版本,你希望这两个因素尽可能相同。
确保两个版本在相同环境条件下运行的一个方法是进行实验,让两个网站同时上线。这样的设置意味着,任何外部变化,如新法规或竞争策略,将对两个版本产生相同的影响。
现在的挑战是决定哪些用户看到哪个版本的网站。从技术上讲,用户可以通过Cookies来识别,这样你就可以根据这一标识将流量引导到特定的版本。从商业角度看,将你最频繁的用户引导到新网站似乎很有逻辑,因为是他们的反馈促使了这些变化。虽然这在商业上是合理的,但它使实验变得复杂。如果只有频繁的用户看到新版本,就很难确定访问量的任何变化是由于网站改进还是因为这些特定用户更倾向于更频繁地访问。
这突显了一个关键点:无论你使用什么特征来分配网站版本,都可能会对实验结果产生偏差。这引出了一个问题:访问量的变化是否真的是由于网站的修改,还是由于你选择的特定用户群体的行为所致?
确保不引入任何偏差的唯一方法是完全随机地决定谁看到哪个版本。假设对于每个用户(每个用户都有唯一ID),你进行一次虚拟的掷硬币决定他们使用版本A还是版本B。由于ID的存在,他们将始终使用一个版本——每次访问你的网站时,他们不会切换版本。这个过程确保了,如果你有很多用户,A组和B组将具有相同的人口特征分布。因此,诸如他们访问你网站的频率、年龄、来源等可能影响他们如何使用你的网站的因素,会在两组之间均匀分配。
A/B测试是一种实验,用来测试两个不同的选项A和B,以查看哪个更适合你设定的目标。两个选项同时进行测试,用户会被随机分配到A或B选项,而不考虑他们的个人特征。这种方法确保两个选项在相同的条件下进行测试,如果你有足够的用户,两组在访问你网站的人的重要特征上会是相似的。
1.3.3 随机对照试验
A/B测试已经使用了很长时间。在医疗领域,它们被称为随机对照试验(RCTs),并且已有几百年的历史。我们所知道的最早的一次试验发生在1747年,当时詹姆斯·林德正在寻找治疗坏血病的方法。基本的思路是一样的。假设你有一种新的治疗方法,你认为它可能治疗某种疾病。你想测试它是否有效。因此,你设立了两个小组:一个(干预组)接受新药物,另一个(对照组)接受其他东西作为对照,例如旧药物或安慰剂(无效的治疗)。这就是你的A组和B组。重要的是,不要根据诸如年龄等因素将人分配到任何一组,因为那样你就无法知道治疗是否独立起作用,还是因为组内成员的特征导致了效果的不同。相反,治疗分配应该是随机的,就像A/B测试中一样。正式来说,A/B测试是一种RCT。但尽管“RCT”这个术语在医疗领域常常被使用,A/B测试在公司,特别是在线公司中更为常见。对于本书,我们将两个术语视为相同的意思:我们有一个治疗或决策要做,且我们想要看看它如何影响某个特定的结果。
1.3.4 进行A/B测试的步骤
A/B测试的进行方式与科学方法本身相似。主要目标是提出假设,然后进行实验看它是否成立。更详细的解释请查阅“进一步阅读”部分。在这里,我们仅提供简要概述。
第一步:假设与实验设计
实验从假设开始,假设应概述你感兴趣的治疗或决策与主要结果之间的因果关系。例如,如果有一种新的疾病治疗方法,你的起始假设可能是该新方法与旧方法一样有效(即新方法不一定更好)。这个假设表明,切换到新方法不会提供额外的好处。然而,如果新治疗方法确实更优秀,实验应提供足够的证据来驳斥这个假设。
在确定假设后,你需要设计实验。设计可能会有显著差异,特别是在网站的A/B测试与新医疗治疗的RCT之间。RCT通常更复杂,因为它们涉及人的健康(这需要遵守许多规则和国际标准并尊重隐私)。它们还必须考虑使用安慰剂的心理效应以及为研究找到志愿者。另一方面,数字平台上的A/B测试可以更简单。通常没有伦理问题,用户甚至可能在不知情的情况下参与测试。
第二步:执行
这是你执行实验的阶段,必须非常小心,尤其是在随机化过程中,避免犯任何错误。这里的错误可能导致不正确的结论。
第三步:分析
实验完成后,你将得到数据,显示每个小组的反应。例如,你可能发现接受新方法治疗的80%的患者恢复了,而接受旧方法治疗的只有70%恢复了。这些数据可以非常简化地呈现如下:
- 旧治疗:1, 0, 0, 1, 1, 1, 1, 0, 1, 1
- 新治疗:1, 1, 1, 0, 1, 1, 1, 1, 1, 0
在这里,“1”表示患者恢复,“0”表示没有恢复。你也可以查看其他结果,若有需要。现在,最重要的问题是,“新治疗比旧治疗更好吗?”通过10%的恢复率提升,看起来可能是的。
两组之间的平均结果差异被称为平均治疗效应(ATE)。它告诉我们治疗相比之下的效果有多大。ATE在因果推断中非常重要,并将在第2章详细解释。
重要解释
因为你是随机地将人分配到组中,如果你的样本足够大,那么两个组将具有相似的特征,如年龄。这意味着,当你计算一个组的平均结果时,你在估算如果每个人都接受该治疗会发生什么。因此,计算ATE是在估算如果新治疗施用于整个群体与如果旧治疗施用于整个群体时的效果差异。
一旦你计算出ATE,接下来的问题是,“如果你以相同的方式再次进行实验,你会得到相同的结果吗?”如果你认为答案是“否”,那么你就不能完全相信结果。
实际上,如果你重复实验,你不能期望得到相同的结果。每次运行实验时,每个人的情况可能都会稍微变化,这可能会改变他们的结果。这使你想知道多少结果是由于偶然因素引起的。区分信号和噪声是统计学中的一个关键部分。通常,A/B测试的随机性通过假设检验和p值来分析。有些人则偏好贝叶斯假设检验。我们在这里不会深入讨论这些方法,但如果你感兴趣,可以在“进一步阅读”部分找到更多信息。
需要注意的是,RCT(和A/B测试)可以告诉我们两个选项是否导致了不同的结果,但它们并没有解释为什么。例如,如果一个新的网站设计与旧版相比有许多变化,并且你看到访问量有所不同,你不能确定是哪一项具体的变化产生了差异。另一方面,如果你的测试改变了某些小的方面,并且没有产生大的效果,你可能需要一个非常大的人群才能看到任何差异。所以,你必须找到平衡点。
检查点
让我们强调一下,A/B测试或RCT在以统计信心建立因果关系中的重要性。它们不是可选的;它们是确认因果关系的最可靠方法。如果你对这个问题不确定,我们建议重新查看1.4.2节。当你完成每一步时,思考一下你可能会做哪些不同的操作。将你的问题和思考留到接下来的部分,看看事情是否变得更加明晰。
1.3.5 A/B测试和RCT的局限性
A/B测试和RCT是检测因果关系的金标准:只要可能,你应该始终进行A/B测试或RCT。然而,像任何工具一样,它们也有局限性。在以下情况中,因果推断可以作为替代方法,这时A/B测试或RCT不可行:
- 实验不可行:例如,如果你想知道竞争对手的新品如何影响你的销售,试图要求竞争对手随机化向哪些客户展示新产品并将他们的销售数据发送给你,几乎是不可能的。
- 实验不道德:如果你想看看吸烟是否会导致儿童患癌,那么让一些儿童吸烟并将他们分配到干预组显然是不道德的。
- 实验需要时间或成本高:如果你想安全地了解一种治疗是否有长期副作用,实验需要很长的时间。
- 缺乏外部效度:通常,RCT需要招募参与者进行实验。这些人可能对参与实验有特别的兴趣(比如金钱、潜在的疾病康复等)。因此,他们可能并不能代表潜在使用治疗的普通人群体。在这种情况下,我们说缺乏外部效度。
问题
在你的组织中,你能运行哪些实验来回答感兴趣的因果问题?你会如何设计这些实验?
提示:你可以尝试设计与本章介绍部分中你给出的答案相关的实验。
1.4 观察性研究
实验很棒,因为它们能够清晰地揭示两个变量之间的因果关系。但你并不是总能做实验。当你无法进行实验时,你就进入了观察数据的领域:那些不是通过A/B测试或RCT获得的数据。本节将讨论没有A/B测试时可能出现的问题。观察数据似乎涵盖了我们通常使用的大多数数据。
思考问题
你们组织使用哪些类型的观察数据?
一些观察数据的例子包括:
- 将你的营销活动与客户行为关联的客户数据库
- 根据公司决策跟踪销售变化
- 不同国家如何应对COVID-19以及病毒传播的影响
通常,大多数数据都用于评估社会政策,而没有进行实验。我们习惯于从观察数据中得出结论(有时是对的,有时则不那么准确)。接下来,我们将探讨为什么观察数据在使用时可能会让人感到棘手。
何时需要因果推断?
每当你想基于观察数据做出决策时,你就需要因果推断。如果你继续深入因果推断的学习,你会发现因果推断对于从RCT或A/B测试中提取无法通过其他方式提取的信息也很有用。然而,为了简化起见,我们将从仅考虑观察数据的因果推断开始。
如前所述,“相关性不代表因果性”是统计学中的一句名言。在这里,相关性意味着两个事物同时发生,而不仅仅是数学公式。但它能误导到什么程度呢?考虑一下图1.3,展示了街机收入与计算机科学博士数量之间的关联。它们的数学相关性为0.98,非常高。这可能让人觉得其中一个导致了另一个。然而,如果你停下来想一想,你就会意识到这个观点并不合理。
以上内容
请查看Tyler Vigen的精彩网站《虚假相关》(<www.tylervigen.com/spurious-co…
仅仅因为两件事情是相关的,并不意味着其中一件事导致了另一件事。但为什么它们会相关呢?通常是有原因的!往往是由于一个共同的原因。例如,人口的增加可能解释了为什么街机收入和计算机科学博士的数量都在上升。更多的人可能意味着更多的街机顾客和更多的学生追求高等教育。
人类经常认为,如果两件事同时发生,那么一定有一个共同的原因。虽然这并不总是正确的,但有时候这样思考是有帮助的。共同原因影响这两件事的概念可以通过图表来展示,比如图1.4所示。
1.4.1 模拟合成数据
在上一节中,你发现一个因素可以将另外两个因素联系在一起。这很有道理,对吧?但你能检查这个想法是否正确吗?完全可以。你可以通过创建合成数据集并在其上尝试你的想法来验证这一点。
我们将使用虚构的数据来演示两件事可能看起来相互关联,实际上并没有联系。在这个案例中,我们将创建一个美国人口的数据,命名为population。然后,我们将创建两个新的变量:revenue(收入)和doctorates(博士学位数量)。它们的值仅基于人口变量,而不会互相影响。最终,你会发现doctorates和revenue看起来似乎是有关联的。这是我们所说的虚假相关(spurious correlation)的一种编程示例。
Listings 1.1 和 1.2 的代码显示了doctorates和revenue之间的相关性为0.95。这个例子并没有证明人口是街机收入和计算机科学博士学位数量之间关联的实际原因。它只是表明,它们之间的联系可能是由一个第三方因素(如人口)引起的,这个因素同时影响了它们两个。
Listing 1.1 (R) 构建一个合成数据集,生成虚假相关
set.seed(1234)
time <- 2000:2009
population <- 280 + 3 * (time - 2000) +
rnorm(n=length(time), sd=0.1) #1
revenue <- 1.25 + (population - 280) * 0.015 +
rnorm(n=length(time), sd=0.05) #2
doctorates <- 700 + (population - 280) * 30 +
rnorm(n=length(time), sd=10) #3
cor(doctorates, revenue)
#1 以百万为单位的人口
#2 以十亿美元为单位的收入
#3 以人数为单位的博士学位数量
Listing 1.2 (Python) 构建一个合成数据集,生成虚假相关
from numpy.random import uniform, seed, normal
from numpy import arange, corrcoef
import pandas as pd
seed(1234)
time = arange(2000, 2010)
population = 280 + 3 * (time - 2000) + \
normal(size=len(time), scale=0.1) #1
revenue = 1.25 + (population - 280) * 0.015 + \
normal(size=len(time), scale=0.05) #2
doctorates = 700 + (population - 280) * 30 + \
normal(size=len(time), scale=10) #3
corrcoef(doctorates, revenue)[0][1]
#1 以百万为单位的人口
#2 以十亿美元为单位的收入
#3 以人数为单位的博士学位数量
在本书中,我们将使用大量的合成数据集。原因是,当我们作为分析师处理数据时,我们的主要目标是使用这些数据创建一个模型,来模拟现实世界是如何运作的。数据背后有一个过程在生成这些数据,例如物理法则或事物的实际运作方式。我们试图通过反向工程,基于我们拥有的数据,推断出现实世界如何运作。
但这里有个棘手的问题:我们没有直接的方式来看这些规则。我们只能通过数据和实验来推测它们。所以,即使我们做得非常好,我们也不能百分百确定我们的结论与现实中的运作方式完全吻合。总是会有一些不确定性。图1.5展示了我们如何使用数据来描绘现实。
当我们学习一个新的科学课题时,了解自己是否做对了是非常重要的。在我们的案例中,当我们处理真实数据时,正如我们之前提到的,我们无法始终确保结果的正确性。我们需要一个过程来验证我们的方法论。
应对这一挑战的一种方法是:与其使用真实数据,不如自己创建数据,然后用我们认为最合适的分析方法来分析这些数据。因为我们完全知道这些数据是如何创建的,所以就像拥有了“真相”或正确答案。这帮助我们确保我们的结论是准确的。
可以把它想象成学习游泳。一开始,你从一个安全、浅水的游泳池开始,在那里你可以触摸到底部。这类似于分析数据时知道正确答案的情形。一旦你在这个安全的环境中学会并练习了游泳,你就可以开始面对更具挑战性和陌生的情形,比如在大海中游泳。这就像是在分析真实数据时,不知道提前的正确答案。
1.4.2 混杂因素下的因果效应
本节介绍了一个基本的图形,你将在本书中经常看到。这是因果推断所需的最简单例子:当第三个变量影响两个变量时,估计一个变量对另一个变量的影响。这个第三个因素可能会在变量之间创建相关性,从而混淆主要效应,导致经典的“相关性不代表因果性”问题。本书的第一大步是学习如何使用一种叫做调整公式的方法来分离这种偏差,称为混杂偏差,我们将在第二章中详细讨论这一内容。
这里有一个情境供你思考。你是一名医生,有一种新的药物治疗某种疾病。初步研究表明它比当前的治疗方法更有效。你已经尝试给老年患者使用这种新药,因为他们的风险更高。然而,并不是所有的老年患者都使用新药,有些年轻患者也使用了。现在,你想根据自己的经验来判断这种新药的效果是否真的如研究所说的那么有效。这个情况可以通过图1.6中的图表来可视化。
年龄影响药物选择(治疗),因为在决定使用哪种药物之前,你会考虑患者的年龄。此外,年龄还会影响恢复情况,因为老年人通常比年轻人恢复得慢。当你试图了解治疗或决策对结果的影响,而另一个因素同时影响这两者时,我们称这个因素为混杂变量。在这个情境中,年龄就是一个混杂变量。通常,我们遇到的不仅仅是一个,而是多个混杂变量。我们试图衡量其效果的因素通常被称为治疗或决策变量。我们感兴趣的结果,或者我们希望看到治疗效果的方面,称为结果。参见图1.7。
“混杂变量”这个术语被使用,是因为这个因素会使你的数据分析变得困难。很难判断结果的变化是来自治疗本身,还是来自混杂变量。在这个例子中,新药大多给老年人使用,因此你不能确定更好的恢复率是由于药物的效果,还是因为患者的年龄。这个情况意味着你用来衡量新治疗对每个人有效性的ATE公式在这种情况下无法使用。
思考问题,再阅读
如果你进行RCT或A/B测试,可能会有哪些混杂变量?
要理解这一点,我们先回顾一下什么是混杂变量:它是一个影响治疗选择和结果的因素。但在实验中,治疗选择仅仅是基于随机(因为治疗是随机分配的)。这种随机性不会改变结果,因此我们可以说在实验数据中没有混杂变量。这是实验数据比观察数据更可靠的一个关键原因。
因果推断为我们提供了工具,当我们拥有来自观察的数据,而不是实验数据时,可以使用这些工具。图1.7,无论有一个还是多个因素,是你会经常看到的内容。本书的前几章专注于这种情境。具体来说,你将学习如何在可能的情况下,获得ATE的无偏估计。
1.5 回顾基本统计概念
在这一节中,我们将回顾一些对本书很重要的统计学概念。你可能在基础统计学课程中已经学过这些内容。如果你已经对这些概念很熟悉,可以跳过这一节。然而,彻底理解条件概率和期望非常重要,因为我们将在本书中大量使用这些概念,它们对理解因果推断至关重要。
1.5.1 经验分布与数据生成分布
在我们处理的所有问题中,通常有两个不同的分布。第一个是生成数据的分布。实际上,物理机制负责创建我们的数据,这就是我们所说的数据生成过程。这个过程可能有一些不确定性,因此存在一个固有的概率分布,我们称之为数据生成分布。除非是特殊情况,否则我们不知道这个分布。创造我们数据的规律通常是由自然界决定的,我们无法获得这些信息。
以掷硬币为例。如果我们掷硬币n次,正面朝上的概率P(H) = p,我们预计从长远来看,当n趋向无穷大时,我们将获得p比例的正面和1 - p比例的反面。问题是,我们并不知道p的确切值。尽管硬币经过精心制作,但过程可能仍然存在一些不精确。我们通常假设p = 1/2,但我们需要一个无限样本量来保证这个结论。因此,在现实中,我们并不知道p的真实值。
另一个分布是我们从样本中获得的经验分布。假设我们掷硬币五次,结果是H, H, T, T, T。我们可以总结出如表1.1所示的结果。我们预计,如果不是掷五次,而是掷更多次,样本中获得H的概率将接近p。
表1.1 从样本H, H, T, T, T得到的经验分布
| 结果 | 概率 |
|---|---|
| H | 2/5 |
| T | 3/5 |
从形式的角度来看,我们之所以能够这样做,是因为样本本身就是一个分布:经验分布。如果我们假设每个观察值的权重相同,且样本大小为n,则每个观察值的概率为1/n。在我们的例子中,每个观察值的权重为1/5,概率分布正是表1.1所示的分布。该分布的期望值与样本平均值相同:
经验分布与数据生成分布之间有密切关系。当n趋向无穷大时,经验分布趋向于数据生成分布。这个结果被称为Glivenko–Cantelli定理,这是一个技术性的内容,超出了本书的范围。这个定理同样适用于多种情况,例如变量是连续的,或者我们有一个随机向量而不是随机变量。
假设我们希望正面朝上获胜;我们可以用1表示成功(正面),用0表示反面。设xi表示第i次掷硬币的结果;因此,之前的样本(H, H, T, T, T)变成了1, 1, 1, 0, 0。那么,获得正面的比例与xi的均值一致,记作x̃ = 2/5。同时,这个平均值可以计算为:
数据生成分布的平均值的类比,称为期望值,是通过P(H) = p这一事实计算的。对于给定的二元随机变量X,期望值的计算公式为:
因此,我们得到的正面概率为x̃ = 2/5,但如果我们有一个非常大的样本,这个概率应该接近p。
注意我们用来区分样本(x̃)和数据生成分布或期望(E[X])的符号。在统计学中,我们关注的是回答与样本和生成数据的基础过程之间差异相关的问题,例如我们是否有足够大的样本量来对从样本中获得的结果充满信心。
记住
在确定因果效应时,第一步是识别正确的公式。之后,你可以考虑最佳的统计方法。第8章深入讨论了最优统计方法以及如何推断置信区间。
因此,在选择公式时,我们关注的是数据生成分布。当我们探索统计方法时,讨论会转向经验分布。
1.5.2 条件概率和期望的复习
为了阅读本书,你需要对条件概率和条件期望有扎实的理解。如果你已经熟悉它们,可以跳过这一节。然而,根据我的经验,条件概率比看起来更难理解。我在数学学位的第一年就学过它们,但直到多年后,我才感到自己完全掌握了它们。因此,如果这些概念中的任何一个不完全清楚,请跟随我一起阅读这一节。
条件概率
我们从假设我们有一些数据,如表1.2所示,其中包含变量X、Y和Z。值a是故意使用的,目的是帮助我们习惯条件概率的抽象符号。
表1.2 模拟数据
| X | Y | Z |
|---|---|---|
| 3 | 0.03 | A |
| 6 | –24.08 | A |
| a | 7.01 | A |
| –2 | –3.00 | B |
| a | 10.89 | B |
在这种情况下,条件化X = a意味着获取一张新表,并选择那些X变量等于a的案例。如果从编程的角度来看,我们可以过滤数据或选择那些行,如表1.3所示。变量Y和Z在X = a的条件下分别表示为Y|X = a和Z|X = a。条件化X = a时,Y和Z的分布可能发生变化。例如,在表1.2中,Z有3/5的概率取值为A,而在表1.3中,Z取值为A的概率为1/2。从符号上讲,我们可以写出这些量:P(Z = A) = 3/5 和 P(Z = A|X = a) = 1/2。
表1.3 条件化X = a后的模拟数据
| X | Y | Z |
|---|---|---|
| a | 7.01 | A |
| a | 10.89 | B |
你可能曾通过数学公式接触过条件概率。
其中,逗号(,)代表“和”:P(Z = A, X = a)表示Z = A和X = a同时发生的概率。这种公式的优点在于,它告诉你如何根据原始的表1.2以及事件Z = A和X = a出现的频率(概率)来计算这些条件概率。这个公式来自我们在计算P(Z = A|X = a) = 1/2时所遵循的步骤,即将以下量进行划分:
当我们将分子和分母都除以5(即表1.1中的行数)时,表达式保持不变,因此我们得到以下表达式:
我们可以同时对两个或多个变量进行条件化。例如,条件化X = a和Z = B,我们得到表1.4。在X = a和Z = B的约束下,变量Y表示为Y|X = a, Z = B。与之前相同,我们可以计算P(Y = 10.89|X = a, Z = B) = 1,因为10.89是在X = a和Z = B的约束下,Y的唯一取值。
表1.4 条件化X = a和Z = B后的模拟数据
| X | Y | Z |
|---|---|---|
| a | 10.89 | B |
一般来说,当你有两个变量X和Y时,条件化X = x可能会改变Y的行为,Y取值的频率将与条件化前不同:
有时,为了使符号更易读,我们会稍微简化符号,写作P(Y|X)或甚至P(Y|X = x),而不是完整的正确表达式P(Y = y|X = x)。条件概率可以通过以下公式从原始概率P计算得到:
条件期望
现在,通过条件化,我们得到了一个新的变量,例如之前的例子Y|X = a,我们可以从中计算一些典型的量,例如P(Y = 7.01|X = a) = 1/2(因为我们只有两个观察值)或P(Y = 1|X = a) = 0。特别地,我们可以计算这个新变量的期望值,称为条件期望:E[Y|X = a]。在这个例子中,由于对于Y|X = a,每个观察值的权重是1/2,所以E[Y|X = a] = 7.01×1/2 + 10.89×1/2 = 8.95。注意,如果变量Y是二元的,那么E[Y|X] = P(Y|X)。要理解这一点,你只需要应用条件期望的定义。因为Y是分类变量,它只有两个取值:0和1。所以,
在图1.8中,我们使用模拟数据通过另一个例子展示了变量的分布与其条件分布和期望值之间的区别。在左侧,我们展示了一个变量Y的样本,这是两个不同高斯分布样本的组合,它们具有相同的特性:一个基于x = 0,期望值为0,另一个基于x = 2,期望值为2。正如你所看到的,无条件分布样本的均值为1。但在右侧,相同的y值被分为两个组,每组对应其相应的x值:左侧组是Y|X = 0的分布,右侧组是Y|X = 2的条件分布。黑色点代表期望值E[Y|X = 0]和E[Y|X = 2]。为了提高可视化效果并避免重叠,这些点在x轴上进行了抖动处理。
在本书中,我们可能需要将E[Y|X]作为一个抽象量来讨论,这意味着它与我们处理的任何特定数据集或问题无关。在机器学习或因果推断中,我们关注的是某个变量X与结果Y之间的关系。那么,你如何一般性地理解E[Y|X]呢?数学符号E[Y|X]只是一个公式:
E[Y|X]是选择特定值x和y的简写:也就是说,我们实际上在谈论的是E[Y|X = x]。 选择数据中那些X = x的案例。 计算这个特定组的变量Y的均值。
通常,因为表达式E[Y|X = x]仅依赖于x的值,E[Y|X = x]可以看作是x的函数。
到目前为止,我们通过数值示例(表1.4)和可视化示例(图1.8)讨论了条件期望的计算。为了便于使用抽象量E[Y|X = x],现在让我们描述一个需要你根据这里给出的描述来想象条件期望的例子。选择一个你喜欢的人群。假设你心里把人群分为两组:30岁以下的人,称为A组;30岁以上的人,称为B组。这个分组变量称为X。因此,X = A表示30岁以下的人群,X = B表示30岁以上的人群。假设你对研究人口的身高感兴趣,表示为变量Y。你可以想象计算A组的平均身高的过程。这个量在数学上有一个名称。正如你刚刚看到的,选择A组并计算其平均身高表示为E[Y|X = A]。同样,选择B组并计算其身高的过程表示为E[Y|X = B]。注意,尽管我们没有任何数据,但我们讨论的是抽象量。
另一个你可能感兴趣的情况是计算条件概率和条件期望时,当你有变量之间的明确函数关系时。假设你有一个线性模型,而不是数据:
其中,ε是一个以0为中心的高斯分布。这意味着X可能会以自己的方式变化,而Y依赖于X和一个随机因素。条件化X = x只是意味着X的值将被设为x,而变量Y仍然可能由于ε的随机性而变化。一般来说,如果Y、X和ε通过某个函数Y = f(X, ε)相关联,条件化X = x意味着现在Y将在X固定的情况下变化:
因此,条件期望E[Y|X = x]必须仅考虑ε的随机性来计算,因为x是一个固定值。
在第二章中,你将看到,在混杂因素的存在下,计算条件概率并不总能为因果问题提供一个好的答案。你需要找到一个公式,从计算中去除混杂因素的影响。
请注意,条件概率的概念是统计学或概率论的概念,而不是因果概念。条件概率P(Y|X)只是意味着计算事件Y在事件X发生的情况下发生的频率。因此,它描述了事件的频率或概率。
1.6 进一步阅读
A/B测试:
- “Refuted Causal Claims from Observational Studies”:experimentguide.com/refuted_obs…
- Controlled Experiments on the Web: Survey and Practical Guide by Ron Kohavi, Roger Longbotham, Dan Sommerfield, and Randal M. Henne (Springer, 2009): 链接
- The chapter "A/B Testing" in David Sweet's Experimentation for Engineers (Manning, 2023): 链接
- Experimentation Works: The Surprising Power of Business Experiments by Stefan Thomke (Harvard Business Review Press, 2020): 链接
- Trustworthy Online Controlled Experiments: A Practical Guide to A/B Testing by Ron Kohavi, Diane Tang, and Ya Xu (Cambridge University Press, 2020): 链接
因果推断:
- The Book of Why: The New Science of Cause and Effect by Judea Pearl and Dana Mackenzie (Basic Books, 2018). 这里你会找到因果推断的基本哲学,但没有直接可以应用于问题的公式或工具。
- Causal Inference In Statistics: A Primer by Judea Pearl, Madelyn Glymour, and Nicholas P. Jewell (Wiley, 2016). 这是一本技术性的入门书,比你现在阅读的书更为技术性。
- Causality: Models, Reasoning, and Inference by Judea Pearl (Cambridge University Press, 2020) 是一本很棒的书,但阅读起来较为困难。
- Mostly Harmless Econometrics by Joshua Angrist and Jörn-Steffen Pischke (Princeton University Press, 2009) 是计量经济学的经典之作。他们还写了一个更为入门的版本,叫做 Mastering ’Metrics: The Path from Cause to Effect (Princeton University Press, 2014)。
- Causal Inference for Statistics, Social, and Biomedical Sciences: An Introduction by Guido Imbens and Donald Rubin (Cambridge University Press, 2015) 重点讨论RCT和因果推断之间的界限。
1.7 章节小测
在结束本章时,确保你对关键概念有扎实的理解。以下是你应该能够清晰简洁回答的核心问题。如果你无法回答,建议重新阅读相关部分:
- 观察数据和实验数据有什么区别?
答案见1.1.1节 - 何时应进行A/B测试或RCT?
答案见1.3.5节 - 在进行A/B测试时,如果样本足够大,为什么两个组会具有相同的人群特征?
答案见1.3.4节,“步骤3:分析” - 给出一个相关性并不总能为因果推断提供正确证据的原因。
答案见1.4节 - 在A/B测试中,你能找到哪些混杂变量?
答案见1.4.2节
总结
- 因果推断使用方法和工具,借助数据揭示治疗与结果之间的因果关系。
- 混杂因素会影响治疗和结果,单纯从相关性中识别因果关系会变得复杂。识别分析中的混杂因素至关重要。
- 始终在可能的情况下进行实验(RCT或A/B测试)。随机治疗分配消除了混杂因素,提供最清晰的估计。
- 当实验不可行时,你将处理观察数据。因果推断对于使用这种数据做出明智决策至关重要。
- 有向无环图(DAGs)有助于说明变量之间的关系,并识别可能的混杂路径。
- 平均治疗效应(ATE)量化了一个变量对另一个变量的因果影响。ATE的计算受到混杂因素的影响,后续章节将详细讨论。