查看原文
其他

因果推断综述及基础方法介绍(一)

公众号关注 “ML_NLP
设为 “星标”,重磅干货,第一时间送达!

来自 | 知乎

作者 | 陈歪歪

址 | https://zhuanlan.zhihu.com/p/258562953

编辑 | 机器学习算法与自然语言处理公众号

本文仅作学术分享,若侵权,请联系后台删文处理


写在前面:这部分的文章会作为系列的文章,分享在因果推断领域的相关论文,介绍为什么需要因果推断?它是什么?它能做什么?作为这段时间自己看论文的总结,希望能跟看到这篇东西的大佬多多探讨。

相关性≠因果性

在阐述为什么之前需要阐述是什么?在日常生活和数据分析中,我们可以得到大量相关性的结论,我们通过各种统计模型、机器学习、深度学习模型,通过分析得到种种结论,但是这里面存在一个巨大的疑问就是,“相关性一定等于因果性吗?”

举个 ,这个是缅因州黄油消费量和离婚率的关系

从图上可以看出这两个变量呈高度相关的关系,但是如果我们从因果的角度来阐释,说黄油消费导致了离婚,或者离婚导致了黄油出售,显然都非常荒谬。

实际上,相关性通常是对称的,因果性通常是不对称的(单向箭头),相关性不一定说明了因果性,但因果性一般都会在统计层面导致相关性。

为什么需要因果推断

举个 ,我目前在做权益方向的工作,以权益为例,我们为了促进某些不活跃用户的消费,给不活跃用户发了更大的红包,给活跃用户发了更小的红包,把所有特征扔进模型训练,得出了一个奇怪的结论,给用户越大的红包,用户越不买东西。

不考虑因果性的话,相似的或者别的类型的错误还有很多,《Theoretical Impediments to Machine Learning With Seven Sparks from the Causal Revolution》这篇论文说到了因果推断的三层


第一层是关联:X条件下Y会怎么样,也就是现在机器学习中常用的方式,尽可能通过深层次的网络去拟合X和Y的关系

第二层是干预:如果我服用了阿司匹林,身体会怎么样?也就是如果我改变了X,Y会怎么样?

第三层是反事实推断:相当于对结果来考虑原因,相当于如果我们希望Y变化,那么我们需要对X做出什么样的改变?

从作者角度这样看来,因果推断是高于现行机器学习方法的方法,但我的观点来说,因果推断的方法其实是通过因果关系,解决现行只考虑相关关系的的机器学习方法产生的一系列问题。

因果推断研究的两个问题——从辛普森悖论讲起


上图男女分别来看

  • 女性对照组1/(1+19)=5%发病率,处理组3/(3+37)=7.5%发病率,这个药对女性有害

  • 男性对照组12/(12+28)=30%发病率,处理组8/(8+12)=40%发病率,这个药对男性也有害 但从总体看,对照组13/(13+47)=21.6%发病率,处理组11/(11+49)=18.3%发病率,这个药对人类有效,发生了什么?

上图分血压情况来看

  • 血压降低的情况下对照组1/(1+19)=5%发病率,处理组3/(3+37)=7.5%发病率,血压降低的患者发病率增加了

  • 血压升高的情况下对照组12/(12+28)=30%发病率,处理组8/(8+12)=40%发病率,血压升高的患者发病率也增加了 但从总体来看,对照组13/(13+47)=21.6%发病率,处理组11/(11+49)=18.3%发病率,这个药对人类有效,发生了什么?让我们来看两种情况下的因果图

从上面的因果图可以很容易明白

在第一个问题下,不同的性别有不同的服药意愿,也就是性别是服药和发病的共同原因,所以应该分层进行统计

在第二个问题下,服药会导致血压变化,也就是血压是服药和发病的共同结果,如果分层统计,则会低估服药的影响,总体的结论才是正确的。

从这两个辛普森悖论的例子我们可以看出现在因果推断最重要的两个研究方向:

  1. causal discovery:因果发现,也就是发现以上统计变量之间的因果关系,从统计变量中探寻出一个如上的因果图

  2. causal effect:因果效应,在得到因果关系之后,确定效果,比如上面的问题是,知道因果图之后,确定服药之后发病率增加(减少)多少

注:后面的介绍主要还是着重于因果效应相关的论文和发展,如果对于因果发现更有兴趣的大佬可以移步。

基本概念

  • 干预 Treatment T:一般我们考虑二值干预 

  • 潜在结果Potential outcome :分别为用户有没有给treatment

  • 观察结果 Observed outcome  :用户受到干预时, ,用户未受到干预时, 

  • 反事实结果 Counterfactual outcome  :用户受到干预时, ,用户未受到干预时, 

对于单个用户,我们希望得到individual treatment effect (ITE),也就是

对于整体的effect,通常为The average treatment effect (ATE或者ACE),

基础方法

随机试验——因果推断的黄金准则

 表示个体i接受治疗的个体因果作用,但是对于单个个体来说,要么接受treatment,要么不接受,中必然会缺失一个,但在T做随机化的前提下,我们可以识别总体的ATE:

这是因为

最后一个等式表明ATE可以由观测的数据估计出来。其中第一个等式用到了期望算子的线性性(非线性的算子导出的因果度量很难被识别!);第二个式子用到了随机化,即 (⊥表示独立性)

可以看出,随机化实验对于平均因果作用的识别有着重要作用。

但是实际应用中,随机化实验是最“贵”的因果推断方式,有时候我们无法控制“treatment”,更多时候成本实在太高,我们只能拨一小波人进行实验,所以这种“黄金标准”并不算实用。

双重差分法(difference in difference DID)

在随机试验那部分我们提到,可以采用的前提是,那如果不符合这个条件应该怎么办?有一个比较老且基础的方法是双重差分法,也就是差分两次。


这张图讲得非常清楚,首先为什么我们不能用,举个 ,我们给一些人发权益,另一些人不发,我们怎么能知道权益带来的购买效果是怎么样的呢?简单的方法就是给发权益的人购买数加和,不发权益的人购买数加和,然后两个加和相减就好啦,但是如果这两部分人本来不发权益的时候购买数就不一样呢?

那就减两次,从上图来说,我们把这两群人发权益之前t0的购买数相减,得到一个差值,相当于这两群人的固有差距,再把这两群人发权益之后t1的购买数相减,相当于这两群人被权益影响之后的差距,后面的差距减去前面的差距,就会得到权益对于差距有多少提升(降低),以此作为权益的effect。

这个方法的问题在于有个比较强的要求是,趋势平行,也就是要求t0到t1之间,两群人的购买概率变化趋势是一样的(图中那个平行线),这其实是一个很强的假设,所以这个方法我个人来讲不算非常认可。DID之上还有DDD,也就是多组别多时间点的DID,在此不多赘述。

从matching到倾向性得分

随机化试验那部分我们讲到了

这个公式其实包含了较强的可忽略性(Ignorability)假定,但我们之前说了,这种方式比较“贵”,所以通常我们会希望收集足够多的X,使得:

如果看过一些因果论文的同学会知道,这个叫Conditional Independence Assumption (CIA) 这是因为

那么这个方法实际操作起来通常就是称之为Exact matching,也就是对于每一个 =1的用户,我们从 =0的分组里找一个变量 一模一样的用户,在这个X的条件下,满足T与Y相互独立,此时直接比较两组用户观察结果 的差异就可以得到结论,但是,“匹配用户的变量 完全相等” 这个要求过于严格,不实用。

由此衍生了用倾向性得分进行匹配的方式Propensity Score Matching,简称 PSM:在 PSM 方法中,我们首先对每一个用户计算一个倾向性得分(propensity score),定义为 ( )= ( =1| = ) ,这里面的假定由变为了,接着我们根据倾向性得分对于用户进行匹配。

但是这种方式也是有其局限性的,就是在于treatment group和control group的用户需要足够齐全且维度较高,实际应用的时候我们会发现本身两个group的用户有较明显的差异,想要找到倾向性得分相近程度达到要求的用户非常难。

相关的方法非常多:

  • 用倾向性得分来对用户进行分组,称为 subclassification

  • 用倾向性得分来对用户进行加权抽样,称为 Inverse Propensity Score Weighting (IPSW) ,权重为

树模型

代表的算法有BART,Causal Forest,upliftRF 。

以2018年的《Estimation and Inference of Heterogeneous Treatment Effects using Random Forests》为例,这篇论文主要讲了Double sample trees和propensity trees,在此只简单介绍propensity trees,整体的流程如下:


其实整体思路非常清晰,就是训练一棵预测treatment的树,然后在树的叶子结点做因果推断,如果大家仔细看了前面的倾向性得分的话,会发现其实这个思路其实就相当于propensity matching的树版,可能跟subclassification更相似。


关于因果推断的树模型方式理论上应该专门开一栏进行介绍,但是相关论文我看的不多,而且在很多因果推断的新论文里面BART,Causal Forest的效果其实都比不上现在新的前沿算法了,所以在此就简单介绍一种。

相关的因果推断方向还有很多,比如重加权方法,表示学习方法,对抗学习方法,doubly robust方法,元学习方法等,这些方向相关论文都不少,如果都在这篇里面说完会显得全文非常冗余,所以后期会尽量把相关看过的论文都总结下来。

开源工具

这里面照搬了综述文章《A Survey on Causal Inference》里面的图,其实讲的已经非常全了,大家自行食用:



继续滑动看下一个
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存