都说随机是AB实验的核心,为何随机这么重要呢?有人说由于随机因此AB组总体不存在差别,这样才能准确估计实验效果(ATE)html
\[ ATE = E(Y_t(1) - Y_c(0)) \]git
那究竟随机是如何定义的呢? 根据Rubin Causal Model, 想要让上述估计无偏,随机实验须要知足如下两个条件:github
SUTVA在通常实验中是假定成立的,线上实验还好,不少线下实验很难保证这一点,像滴滴在部分地区投放更多车辆就会致使其余地区出现运力不足,因此个体间是隐含存在相互影响的。但这个不在本节讨论范围之内。算法
Ignorability在随机实验中,经过对样本随机采样得以保证。可是在观测性实验或者并未进行彻底随机的实验中Ignorability是不成立的。解决办法就是把同时影响是否实验和实验结果的那些变量(Confounding Covariate)考虑进来获得conditional Ignorability。既函数
\[Y(1),Y(0) \perp Z | X\]ui
理论是如此,但X每每是未知且高维的。寻找X彻底同样的样原本估计ATE并不现实,其中一个解决办法就是下面的Propensity Score Matching。名字很高端~计算较简单~使用需谨慎~spa
下面我介绍一下核心方法,并用kaggle一个医学相关数据集简单比较一下各个方法。3d
Propensity Score的核心方法分红两步,score的计算和score的使用。score计算以下:
\[ \text{Propensity Score} = P(Z=\text{treatment assignment}| X \in R^n) \]
一种理解是它经过对影响Z的\(X \in R^N\)进行建模, 提炼全部Confounding Covariate的信息。另外一种理解是把\(P(z|x)\)做为一种类似度(样本距离)的度量。我我的倾向于把它看成一种有目标的降维($N \to 1 $),或是聚类(类似样本)来理解。htm
而后基于score咱们对样本进行聚合或匹配或加权,使样本知足上述的conditional Ignorabilityblog
估计自己就是一个经典的二分类问题,基于特征咱们预测每一个样本进入实验组的几率。几篇经典的paper(2011年以前)都是用LogisticRegression来解决问题,但放在今天xgBoost和LGB等等集合树算法在特征兼容和准确率上应该会表现更好。并且树对于样本划分的方式自然保证了叶节点的样本有相同的打分和类似的特征。[固然要是你的数据过小LR仍是首选]
这里说两个建模时须要注意的点:
这里的特征能够大致被分为三类
毫无疑问confounder是必需要有的,移除confounding Bias是AB实验的核心。可是是否加入只影响treatment和outcome的特征不一样论文给出了不一样的观点。
结合各方结论,加入对outcome有影响的特征是okay的,其实结合上一篇AB实验的高端玩法系列2 - 更敏感的AB实验, CUPED!,能够发现加入对outcome有影响的特征近似于变相使用了CUPED,可能下降实验核心指标估计的方差。
加入只对treatment有影响的特征,可能会致使实验组和对照组样本的Propensity score最终分布重合度变低,致使部分实验样本找不到匹配的对照样本,须要谨慎考虑。
只用AUC,cross-entropy来评价模型的拟合在这里是不够的。这涉及到Propensity Score的Balancing性质:
\[ Z \perp X | PropensityScore \]
简单说就是Score相近的样本,X也要类似。这里你能够直接用可视化boxplot/violinplot来检验,也能够更精确的用T-test等统计手段来检验X是否存在差别。
Propensity Score一般有4种用法,咱们逐一简单介绍一下
一句话说按Propensity给实验组对照组进行配对。
按score对每个实验组样本进行[1/N个][有/无放回]的样本匹配。这里的参数选择除了现实数据量的限制,同样是Bias-Variance的权衡。所以能够考虑根据样本量,在score相差小于阈值的前提下,分别计算1~N个匹配样本下的ATE,若是结果差别过大(sensitivity),则方法自己须要调整。
也有相应的trim方法旨在剔除score取值极端没法找到匹配的样本(eg. \(score \to 0\))。但在一些场景下trim方法会被质疑。( 小明:你扔掉了一些高收入的样本ROI确定打不平啊怎么能这么算呢>_<)
在数据量容许状况下,我更倾向于Nto1有放回的匹配,由于大多数场景下都是没法彻底考虑全部Covariate的,意味着Propensity score的估计必定在一些特征上是有误差的,这种时候取多个样本匹配是可能下降误差的
一句话说按类似Propensity对实验组对照组进行分组在组内计算ATE再求和。
具体怎么分组没有肯定规则,只要保证每组内有足够的实验组对照组样原本计算ATE便可。这里同样是Bias-Variace的权衡,分组越多Bias越少方差越大。一般有两种分位数分桶方法
这里同样可使用trim,可是请结合具体业务场景仔细考虑。
一句话说按Propensity score的倒数对样本进行加权。
一个彻底随机的AB实验,Propensity Score应该都在0.5附近,而不彻底随机的实验在用Propensity score调整后在计算ATE时Z也会被调整为等权,以下:
\[ \begin{align} e &= P(Z=1|x) \\ w &= \frac{z}{e} + \frac{1-z}{1-e} \\ ATE & = \frac{1}{n}\sum_{i=1}^n\frac{z_iY_i}{e_i} - \sum_{i=1}^n\frac{(1-z_i)Y_i}{1-e_i} \end{align} \]
我的对这种方法持保留意见,缘由有2: 其一上述matching和stratification虽然使用了score,但本质是使用了score给出的样本类似度的排序,而并无使用score自己,因此对score估计的准确有必定容忍度。其二拿score作分母很容易碰到\(score \to 0/1\)从而致使的的极端值问题,这就须要人工调整,而调整自己是否合理也会被质疑。
一句话说我没怎么接触过这种方法,也把model-dependency应用在这里不太感冒 >.<,有兴趣的朋友本身探索吧。要是之后发现它好用再加回来
数据来源是Kaggle的开源数据集 Heart Disease UCI[数据连接]
数据自己是根据人们的性别,年龄,是否有过心口痛等医学指标预测人们患心脏病的几率。
数据量和特征都不多,如下仅用做方法探索,不对结果置信度作讨论
这里咱们把数据看成一个观测性实验的样本,实验目的变成女性(sex=0)是否男性(sex=1)更易患上心脏病。数据以下:
直接从数据计算男性比女性患心脏病的几率低30%!WHAT?!
考虑到数据很是小,咱们用LR估计Propensity Score,男女的score分布以下
我分别尝试用实验组和用全样本找分位点的方式来计算ATE, 用实验组估计分位点时分3组会有一组对照组样本太少,因而改为2组。结果比较类似ATE在-0.15 ~ 0.16。比直接用全样本估计下降了一半!
这里stratification分组数的肯定,须要在保证每组有足够的treatment和control样本的基础上,保证每组的Covariate分布类似
如下结果分别是:有trim & match 1~4 + 无trim & match1~4。最终估计的ATE和上述stratification的结果类似ATE在-0.15~-0.16直接。并且相对稳健匹配数量并无对ATE计算产生过大影响。
咱们发现随着匹配的样本上升ATE会愈来愈显著,因此match的N越大越好?其实并非,由于P值是样本量的函数,随着样本量上升'微小'的变更也会变显著。因此我的以为选择最佳的N这里并不十分重要,比较ATE对不一样的N是否稳定可能更有意义。
。。。预料之中,这个结果是比较奇怪的。一方面数据少(100多),另外一方面confonder特征也少,Score的拟合确定很差。因此获得的居然是正向的结果。。。
AB实验的高端玩法系列2 - 更敏感的AB实验, CUPED!
AB实验的高端玩法系列1 - 实用HTE(Heterogeneous Treatment Effects) 论文github收藏