一、Uplifit 增益敏感度预测
关于 Uplift 增益,通用的业务问题可以总结为,在圈定的人群中,营销人员会想知道,新的营销动作 T=1 相比较原始的营销动作 T=0,能带来多少的平均收益(lift,ATE,Average Treatment Effect)。大家会关注新的营销动作是否比原来的更有效。
在保险场景下,营销动作主要指的是保险的推荐,比如推荐模块上透出的文案和产品,目标是在各种营销动作和约束条件限制下,找到因营销动作而增益最多的群体,去做定向投放(Audience Targeting)。
先做一个比较理想且完美的假设:对于每一个用户 i ,都能知道他对营销动作 t 是不是买账。如果买账,可以认为公式中的 Di 为正,且 value 比较大;如果不买账,且对营销动作很反感,Di 可能就会比较小,甚至是负向的。这样就能够得到每个用户个体对于 treatment 的效果。
关于人群划分,可以看到上图中的营销四象限,我们最关注的肯定是左上角 Persuadables 的人群。结合公式,该人群的特点是当有一些营销动作的时候,会很买账,也就是 Yi > 0 ,且值比较大。如果对该人群不去做营销动作则是负的,或者是比较小,等于 0,这样的人群的 Di 就比较大。
再看另外两个象限的人,Sure things,指无论是否营销,这些人都会买,那么营销投到这一人群上的收益率是比较低的。Sleeping dogs,是指去做营销反而会起到一些负面作用。这两部分群体最好不要进行营销投放。
但是这里也存在一个反事实的困境:Di 没有那么完美。我们不可能同时知道一个用户对 treatment 是否感兴趣,即无法知道同一用户在同一时间对不同 treatment 下的反应。
最通俗的一个例子是:假设有一个药物,给 A 吃了之后,会得到 A 对药物的反应。但却不知道,如果 A 不吃的结果,因为 A 已经将药吃下去了,这其实就是一个反事实的存在。
对于反事实,我们进行了近似的预估。ITE(Individual Treatment Effect )预估的方式,虽然找不到一个用户,实验其对两个 treatment 的反应,但可以找到相同特征的用户群来预估反应,比如具有相同 Xi 的两个人,可以假设在同一特征空间下,近似等同为一个人。
这样,Di 的预估分成了三块:(1)Xi 在 T=1 的营销动作下的转化率;(2)Xi 在 T=0 的营销动作下的转化率;(3)lift 是一个差值,计算两个条件概率下的差异。用户群体的 lift 值越高,则说明该人群更买账。如何让 lift 更高呢?在公式中,是将 Xi 在 T=1 的营销动作下的转化率变大,Xi 在 T=0 的营销动作下的转化率越小即可。
在建模方式上,结合上文的公式,做一些归纳:
(1)T 变量的数量,如果不只是一个营销动作,而是有 n 个营销动作,则为多变量 Uplift 建模,否则是单变量 Uplift 建模。
(2)条件概率 P 以及 lift 的预估方式:① 通过差分建模,预估 P 值,然后找到 lift 值,这是间接的建模。② 通过直接建模,比如标签转化模型,或者是因果森林,比如 Tree base 、LR、 GBDT 或者一些深度模型。
二、增益敏感度的应用
增益敏感度主要做了三方面的应用:保险产品的推荐,红包推荐,以及文案的推荐。
首先来介绍一下,旅游保险在飞猪上是什么样的定位。旅游保险是旅行商品中的一个种类,但它更多的是出现在主营商品的搭售链路上。比如我们去订机票、酒店的时候,主要购买意图是:酒店、机票、火车票,这个时候 APP 会问你要不要买一个保险。所以保险是属于一个辅营业务,但是其目前已经成为交通和住宿行业一个非常重要的商业性收入来源。
本文讲的主要作用域在弹窗页:弹窗页是飞猪 APP 下拉收银台的时候会弹出的一个页面,这个页面只会展示一种创意文案,只能展示一种保险商品,这一点与前面详情页可以展示多个类型的商品,以及保险的价格不同。所以这个页面,会让用户的注意力足够的聚焦在这里,并且可以做一些拉新促活,甚至是一些用户教育培养的营销动作。
目前遇到的业务问题为:在弹窗页面,我们需要去推荐一个最佳的保险产品或者红包,使得整体的转化或者收益最大化。更具体的是去做一个拉新,或者是更高转化的业务目标。而业务收益目标是在收益不降低的情况下,提高转化率。
在以上的约束条件下,有几个营销项:(1)给用户推荐一个入门级低价保险;(2)另外一个 treatment,推荐一些红包,主要是去做一些拉新的操作。而 Base 就是原价的保险。
建模的时候,有一些假设的条件:条件独立的假设。指 treatment 营销动作,在建模 uplift 采集的时候,样本服从假设条件独立,用户的各个特征是相互独立的。比如发红包,不能在年龄上有不同的分布,例如,在年轻人上少一点,老年人上发的多一点。这个会导致样本有偏。所以提出的解法是让用户随机地去曝光商品。同样的,也可以计算倾向性得分,得到同质的用户群,去做对比。
在实验设计上,AB 实验:A 是按原来的策略去投放,可能是 40 块钱的保险,也可能是运营来进行保险的定价,或者原始模型的一个定价。B 桶,低价保险投放。
Label :用户是否转化成交。
模型:T/S/X-learner 以及各类的这种 Meta 模型。
样本构造:诉求是要刻画用户到底对这种低价保险是否更感兴趣,就需要有足够多的特征去刻画用户对价格的敏感性。但实际上像辅营产品,没有一个比较强的意图性。所以我们很难从用户的历史浏览购买记录当中,看到用户到底喜欢多少块钱的保险,或者是他会购买多少钱的保险。我们只能从主营或者用户流浏览的一些其他的飞猪 APP 域内的数据上去看,也会看用户红包的使用频率和红包消费比例,比如用户会不会只有在发红包的前几天,才在飞猪上进行转化。
基于以上的特征样本的构造,同样进行特征重要性和可解释性的分析。通过 Tree base 模型可以看到,在一些时间、价格变量、年龄变量特征上是比较敏感的。
评估指标的计算方式:Gini 和 Accumulated Gini。将 Uplift 分成 n 组,每一组去计算一个 Gini 分,如上图第一个公式所示,在该分组下得到用户映射到 test 桶和 base 桶之后的转化率,再去算 Gini。同理类推到 Uplift Gini,通过计算不同的阈值下的收益分,辅助我们去做阈值的一个判定。
通过离线可得,表现最好的模型是 LR+T-Learner,其实不太符合原始的预期。后来思考了这个问题,也许问题出在用户对保险相关的价格特征的构建上,并不太足够去刻画。因为我们也去做了一些用户调研,比如用户的性格,对保险的敏感程度,这种 APP 域内的一些用户画像数据,能看到用户对一个无实物商品的感兴趣程度。但最终,还是基于这样的分数,去划定人群做投放,线上的 base 桶相对提升 5.8%。
在红包推荐上,我们也可以在 40 元的保险的 base上,发一个 3/5/8/10 块钱的保险。
我们有一个业务目标就是增量 ROI,公式定义是:test 桶的 GMV 减去 base 桶的 GMV,得到的增量 GMV,能不能 cover 掉在 test 桶的营销费用。如果增量 ROI 大于1,就意味着营销是不亏的。所以在该场景下,我们的要求是不亏。在我们在用 Uplift 模型之前,运营同学会先去做一波投放,在他们的种子人群上,ROI 在 0.12-0.6 之间,所以对我们的一个要求就是要比这个 ROI 高,且不亏本。
通过上述目标的拆解,问题最后又转化为用户的转化率的预估以及 Uplift 预估,如上图下面的公式所示。
最后经过一系列的变化,实际上又回到了去求解 Uplift 值以及未购概率。未购概率是指用户在不发券时候的转化率,如果想使得刚刚提到的 ROI 越高,就意味着需要找到一个用户群,P0 越小越好,且 Uplift 值越高越好。
第一版模型是半智能的决策模型:根据在不同券额下计算得到的 Uplift 值,再通过观察 treatment 上线之后的效果,卡定阈值,每个卡定的阈值是为了能够 cover 掉成本。
第二版是智能定价模型:借鉴了对偶问题的求解,约束条件是发券要小于等于 1 即 Xij <=1,同时要符合发券时的最大预算。通过使用拉格朗日对偶问题方法求解,得到 Lambda 。最后将 Lambda 带入 argmax 公式计算,得到每个用户 Xij 应该是以什么样的值去投放。
使用定价模型相比原来运营桶的红包投放,增量 ROI 能达到 1.2。
在文案的推荐上,跟之前的产品推荐和红包推荐有相似的思路。我们会发现一些用户对不同风格的文案有不同的偏好,所以将其结构化出来,比如温馨类的“带份平安保障”,或者一些提示风险。还会发现,在不同细分人群上,存在比较大的明显的差异,从特征重要性上来看,温馨的语句,可能对 80 后或者是一些年纪偏长的人有效,而偏理由性质的文案,对年轻人会比较适用。从细分人群的特征重要性上,同时也做文案的个性化尝试,有 5%~10% 的相对提升。
三、贝叶斯因果网络
贝叶斯因果网络主要是表征事务间因果关系,有向五环图的结构。先简单介绍一下为什么要使用贝叶斯网络。在不同的推荐文案下,我们想知道用户为什么对文案感兴趣,或者说为什么能转化,其背后到底有哪些隐藏的变量。所以做可解释性网络的构建,顶点主要是观测变量,或者隐含变量;边是指两个顶点之间存在的因果关联,关联可以通过节点之间的条件概率去计算。在贝叶斯网络当中,通过每个顶点,在所有父节点条件之下的概率值相乘,得到最终的网络结构。
在网络结构中有 4 类模型学习的问题:
① 结构学习:基于样本,怎样才能学习一个比较优的贝叶斯网络,主要是基于后验,如上图公式,如果 structure 的概率值越高,则认为网络学的最优。
② 得到结构之后,怎样知道网络里节点上的条件概率值,以及它的参数。
③ 推断:当事件 A 发生的时候,事件 B 发生对概率。
④ 归因:当事件 A 发生的时候,导致 A 发生的原因有哪些。
四、画像决策路径构建及可解释性应用
上文中提到,保险推荐场景与搜索推荐不太一样,保险推荐是个辅营业务,用户不带有主观,也就是在来到这个模块之前,他在 APP 域内的浏览记录,跟用户对什么样的保险或文案感兴趣,没有同质的关联性。而在搜索中,输入亲子酒店,就知道用户对亲子标签的酒店有需求。在辅营场景,需要复杂的推理过程,才能知道什么样的 Treatment 动作是有效的。举个例子,通过网络挖掘会发现,在天气恶劣的情况下,可能延误险的销量会比较好。
如何建模,把网络里的节点和边构建成如下的几种:
① 用户节点,将年龄、性别这种用户画像的基础信息作为一个离散变量,成为一个节点。
② 事件节点,因为保险场景对事件的敏感性要高于很多其他的商品推荐,比如在天气或者节日下,用户可能会对延误险,或者某些有特定属性的保险比较敏感。
③ 创意节点,比如温馨类引导性文案、动态数字文案等都会有不同的效果。
基于以上三大类节点,做条件概率计算,完成图的构建。
刚刚提到的用户,通过构建场景和事件的理解和创意理解。最后,把所有的节点类型都统一到如上图所示的结构中。
得到节点之后,进行结构学习,使用 Hockman scoring function + grade search 。这个过程主要是在给定数据和网络结构之后,计算得到网络的后验概率值,评估这个网络到底有没有效。
在做 Hockman scoring function 的时候,可能有多种变量,离散型或者连续型。在构建时都变成一种离散变量,方便后续的解释和建模。我们会假设每一个变量符合狄利克雷分布,施加于样本上去做后验的更新,再计算每个节点的后验的值,把节点之间的概率相乘,得到结构的打分。比较通用,大家如果有兴趣,可以后面详细了解下这个方法。由于网络结构比较复杂,所以在整个网络中选用 greedy search 的方法。参数估计比较简单,根据样本对节点的条件概率表做更新。
可解释的应用,基于结构以及参数的更新,可以做两部分的事情:
① 基于各类的 evidence 推断用户可能会做哪种决策,就像上文中提到的那些例子。可以使用 Likelihood weighting 或者 Loopy Belief Propagation,这些是比较常见的一些方法。
② 归因,上图中里面显示的是健康类的保险,比如意外险突然热销,我们很想知道背后的原因,是因为有人喜欢买,可能用户的消费力比较高,还是因为用户是个新人以前不怎么坐飞机,或者是用户的目的地存在高原属性,因为害怕心理导致购买。
最后进行一下总结,因果推断在保险产品推荐、红包和文案营销的人群和推荐策略中起到了很大的效果。同时,结合贝叶斯因果图的构建和可视化的解释,可以给业务提供一些比较有意义的决策,让他们可以持续更新策略或者文案,或者进行一些方向性的变更。通过贝叶斯因果图,也为特征的选择提供了新的思路。
五、问答环节
Q1:飞猪保险营销采取的 Uplift model 是否在落地后进行过验证?在导入因果推断模型前,飞书保险营销采用的是什么技术?局限性在哪里?导入这个因果推断模型后,最明显的改善在什么地方?
A1:① 验证是有的,因为已经在线上的 AB 上得到了效果提升。
② 在导入因果模型之前,举个例子,在红包场景最开始的策略是转化率预估。如果能预估到一个用户群体,它本来是不转化的,对他们进行营销操作,可以保证的是,营销的成本是能被控制的。
③ 局限性,用户的转化率可能不高,意味着即使你给他红包,他也会不转化。所以是我们之前遇到的一些问题。
④ 导入因果模型推断之后,最明显的改善在应该是用户弹性上。在使用因果推断技术之后,可以对用户有个更清晰的理解,对用户群种子有更清晰的判断。
Q2:因果推断模型的特征怎么选择?哪些特征在场景下是最重要的?
A2:第一步如果大量的特征进行选择,效果可能不太好。在初始选的时候,我们使用单变量,看变量和增益之间有没有特别强的相关性,有才会把它放进去。当然,后面在树模型上可以看到对特征进行打分,然后筛选,是我们去判断的一个依据。
Q3:差分建模时数据出现 selection bias 吗?T-Learner 是不能应对这种问题?评估时为什么没有使用 AUUC ?贝叶斯因果网络的隐变量是指什么?
A3:① 差分建模,它会导致一个误差累积。
② T-learner 主要是通过离线的评估。这个问题当时我们也比较困惑,总结下,觉得可能是在特征上,没有一个非常强的特征,直接对增益进行刻画。所以后面在一些传统的模型上,得到的效果也不是很差。这里只是复杂模型和简单模型的一个评估,简单模型可能在鲁棒性上会强一点。
③ AUUC 其实我们也有用到的,其实是差不太多。
④ 观测变量可能是指数据上可观测的变量,而隐藏变量是指我们在观测到的数据上面可以去刻画的隐含的变量。比如性格这种,当然网络里面还没有用到。
Q4:在实践中是否尝试过使用 matching method 后跟随一个回归的方?如果有,效果如何?
A4:还没有尝试。
Q5:你们后续的探索是在什么方向?比如现在是在保险的推荐探索的方向。
A5:因果推断是我们去年的一个工作,今年主要是在创意文案的推荐上。