Uplift:Partial observation model
场景:
数字营销,广告行业。在互联网领域,流量变现一直都是很多产品非常大的一个利润来源。因为很多传统领域(甚至一些转型的领域,如电商)在互联网环境下,一个重大的开支都是营销支出,这些支出中其中一个重要分支说到底,就是流量成本。
目标分析:
- 而衡量我们收益,的一般是传统意义上的ROI(在预算有限的环境下,提升ROI也是直接提升转化量),比较典型的例如RTB广告,其一直是效果广告的首选,一般比较适用于从外部流量投放,去拉取新用户的状态,对于这种需求,其实传统的点击,转化模型是比较合适的。ROI=点击(转化)收益/竞价成本。*
- 但是对于自有用户,流量很多,复购率很高的一些电商来说,ROI中收益的计算,并不是严格意义上直接归因的收益。因为对于一些用户,可能你不营销,他们也能转化。实际上:
Revenue = (p(act | treatment) - p(act | no_treatment)) * act_value
核心难点1:Partial Observation
- 这个问题,有个最核心的难点,就是对于同一用户,我们要么知道其在treatment下的label,要么知道其在no treatment下的label【无法同时得到他们的ground truth,我在这里定义为partial observation】。我们无法知道其在两种状态下的ground truth,所以直觉上不好直接地建模。
要解决它,一个比较明确的方案就是,依靠模型的泛化性来解决。虽然不是同一个用户,但是对“同一类”用户,我们是有可能得到他们两种状态下的label的。这里需要用到条件独立的假设,即随机分AB组,并对其中一组做treatment,另一组不做。则能得到无偏数据(特征独立于treatment)。
核心难点2:无法完全无偏
- 很多情况下,要优化最终收益,ROI灯,我们需要使用来进行估计,以得到:
由此来决策。但是由于很多时候我们无法获得完全无偏的数据(我们不可能每次都进行大规模的随机实验),因此,由于Confounder的存在,,所以,我们需要小心地做进行Debias
*TODO
理解到上述问题后,我们的任务就是对问题进行建模。那么现在其实有多种建模的思路:
建模思路:
conceptional 2x2 Matrix:[2] 先通过这个图,理解一下我们知道的,我们想知道的:
image.png
-
1、在两个样本集上做两个模型。一个是“treatment下的转化”另一个就是“没有treatment的转化”,在推断的时候,使用两个模型的差值来做为最终预估。不过由于是两个模型,可能最终的累积误差会比较大。
-
2、类似地可以只使用同一个模型,将有无treatment作为特征输入。最终预估仍然是两次预估取差值。不过和方法1比较类似,相当于共享了更多的参数,样本更多(两倍),训练更充分,累积误差会小一点(但是实际上还是预估两次做差,累积误差扩大问题还是存在)。当然,这个模型也有很多可以优化的细节,比如做weighted loss,对Control NoneRespond与Treatment Respond部分加权(or不同权重),使其这部分预估得更精准一些。因为这部分是主要uplift的来源。
-
3、根据上述权重优化的思路,其实也可以用别的一些目标建模。例如将CN与TR的label设为1,其他为0,相当于我们直接建模预估哪些是persuadable的【即这两部分比较有潜力】,然后对这部分用户提供treatment。参考[3]
-
4、直接对revenue建模:
可以参考论文[1],可以直接使用模型对使用怎样的treatment进行建模,直接计算与优化建模的期望收益。
由于其实现的方法要对训练过程,loss等进行比较大的改造,所以成本较大。
不像1中的方法,能比较好地兼容现有的训练推理体系。 -
PS:其实同理,这个模型也可以是多目标的。帮助我们在多个层次上对用户行为进行更精细的建模。
评估思路:
这里评估也因为partial observation,有一大难点,就是我们无法知道真正的uplift(用户在treatment与control两种状态下分别的ground truth我们只能观测到一种)。所以,我们的思路便是:以群体的视角来看待用户。,用在群体中的期望收益,来代替对个人的收益。(对于某一个人我们只能观测到T 或者C其中一种状态。而对于群体我们能通过随机策略,同时获得T与C组的观测结果,通过群体上的期望评估来代替个人)
- 即:我们的目标虽然是评估ITE(Individual Treatment Effect),但是我们没法直接观测评估它,所以我们通过ATE(Average Treatment Effect),在群体上统计uplift来分析。
Qini Curve
QINI = TR - [(CR*T)/C];QINI = (TR/T) - (CR/C)【这是归一化的后的百分比QINI】
qini curve
这个非常好理解x轴为人数,y轴为累积收益:
- x轴即为分数从高到底逆序的分位点。(例如有10个点,即top10%,top20%..)
- y轴为这些样本中,累积的收益(例如正样本数量),
图中线段:
- 1、baseline是一根直线(假设用户随机,均匀分布,则每个分组中转化数量=分组人数*整体期望差【Treatment转化概率- Control转化概率】),右方最高点即为总的转化差值。
- 2、蓝色为模型的线,对于我们的模型来说,按照模型预估的uplift分数(在差分模型中就是u(x) = p(x| t=1)-p(x | t=0))来对用户排序(包含T组与C组【treatment,control】),然后再在分组的用户中计算转化的数量增益:
Treatment转化数量 - Control转化数量(注意,横坐标必须保证每组人数数量是一致的【或者比例固定】,对应的baseline才能画出一条直线。也正式因为T组与C组人数比例是固定的,所以期望的uplift收益=期望转化人数*T/(T+C),由于T/(T+C)是固定的,所以这个对应的baseline才能成为直线)
PS1:由于我们先决假设特征X与是否使用T是条件独立的,所以理论上,在同一个Uplift分数段中,T组与C组的人数应该是一样的。
PS2:理论上如果模型有效,应该能将“提升大的用户”分在前面,所以真实提升应该更向左上方集中。
AUUC
变量假设参考论文[4]
我们可以用类似auc的方式计算:
image.png
Qini coefficient
类似地,也是参考qini curve:
这里NT,NC标示T组的人数,C组的人数。这里便是将其scale到同一个人数标准下。
RT(k)=kE(Y|t=T),即分为点数量每组期望数量转化数量
Refer:
[1]:Uplift Modeling with Multiple Treatments and General Response Types
[2]:https://www.kaggle.com/davinwijaya/uplift-modeling-qini-curve-with-python
[3]:The Class variable transformation (CVT) Model(Jaskowski und Jaroszewicz, 2012) and Lai´s Weighted Uplift Method (LWUM) (Kane, Lo und Zheng, 2014)
[4]:A Large Scale Benchmark for Uplift Modeling
https://zhuanlan.zhihu.com/p/100821498
https://blog.csdn.net/jxq0816/article/details/105100834/