1. 因果推断是什么?
1.1 因果性与相关性
事件/变量之间的关系,最主要的有相关性和因果性。
- 相关性是指在观测到的数据分布中,X与Y相关,如果我们观测到X的分布,就可以推断出Y的分布
- 因果性是指在操作/改变X后,Y随着这种操作/改变也变化,则说明X是Y的因
cause
在常用的机器学习算法中,关注的是特征之间的相关性,而无法去识别特征之间的因果性,而很多时候在做决策与判断的时候,我们需要的是因果性。
举个例子,我们会发现在学校中,近视的同学成绩更好。近视和成绩好之间有强相关性,但显然近视不是成绩好的原因。而我们想要提升学生成绩,自然需要找到因,否则就会通过给学生戴眼镜的方式来提高成绩。
上面的例子是很明显地可以区分出相关与因果的,但是也有很多难以区分的,如经常喝葡萄酒的人寿命更长,是因为葡萄酒确实能延长寿命,还是因为能经常喝的人通常更富有,享有更好的医疗条件。
1.2 识别因果的必要性
很多时候,我们通过统计学方法或者机器学习算法得到的特征之间的相关性,就足以为我们的验证、决策提供指导,比如,我们通过数据发现,用户曝光的图片越多,留存越高,我们不需要知道这之间是否有复杂的因果关系,只需要通过简单的ABtest来检验更多的曝光是否有效果即可。
是否还有必要去识别因果性呢?答案是有的。
很多时候,我们需要确切地知道因果性,且无法通过ABtest简单地判断,比如:
- 药物是否有效、政策是否有效,这种问题无法做ABtest
- 新的推荐算法是否有效,ABtest成本高(不好的用户体验等)
- ……
因此,面对这种特殊的问题,我们需要从已有的数据中推断出变量间的因果性。
1.3 本质是对因果效应的估计
前面说了因果性和相关性的区别、以及识别因果性的必要性,那么因果推断究竟是什么?
因果推断的核心思想在于反事实推理counterfactual reasoning
,即在我们观测到X
和Y
的情况下,推理如果当时没有做X
,Y'
是什么。
因果推断的目的是要判断因果性,即计算因果效应(有无X
的情况下Y
值的变化量)。在进行反事实推理后,可得出因果效应e = |Y - Y'|
,进而判断因果性。
实际上,对于一个对象,我们永远只能观察到Y
和Y'
的其中一个,因果推断所做的就是从已有数据中估计因果效应,所以我认为因果推断的本质是,对因果效应的估计。
2. 一些因果推断的方法
上一部分对因果推断做了简单的介绍,本部分主要介绍一些因果推断的方法,如下图所示——
2.1 随机实验Randomization
2.1.1 A/B Test
以推荐算法为例,判断推荐算法是否有效,ABTest通过将用户随机分为两组,分别应用不同的算法,通过判断两组用户点击率的差异来估计因果效应。通过随机分组,排除了混淆变量的影响。
A/B Test实际上是判断因果性的很有效的方法,但有时候成本过高无法采用,如这里的推荐算法——
- 可能新的推荐算法太差导致用户流失
- 如果有很多新的算法要测试,A/B Test效率较低
2.2.1 多臂老虎机 Multi-armed bandits
针对上述问题,另一种随机实验方法是强化学习中的多臂老虎机,实际上是对explore
和exploit
的平衡。
-
explore
,随机选择一个动作,在上面的问题中是随机选择一个算法 -
exploit
,选择收益最高的动作,在上面的问题中是选择当前效果最好的算法
通过某种规则(e-greedy
等)重复上述过程,优点是可以同时测试多种算法,并且每个用户都能使用到最好的算法,减少流失可能性。缺点是效果难以评估,也很难让用户按照我们的想法行动。
2.2 自然实验Natural Experiments
理想的实验需要:随机分配(分组)、人为干预(施加不同的treatment)、结果比较,
自然实验实际上是一种观察性研究,满足上述三个条件中的两个,是指不加干预地、实验对象**“自然”**地分为若干组,对实验对象的结果进行观察比较。
显然自然实验法的关键在于,实验对象是否能“自然”/随机地分组。比如,将是否民主将国家分为两组,探究制度与国家对外战争的关系。但是在这里,是否民主不是随机的分给各个国家,所以无法满足自然实验所需的随机分配原则。
2.2.1 断点回归Regression discontinuity
断点回归是自然实验中的一种观察方法,简单理解就是在回归过程中,观察在临界点处是否出现断层/断点。
举一个简单的例子,假设现在有一个产品,收集500个金币后就可以得到一个勋章,现在要判断有无勋章对用户在线时长的影响。
断点回归法观察金币在500附近的用户,如497到502,观察【接近500但小于500(无勋章)】与【接近500但大于500(有勋章)】的用户在线时长是否有显著区别,若有,说明有勋章很可能会增加用户的在线时长。
2.2.2 工具变量Instrumental Variables
对于要判断因果关系的两个变量间,如果存在其他混淆变量,在计量经济学中采用工具变量的方法解决。
以下述关系为例,要判断对APP1的访问,是否会导致对APP2的点击。实际上由于APP1和APP2之间的需求关系,误差项与解释变量相关,即计量经济学中的内生性。
引入工具变量的目的是为了让误差项与解释变量不相关。具体地,通过找到一个变量,满足与解释变量相关且与误差项无关,那在引入这一变量之后,解释变量变化的部分就与误差项无关。
同样是上面的例子,假设某一天有个活动,下载APP1的人有奖励,这个活动与解释变量相关,但不会影响到APP2的需求,那根据多出来的APP1访问量与多出来的APP2点击率就不再受到需求关系的影响,就可以判断对APP1的访问,是否会导致对APP2的点击。
2.3 Conditioning
2.3.1 分层Stratification
分层的核心思想是控制条件变量,一般步骤如下:
- 尽可能完整的绘制出变量之间的因果图
- 选择影响要判断因果性的变量的条件变量
- 对用户进行分层/分组,满足组内的用户条件变量取值一致(上层的变量将全部不需要再考虑,类似贝叶斯网络中的d分隔)
- 比较两组用户的输出,计算因果效应
这种方式有点类似要找到相似的用户,当条件变量很多的时候,这种方法很难实现,很难找到很多条件变量都相同的用户,即使找到也会使得分组偏小。
2.3.2 倾向得分匹配Propensity score matching
当条件变量很多的时候,可以考虑使用倾向得分匹配。
以推荐算法为例,当条件变量很多的时候,通过逻辑回归等方法对这些变量进行训练,并计算出一个倾向得分,在这里是用户被施加新算法的概率。因此倾向得分匹配的一般步骤如下:
- 尽可能完整的绘制出变量之间的因果图
- 选择影响要判断因果性的变量的条件变量
- 对用户进行分层/分组,满足组内的用户计算得出的倾向得分接近(上层的变量将全部不需要再考虑,类似贝叶斯网络中的d分隔)
- 比较两组用户的输出,计算因果效应
3. 小结
关于因果推断,上面介绍了三类方法——
- 如果可以的话,尽可能使用随机实验(ABtest……)
- 如果无法进行随机实验,则探索自然实验(断点回归……)
- 如果自然实验也无法找到,考虑使用基于条件的方法(倾向得分匹配……)