Causal Data Science 分享:Uber如何以最小的成本赚取最多的体验收益

为什么想聊这个话题

如果你打车的时候遇到司机晚点,平台是不是要做出补偿?

平台认为一定条件下应该是做出补偿(作为羊毛党,of course)。但是补偿谁?补偿多少?这是一个问题。地主老财也需要把钱花在刀刃上

当下行业内有两个流行的方法(Uber这么说):

  • 个性化预测:通过HTE(heterogeneous treatment effects)模型,预测出给x$ coupon,用户的留存提升多少。选择提升最大的人群撒钱。这个方法的缺点是,并不知道ground truth,不确定因果性

  • AB测试:对用户一视同仁,通过AB测试获取平均效果。这个方法的缺点是缺乏个性

用户留存定义:给出coupon后,用户还来消费至少一次以上

Uber带来的变革:

Uber在这篇paper里展示了两个算法,融合因果性(causal effect)以及个性(heterogeneity)

首先是Cardinal Prediction,它的框架是先预测uplift值,再建模做最优化求解。从而达到预测(prediction)与最优化(Optimization)合二为一

进阶版是Ordinal Prediction:忽略对uplift值的单独预估,直接一体化预估个体排序。核心是我们并不在意具体提升多少,在budget一定情况下,从最优开始选人就可以了

评论:方法1更适合budget不确定情况下,按照提升效果定策略;方法2是budget确定时,更高效以及准确的得到结论,忽略不需要了解的细节

模型内窥

核心要解决的问题是,在budget有限的情况下如何选择最优的人群(retention提升最多的人群)来分发优惠。用数学模型表达,即为下式:

image

其中tau_r指的是retention lift,xi是第i个sample的feature,zi指的是是否圈选该部分人群进入实验,tau_c指的是uplift cost,B是budget上限

注释1:此处z_i指的是个体是否会被考虑纳入treatment,并不代表个体一定会被给予treatment。后者用w_i表示

注释2:为啥我们不直接干这个最优解模型?原因是一般cost相对于budget比较小(毕竟是to c生意,每个c就是“小火苗”),Uber愿意在一定程度上偏移budget,即可以多给几个或者少给几个“小火苗”优惠,没毛病。所以最重要的是排列出样本重要性,从而决定给谁发优惠

小工具:Cost Curve,验证模型准确度

评估一个成本收益性价比框架的优劣,我们更关注的是在相同成本下是否可以带来更高的收益。同时我们也意识到,随着激励(成本)的增加,边际收益会更少。为了横向比较,Cost Curve应运而生。

制作方法:横轴是累计成本增加量,纵轴是累计收益增加量。制图前,假设我们已经得到每个样本的重要性s_i(s_i=f(x_i),X_i为样本i的feature)。将样本根据重要性大小(在我们这里,就是性价比,uplift retention/uplift cost)降序排列,依次计算累计成本增加量以及累计收益增加量,即可

当评估一个成本收益框架时,只需要计算出多带来的收益即可(即下图A)。为了normalize,再除以benchmark,下图(B),即A/B。B的意思是随机派发激励,那么收益的增加与成本的增加应该是线性的,没有谁比谁更好,即模型没有挑选更优的选择

整体上评估方法类似于Uplift Curve以及AUUC

image

算法1:Cardinal Prediction

我们放松z_i的二项属性,将它变为连续变量,然后就可以用Lagrangian体系来解决这个问题。将问题化解为:

image

假设lambda已知,去掉常量,g变为下边的格式

image

从而得到最优解为以下两种情况:

image

这个解告诉我们只有当benefit大过lambda倍的cost时,才应该考虑对sample施加treatment(是必要不充分条件),此结果也被定义为该方法下的重要性s,我们根据s排序就知道该对哪些sample施加影响。接下来计算lambda成为我们的核心任务

lambda可以通过gradient方法迭代求解:

image

注释1:可以看出利用该方法前提是先要知道uplift值,即(prediction)部分。这部分可以使用多种因果模型,比如R-learner,Causal Forest得到结果

注释2:该框架还有另外一种建模方法,即知道uplift retention值后,通过uplift retention与cost比值作为重要性s,从而排序得到sample,公式如下。但这种方法的缺点是对uplift的估计noise非常大,采用比值的格式会放大这个效应。同时数学上也有两个问题:1)有可能不少群体分母为0,即不需要给有钱人更多钱,但这会造成s的无限大2)比值对正负性的区分不足,如果uplift cost是负的,uplift retention是正的,那是非常好的,相当于多收用户钱,用户还用更多了。如果是相反的,那就很糟糕,相当于给钱了,反而更差了,但这两种情况在比值上区分不出来。不过我猜2)的因素出现的数量应该不大,否则不是怀疑Uber用户的智商么

算法2:Ordinal Prediction

出发点:其实我们不需要知道uplift 值具体是多少,我们只需要知道每个sample的重要性是多少就可以。所以我们只需要学习下边的函数f:

image

f可以成为任何形式。为了学习f,我们需要构造loss function。这里选择的loss function为下边的格式:

image

这里不是还是需要知道uplift结果?我们可以把uplift结果当成一种中间结果,并不需要直接建模估计。假设我们知道每个sample最终是否会被施加treatment,则uplift值如下:

image

其中indicator函数指的是sample是否被treat。可以看出上边的公式本质上是在算uplift的期望。所以接下来如何计算probability?文章中采用以下定义:

image

image

这里用tanh包装s,是为了迭代的时候,避免s出现极端值:当s很大时,tanh的一阶导数绝对值比较小(saturated)。第二步包装是为了归一化

个人看法:Cardinal的算法更适用于在不确定barget情况下的策略,即可以先预估uplift情况,把lambda当做一个兑换比,只对uplift retention-lambda*uplift_cost>threshold value的群体进行优化处理,从而把钱花在刀刃上。这个方法好处是更精细化,缺点是uplift可能估计不准,造成偏差

Ordinal的好处是说,如果uplift就是估不准,索性确定撒钱额度,然后从高重要性到低重要性排序,找到top k群体优化。这个方法好处是重要性预估更重,人群挑选更优,缺点是cost难以精细化

结果对比

线下数据测试

建立实验标准:根据不同模型估算用户重要性,然后根据对应策略对用户在week1进行treatment和control处理。在week2-week5(4周)不进行任何处理,观察用户表现,根据cost curve计算AUCC(area under cost curve,类似于AUUC),评估每个模型优劣

image

image

线上数据评估

根据每个模型相对于随机模型的增值表现来对比

首先数据分两部分:

  • explore:随机抽取人群施加treament

  • exploit:利用模型预估给哪群人施加treatment

然后评估每种方式下各自的整体效果:

image

最终计算每种方法相对explore(随机取样)方法的优劣性。最终胜出方案应该满足:既比随机挑选好(R>0)也比其他模型好(R最大)。所以结合R设定了以个gain指标

image

从A,B,C,3个城市数据对比,可知DRM还是最优的

image

猜你喜欢

转载自juejin.im/post/7124140169074049032