Fork me on GitHub

浅谈因果推断与在内容平台的实践

以下文章来源于 https://zhuanlan.zhihu.com/p/608825584

转载地址
导读: 因果推断能够帮助我们解决 A/B 测试无法处理的问题,或者观察到预测模型无法解释的细节。本文将通过简洁生动的例子,介绍因果推断的基础知识和常见应用,希望能够帮助大家快速上手因果模型。

文章主要包括两部分:

  1. 因果推断初探

  2. 内容平台实践


分享嘉宾|李烜 资深数据科学家

编辑整理|DataFun志愿者

出品社区|DataFun


01/因果推断初探


1. 什么是因果

在 YouTube 上面有一个很有意思的视频,用漫画的形式介绍"因果"这个概念,我们可以从这个例子来开始理解什么是因果。



因果本身最早是一个哲学上的概念,大部分的西方哲学家都认为因果关系是一条毋庸置疑的定律,但也有哲学家,比如休谟提出了很难被驳倒的怀疑论,直到近代统计学理论的发展,为因果关系提供了新的思考和推理框架。

如上图所示的几种情况,我们先依次来解释一下这几个例子。

当知道某个物体在当前时间点的质量和速度,根据物理学的知识,能够计算出来它在将来任何一段时间的状态,甚至可以反推出它在过去一段时间的状态。现在的状态对过去和将来的状态预估,我们把这个叫做模式(pattern)

假设在过去的某个地方发生了核弹的爆炸,核弹爆炸与大气反应生成的 C14 影响到树木进而影响铅笔中 C14 的含量,因而根据 C14 的含量能够判断过去是否有核弹爆炸,这种推理关系我们称之为记录(record)

一只暴怒的小狗对房子实施了点火行为,引发了局部的火灾。在这个例子里面可以看到两个非常关键的要素。第一个要素是点火行为,这个点火行为我们称之为改变或者干预。第二个要素是时间,狗过去的点火行为导致将来房子着火的现象。这种关系我们称之为因果(cause and effect)

综合上面的三个例子,可以简单给归纳出因果的定义:通过一些改变导致了从过去到将来时间线上的结果,我们把这种关系叫做因果关系。在因果关系中有两大要素:干预正向的时间线


2. 因果性和相关性

在日常工作与生活当中会经常遇到的一个问题是,相关性和因果性的关系。对于这两者也有一个很经典的说法:"相关性不等于因果性"。但其实对于这个说法还有一个很重要的补充,**相关性确实不等于因果性,但因果性往往隐藏在相关性当中。**而相关性的发现和论证会更加容易,往往也是我们通过分析来发现潜在影响因子的一个开始。这里我们首先简单介绍两个相关性不等于因果性的例子。



上图中左上角的例子是日系乘用车在美国的销售量和以车祸自杀的趋势表现。通过两条曲线的走势,如果我们认为这个相关关系具备因果性,那么可能会得到这样一个结论:自杀会导致日系乘用车卖得更好,或者是日系乘用车卖得越好车祸自杀就会越多。这个结论显然不太合理。

上图中右下角是一个更有意思的例子,这个例子中显示在游泳池中溺水的人和尼古拉斯 • 凯奇在电影中出现的次数成正比。这个看起来就更离谱了,如果认为其具备因果性的话,要么尼古拉斯 • 凯奇越努力淹死的人就更多,要么是淹死的人越多尼古拉斯就更努力。

从上面的两个例子可以看出,相关性并不等于因果性。在日常的数据分析中,当我们看到某些指标具备相关性的时候,并不能说他们存在因果关系。比如留存率,当我们看到一些用户行为和留存率相关的时候,到底是他们之间互为因果,还是他们之间受到一个共同因素的影响,我们通过相关性是无法观察到的。

除了相关性无法推出因果性之外,因果性也不一定能观测到相关性。



如上图,假如在一片大海当中,有一个帆船选手在努力的调整船舵,使船沿着一条确定的路线直线前行,我们看到选手的努力并没有影响帆船的行进方向。这时选手的行为和船的行进方向不具备可见的相关性,但是具备实际的因果性。因为这时风浪很大,船手通过调整才能保持帆船直线前行。我们平时看到的转舵表示转向,但是在风浪里面反而代表直线行驶。这里的因是帆船手所作出转舵的干预,结果是抵消了环境带来的影响,所以这个例子当中有因果关系,但是观察不到相关关系。


3. 辛普森悖论

另外一个经常出现的情形叫做辛普森悖论,它来自一位名为辛普森的统计学家的发现,用来描述两组数据的关键指标在整体上和局部拆分下的对比关系结果不一致的现象。

如下图例子中,假如我们有两种针对肾结石的治疗方案分别是方案 A 和方案 B,在治疗过程中可以分别对小的结石和大的结石都施加这两种不同的治疗方案,然后观察不同方案的成功率。从图中可以看出针对小的结石和大的结石,都是方案 A 的成功率较高。但是如果统计方案 A 和方案 B 的整体数据,会发现方案 B 的总体效果比方案 A 要好。



这个例子就是辛普森悖论的一个体现。辛普森悖论是有解的,**造成局部数据和整体数据得出的结论不一致,主要是因为二者在拆分维度下的分布是不一致的,而当维度本身也会对干预或者结果有影响时,这个分布不一致就会评估产生影响。**从我们这个治疗方案的例子来讲,石头的大小本身会影响手术的成功率,如小石头本身即更容易治愈,B 方案效果更好是因为有更高比例的小石子样本。换句话说,在这个例子中,我们的干预治疗方案和变量石头的大小二者之间是不独立的。

在实际的业务场景中,也存在类似的情况。比如在一些广告策略当中,我们发现在男性用户和女性用户中可能都是表现出 A 方案更好,但是整体数据可能 B 方案更好,可能就是因为不同性别的用户本身的差别和比例的差异带来的。


4. 什么是因果推断

因果推断是指在目标结果上估计干预造成收益的一种量化的手段。通过因果推断方法,我们希望能够从这些量化的比较中,衡量出不同干预的价值,进而指导将来的决策和选择。



上图是一个巴西在课堂中使用 Tablet 对高考分数影响的例子。图中纵轴表示分数,红色表示提供 Tablet 的分组,蓝色表示不提供 Tablet 的分组。在这个例子中,我们希望衡量数字化教学是不是真的能够提升学生的成绩。如果直接去对比,会发现看起来使用了平板电脑的学生成绩会更好。实际上使用平板电脑和学生分数具备因果关系吗?下面我们尝试使用因果推断的方式来去度量一下这个结果。

假设我们抽出来这个四个用户,用编号 i 表示分别是 1 号、2 号、3 号、4 号。在这里我们介绍因果推断的一个重要概念------反事实。想象有许多平行世界,假设针对同一个事件的不同行为都可以找到一个对应的平行世界,我们具备上帝视角,能够观测到任何一个人在接受了这个干预和没有接受干预的两个状态。在这个例子中,我们对比施加干预(使用了平板电脑)和没有施加干预(没有使用平板电脑)的平行世界里学生的表现。

在上帝视角下,我们能够观察到的结果如左表 ,在非上帝视角下我能够观察到的结果如右表。其中 y0 表示没有施加干预的结果,y1 表示施加干预的结果,t 表示是否施加干预。y 表示非上帝视角下能够观察到的结果,在干预 t=0 时 y=y0,在干预 t=1 时 y=y1。上表中,我们看编号为 i=1 的同学没有看平板电脑的情况下,分数 y0=500,施加干预后分数 y1=450。那么这个干预的收益 te 是 -50 分。同理我们可以计算到每个样本的收益,最后计算所有样本的平均收益。

在实际情况中,我们并不具备上帝视角,无法同时观测个体是否被干预的两种状态,也就无法直接得到 te。这时我们就面临了一个因果推断的问题,它的核心是我们无法同时观察每个个体被施加干预与否的两种状态。所以,我们需要通过一系列因果推断的模型,去寻找一种近似方法来估计在干预状态和未干预两种状态的值。

在上面的例子中涉及到两个核心的概念:

ATE:Average Treatment Effect(干预的平均因果效应);

ATE=E [Y1-Y0]

ATT:Average Treatment effect on the Treated(干预组的平均因果效应)。

ATT=E [Y1-Y0 |T=1]

ATE 表示干预在所有人当中的平均因果效应;ATT 表示干预在干预组当中的平均因果效应。因果推断实际上要解决的是量化地计算 ATE 和 ATT。


5. 随机 A/B 实验

在真实的业务场景中,我们希望通过一些方法能度量 ATE 和 ATT,因果推断是解决这个问题的方法之一,在介绍详细因果推断方法之前,我们会先简单介绍一下随机 A/B 实验,随机 A/B 实验是最常用的消除偏差或者估计反事实的方式之一。随机 A/B 实验会先做分流,再进行干预,在随机 A/B 实验的情况下对用户施加干预本身是随机的,Treatment 是唯一能够在干预组和对照组产生差异的变量。所以我们可以通过这种方式来近似地去预估干预后事实和反事实之间的增益。



随机 A/B 实验的核心假设就是 T=0(没有受干预的人) 和 T=1 (受到干预的人),在没有受到干预的状态是一样的。在随机 A/B 实验的核心假设基础上就能计算得到 ATE 的值,计算方式也很简单直接用干预组减去对照组的值,这种情况下不需要去额外观测反事实,认为对照组就代表了反事实。

那么有随机 A/B 实验的情况下,为什么我们还需要因果推断?原因是 A/B 实验也存在一定的局限性,主要可以分为以下几个方面。

1)随机实验的可行性:在许多场景当中,分流实验并不一定都是可行的。比如在研究孕妇孕期吸烟对于婴儿的影响,不可能强制一部分孕妇抽烟,另一部分孕妇不抽烟。

2)随机 A/B 实验的前提假设是否成立:随机 A/B 实验中需要满足 SUTVA(Stable Unit Treatment Value Assumption)假设,也就是我们的实验组和用户组之间效应不会外溢,不会相互受到影响。比如微信的用户之间大家会互相聊天,滴滴的用户和乘客之间,用户和用户之间存在联系。在这种情况下传统的 A/B 简单分流实验评估会不准确。

3)实验的成本过高:在现实场景中实验的成本可能很大,比如优惠券业务和大额红包的业务,这种情况下存在一些成本问题。


6. 消除偏差以获得因果效应

上面我们讲到随机 A/B 实验不存在偏差,以及随机 A/B 实验存在一些局限性。因果推断的目标就是要在难以做随机 A/B 实验的场景,消除偏差以获得因果效应。

回到巴西高考的例子,上面已经提到,如果我们直接用干预组减去对照组的值,得到的不是因果效应。但是因果效应和这个值会有一些关系,参考下面的式子变换,我们可以看在它等于式子右侧加上"干预组在没有接受干预时的状态"减"对照组在没有接受干预的状态",也即因果效应等于 ATT 加上 Bias,这个 Bias 等于实验组和对照组在没有接受干预时的状态的差。



假设我们引入一个新的变量叫做学费,并且观察变量和分数的结果。**以上图为例,**我们可以看到图中红色的点会比蓝色点要高。也就是说两批用户在分组的时候就存在偏差,可能更富裕的学校会给学生更多技术上的支持,或者学费更贵的学校家庭教育更好。那么在分组的时候,本身就引入了偏差。

上述例子中,我们想预估事实和反事实间的差距,但直接用红点和蓝点两组结果相减的过程会引入偏差。随机 A/B 实验的方式通过把两组人群打散,打散之后两种点不会有明显的差异,让干预组和对照组在干预发生之前消除偏差。另外在因果推断中,常见的方法是构造反事实的点来消除偏差,获得最终的因果效应。


7. 常见的偏差

第一种偏差是混杂偏差

如下图,比如 X 代表混杂变量,它既会影响 T(干预) 也会影响 Y(结果)。以智力为例,一般来说智力对人的影响是多方面的,既会影响学习能力进而影响教育水平,也会影响工作能力进而影响薪资收入。如果想研究教育水平对于薪资收入的影响,就需要控制智力带来的偏差。在上面的例子中,干预和结果的共因叫做混杂偏差。此外,偏差也会来自于中介变量,比如 SAT 的分数,同理假设智力既会影响 SAT 分数,也会影响薪资,同时智力通过 SAT 去影响受教育的水平。这种情况下通过控制 SAT 相当于控制了智力带来的偏差。



第二种偏差是选择偏差

在选择偏差中引入的是一个有偏差的果,避免选择偏差是因为我们有时会因为担心混杂变量影响到因果推断效应的可行性,把尽可能多的变量放进来,导致误引入不该控制的变量,从而出现选择偏差。我们常提到的幸存者偏差就是一种选择偏差,选择偏差会使得本来独立的 Treatment 和 outcome 不独立。假如投资倾向是一个 Binary 的值,令投资倾向等于 1 时,研究教育水平和薪资的关系,投资倾向就成为一个选择偏差,这意味着我们只研究愿意投资的人。这里可能有一种假设,比如没有受到教育的人,本身不太倾向会去做投资活动,相反未受到教育却热爱投资的人会在其他地方有更多过人之处,他们可能会比同等条件下受到教育的人有更高的薪水。在这种情况下,就因为可能控制了不应该控制的结果,导致干预和结果之间不再独立。



这两种偏差的主要差异是:混杂偏差既会影响干预也会影响结果,结果和干预都会影响混杂偏差。


8. 泰坦尼克号的例子

这里我们利用 Kaggle 泰坦尼克号数据集做例子(有舱位,年龄和性别等信息),分析购买高等舱票和能否存活之间是否具备因果效应。大家可能记得经典电影《泰坦尼克号》中有这么几段情节,一段是住在靠下层甲板的主角要穿过许多层楼梯才到达可以逃生的顶层甲板,另一段是在营救顺序上船长要求妇女和儿童先上船。假如电影基本忠于现实,所以我们推断高等舱的乘客是否存活,和有没有妇女儿童这个因素影响很大。因此在判断高等舱这个干预的因果效应时,首先要做的就是消除偏差。



我们会通过这个例子介绍第一种简单的方法:子分类估计。在上面的例子中有两个混杂因素:第一个是女性,女性既会影响到存活率又会影响到购买的舱位,同理儿童也会同时对 Treatment 和 outcome 都做影响。所以为了得到因果效应,我们需要控制这两个变量。


9. 子分类估计

在泰坦尼克号的例子上我们发现,两个混杂因素都是二分类的变量,这样可以很容易得到四个分组,在每一个组当中,都已经控制所有的混杂变量。这时可以得到这样一个强假设:假设在目前控制了两个混杂变量之后,干预和结果是独立的。此外还有另外一个假设是,每个组内的 Pr(D=1)都是大于 0 小于 1 的。



在没有做子分类估计的情况下,针对高等舱计算出来的 Treatment 的 ATE 是 34.5%,子分类估计之后的 Treatment 的 ATE 是 18.9%,说明高等舱对于存活仍然还是有正向收益的。


10. 匹配和加权

上述方法需要对每个组都去进行子分类估计,在子分类非常多的情况下会出现维度灾难。接下来介绍另外的几种方法:匹配和加权



(1)精准匹配

在因果推断当中我们通过消除偏差来发现因果效应,在精准匹配中,我们试图去恢复数据的分布,使得对照组和干预组的分布保持一致。假设我们得到了所有的混杂变量 X,针对混杂变量计算和每一个实验组用户完全一样的对照组用户去一一匹配。如果遇到匹配到多个样本的情况,一般会对多个值求平均,最后在一一匹配之后计算 ATE 的值。

在这种方法里面也有一个假设,假设层和类之间的两种用户是一致的,而且要求数据计算是支持匹配的。当两个组之间样本非常不均匀,或者不能找到实验组完全匹配上的对照组时,不适用精准匹配的方法。另外当混淆因子 X 的值是低维和离散时,这种情况下匹配难度会很高。

(2)倾向性得分匹配

倾向性得分匹配的核心思路就是将多维的混杂变量降维到一维。建立 X 被分配在干预组和对照组的概率,我们可以利用 ML 模型,估计样本分配到 Treatment 的概率 P(X),利用降维 X 后的倾向性得分进行加权和匹配。在匹配完之后一般会要做一些检验,比如匹配之后两组样本一般要求在混杂变量上平衡。如可以用 SMD 的方法检测匹配前后在均值上是否平衡。如上图左边的因果图所示,在使用了倾向性得分匹配后,我们假设 P(x) 就已经代表了 X 的全部信息,只要控制了 P(X) 就控制了 X 对 T 和对 Y 的影响。

(3)倾向性得分加权

匹配和加权在理论上其实是近似的方法。在进行匹配的时候如果匹配上权重为 1,不匹配权重为 0,这种情况下可以把匹配看成是一种加权的方法,加权实际上是对匹配的一种泛化。

在上图中给出了一个广告的例子,我们计划衡量投放了某厨师学校广告之后,将程序员转化为厨师的效果。上下两行样本分别代表对照组和干预组投放后的转化情况,分别计算是否展现广告的转化效果,转化率分别是 33% 和 50%。由于男性和女性本身转化为厨师的倾向是不一样的,所以我们需要恢复它的分布。假设在对照组中有两个男性,我们恢复成四个男性,两个女性恢复成四个女性,这样男女比例 1:1,最后得到的加权转化率是 37.5%,同理可以得到干预组的加权转化率仍为 50%。评估经过加权后的广告干预,广告展现仍然对于转化有正向影响。

除了这样简单的加权方式之外,我们也可以用 P(X) 进行加权,本质和上面简单举例是是一样的。假设上图中的曲线是不同 X 的情况下,针对 X 对 P(X) 做的一个建模,目标是被分在干预组和对照组的概率,对上面的图中不同的 X 下的 Y 值进行加权,也即计算倾向性得分的加权值近似地去恢复原来的分布。


11. 双重差分

双重差分的方法也比较常见。在很多时候业务场景有比较明显的时间趋势,干预发生在一个连续的时间序列的某个时间节点或时间段,需要评估节点之前和之后实验组相对于对照组的提升。



在双重差分中的假设是,对照组和干预组在没有受到干预的时候,还是会按照原来的趋势去延续原来的变化,即要求实验组和对照组是平行的。在进行因果建模的时候也需要对这个假设进行检验。在满足平行假设之后,因果效应可以通过 C 和 D 的差,再减去 A 和 B 的差来衡量,也就是 β3的值,这种方法称之为双重差分,具体可以参照上图中的公式。


12. 内容平台实践



  • 案例 1:作者侧参与某活动对于作者投稿的影响

第一个案例是评估作者侧参与某活动对作者投稿的影响。我们想衡量参与活动和未参与活动的两批作者,在活动相关的发稿量,整体的发稿量,以及细品类的细分发稿量上有没有受到影响和变化。因为作者侧的运营活动一般在时间线上有运营周期,从某一段时间开始活动,到某个时间点截止。所以我们很容易想到可以用 DID 的方法。

  • 案例 2:作者侧扶持对于作者成长的影响

另外一个案例是评估作者侧扶持对于作者成长的影响。我们主要看,对于作者而言,扶持一段时间之后能否自己成长起来。与上一案例的不同之处在于,做 DID 之前会先做匹配。比如采用上面的匹配方法,我们会配到对照组中能够对标实验组的作者,有针对性地去比较不相同的作者在扶持前后在 DID 上的一些表现。这里也会做一些平行趋势假设,如去观测在一段时间内匹配的作者发稿的趋势是否一样。

--

02/一些思考


最后分享一些思考,再来回顾一下为什么需要因果关系。

  • 首先,不是所有的场景都适合用 A/B 实验。
  • 其次,一些预测很准的模型无法提供预测细节。一个比较常见的例子是流失预测模型,它可能能够非常准确地找到哪些人会走,但除了知道哪些人会走之外,我们还需要知道做什么样的事情能够让他们不走。这个时候就需要一些因果的建模,知道如何让这些用户留存下来。
  • 第三,某些时候仅靠相关关系无法落地决策。比如,我们在平台中发现用户的负反馈和用户的留存是有关系的,我们没有办法让用户反馈更多,这个时候平台需要挖掘一些可以落地决策的细节。

另外就是如何体现因果推断的结果是可靠或者可用的,让我们更自信自己的方法是成立的。这里有几个比较重要的点:

  • 第一,检查假设是否成立。一些因果推荐的模型有很多都会有自己非常强的假设,并且都依赖于自己假设。所以首先要检查自己的假设是成立的。如果我们的假设是成立的,那我们就对因果推断的结果是有信心的,或者说我们认为通常情况下是成立的。
  • 第二,检测结果是否敏感。有很多敏感性的分析方法。比如,针对样本去做一些扰动,把 Treatment 替换掉,从一个实际数据 Treatment 替换成随机数;也可以把混杂变量 X 进行替换,增加或者减少一些列,或者增加一些随机数列;也可以在数据上去做操作,比如加入随机数据看结果是否稳定,或者把原来的数据集做一些抽样,看是否与原来的数据结果一致。
  • 第三,不同的方法是否会有同样的结果。如果我们对目前的方法不够信任,觉得现在的假设不成立,可以用一些其他的方法去看是不是会有相同的结果,用其他同样满足假设的方法做 double check。

在分享的最后,隆重推荐两个博客,一个是 Causal Inference for The Brave and True,另一个是 Causal Inference The Mixtape。这两个都是非常好的技术博客,这次分享的很多内容也有相当部分来自于这两个博客,大家如果有兴趣非常建议去了解一下。



--

03/问答环节


Q:同一个案例数据同时做 A/B 实验和双重差分两种方法显示的相对差异是否具有可比性?把实验和因果推断的结果做对比,这也是一个比较常见的问题。

A:是有可比性的,可以针对发现的相对差异做进一步的分析。一方面,会有一些导致差异的原因,如在 DID 方法中,需要要求一个干预时间点或者是干预时间段,而实验的结果仅是在针对整体的组间差距而言的,相对 DID 少了评价时间点前后的目标。另一方面实验得到的样本是相对比较可靠的样本,我们也可以结合两种方法去做分析,利用实验分流出的数据做 DID。

今天的分享就到这里,谢谢大家。


分享嘉宾


**


本文地址:https://www.6aiq.com/article/1677150000743
本文版权归作者和AIQ共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出