因果推断在互联网界应用主要是基于Uplift model来预测额外收益提升ROI。Uplift模型帮助商家计算人群营销敏感度,驱动收益模拟预算和投放策略制定,促成营销推广效率的最大化。同时如何衡量和预测营销干预带来的“增量提升”,而不是把营销预算浪费在“本来就会转化”的那部分人身上,成为智能营销算法最重要的挑战。
举个例子🌰:对用户A和用户B都投放广告,投放广告后用户A的CVR(转化量/点击量)为5%,用户B的CVR为4%,那么是否就给用户A投广告呢?仅从投放广告后的结果来看是这样的。但如果投放广告前用户A的CVR为4%,用户B的CVR为2%,那么我们就认为广告投放本身所带来的收益B要比A多,所以把广告投给用户B。
Uplift模型的作用就是计算人群营销敏感度,具体就是计算每个用户的增益,再根据广告主设置的预算以及其它限制看是否对该用户投放广告。
建模时主要针对persuadables人群,并且要避免sleeping dogs人群。如果使用reponse model,则难以区分这几类人群,因为模型只预测是否购买,可能转化的用户中persuadable的比例相当少,并不是营销中的target。
Uplift模型用于预测/估计某种干预对个体状态/行为的因果效应。可以形式化为以下等式: τ i = p ( Y i ∣ X i , T i = 1 ) − p ( Y i ∣ X i , T i = 0 ) (1) \tau_i=p(Y_i|X_i, T_i=1)-p(Y_i|X_i, T_i=0)\tag1 τi=p(Yi∣Xi,Ti=1)−p(Yi∣Xi,Ti=0)(1) 其中, Y i Y_i Yi表示潜在结果(比如转化率,点击率等), X i X_i Xi表示用户的特征, T i = 1 T_i=1 Ti=1表示进行干预, T i = 0 T_i=0 Ti=0表示不进行干预,应用在广告营销中就可以形象的表示为某用户在经过广告投放行为之后,用户发生某种行为(点击或购买)增加的概率。
注意到,对于一个用户,我们只能对他进行干预或者不干预,即只能观测到 T 1 = 1 T_1=1 T1=1或 T 1 = 0 T_1=0 T1=0,所以对于一个个体的增益 τ i \tau_i τi是观测不到的。
所以我们可以考虑总体的(人群的子人群,即用一个人群的因果效果来表示一个单个人的因果效果),即平均因果效应(Average treatment effect,简记为ATE): A T E = E ( Y i ( 1 ) − Y i ( 0 ) ) = E ( Y i ( 1 ) ) − E ( Y i ( 0 ) ) (2) ATE=E(Y_i(1)-Y_i(0))=E(Y_i(1))-E(Y_i(0))\tag2 ATE=E(Yi(1)−Yi(0))=E(Yi(1))−E(Yi(0))(2)
T i ∈ { 0 , 1 } T_i\in\{0, 1\} Ti∈{ 0,1}表示是否进行干预,那么可有 Y i o b s = T i Y i ( 1 ) + ( 1 − T i ) Y i ( 0 ) (3) Y_i^{obs}=T_iY_i(1)+(1-T_i)Y_i(0)\tag3 Yiobs=TiYi(1)+(1−Ti)Yi(0)(3)
这里详细介绍了在合理的假设下,即在一个确定的特征 X i X_i Xi下,用户是随机分到treatment组和对照组的,那么 ( 2 ) (2) (2)式可化为 A T E = E ( Y i ∣ T i = 1 ) − E ( Y i ∣ T i = 0 ) = E ( Y i o b s ∣ X i = x , T i = 1 ) − E ( Y i o b s ∣ X i = x , T i = 0 ) (4) ATE=E(Y_i|T_i=1)-E(Y_i|T_i=0)=E(Y_i^{obs}|X_i=x,T_i=1)-E(Y_i^{obs}|X_i=x,T_i=0)\tag4 ATE=E(Yi∣Ti=1)−E(Yi∣Ti=0)=E(Yiobs∣Xi=x,Ti=1)−E(Yiobs∣Xi=x,Ti=0)(4)
从而可以设计随机化的A/B Test。
补贴活动提升的购买意愿为 τ ( X i ) = P ( Y i = 1 ∣ X i , T i = 1 ) − P ( Y i = 1 ∣ X i , T i = 0 ) \tau(X_i)=P(Y_i=1|X_i,T_i=1)-P(Y_i=1|X_i,T_i=0) τ(Xi)=P(Yi=1∣Xi,Ti=1)−P(Yi=1∣Xi,Ti=0),由于我们得不到一个用户的 τ i \tau_i τi,所以无法得到真正的label,造成监督学习无法进行。在缺少真正 τ i \tau_i τi的情况下,一般有三大类方法来评估 τ i \tau_i τi:The Class Transformation Method、Meta-Learning Method、Tree-Based Method。
该方法应该归于Meta-Learning Method,这里为了不混淆单列出来。该方法适用于Treatment和Outcome都是二类分类的情况,通过将预测目标做单类的转换,从而实现单模型预测。
首先,定义新的变量 Z i = Y i o b s T i + ( 1 − Y i o b s ) ( 1 − T i ) (5) Z_{i}=Y_{i}^{o b s} T_{i}+\left(1-Y_{i}^{o b s}\right)\left(1-T_{i}\right)\tag5 Zi=YiobsTi+(1−Yiobs)(1−Ti)(5) 由于Treatment和Outcome都是二类分类,所以 Y i o b s ∈ { 0 , 1 } Y_i^{o b s}\in\{0, 1\} Yiobs∈{ 0,1}, T i ∈ { 0 , 1 } T_i\in\{0, 1\} Ti∈{ 0,1},所以当 Y i o b s = T i = 0 Y_i^{o b s}=T_i=0 Yiobs=Ti=0或 Y i o b s = T i = 1 Y_i^{o b s}=T_i=1 Yiobs=Ti=1时, Z i = 1 Z_i=1 Zi=1。
那么对Uplift τ ( X i ) \tau(X_i) τ(Xi)有 τ ( X i ) = 2 P ( Z i = 1 ∣ X i ) − 1 (6) \tau(X_i)=2 P\left(Z_{i}=1 \mid X_{i}\right)-1\tag6 τ(Xi)=2P(Zi=1∣Xi)−1(6)
推导: 由 Z i Z_i Zi的定义可知 P ( Z i = 1 ∣ X i ) = P ( Y i = 1 , T i = 1 ∣ X i ) + P ( Y i = 0 , T i = 0 ∣ X i ) P(Z_i=1|X_i)=P(Y_i=1,T_i=1|X_i)+P(Y_i=0,T_i=0|X_i) P(Zi=1∣Xi)=P(Yi=1,Ti=1∣Xi)+P(Yi=0,Ti=0∣Xi),而根据假设有 P ( T i = 1 ∣ X i ) = P ( T i = 0 ∣ X i ) = 1 2 P(T_i=1|X_i)=P(T_i=0|X_i)=\frac{1}{2} P(Ti=1∣Xi)=P(Ti=0∣Xi)=21,所以 τ ( X i ) = P ( Y i = 1 ∣ X i , T i = 1 ) − P ( Y i = 1 ∣ X i , T i = 0 ) = P ( Y i = 1 , T i = 1 ∣ X i ) P ( T i = 1 ∣ X i ) − P ( Y i = 1 , T i = 0 ∣ X i ) P ( T i = 0 ∣ X i ) = 2 [ P ( Y i = 1 , T i = 1 ∣ X i ) − P ( Y i = 1 , T i = 0 ∣ X i ) ] = [ P ( Y i = 1 , T i = 1 ∣ X i ) − P ( Y i = 1 , T i = 0 ∣ X i ) ] + [ 1 2 − P ( Y i = 0 , T i = 1 ∣ X i ) − 1 2 + P ( Y i = 0 , T i = 0 ∣ X i ) ] = P ( Z i = 1 ∣ X i ) − P ( Z i = 0 ∣ X i ) = 2 P ( Z i = 1 ∣ X i ) − 1 \tau(X_i)=P(Y_i=1|X_i,T_i=1)-P(Y_i=1|X_i,T_i=0)\\ =\frac{P(Y_i=1,T_i=1|X_i)}{P(T_i=1|X_i)}-\frac{P(Y_i=1,T_i=0|X_i)}{P(T_i=0|X_i)}\\ =2[P(Y_i=1,T_i=1|X_i)-P(Y_i=1,T_i=0|X_i)]\\ =[P(Y_i=1,T_i=1|X_i)-P(Y_i=1,T_i=0|X_i)]\\ +[\frac{1}{2}-P(Y_i=0,T_i=1|X_i)-\frac{1}{2}+P(Y_i=0,T_i=0|X_i)]\\ =P(Z_i=1|X_i)-P(Z_i=0|X_i)\\ =2P(Z_i=1|X_i)-1 τ(Xi)=P(Yi=1∣Xi,Ti=1)−P(Yi=1∣Xi,Ti=0)=P(Ti=1∣Xi)P(Yi=1,Ti=1∣Xi)−P(Ti=0∣Xi)P(Yi=1,Ti=0∣Xi)=2[P(Yi=1,Ti=1∣Xi)−P(Yi=1,Ti=0∣Xi)]=[P(Yi=1,Ti=1∣Xi)−P(Yi=1,Ti=0∣Xi)]+[21−P(Yi=0,Ti=1∣Xi)−21+P(Yi=0,Ti=0∣Xi)]=P(Zi=1∣Xi)−P(Zi=0∣Xi)=2P(Zi=1∣Xi)−1 注意到, P ( Y i = 1 , T i = 1 ∣ X i ) = P ( T i = 1 ∣ X i ) − P ( Y i = 0 , T i = 1 ∣ X i ) = 1 2 − P ( Y i = 0 , T i = 1 ∣ X i ) P(Y_i=1,T_i=1|X_i)=P(T_i=1|X_i)-P(Y_i=0,T_i=1|X_i)=\frac{1}{2}-P(Y_i=0,T_i=1|X_i) P(Yi=1,Ti=1∣Xi)=P(Ti=1∣Xi)−P(Yi=0,Ti=1∣Xi)=21−P(Yi=0,Ti=1∣Xi),所以倒数第三个等号成立。
训练和测试过程如下图所示。从实验组和对照组筛选出 Z = 1 Z = 1 Z=1的用户作为正样本,其余的作为负样本。实际上 Z = 1 Z = 1 Z=1就是实验组中下单的用户和对照组中未下单的用户,因此可以直接将实验组和对照组用户合并,使用一个模型建模,实现了数据层面和模型层面的打通。
Meta-Learning方法是指基于Meta-Learner进行Uplift预估,其中Meta-Learner可以是任意的既有预测算法,如LR、SVM、RF、GBDT等。根据Meta-Learner的组合不同,通常分为:S-Learner、T-Learner、X-Learner、R-Learner。
S即Single,S-Learner是指用一个模型来估计Uplift,即在实验组和对照组样本特征中加入干预 T T T有关的特征,将实验组和对照组的样本特征、Label 合并,训练一个模型。具体步骤为:
优点:
缺点:
T即Two,T-Learner是指用两个模型来估计Uplift,即用两个模型分别建模干预、不干预的情况,取差值作为Uplift。具体步骤为:
预测时,对每个待预测用户都分别用两个模型预测一下。
优点:
缺点:
X-Learner算法是在Two Model模型基础上提出的,基于利用观察到的样本结果去预估未观察到的样本结果的思想,对增量进行近似,同时还会对结果进行倾向性权重调整,以达到优化近似结果的目的。具体步骤为:
优点:
缺点:
R-Learner算法思想不同于Two、Single和X-Learner。其核心思想是通过 Robinson’s transfomation 定义一个损失函数,然后通过最小化损失函数的方法达到对增量进行建模的目的。具体步骤为:
优点:
缺点:
传统机器学习模型中,树模型主要的思路就是通过对特征点进行分裂,将X划分到一个又一个subspace中,这与补贴场景下,希望找到某一小部分增量很高的用户的想法几乎是完美重合。
传统分类树模型是希望通过信息理论(information theory)中的信息熵等思想,用计算信息增益的方法去解决分类问题。而在uplift tree model中,其本质也还是想要通过衡量分裂前后的变量差值去决策是否分裂节点,不过这里的这个决策差值的计算方法不再是信息增益(information gain),而是不同的直接对增量uplift建模的计算方法,其中包括了利用分布散度对uplift建模和直接对uplift建模。
下面介绍三个Tree-Based算法,Uplift-Tree,CausalForest,CTS。
分布散度是用来度量两个概率分布之间差异性的值,当两个分布相同时,两个离散分布的散度为非负且等于零。我们可以把实验组和对照组理解为两个概率分布,然后利用分布散度作为非叶节点分裂标准,最大化实验组和对照组的样本类别分布之间的差异,减少样本不确定度。
计算分布散度 D ( P T ( Y ) : P C ( Y ) ) D(P^T(Y):P^C(Y)) D(PT(Y):PC(Y)),常见的分布散度有KL 散度 (Kullback-Leibler divergence)、欧式距离 (Squared Euclidean distance) 和卡方散度(Chi-squared divergence),对应着下面三种方式 K L ( P : Q ) = ∑ i p i log p i q i (23) K L(P: Q) =\sum_{i} p_{i} \log \frac{p_{i}}{q_{i}}\tag{23} KL(P:Q)=i∑pilogqipi(23) E ( P : Q ) = ∑ i ( p i − q i ) 2 (24) E(P: Q) =\sum_{i}\left(p_{i}-q_{i}\right)^{2}\tag{24} E(P:Q)=i∑(pi−qi)2(24) χ 2 ( P : Q ) = ∑ i ( p i − q i ) 2 q i (25) \chi^{2}(P: Q) =\sum_{i} \frac{\left(p_{i}-q_{i}\right)^{2}}{q_{i}}\tag{25} χ2(P:Q)=i∑qi(pi−qi)2(25) 其中 p p p表示treatment组, q q q表示control组, i i i表示取值,如是二分离问题,则 i ∈ { 0 , 1 } i\in\{0, 1\} i∈{ 0,1}
上述三种分布散度有个共同点,当两个概率分布相同时,值为0;当两个概率分布差异越大时,值越大。欧式距离的优点是对称,且值更稳定。
分布散度还有个特点:通过公式可以推导,当结点中对照组数据为空时,KL散度会退化为决策树分裂准则中的信息增益;欧式距离和卡方散度将会退化为基尼指数。而当结点中实验组数据为空时,欧式距离将会化为基尼指数。这也是该类分裂准则的优点之一。
其模型主要构造流程为:
举个例子🌰:
剪枝:
剪枝是为了使模型具有更好的泛化能力。标准决策树的剪枝有多种方法,最简单的则是看剪枝前后对验证集准确率是否有帮助,但在增量建模中该方法不太好实现。
论文中提出了一个度量方法——maximum class probability difference,核心思想是看结点中Treatment组和Control组的差异,如果单独的根节点更大则剪枝。具体步骤如下:
顾名思义,类比RandomForest,CausalForest是指由多个CausalTree模型融合得到的Forest模型,而对于CausalForest,这里可以是任意单Tree-Based方法。
分层分到足够细,近似认为消除了Confounder,则指定叶子节点的Uplift为 τ ^ ( x ) = 1 ∣ { i : W i = 1 , X i ∈ L } ∣ ∑ { i : W i = 1 , X i ∈ L } Y i − 1 ∣ { i : W i = 0 , X i ∈ L } ∣ ∑ { i : W i = 0 , X i ∈ L } Y i (30) \hat{\tau}(x)=\frac{1}{\left|\left\{i: W_{i}=1, X_{i} \in L\right\}\right|} \sum_{\left\{i: W_{i}=1, X_{i} \in L\right\}}^{Y_{i}} -\frac{1}{\left|\left\{i: W_{i}=0, X_{i} \in L\right\}\right|} \sum_{\left\{i: W_{i}=0, X_{i} \in L\right\}}^{Y_{i}} \tag{30} τ^(x)=∣{ i:Wi=1,Xi∈L}∣1{ i:Wi=1,Xi∈L}∑Yi−∣{ i:Wi=0,Xi∈L}∣1{ i:Wi=0,Xi∈L}∑Yi(30)
基于不同的样本子集训练多个CausalTree,用均值作为最终的结果 τ ^ ( x ) = B − 1 ∑ b = 1 B τ ^ b ( x ) (31) \hat{\tau}(x)=B^{-1} \sum_{b=1}^{B} \hat{\tau}_{b}(x)\tag{31} τ^(x)=B−1b=1∑Bτ^b(x)(31)
CTS(Contextual Treatment Selection),是一种Tree-Based的uplift modeling方法,可用于MultiTreatment和General Response Type(分类或回归)的问题。不同于分布散度,在该标准下,我们会直接最大化每个节点上实验组和对照组之间label期望的差值(可以理解为该节点上样本的Uplift值),并以此来分裂节点。
CTS树具体构造流程为:
相比于meta-learner,uplift下树模型由于往往是直接对uplift进行建模和利用特征直接对人群进行切分,因此模型精度往往比较高一些。但是在实际应用中,还是需要要注意树模型的收敛性以及它的泛化能力。
常用分类和回归算法,可以通过 AUC、准确率和 RMSE 等去评估模型的好坏。而由于Uplift Model 中不可能同时观察到同一用户在不同干预策略下的响应,即无法获取用户真实增量, 我们也就无法直接利用上述评价指标去衡量模型的好坏。因此,Uplift Model 通常都是通过划分十分位数来对齐实验组和对照组数据,去进行间接评估。常用的评估方 法有 Qini 曲线、AUUC 等。
Qini 曲线是衡量 Uplift Model 精度方法之一,通过计算曲线下的面积,类似 AUC 来评价模型的好坏。其计算流程如下:
(1)在测试集上,将实验组和对照组分别按照模型预测出的增量由高到底排序,根据用户数量占实验组和对照组用户数量的比例,将实验组和对照组分别划分为十份,分别是 Top10%, 20%, . . . , 100%。 (2) 计算Top10%,20%,…,100%的Qini系数,生成Qini曲线数据(Top10%,Q(Top10%)), (…,…), (Top100%, Q(Top100%))。Qini 系数定义如下:
其中,用户下单是指输出结果为1
可以看出,Qini 系数分母是实验组和对照组的总样本量,如果实验组和对照组用户数量差别比较大,结果将变得不可靠。
AUUC(Area Under the Uplift Curve) 的计算流程与 Qini 曲线的计算流程一样,计算前 10%、20%、. . . 、100% 的指标,绘制曲线,然后求曲线下的面积,衡量模型的好坏。不同是 AUUC 指标计算方法与 Qini 指标计算不同,AUUC 指标定义如下:
与 Qini 指标含义相同,当 i 取10% 时, n t ( i ) n_t(i) nt(i)表示实验组前 10% 用户数量, n c ( i ) n_c(i) nc(i)表示对照组前 10% 用户数量。可以看出,AUUC 指标计算方法可以避免实验组和对照组用户数量差别较大导致的指标不可靠问题。
值得注意的是,当分桶时,对照组边界点预估出的增量与实验组边界点的预估值有较大差别时候,以上的两个评估指标似乎都显得不那么可靠了。因此在实际中,我们使用的往往是AUUC 另外的一种计算方法:
AUUC是一个很重要且奇怪的指标。说重要,是因为它几乎是Uplift Model在离线阶段唯一一个直观的,可解释的评估模型优劣的指标。说奇怪,是因为它虽然本质上似乎借鉴了分类模型评价指标AUC的一些思想,但是习惯了AUC的算法工程师们在初次接触的时候一定会被它搞得有点迷糊。
作为在分类模型评估上的标杆,AUC的优秀不用过多赘述。其中最优秀的一点是它的评价结果稳定到可以超越模型和样本本身而成立,只要是分类问题,AUC0.5是随机线,0.6的模型还需要迭代一下找找提升的空间,0.6-0.8是模型上线的标准,而0.9以上的模型就需要考虑一下模型是否过拟合和是否有未知强相关特征参与了模型训练。一法抵万法,我们可以抛开特征,样本和模型构建的细节而直接套用这套准则。
然而这个特点对于AUUC就完全是奢望了。通过AUUC的公式可以看出,AUUC最终形成的指标的绝对值大小是取决于样本的大小的。也就是说,在一套测试样本上,我们的AUUC可能是0到1W,而换了一套样本,这个值可能就变成了0到100W。这使得不同测试样本之间模型的评估变为了不可能。也使得每次模型离线的迭代的前提必须是所有模型都使用同一套测试样本。当我们训练完一个新的模型,跑出一个40万的auuc,我们完全无从得知这个值背后代表着模型精度如何,我们只能拿出旧的模型在同样测试集上跑出auuc然后相互比较。这无疑让整个训练迭代过程变得更痛苦了一点。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/234946.html原文链接:https://javaforall.cn