因果推断 | 因果推断综述及基础方法介绍(一)
来自 | 知乎
作者 | 陈歪歪
地址 | 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%发病率,这个药对人类有效,发生了什么?让我们来看两种情况下的因果图
从上面的因果图可以很容易明白
在第一个问题下,不同的性别有不同的服药意愿,也就是性别是服药和发病的共同原因,所以应该分层进行统计
在第二个问题下,服药会导致血压变化,也就是血压是服药和发病的共同结果,如果分层统计,则会低估服药的影响,总体的结论才是正确的。
从这两个辛普森悖论的例子我们可以看出现在因果推断最重要的两个研究方向:
causal discovery:因果发现,也就是发现以上统计变量之间的因果关系,从统计变量中探寻出一个如上的因果图
causal effect:因果效应,在得到因果关系之后,确定效果,比如上面的问题是,知道因果图之后,确定服药之后发病率增加(减少)多少
注:后面的介绍主要还是着重于因果效应相关的论文和发展,如果对于因果发现更有兴趣的大佬可以移步。
基本概念
干预 Treatment T:一般我们考虑二值干预
潜在结果Potential outcome
:分别为用户有没有给treatment 反事实结果 Counterfactual outcome
:用户受到干预时, ,用户未受到干预时,
对于单个用户,我们希望得到individual treatment effect (ITE),也就是
对于整体的effect,通常为The average treatment effect (ATE或者ACE),
基础方法
随机试验——因果推断的黄金准则
这是因为
最后一个等式表明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》里面的图,其实讲的已经非常全了,大家自行食用:
点击搜索你感兴趣的内容吧
往期推荐
数据Seminar
这里是大数据、分析技术与学术研究的三叉路口
推荐 | 杨奇明
欢迎扫描👇二维码添加关注