“我报名参加金石计划1期挑战——瓜分10万奖池,这是我的第3篇文章,# AB实验的高端玩法系列1 – 人群定向/HTE/Uplift 论文github收藏
论文
Athey, S., and Imbens, G. 2016. Recursive partitioning for heterogeneous causal effects. Proceedings of the National Academy of
Sciences.
Rzepakowski, P. and Jaroszewicz, S., 2012. Decision trees for uplift modeling with single and multiple treatments. Knowledge and Information Systems, 32(2), pp.303-327
背景
论文给出基于决策树估计实验对不同用户的不同影响。并提出Honest,variance Penalty算法旨在改进CART在tree growth过程中的过拟合问题。
我们举个例子:科研人员想衡量一种新的降血压药对病人的效果,发现服药的患者有些血压降低但有些血压升高。于是问题可以抽象成我们希望预测降压药会对哪些病人有效?相似的问题经常出现在经济,政治决策,医疗研究以及当下的互联网AB测试中。
Treatment effect之所以比通常的预测问题要更难解决,因为groud-truth在现实中是无法直接观测到的,一个人在同一时刻要么吃药要不么吃药,所以你永远无法知道吃药的人要是没吃药血压会不会也降低,或者没吃药的人要是吃了药血压会不会降低。
既然个体的treatment effect无法估计,只能退而求其次去估计群体的treatment effect- ATE (Average treatment effect),既全部用户中(服药效果- 未服药效果)。 但是当出现个体效果差异时ATE无法反应局部效果(E.g.样本稀释)。这时我们需要估计相似群体的treatment effect-CATE(Conditional average treatment effect)
用数学抽象一下上述问题:
(Xi,Yi,Ti):Xi∈Xwhere X是特征,Y是Response,T是AB实验分组Ti∈0,1Yi={Y(0)Ti=0Y(1)Ti=1CATE:τ(x)=E(Yi(1)−Yi(0)∣X=x){(X_i, Y_i,T_i): X_i in X} \
text{where X是特征,Y是Response,T是AB实验分组}\
T_i in {0,1} quad \
Y_i = begin{cases}
Y(0) quad T_i = 0\
Y(1) quad T_i = 1\
end{cases}\
CATE: tau(x) = E(Y_i(1)-Y_i(0)|X=x)\
模型
这里寻找相似用户的方式是通过决策树。树相较线性模型的优点毫无疑问是它对特征类型的兼容,尤其考虑到实际情况中会存在大量离散特征如性别,地域等等。
那究竟怎样grow tree来找到局部用户群, 取决于cost function的定义。一般决策/回归树是对Y的拟合例如RMSE,或者cross-entropy等等。这里作者选择最大化Y(1)−Y(0)Y(1)-Y(0)作为cost Function, 既我们通过树划分出的局部人群可以实现局部实验效果最大化(正向或负向)。 cost function 如下:
Sl=(Xi,Yi,Ti):Xi∈Xl叶节点-局部样本μt^(Sl)=1Nl,t∑Ti=t,i∈SlYiAB组Y的均值τ^(Sl)=μ1^(Sl)−μ0^(Sl)叶节点CATEF(Sl)=Nl∗τ^2(Sl)cost fucntion:max∑i=1LF(Si)S_l = {(X_i, Y_i,T_i): X_i in X_l} quad text{叶节点-局部样本}\
hat{mu_t}(S_l) = frac{1}{N_{l,t}}sum_{T_i=t, i in S_l}Y_i quad text{AB组Y的均值} \
hat{tau}(S_l) = hat{mu_1}(S_l) -hat{mu_0}(S_l) quad text{叶节点CATE}\
F(S_l) = N_l * hat{tau}^2(S_l)\
text{cost fucntion}: max sum_{i=1}^L F(S_i)\
熟悉决策树的朋友也就知道后续split criterion就是去寻找最大化CATE增长的特征和阈值。对决策树不太熟的朋友可以来我之前的博客看看Tree-Decision Tree with Sklearn source code
模型优化
决策树最大的问题就是过拟合,因为每一次split都一定可以带来Information Gain。这里就涉及到ML里最经典的Bias-variance trade off。树划分的节点越小,对样本的估计偏差(Bias)越小但方差(Variance)越大。
传统决策树一般通过几个方法来解决过拟合的问题:
- cross-validation来确定树深度
- min_leaf, min_split_gain 用叶节点的最小样本量等参数来停止growth
作者在文章中给出另外两种解决过拟合的方法:
- Honest approach
- Variance Penalty
Honest approach是把训练样本分成train和est两部分,用train来训练模型用est来给出每个叶节点的估计
Variance Penaly则是直接把叶节点的方差加到cost function中,最终的cost function如下:
F(Sl)=Nl∗τ^2(Sl)−Nl(Var(Sl,1)p+Var(Sl,0)1−p))F(S_l) = N_l * hat{tau}^2(S_l) – N_l(frac{Var(S_{l,1})}{p} + frac{Var(S_{l,0})}{1-p}))
这个模型当前还没找到很好的工程实现,在Uber的Casualml项目中是正在开发中的Enhancement
离散outcome – uplift model
上述cost function的定义更多适用于outcome是连续值的情况,例如时长,收入等等。当outcome是离散值时,casual tree还有一个兄弟叫做uplift-model。在Uber的开源库里这两个方法是完全独立的实现,一个是UpliftTreeClassifier用于离散问题,一个是CausalTreeRegressor用于连续问题。
不过个人认为除了一些细节例如penalty,honest approach的差异,这两种方法最大的差异只在于用不同的方式来计算Treatment和Outcome的分布距离。uplift-model支持以下三种距离计算方式。
作者在论文中对ED在对称性以及稳定性(不会像KL一样在0/1附近出现极端之值)的天然优势有偏好。不过你有木有发现ED其实就是上述casual tree的cost function的计算方式嘞
KL(P∣∣Q)=∑ipilogpiqiED(P,Q)=∑i(pi−qi)2χ2(P,Q)=∑i(pi−qi)2qiKL(P||Q) = sum_i{p_i logfrac{p_i}{q_i}} \
ED(P,Q) =sum_i{(p_i – q_i)^2}\
chi^2(P,Q) = sum_i{frac{(p_i-q_i)^2}{q_i}}
想看更多因果推理AB实验相关paper的小伙伴看过来 Paper_CausalInference_abtest
欢迎留言~