文章目录
之前的文章:
智能营销增益(Uplift Modeling)模型——模型介绍(一)
智能营销增益(Uplift Modeling)模型——pylift库的使用(二)
1 uplift 模型介绍 —— 为个体计算ITE
1.1 模型方向
有多种方法可以评估ACE(平均因果效应)或ITE(个体因果效应),这里我们关注的是ITE估计,即利用Uplift Modeling的方法,
为每个样本(如用户)分别估计干预/不干预时的结果,得到treatment(干预)想退control(不干预)的uplift(增量)值。
不过uplift模型等于评估个人的CATE。
uplift model常见的方法:
- tree-based: 和机器学习中的树基本一样(分裂规则、停止规则、剪枝),核心为分裂规则,根据每个叶子节点的uplift,计算分裂前后的信息差异。常用比如基于分布差异(KL、Euclidean等);或者结合bagging、boosting技术等
- regression-based / Meta-Learning Method
- two-model:实验对照组分别一个模型,之后做差。可能实验对照各自学的好,但是缺失了我们要的uplift增益效应
- one-model:把T(是否发券)作为特征加入(其他模型T不作为特征),最终输出
- NN-Based Method
- 聚类: 从目标上我们想圈一部分uplift高的人,且无label指导,从这个角度可能可以借鉴思路
1.2 ITE的假设前提
假设有N个用户,Y_i(1)表示对用户干预后用户输出的结果,比如给用户i发放优惠券(干预)后用户下单(结果),Y_i(0)表示没有对用户干预情况下的输出结果。用户i的因果效应的计算方式如下:
训练增益模型目标就是最大化增量τ_i,即有干预策略相对于无干预策略的提升,更简单的解释就是干预前后用户输出结果的差值。在实际使用时会采用所有用户的因果效应期望来衡量该用户群的整体表现,称为条件平均因果效应(CATE, Conditional Average Treatment Effect):
上式中X_i是用户i的特征,所谓的conditional是指的基于用户的特征。
在实际场景中,对于任意一个用户我们是不可能看到其同时受到干预策略(treatment)和不干预策略(control)时的反应的,所以式(2)是uplift的理想计算公式,我们对其进行修正:
其中
Y
i
o
b
s
Y_i^obs
Yiobs 是用户i可以观察到的输出结果,W_i为二值变量,如果用户i被干预则W_i = 1,否则W_i = 0。当用户特征和干预策略满足条件独立假设(CIA,Conditional Independence Assumption)时,条件平均因果效应的期望估计值可以写作:
那么此时的ITE假设前提为:用户特征和干预策略相互独立:
{Y_i (1),Y_i (0)⊥W_i |X_i
那么什么样的样本用户这样的特征,这样的样本又该如何获取?
最简单直接的方式就是随机A/B实验,A组采用干预策略,B组不进行任何干预,经过A组和B组的流量得到的两组样本在特征分布上基本一致(即满足CIA),可以通过模拟两组人群的τ(X_i)进而得到个人用户的τ(X_i)。因此随机A/B实验在Uplift Model建模过程中至关重要,在训练样本高度无偏情况下,模型才能表现出更好的效果。
特别注意,在【特殊meta学习:The Class Transformation Method】,有一个新增的条件:
用户被分到实验组和对照组的概率一致P(T)=P©=0.5,在贝壳案例中就使用该方法,所以必须服从实验组与对照组样本均等,所以那篇文章的案例中,负样本会进行负采样
另外一些ITE的顶会论文可参考:
多篇顶会看个体因果推断(ITE)的前世今生
2 uplift方法一:元学习方法(Meta-learning methods)
我们之前一直以ATE为例,实际观测数据中我们经常估计conditional ATE (CATE),有些研究可能只关注treatment或者control组的ATE,分别叫ATT和ATC(有些情况下ATE无法估计)
该系列方法默认假定unconfoundedness(CIA假定) & positivity(正值假设)
而且,该方法是需要设立实验组treatment与对照组control的,所以是RCM理论下的产物。
Meta-learning methods方法的优缺点:
- 【优点】:利用了既有预测算法的预测能力,方便易实现。
- 【缺点】:不直接建模uplift,效果打折扣。
2.1 Conditional Outcome Modeling (COM) / S-learner
基于之前讨论我们得到ATE的识别为
右边式子只包含statistical quantities,是statistical estimand。estimation需要我们用data估计estimate。最直接的办法就是我们可以先使用statistical model或者ML model估计conditional expectation,之后进行样本估计。
这里的估计,在实践看来其实就是利用模型的预测值
存在问题:当数据纬度变大时,容易产生估计偏差 (estimate biased towards 0!),这个很直观,假设数据有100维,T只是其中1维,模型训练时容易忽略这个维度,导致计算出来ATE -> 0,进而引出Grouped COM。
S-learner是将treatment作为特征,干预组和非干预组一起训练,解决了bias不一致的问题,但是如果本身X的high dimension可能会导致treatment丢失效果:
- 【优点】S-Learner简单直观、直接使用既有预测算法;预测仅依赖一个模型,避免了多模型的误差累积;更多的数据和特征工程对预测准确率有利。
- 【缺点】但是该方法不直接建模uplift;且需要额外进行特征工程工作(由于模型拟合的是Y,所以若W直接作为一个特征放进去,可能由于对Y的预测能力不足而未充分利用)。
- 【应用】在因果推断未受关注之前,诸如”优惠券“发放的问题常用该方法,直接建模”对什么人,发放什么面额券,是否会下单“,预测阶段则对User和Coupon交叉组合后进行预测,得到(User,Coupon)组合的下单率,然后再依据预算、ROI或其他约束进行MCKP求解。
简单来看就是:
C A T E = ( Y . p r e d ∣ T = 1 , W , X ) − ( Y . p r e d ∣ T = 0 , W , X ) CATE = (Y.pred|T=1,W,X) - (Y.pred|T=0,W,X) CATE=(Y.pred∣T=1,W,X)−(Y.pred∣T=0,W,X)
这里的y.pred就是模型的预测值。
2.2 Grouped COM (GCOM) / T-Learner
GCOM引入为了解决COM中estimate biased towards to 0的问题,为了加强模型对T的权重,我们在估计 u u u时,分别对treatment组和control组使用不同的模型,其他流程与COM一样,也常叫T-Learner。
存在问题:每个estimator只使用部分数据,尤其当样本不足或者treatment、control样本量差别较大时,模型variance较大(对数据利用效率低),我们需要提升数据利用率!
- 【优点】T-Learner一样简单直观、直接使用既有预测算法;将不同的数据集中的增量效果转换为模型间的差异,不需要太多的特征工程工作;当有随机试验的数据时该方法作为baseline很方便。
- 【缺点】容易出现两个模型的Bias方向不一致,形成误差累积,使用时需要针对两个模型打分分布做一定校准;同时当数据差异过大时(如数据量、采样偏差等),对准确率影响较大。
进而引出接下来2个model TARNet和X-Learner。
简单来看,这里会构建两个模型,treatment / control 两个:
C A T E = ( Y . p r e d 1 ∣ T = 1 , W , X ) − ( Y . p r e d 2 ∣ T = 0 , W , X ) CATE = (Y.pred1 |T=1,W,X) - (Y.pred2|T=0,W,X) CATE=(Y.pred1∣T=1,W,X)−(Y.pred2∣T=0,W,X)
这里的 y . p r e d 1 y.pred1 y.pred1就是模型1treatment的预测值, y . p r e d 2 y.pred2 y.pred2就是模型2control的预测值。
2.3 X-Learner
充分利用数据估计每个group的estimator,对于数据倾斜很严重的估计有很好的弥补作用。X-learner估计步骤如下:
X-Learner在T-Learner基础上,利用了全量的数据进行预测,主要解决Treatment组间数据量差异较大的情况。但流程相对复杂、计算成本较高,有时还会由于多模型误差累积等问题效果不佳。
另外,不论是分类问题还是回归问题,在 计算最终效应步骤时,都需要使用回归模型来拟合。
简单来看,这里同样会构建两个模型,treatment / control 两个:
C A T E = [ ( Y . t r u e 1 ∣ T = 1 , W , X ) − ( Y . p r e d 1 ∣ T = 1 , W , X ) ] − [ ( Y . t r u e 2 ∣ T = 0 , W , X ) − ( Y . p r e d 2 ∣ T = 0 , W , X ) ] CATE = [(Y.true1 |T=1,W,X) - (Y.pred1|T=1,W,X)]-[(Y.true2 |T=0,W,X) - (Y.pred2|T=0,W,X)] CATE=[(Y.true1∣T=1,W,X)−(Y.pred1∣T=1,W,X)]−[(Y.true2∣T=0,W,X)−(Y.pred2∣T=0,W,X)]
这里的 y . p r e d 1 y.pred1 y.pred1就是模型1treatment的预测值与实际值,, y . p r e d 2 y.pred2 y.pred2就是模型2control的预测值与实际值。
2.4 R-learner
R-Learner的思路是通过将问题转化为定义损失函数(R-loss)的形式进行学习训练,更关注”残差“。该方法原文比较难啃,这里直接列出实现步骤:
不过,实现起来复杂度较高,不是特别实用。
2.5 特殊meta学习:The Class Transformation Method
该方法有点像是S-Learner的升级版,但是又有一些改动。之前看到腾讯看点团队基于该方法进行改动。
该方法适用于Treatment和Outcome都是二类分类的情况,通过将预测目标做单类的转换,从而实现单模型预测。
首先,考虑随机试验的情况,定义新的目标变量:
最后,我们考虑一般情况,适用于非平衡非随机试验的数据,可用任意机器学习算法估计(同CATE):
这里p为倾向性得分
在证明前需要说明两个假设:
- 用户特征和干预策略相互独立
- 用户被分到实验组和对照组的概率一致P(T)=P©=0.5 (独有)
在贝壳中就使用了该模型:Uplift-Model在贝壳业务场景中的实践
第一个假设一直是我们强调的很好理解,
第二个假设(个体对对照组和实验组的倾向必须一样)看似非常严格,幸运的是,可以通过一些转换操作来解决实验组和对照组的个人倾向不同的问题。
最简单的方式就是对数据进行重采样使得数据满足假设,即使不满足也可以通过引入用户倾向分来进行调整,调整后对于CATE的估计值转化为:
其中
p
(
X
i
)
=
P
(
W
i
∣
X
i
)
p(X_i)=P(W_i |X_i)
p(Xi)=P(Wi∣Xi)表示个人倾向分,其代表在
X
i
X_i
Xi条件下进入实验组概率,这种转换必须是在CIA假设条件,在X_i的条件下等同于CATE即
E
[
Y
i
∗
∣
X
i
]
=
τ
(
X
i
)
E[Y_i^* |X_i ]=τ(X_i)
E[Yi∗∣Xi]=τ(Xi)。
当实验组和对照组的样本比例不相同时,这时对应的 Y i ∗ Y_i^* Yi∗是一个连续值,因此我们可以采用任意一种回归模型进行求解。
即使不满足(经常会有对照组数量远远小于实验组的情况),根据公式,训练数据的不平衡影响的只是P ( G = T ) 和P(G=C)的权重(原来的权重是1:1),如果模型结果有意义,并且如果在测试集和线上表现良好,那么也不一定非要满足P ( G = T ) = P ( G = C ) = 1/ 2 的假设,实践中都是结果导向。
3 uplift方法二:Tree-Based Method(增量直接建模)
传统机器学习模型中,树模型主要的思路就是通过对特征点进行分裂,将X划分到一个又一个subspace中,这与补贴场景下,希望找到某一小部分增量很高的用户的想法几乎是完美重合。
因此,与meta-learner不同的是,uplift model下的树模型希望通过这样的分裂方式达到对增量直接建模的目的。
传统分类树模型是希望通过信息理论(information theory)中的信息熵等思想,用计算信息增益的方法去解决分类问题。而在uplift tree model中,其本质也还是想要通过衡量分裂前后的变量差值去决策是否分裂节点,不过这里的这个决策差值的计算方法不再是信息增益(information gain),而是不同的直接对增量uplift建模的计算方法,其中包括了利用分布散度对uplift建模、直接对uplift建模的CTS 、 CausalForest。
3.1 分布散度下的Uplift-Tree
分布散度是用来度量两个概率分布之间差异性的值,当两个分布相同时,两个离散分布的散度为非负且等于零。我们可以把实验组和对照组理解为两个概率分布,然后利用分布散度作为非叶节点分裂标准,最大化实验组和对照组的样本类别分布之间的差异,减少样本不确定度。常见的分布散度有KL 散度 (Kullback-Leibler divergence)、欧式距离 (Squared Euclidean distance) 和卡方散度(Chi-squared divergence),在uplift model中,其具体计算方法如下:
除此以外,分布散度还有个特点:通过公式可以推导,当结点中对照组数据为空时,KL散度会退化为决策树分裂准则中的信息增益;欧式距离和卡方散度将会退化为基尼指数。而当结点中实验组数据为空时,欧式距离将会化为基尼指数。这也是该类分裂准则的优点之一。
3.2 CausalForest
这个方法与其说是一个算法,不如说是一类算法,他们的核心都是把一个个建立好的causal tree (uplift tree)做一个ensemble,然后把每棵causal tree (uplift tree)计算出来的treatment effect取一个平均。
而对于CausalForest,这里可以是任意单Tree-Based方法。
当然如果要这么做,其实我们需要满足一个assumption,就是unconfoundedness(CIA),就是在叶子结点上控制住所有的confounder X后,treatment和outcome要独立。
所以方法很简单,难点在于怎么建立causal tree才能满足。我们要建一棵"诚实树",即honest tree。
简单来说,就是我们对于任意样本
i
i
i,他的
Y
i
Yi
Yi要不然只能用来做
u
(
x
)
u(x)
u(x)的预测,要不然只能用来做树的分裂依据,只能二选一。
3.3 对uplift直接建模的CTS Tree
MIT的Zhao Yan 等人在2017年提出了一种新的名为CTS的分裂准则去构建Uplift Tree。CTS algorithm是Contextual Treatment Selection的缩写。不同于分布散度,在该标准下,我们会直接最大化每个节点上实验组和对照组之间label期望的差值(可以理解为该节点上样本的Uplift值),并以此来分裂节点。
CTS树具体构造流程为:
这里重点介绍其与上述Uplift Tree的区别:
分裂准则:仍是分裂后与分裂前得分之差,区别在于Uplift Tree的得分用的是分布散度,而这里的目标是分裂能够最大化结点内各个Treatment中最大的Y值期望。
【个人理解:任务目标是选择何种treatment(包括control组)能带来最大收益,因此分裂出期望最大即可】
4 NN-Based Method
4.1 DragonNet
基于神经网络的方法比较新,这里简单举一个例子——DragonNet。该方法主要工作是将propensity score估计和uplift score估计合并到一个网络实现。
首先,引述了可用倾向性得分代替X做ATE估计
然后,为了准确预测ATE而非关注到Y预测上,我们应尽可能使用X 中与 T 相关的部分特征。
5 Uplift Model 模型评估
常用分类和回归算法,可以通过 AUC、准确率和 RMSE 等去评估模型的好坏。而由于Uplift Model 中不可能同时观察到同一用户在不同干预策略下的响应,即无法获取用户真实增量, 我们也就无法直接利用上述评价指标去衡量模型的好坏。因此,Uplift Model 通常都是通过划分十分位数来对齐实验组和对照组数据,去进行间接评估。常用的评估方 法有 Qini 曲线、AUUC 等。
参考:
5.1 离线评估方法:Qini curve
Qini 曲线是衡量 Uplift Model 精度方法之一,通过计算曲线下的面积,类似 AUC 来评价模型的好坏。
其计算流程如下
(1) 在测试集上,将实验组和对照组分别按照模型预测出的增量由高到底排序,根据用户数量占实验组和对照组用户数量的比例,将实验组和对照组分别划分为十份,分别是 Top10%, 20%, . . . , 100%。
(2) 计算Top10%,20%,…,100%的Qini系数,生成Qini曲线数据(Top10%,Q(Top10%)),
(…,…), (Top100%, Q(Top100%))。Qini 系数定义如下:
可以看出,Qini 系数分母是实验组和对照组的总样本量,如果实验组和对照组用户数量差别比较大,结果将变得不可靠。
5.2 离线评估方法:AUUC
AUUC(Area Under the Uplift Curve) 的计算流程与 Qini 曲线的计算流程一样,计算前 10%、20%、. . . 、100% 的指标,绘制曲线,然后求曲线下的面积,衡量模型的好坏。不同是 AUUC 指标计算方法与 Qini 指标计算不同,AUUC 指标定义如下:
与 Qini 指标含义相同,当 i 取10% 时,
n
(
i
)
n(i)
n(i)表示实验组前 10% 用户数量,
n
(
i
)
n(i)
n(i)表示对照组前 10% 用户数量。
可以看出,AUUC 指标计算方法可以避免实验组和对照组用户数量差别较大导致的指标不可靠问题。
值得注意的是,当分桶时,对照组边界点预估出的增量与实验组边界点的预估值有较大差别时候,以上的两个评估指标似乎都显得不那么可靠了。因此在实际中,我们使用的往往是AUUC 另外的一种计算方法。
5.2.1 AUUC非随机情况分析
一般业界都会基于随机试验进行评估,这里简单说明如果不是随机实验AUUC会产生什么问题。随机是指每个用户用户被分配到treatment概率是不变的
5.2.2 AUUC非平衡情况分析
5.2.3 AUUC优化 - 降低方差
降低方差最简单的方法就是多个方法进行平均,这里介绍2种计算uplift curve的方法,进行线性组合降低方差
5.3 线上评估方法——腾讯的A/B 测试得到效应
最好的验证模型或策略效果的方法就是做线上的AB实验。在设计AB实验对比时,要小心处理目标的数据范围,在什么节点进行分流。
如果我们想知道的是全局的策略效果,则要在一开始就分流;而如果想知道策略生效部分的效果,则要在策略判定之后,对判定生效的部分进行分流,其中A桶原样返回,B桶生效返回。
下面是腾讯广告做uplift分析的流程图示例,通过线上AB试验的方式给出增量效果。
5.4 Uplift decile charts
用第k组内Treatment和Control样本的y之差表示,如下图表示按照uplift得分降序排列后,前50%的样本Treatment是正效果的,而后50%是负效果。
该方法虽然直观,但很难用于进行模型间的对比,如难以说明下面两个模型的优劣。