# CVR预估到底要预估什么?
CVR预估模型的本质,不是预测“item被点击,然后被转化”这整个链路的概率(CTCVR),而是“假设item被点击,那么它被转化”的概率(CVR)
所以我们不能直接使用全部样本训练CVR模型,因为咱们压根不知道这个信息:那些未被点击的item,假设他们被用户点击了,它们是否会被转化。如果直接使用0作为它们的label,会很大程度上误导CVR模型的学习。
# 与CTR预估不同,cvr预估中面临的数据稀疏和样本选择偏差分别指的是什么?
- 样本选择偏差(sample selection bias:SSB问题)
如图所示,整个样本空间为
总结一下,传统的 CVR 模型是在点击样本上训练的,但是推断是在曝光样本上进行的。这导致训练样本和推断样本不一致,降低了模型的泛化能力。
- 数据稀疏(data sparsity:DS问题)
推荐系统展现给用户的商品数量要远远大于被用户点击的商品数量,同时有点击行为的用户也仅仅只占所有用户的一小部分,因此有点击行为的样本空间
# ESMM是如何解决样本选择偏差问题的?
在转化链路中用户遵循 “曝光 -> 点击 -> 转化” 的顺序。ESMM 模型借鉴了多任务学习的思想,基于该顺序引入两个辅助任务:CTR 预测任务、CTCVR 预测任务。
模型由两个子网络构成:左侧的 CVR 网络和右侧的 CTR 网络,二者均采用 BASE 模型(即下图左侧的基准 DNN 模型)相同的结构。
模型同时输出pCTR,pCVR,pCTCVR 三路输出,其中:
- pCVR 输出由左侧的 CVR 网络输出
- pCTR 输出由右侧的 CTR 网络输出
- pCTCVR 输出将 CVR 和 CTR 网络输出的乘积作为输出
ESMM 模型不会直接使用点击样本来预测 CVR,而是利用CTCVR和CTR的监督信息来训练网络,隐式地学习CVR:
$$pCTR × pCCVR = pCTCVR $$
其中 PCTR 和 pCTCVR 都是在整个曝光样本空间进行估计的,因此派生的 pCVR 也适用于整个曝光样本空间。这就消除了样本选择偏差问题。
# ESMM是如何解决数据稀疏问题的?
ESMM模型借鉴迁移学习的思路,在两个子网络的embedding层共享embedding向量(特征表示)词典。网络的embedding层把大规模稀疏的输入数据映射到低维的表示向量,该层的参数占了整个网络参数的绝大部分,需要大量的训练样本才能充分学习得到。由于CTR任务的训练样本量要大大超过CVR任务的训练样本量,ESMM模型中特征表示共享的机制能够使得CVR子任务也能够从只有展现没有点击的样本中学习,从而能够极大地有利于缓解训练数据稀疏性问题。
# ESMM的结构基于“乘”的关系设计(pCTCVR=pCVR*pCTR)而不是基于除的原因是什么?
表面上看,我们可以分别独立的建立两个模型分别估计 pCTR 和 pCTCVR,然后根据:
来计算 pCVR 。但这种做法存在两个问题:
- 由于 pCTR 通常是一个非常小的数(如
),除以一个很小的数很容易导致数值不稳定。 - 除法的结果无法确保是在 0~1 之间。
在 ESMM 模型中,pCVR 是一个中间变量,通过乘法的形式使得这三个概率可以同时被训练。
另外模型结构也保证了 pCVR 一定是在 0~1 之间。
# 解释一下ESMM的目标函数
ESMM模型的损失函数由两部分组成,对应于pCTR 和pCTCVR 两个子任务,其形式如下:
其中,
在CTR任务中,有点击行为的展现事件构成的样本标记为正样本,没有点击行为发生的展现事件标记为负样本;在CTCVR任务中,同时有点击和购买行为的展现事件标记为正样本,否则标记为负样本。