因果分析系列1--入门

  • 因果分析系列1--入门
  • 因果简介
  • 相关不是因果
  • 基本符号定义
  • 数值分析
  • 偏差
  • 图解偏差


因果分析系列1–入门

因果简介

目前机器学习非常擅长回答预测问题。新的人工智能浪潮并未给我们带来真正的智能,其只是人工智能的一个关键组成部分——“预测”。我们可以用机器学习做各种奇妙的事情,唯一的要求是把我们的问题转化为预测问题。想把英语翻译成葡萄牙语吗?建立一个ML模型,在给定英语句子时预测葡萄牙语句子。想识别人脸吗?建立一个ML模型,预测图片的某一部分是否有一张脸。想造一辆自动驾驶汽车吗?建立一个ML模型来预测车轮的方向,并在汽车周围的图像和传感器显示时制动器和油门上的压力。

然而,ML并不是万能的。它可以在非常严格的边界条件下创造奇迹,如果它使用的数据不满足模型的假设前提,它仍然会失败。再举一个预测的例子,“在许多行业,低价格与低销售额有关。比如,在酒店业,旅游旺季以外的价格都很低,需求最高、酒店爆满的时候价格就高。考虑到这些数据,一个天真的预测可能表明,提高房价将导致更多的房间售出。”

ML在这种逆因果关系类型的问题上是出了名的糟糕。他们要求我们回答“如果”的问题,经济学家称之为反事实。如果我现在要的不是这个价格,而是另一个价格,会发生什么?如果我不吃低脂饮食,而是吃低糖饮食会怎么样?如果你在银行工作,提供信贷,你必须弄清楚改变客户线如何改变你的收入。或者,如果你在当地政府工作,你可能会被要求想办法让教育系统更好。你应该给每个孩子平板电脑,因为时代的数字知识告诉你?或者你应该建一个老式的图书馆?

在这些问题的核心是一个因果调查,我们希望知道答案。因果问题渗透在日常问题中,比如想办法让销售额上升,但在我们非常关心的个人难题上,因果问题也起着重要作用:我必须上昂贵的学校才能在生活中取得成功吗(教育能带来收入吗)?失业会降低我找到工作的机会吗?钱转移到穷人身上会降低犯罪率吗?你所处的领域并不重要,很可能你已经或将不得不回答某种因果问题。不幸的是,对于ML,我们不能依赖相关类型的预测来解决它们。 回答这种问题比大多数人想象的要难。你的父母可能对你重复过“联系不是因果关系”,“联系不是因果关系”。但事实上,解释为什么会发生这种情况要复杂一些。这就是因果推理的介绍。至于这本书的其余部分,它将致力于研究如何使联想成为因果关系。

相关不是因果

凭直觉,我们便知道相关不是因果关系。如果有人说,给学生提供平板的学校比没有的学校学生成绩更好,你可以很快指出,那是因为有平板电脑的学校可能更富有,并不一定是平板提高了学生成绩。因此,即使没有平板电脑,他们也会比其他学校更好。所以,我们无法断定在课堂上给孩子们提供平板电脑会提高他们的学习成绩。我们只能说,学校里的平板电脑与学习成绩相关。

基本符号定义

为了超越简单的直觉,我们首先定义一些符号,作为我们谈论因果关系的共同语言。
因果分析 算法 python 因果分析技术_因果分析 算法 python 为个体因果分析 算法 python 因果分析技术_平板电脑_02的处理状态.

因果分析 算法 python 因果分析技术_因果偏差_03

因果分析 算法 python 因果分析技术_平板电脑_04 表示个体因果分析 算法 python 因果分析技术_平板电脑_02的结果变量,是我们感兴趣的变量。我们想知道处理是否有影响。
如上文提到的例子中,学校是否提供平板电脑就是处理变量因果分析 算法 python 因果分析技术_平板电脑_06,学生的学习成绩就是我们感兴趣的结果变量因果分析 算法 python 因果分析技术_平板电脑_07

有趣的是,我们无法在同一时间观察到同一学校对同一群体提供平板和不提供平板的状态。这也是因果推理的根本问题。基于此,因果推理中提出了潜在结果。它们是潜在的,表示如果接受了某种治疗,会发生什么。其中确实发生的潜在结果为事实,而未发生的潜在结果为反事实。此时,利用一个附加的下标对潜在结果进行表示:

因果分析 算法 python 因果分析技术_因果偏差_08是未经处理的个体因果分析 算法 python 因果分析技术_平板电脑_02的潜在结果。
因果分析 算法 python 因果分析技术_因果偏差_10相同个体因果分析 算法 python 因果分析技术_平板电脑_02接受处理的潜在结果

回到我们的例子,因果分析 算法 python 因果分析技术_因果偏差_10是学生因果分析 算法 python 因果分析技术_平板电脑_02,如果TA所在的教室有平板电脑,学生因果分析 算法 python 因果分析技术_平板电脑_02的学习成绩。如果学生i拿到了平板电脑,我们可以观察到因果分析 算法 python 因果分析技术_因果偏差_10。如果没有,我们可以观察因果分析 算法 python 因果分析技术_因果偏差_08。根据潜在结果,我们可以定义个体处理效果:

因果分析 算法 python 因果分析技术_因果分析入门_17

当然,由于因果推断的基本问题,我们永远无法知道个体治疗效果,因为我们只能观察其中一个潜在的结果。相反,关注平均处理效应相对简单一点,其定义如下。

因果分析 算法 python 因果分析技术_因果分析入门_18

其中,因果分析 算法 python 因果分析技术_因果分析入门_19是期望值。另一个更容易估计的量是对处理组的平均处理效应:

因果分析 算法 python 因果分析技术_因果偏差_20

现在,我知道我们不能同时看到两种可能的结果,但是为了论证的目的,我们可以增加一些前提假设。如,假设我们收集了4所学校的数据,我们知道他们是否给学生提供了平板电脑,以及他们在年度考试中的分数。在这里,因果分析 算法 python 因果分析技术_平板电脑_06是否提供平板电脑就是处理方法,因果分析 算法 python 因果分析技术_平板电脑_07就是测试分数。
下面进行数值模拟

数值分析

import pandas as pd
pd.DataFrame(dict(
    i= [1,2,3,4,5,6],
    y0=[500,600,800,700,550,660],
    y1=[450,600,600,750,600,720],
    t= [0,0,1,1,0,1],
    y= [500,600,600,750,550,720],
    te=[-50,0,-200,50,-50,60]
))

这里的因果分析 算法 python 因果分析技术_平板电脑_23是最后一列的平均值,即平均处理效应:

因果分析 算法 python 因果分析技术_因果偏差_24

这意味着平板电脑平均会使学生的学习成绩降低31.7分。这里的因果分析 算法 python 因果分析技术_因果分析 算法 python_25是当因果分析 算法 python 因果分析技术_因果科学_26时,对应的最后一列的平均值,:

因果分析 算法 python 因果分析技术_因果科学_27

这就是说,对于接受处理的学校来说,这些平板电脑使学生的学习成绩平均下降了30分。
实际上,有些结果我们永远不会知道,真实情况下,上表是这样的:

import numpy as np
pd.DataFrame(dict(
    i= [1,2,3,4,5,6],
    y0=[500,600,np.nan,np.nan,550,np.nan],
    y1=[np.nan,np.nan,600,750,np.nan,720],
    t= [0,0,1,1,0,1],
    y= [500,600,600,750,550,720],
    te=[np.nan,np.nan,np.nan,np.nan,np.nan,np.nan]
))

你可能会说,我们能否仍然取处理组的平均值,并将其与未处理组的平均值进行比较?例如:
因果分析 算法 python 因果分析技术_因果偏差_28
对吗?Oh,NO!注意结果的不同。这是因为我们犯了非常严重的错误,即误把相关当因果。因为提供平板的学校和不提供平板的学校初始条件就存在差异,并不具有可比性。为了能够更好的理解原因,让我们来看看因果推理的主要敌人----偏差。

偏差

用潜在结果来表示这一点,即被处理者的因果分析 算法 python 因果分析技术_因果分析入门_29不同于未处理者的因果分析 算法 python 因果分析技术_因果分析入门_29。记住,被处理因果分析 算法 python 因果分析技术_因果分析入门_31是反事实。我们不能观察它,但我们可以推理。在这种特殊情况下,我们甚至可以利用我们对世界如何运转的理解,走得更远。我们可以说,接受处理的学校比没有接受处理的学校富有。这是因为那些能够负担得起给孩子们提供平板电脑的学校也能负担得起其他有助于提高考试成绩的因素。

考虑到这一点,我们可以用非常简单的数学来说明为什么相关不是因果。相关性通过因果分析 算法 python 因果分析技术_因果分析入门_32来度量。在我们的例子中,这是有平板电脑的学校的平均测试分数减去没有平板电脑的学校的平均测试分数。另一方面,因果关系是用因果分析 算法 python 因果分析技术_平板电脑_33来衡量。

为了了解它们之间的关系,我们采用关联度量并用潜在结果替换观察到的结果。对于处理组,观察结果为因果分析 算法 python 因果分析技术_因果偏差_34。对于未处理组,观察结果为因果分析 算法 python 因果分析技术_因果科学_35

因果分析 算法 python 因果分析技术_因果科学_36

现在,让我们加减因果分析 算法 python 因果分析技术_平板电脑_37。这是一个反事实的结果。如果他们没有接受处理,它会告诉他们处理的结果。

因果分析 算法 python 因果分析技术_因果分析入门_38

最后,我们对上式重新进行整理、合并,如下所示:

因果分析 算法 python 因果分析技术_因果偏差_39

这个简单的数学包含了我们在因果问题中遇到的所有问题。这是一种需要非常认真地把握和真正理解的东西,可以用多种不同的方式来解释。事实上,让我们更深入地了解一下。我们把它进行分解。首先,这个等式说明了为什么相关不是因果关系。如我们所见,相关等于处理效应加上一个偏差项。偏差取决于处理组和对照组在处理前的差异,即,如果他们都没有接受处理
当有人告诉我们教室里提供平板电脑能提高学习成绩时,我们现在可以确切地说为什么我们会怀疑。我们认为,在这个例子中,因果分析 算法 python 因果分析技术_因果科学_40,即,有能力给孩子提供平板的学比没有能力提供平板的学校好,不管平板对学习成绩的影响如何

为什么会这样?
后面讨论到混杂因素,我们将更进一步地讨论这个问题,但是现在你可以想到偏差,因为许多我们无法控制的事情随着处理而改变。因此,经过处理和未处理的学校并不仅仅在是否提供平板电脑上有所不同。他们在学费、地点、师资等方面也各不相同。。。要说教室里的平板电脑提高了学习成绩,我们需要有平板电脑的学校和没有平板电脑的学校在学费、地点、师资等方面平均来说彼此相似。
既然我们理解了这个问题,那么如何解决呢?即从统计意义上来看,什么情况下相关等于因果。
如果因果分析 算法 python 因果分析技术_平板电脑_41,那么相关就是因果! 理解这一点不仅仅是记住等式,还有一个强烈的直觉论点,即处理组和对照组在处理前是可比的。或者,在未处理的情况下,如果我们能观察到它的$Y_0 $,那么它的结果将与未处理的结果相同。从数学意义上来讲,偏差项将消失:

因果分析 算法 python 因果分析技术_平板电脑_42

另外,如果处理组和未处理组只在处理本身上有所不同,也就是说,因果分析 算法 python 因果分析技术_因果分析 算法 python_43。那么,对处理组的因果影响与未处理组相同(因为它们非常相似)。

因果分析 算法 python 因果分析技术_因果分析入门_44

此时,均值差异即为因果效应

因果分析 算法 python 因果分析技术_因果分析入门_45

图解偏差

红点和蓝点分别表示提供平板的学校和不提供平板的学校

因果分析 算法 python 因果分析技术_因果分析 算法 python_46


图1造成两组学校学生分数差异的原因有两个:

1.处理效应。给学生提供平板导致考试分数的增加。

2.处理和未处理之间的其他区别,不是处理本身。

真正的处理效应只有在我们有上帝之眼时才能获得,如下图所示。个体处理效应是个体的处理结果与另一个理论结果之间的差异,即同一个体在接受替代处理的情况下的结果。这些是反事实的结果,即红点的反事实结果,即未接受处理的结果是对应的粉色圆点,蓝点的反事实结果,即接受处理的结果是对应的浅蓝色圆点。

因果分析 算法 python 因果分析技术_因果分析 算法 python_47


图2

上面左图中描述了我们之前讨论过的偏差。即如果让每个学校都不接受处理,此时的分数差距。在这种情况下,我们只有每个学校在因果分析 算法 python 因果分析技术_因果分析入门_48时的潜在结果。此时,我们看到处理组和未处理组的初始区别。这就意味着除了处理之外,还有其他因素会导致处理组和未处理组的不同。这是偏差,什么是真正影响处理效应的因素。
现在,把这和假设无偏差的情况进行对比。假设平板电脑是随机分配给学校的,此时,贫富学校获得这种待遇的机会是一样的。如下图所示,处理将很好地分布在所有的学校之间。同样红点和蓝点分别表示提供平板的学校和不提供平板的学校。

因果分析 算法 python 因果分析技术_因果偏差_49


图3

在这种情况下,处理和未处理结果的差异是平均因果效应。这是因为除了处理本身之外,处理和未处理之间没有其他区别。我们看到的所有差异都必须归因于它。即它们之间没有偏差。

如下图所示 ,此时,如果我们把每个学校都设置为不接受处理,只观察因果分析 算法 python 因果分析技术_因果科学_35,我们会发现处理组和未处理组之间没有差异。

因果分析 算法 python 因果分析技术_因果分析入门_51


图4

这就是因果推理的艰巨任务。它是关于寻找更好的方法消除偏差,使处理组和未处理组具备可比性,以便我们看到他们之间的所有差异来源于处理效应。归根结底,因果推理就是要去掉所有的错觉和误解,弄清楚这个世界到底是如何运作的,处理变量的分配机制是怎样的。