因果推断漫谈(三):倾向性得分加权介绍
在 《因果推断漫谈(一):掀开“因果推断”的面纱》 中,我们介绍了什么是因果推断、什么是潜在结果模型、什么是“平均处理效应”(又称“平均因果效应”),以及平均处理效应什么时候是可识别的。在 《因果推断漫谈(二):倾向性得分匹配介绍》 中,我们介绍了从非实验数据中估算平均处理效应的一个经典方法,称为“倾向性得分匹配”(Propensity Score Matching)。在这篇文章中,我们介绍另一类使用“加权”思路的方法,其中最经典的方法为“倾向性得分加权“(Propensity Score Weighting)。
一图以蔽之
首先,我们通过一个简单的例子来直观感受一下“加权法”。在这个例子里,我们希望估算广告投放对转化率的提升。
- 上帝视角:男女用户比例、广告投放概率和转化率的真实值如图所示。可以看出,对于整体人群(男女1:1)和广告投放人群(男女1:4),广告投放对购买率提升的绝对值分别为31.25%和27.5%。
- 凡人视角:这个视角描述了我们所观察到的数据。如果不仔细分析,这份数据容易让人误以为广告对购买率的提升为70%-20%=50%。当然,仔细一看,就会发现这是不对的,因为两组用户的性别分布是不一致的。
- 因果推断之平均处理效应:我们可以通过加权的方式让两组用户的男女比例都恢复到1:1,具体加权方式如图。两组加权用户的购买率差值为31.25%,等于真实值,推断成功。
- 因果推断之处理组平均处理效应:类似地,我们可以通过加权将对照组用户的男女比例调整为和实验组一致,具体加权方式如图。两组加权用户的购买率差值为27.5%,等于真实值,推断成功。
从这例子可以看出,“加权法”的思路其实很简单。首先,我们通过加权的方式把两组用户的用户属性分布调整到和目标人群一致(例如总体人群或处理组人群)。接着,我们比较两组加权用户的结果即可。
随着用户属性维度的增加,“加权”这一步需要通过更复杂的方法来实现,对具体细节感兴趣的同学可以继续往下看。
加权大法
在分析非实验数据时,我们往往面临着处理组和对照组用户不同质的问题。这个“不同质”问题导致我们无法通过直接比较两组用户的指标来计算处理效应。例如,在上面的例子中,广告用户和非广告用户的性别分布不同,导致我们不能直接比较两组用户的购买率来回答“广告对购买率有多大提升”这个问题。以“倾向性得分加权”为代表的一类加权方法可以帮助我们扫清障碍,估算出真正的处理效应。
在正式介绍加权方法之前,我们先回顾一下一些基本符号的含义:
- $X$:用户的属性向量(严格来说,应该是“混淆变量”);
- $T\in\{0,1\}$:标记用户是不是在处理组,例如是否被投放广告;
- $Y$:我们感兴趣的结果,例如是否购买;
- $Y_0$, $Y_1$:当一个用户$T=0$和$T=1$时的结果,例如假如一个用户分别身处被投放广告和没有广告的两个平行世界时的购买情况。
处理效应的可识别性
每个方法都有每个方法的适用场景,加权类方法也是如此。在之前的文章《因果推断漫谈(一):掀开“因果推断”的面纱》 中,我们已经介绍过处理效应的可识别性需要建立在几个基本假设上。在这篇文章中,我们继续假设这些假设成立,不再赘述。
倾向性得分加权
加权方法的主要思路是把处理组和对照组用户的属性分布调整到和目标人群一致。例如,当我们想要估算处理对整个人群的影响时,我们通过对每个用户进行加权分别把处理组和对照组用户的属性分布调整到和整个人群的分布一致。
倾向性得分加权,顾名思义,我们打算用倾向性得分进行加权。我们曾经在 《因果推断漫谈(二):倾向性得分匹配介绍》 中介绍过倾向性得分。简单来说,倾向性得分$e(X)$描述了一个属性为$X$的用户属于处理组的概率,即 $e(X)=Pr(T=1|X)$。在上一节的例子中,男性用户被投放广告的概率为20%,他们的倾向性得分为0.2,记为 $e(男性)=0.2$。
为了行文方便,我们先暂时假设倾向性得分是已知的。加权的思路很简单,我们用上一节的例子一边看图一边说。
在这个例子里,男性用户被投放广告的概率为20%,如果我们对处理组的男性用户加权$1/0.2=5$,对对照组的男性用户加权$1/(1-0.2)=1.25$,男性用户属于两个分组的概率就相等了。类似地,女性用户被投放广告的概率为80%,如果我们对处理组的女性用户加权$1/0.8=1.25$,对对照组的女性用户加权$1/(1-0.8)=5$,女性用户属于两个分组的概率也就相等了。这么一来,我们就完成了“加权”过程。严格来说,“倾向性得分加权”的加权方式定义如下:
- 处理组:属性为$X$的用户的权值为 $\frac{1}{e(X)}$。
- 对照组:属性为$X$的用户的权制为 $\frac{1}{1-e(X)}$。
当我们知道如何把两组用户加权调整到和目标群体一致后,我们就可以开始写平均处理效应的估算公式了:
- 潜在结果$Y_1$的期望:$\hat{E[Y_1]}=\frac{1}{n}\sum_{i=1}^n\frac{T_i\cdot Y_i}{e(X_i)}$(证明见[4]);
- 潜在结果$Y_0$的期望:$\hat{E[Y_0]}=\frac{1}{n}\sum_{i=1}^n\frac{(1-T_i)\cdot Y_i}{1-e(X_i)}$(证明见[4]);
- 平均处理效应(Average Treatment Effect,简称ATE):$\hat{ATE}=\hat{E[Y_1]}-\hat{E[Y_0]}=\frac{1}{n}\sum_{i=1}^n[\frac{T_i\cdot Y_i}{e(X_i)}-\frac{(1-T_i)\cdot Y_i}{1-e(X_i)}]$;
- 处理组平均处理效应(Average Treatment Effect on Treated,简称ATT):$\hat{ATT}=\frac{1}{n_t}\sum_{i=1}^n[T_iY_i-\frac{e(X_i)(1-T_i)Y_i)}{1-e(X_i)}]$ ,其中$n_t$为处理组的样本量。
在实战中,倾向性得分一般是未知的,但是我们可以建模估算(用户属性是特征、用户分组是标签)。记倾向性得分的估算值为 $\hat{e}(X_i)$,我们用 $\hat{e}(X_i)$ 替换上面式子中的 $e(X_i )$,并且稍稍修改均一化的方式(有助于降低均方误差 [2]),得到平均处理效用的估算方式如下:
- $\hat{ATE}=\sum_{i=1}^n\frac{T_iY_i}{\hat{e}(X_i)}/\sum_{i=1}^n\frac{T_i}{\hat{e}(X_i)}-\sum_{i=1}^n\frac{(1-T_i)Y_i}{(1-\hat{e}(X_i))}/\sum_{i=1}^n\frac{1-T_i}{1-\hat{e}(X_i)}$
- $\hat{ATT}=\frac{1}{n_t}\sum_{i=1}^n T_iY_i-\sum_{i=1}^n\frac{e(X_i)(1-T_i)Y_i}{1-e(X_i)}/\sum_{i=1}^n\frac{e(X_i)(1-T_i)}{1-e(X_i)}$ ($n_t$为处理组的样本量)
其它加权方式
倾向性得分加权并不是唯一的加权方式,一些其它方法列举如下(从R的WeightIt
包的文档里搬运而来)。感兴趣的小伙伴可以自行搜索具体方法。
Method | Function | Package |
---|---|---|
Covariate Balancing PS ("cbps" ) |
CBPS() |
CBPS |
Non-Parametric Covariate Balancing PS ("npcbps" ) |
npCBPS() |
CBPS |
Entropy Balancing ("ebal" ) |
ebalance() |
ebal |
Empirical Balancing Calibration Weights ("ebcw" ) |
ATE() |
ATE |
Optimization-Based Weights ("optweight" ) |
optweight() |
optweight |
SuperLearner PS ("super" ) |
SuperLearner() |
SuperLearner |
一个真实分析案例
在这一节,我们继续使用《因果推断漫谈(二):倾向性得分匹配介绍》一文中使用过的 Lalonde’s Dataset。完整的R
代码见因果推断学习笔记(四):经典方法尝试之 Weighting (Lalonde's Dataset),下文就不贴代码了。
首先,我们先看看实验数据里的两组用户是否同质。实验组和对照组的年龄(age)和受教育程度(educ和nodegree)不是非常平衡,但是均值的差异也不大。两组用户1978年收入的差异为1704美金,下文把这个当作ATT(处理组平均因果效应)的真值。
字段 | 类型 | 对照组均值 | 处理组均值 | 差异(SMD) | 两组是否平衡 |
---|---|---|---|---|---|
age | Contin. | 25.0538462 | 25.8162162 | 0.1065504 | Not Balanced, >0.1 |
educ | Contin. | 10.0884615 | 10.3459459 | 0.1280603 | Not Balanced, >0.1 |
black | Binary | 0.8269231 | 0.8432432 | 0.0163202 | Balanced, <0.1 |
hispan | Binary | 0.1076923 | 0.0594595 | -0.0482328 | Balanced, <0.1 |
married | Binary | 0.1538462 | 0.1891892 | 0.0353430 | Balanced, <0.1 |
nodegree | Binary | 0.8346154 | 0.7081081 | -0.1265073 | Not Balanced, >0.1 |
re74 | Contin. | 2107.0266585 | 2095.5736886 | -0.0023437 | Balanced, <0.1 |
re75 | Contin. | 1266.9090025 | 1532.0553138 | 0.0823627 | Balanced, <0.1 |
处理组平均因果效应 | 95%置信区间 |
---|---|
1794 | (481, 3108) |
接着,我们看看非实验数据的情况。两组用户差异巨大。假如直接比较两组用户,将得到就业培训导致1978年收入下降-635美金的荒谬结论。
字段 | 类型 | 对照组均值 | 处理组均值 | 差异(SMD) | 两组是否平衡 |
---|---|---|---|---|---|
age | Contin. | 28.0303030 | 25.8162162 | -0.3094453 | Not Balanced, >0.1 |
educ | Contin. | 10.2354312 | 10.3459459 | 0.0549647 | Balanced, <0.1 |
black | Binary | 0.2027972 | 0.8432432 | 0.6404460 | Not Balanced, >0.1 |
hispan | Binary | 0.1421911 | 0.0594595 | -0.0827317 | Balanced, <0.1 |
married | Binary | 0.5128205 | 0.1891892 | -0.3236313 | Not Balanced, >0.1 |
nodegree | Binary | 0.5967366 | 0.7081081 | 0.1113715 | Not Balanced, >0.1 |
re74 | Contin. | 5619.2365064 | 2095.5736886 | -0.7210838 | Not Balanced, >0.1 |
re75 | Contin. | 2466.4844431 | 1532.0553138 | -0.2902629 | Not Balanced, >0.1 |
我们使用“倾向性得分加权”的方法来加权一下非实验数据,结果如下。通过加权后的数据,我们可以推断出处理组平均因果效应为1214美金。
字段 | 类型 | 对照组均值 | 处理组均值 | 差异(SMD) | 两组是否平衡 |
---|---|---|---|---|---|
age | Contin. | 24.9658450 | 25.8162162 | 0.1188496 | Not Balanced, >0.1 |
educ | Contin. | 10.4030803 | 10.3459459 | -0.0284159 | Balanced, <0.1 |
black | Binary | 0.8454795 | 0.8432432 | -0.0022363 | Balanced, <0.1 |
hispan | Binary | 0.0592923 | 0.0594595 | 0.0001672 | Balanced, <0.1 |
married | Binary | 0.1705802 | 0.1891892 | 0.0186090 | Balanced, <0.1 |
nodegree | Binary | 0.6896872 | 0.7081081 | 0.0184209 | Balanced, <0.1 |
re74 | Contin. | 2106.0448305 | 2095.5736886 | -0.0021428 | Balanced, <0.1 |
re75 | Contin. | 1496.5412337 | 1532.0553138 | 0.0110318 | Balanced, <0.1 |
处理组平均因果效应 | 95%置信区间 |
---|---|
1214 | (-402, 2830) |
我们使用CBPS方法(covariate balancing propensity score)的方法来加权一下非实验数据,结果如下。通过加权后的数据,推断出的处理组平均因果效应为1280美金。
字段 | 类型 | 加权后对照组均值 | 加权后处理组均值 | 差异(SMD) | 两组是否平衡 |
---|---|---|---|---|---|
age | Contin. | 25.8533261 | 25.8162162 | -0.0051865 | Balanced, <0.1 |
educ | Contin. | 10.3493208 | 10.3459459 | -0.0016785 | Balanced, <0.1 |
black | Binary | 0.8413337 | 0.8432432 | 0.0019096 | Balanced, <0.1 |
hispan | Binary | 0.0596662 | 0.0594595 | -0.0002068 | Balanced, <0.1 |
married | Binary | 0.1920629 | 0.1891892 | -0.0028737 | Balanced, <0.1 |
nodegree | Binary | 0.7039155 | 0.7081081 | 0.0041926 | Balanced, <0.1 |
re74 | Contin. | 2133.8214867 | 2095.5736886 | -0.0078270 | Balanced, <0.1 |
re75 | Contin. | 1512.5767534 | 1532.0553138 | 0.0060507 | Balanced, <0.1 |
处理组平均因果效应 | 95%置信区间 |
---|---|
1280 | (-329, 2890) |
参考资料
- Imbens G W, Rubin D B. Causal inference in statistics, social, and biomedical sciences[M]. Cambridge University Press, 2015. (相关章节:Ch 17.8)
- 哈佛大学 STAT186 因果推断课件之 Weighting Methods
R
语言包WeightIt
的文档- The intuition behind inverse probability weighting in causal inference