######################################### 第三章 干预的效果 ######################################### 第3.1节 干预 ######################################### 回答两个问题: 1. 什么是干预? 2. 干预的目的是什么? :干预: 强制某个变量等于某个特定值,这种强制来源于模型外部的力量,是"人为的"。 这种强制干预会使得被干预变量(取值变化)不再受到其父节点的影响,仅仅受制于外部力量。 :干预的目的: 就是为了切断被干预变量和其父节点的路径(后门路径),因为混杂因子一般都是通过这些路径(后门路径)影响目标变量的, 切断后就截断了混杂因子的影响。 第3.2节 校正公式 ######################################### 干预前 ======================= 图3.3是表示的是原始的模型,:math:`X` 和 :math:`Y` 存在共同因子 :math:`Z`。 在图模型3.3的联合概率分布为 .. math:: :label: eq_causal_inference_3.21 P(X,Y,Z) = P(Z)P(X|Z)P(Y|X,Z) 在此基础上求条件概率 :math:`P(Y|X)` 的过程为 .. math:: :label: eq_causal_inference_3.22 P(Y|X) &= \frac{P(X,Y)}{P(X)} \\ &= \frac{\sum_z P(X,Y,Z)}{P(X)} \\ &= \frac{\sum_z P(Z)P(X|Z)P(Y|X,Z)}{P(X)} 我们发现条件概率 :math:`P(Y|X)` 的表达式中含有项 :math:`P(X|Z)` ,此项表示 :math:`Z` 到 :math:`X` 传递的信息, 故:**图模型3.3的条件概率** :math:`P(Y|X)` **不能表示** :math:`X` 到 :math:`Y` **的直接因果关系,其中混入了混杂因子信息**。 干预后 ======================= 现在来看,我们对 :math:`X` 进行干预后的变化。 就像上一节所讨论的,对 :math:`X` 进行干预,就相当于强制 :math:`X` 为某一个值, 使其不再受到其父节点( :math:`Z` )的影响, 干预后的结果就等价于图3.4所示的图模型。 干预后的图模型3.4的联合概率分布为 .. math:: :label: eq_causal_inference_3.23 P(X,Y,Z) = P(Z)P(X)P(Y|X,Z) 在此基础上求条件概率 :math:`P(Y|X)` 的过程为 .. math:: :label: eq_causal_inference_3.24 P(Y|X) &= \frac{P(X,Y)}{P(X)} \\ &= \frac{\sum_z P(X,Y,Z)}{P(X)} \\ &= \frac{\sum_z P(Z)P(X)P(Y|X,Z)}{P(X)} \\ &= \sum_z P(Z)P(Y|X,Z) 干预后的图模型如图3.4所示,在此之上的条件概率 :math:`P(Y|X)` 没有了后门路径,不再受到混杂因子的影响, 可以直接表示为 :math:`X` 对 :math:`Y` 的因果关系。 但注意的是,干预后的模型(图3.4)并不是"真实"存在的,是我们设想出来的结果。 干预前的模型(图3.3)才是数据的"真实"模型,我们的 **观测数据是基于干预前模型(图3.3)的**。 用干预后模型推断出干预前模型因果关系的成立条件是: :eq:`eq_causal_inference_3.24` 右侧的分布 :math:`P(Z),P(Y|X,Z)` **在干预前后是不变的,可以用干预前的观测数据计算得到**。 为了区分干预前后,引入了 *do* 算子, 用 *do* 算子表示干预后的条件概率分布,记作 .. math:: :label: eq_causal_inference_3.2.5 P(Y| do(X=x)) = \sum_z P(Z)P(Y|X=x,Z=z) 前后变化 ========================================== 对比下 :eq:`eq_causal_inference_3.22` 和 :eq:`eq_causal_inference_3.24` ,干预后就相当于从图模型3.3中去掉了变量 :math:`Z` 到变量 :math:`X` 的有向边, 这使得条件概率 :math:`P(X|Z)` 变成了边缘概率 :math:`P(X)` , :eq:`eq_causal_inference_3.22` 也就变成了 :eq:`eq_causal_inference_3.24` 的形式。 我们知道在统计学中,条件概率 :math:`P(Y|X)` 并不等价于因果关系, 其中包含了混杂因子。 干预是为了让我们能够直接定义因果关系,干预后的条件概率记作 :math:`P(Y|do(X=x))` ,它可以用来表示因果关系,并且可以用干预前的观测数据进行定量的计算求解。 干预仅仅是改变了图模型结构(减少了一些有向边),并没有改变局部条件概率分布的表达式, 这也是可以用干预前的观测数据进行计算的根本原因所在。 **图3.5** 关于图3.5,在这个情况下,干预前后图模型是没有变化的, .. math:: P(Y| do(X)) &= P(Y| X) \\ &= \frac{\sum_z P(X,Y,Z)}{P(X)} \\ &= \frac{\sum_z P(X)P(Z|X)P(Y|X,Z)}{P(X)} \\ &= \sum_z P(Z|X)P(Y|X,Z) 把 :eq:`eq_causal_inference_3.2.5` 中的 :math:`Z` 变量可以扩展成被干预变量 :math:`X` 的父节点,记作 :math:`Pa(X)` ,:eq:`eq_causal_inference_3.2.5` 就可以写成更一般化的形式 .. math:: :label: eq_causal_inference_3.2.10 P(Y| do(X=x)) = \sum_z P(PA)P(Y|X=x,PA=z) 和联合概率的关系为 .. math:: :label: eq_causal_inference_3.2.11 P(Y| do(X=x)) = \sum_z \frac{P(X,Y,PA)}{P(X|PA)} 校正变量 ====================== 如果单纯的看 :eq:`eq_causal_inference_3.2.5`, 可以看做是用 :math:`Z` 变量对 :math:`P(Y|X=x,Z=z)` 进行了校正,进而得到因果关系 :math:`P(Y|do(X=x))` ,因此可以把 :math:`Z` 称为校正变量。 校正变量选择并不是唯一的,选取校正变量的准则是它们能否阻断 :math:`X` 和 :math:`Y` 之间的混杂路径, 换句话说,我们需要选取一些能够完全阻断混杂路径的节点集合对条件概率 :math:`P(Y|X)` 进行校正, 校正后的结果就是因果关系 :math:`P(Y|do(X=x))` 。 关于ABTest ============================== ``ABTest`` 的过程是随机分成两组,一组进行干预( :math:`X=1` ), 另一种不进行干预 ( :math:`X=0` ), 然后分别观察两组在某个指标( :math:`Y=1` )上的差异。 这个过程中,随机选取的行为就相当于阻断了混杂因子 :math:`Z` 对 :math:`X` 的影响。 因为两组是随机分配的,相当于两组的 :math:`Z` 是等价的, :math:`X` 的状态与 :math:`Z` 无关,等价于去掉了 :math:`P(X|Z)` 。 此时,你得到的实验数据(观测数据)就已经是干预后模型(也就是已经去掉了 :math:`P(X|Z)` )的观测数据了, 直接从观测数据中计算出的 :math:`P(Y|X)` 就等价于 :math:`P(Y|do(X))` 第3.3节 后门准则 ########################################### 后门准则的核心就是选取一些后门变量作为校正变量, 这里需要注意的就是对撞节点。 - 对于一个复杂的模型,可作为校正变量的选择有多种,只要能完全阻断全部混杂路径的变量集合集合。 - 理论上,不同的选择得到因果结果应该是一样的,因此可以用不同选择的结果进行交叉验证。 - 如果全部节点都是可观测的,甚至可以验证图模型结构和观测数据是否一致。 - 是否能够利用后门准则有个前提,那就是:**所有的校正变量(符合后门准则的变量集合)都是可观测到的,否则得不到** :math:`P(Z)`, **没办法校正** 。 - 当存在不可观测混淆(后门)变量时,有几种方法解决:工具变量法(Instrumental Variable,IV)、前面准则(中介变量)、回归断点设计(regression discontinuity desing,RDD)。