CVR转化率预估过程中存在样本选择偏差和数据稀疏问题。这两个问题在阿里的上一篇论文ESMM中有提到,这里介绍一下。
ESMM模型使用多任务学习,分别学习post-view点击率CTR和post-view 点击转化率CTCVR,目标CVR通过两者计算得到CVR=CTCVR/CTR;点击率CTR是在整个样本空间上,即所有的曝光样本进行训练,CTCVR也是在整个曝光样本上进行训练,pCTCVR=pCTR*pCVR,最终的CVR任务也是在整个曝光样本上进行训练,应用,这样就可以解决样本选择偏差问题。同时两个任务CTR、CVR底层的embedding权重是共享的,可以缓解数据稀疏问题。但是由于订单样本相较于曝光样本来说是在是太少,只有不到0.1%的曝光样本最后产生了订单;数据稀疏问题不能得到充分解决。
通过对用户的网购行为进行分析,发现用户在发生点击行为后通常会有几种和购买行为相关的操作,进而提出了一种将post-click行为分解的建模方法。post-click行为根据是否和购买行为相关,可以分为决定性行为Deterministic和其他行为,决定性行为包括:加入购物车,加入心愿清单。这两种行为插在点击和购买之间,形成行为序列"曝光->点击->D(O) Action ->购买"。在这个行为序列图上进行模型建模,可以充分利用整个样本空间上的曝光样本,此外,由于加入购物车、加入心愿清单的样本数据相比购买数据会大很多,使用来自D、O Action的监督信号可以同时有效解决抽样选择偏差和数据稀疏问题。
基于这个想法,提出了ESM2模型。根据在序列图上定义的条件概率,使用多任务学习分别预测各自的小目标,然后将它们合并构成最终的CVR预测结果。
模型分为3个模块:SEM、DPM和SCM。其中SEM,embedding权重共享层,在多个子任务之间共享权重,充分利用所有的曝光样本数据;DPM,分解预测模块,分解计算自己的任务task;最后是SCM,序列组合模块,将多任务的结果进行组合,构成最终的目标CVR。
简单来说,ESM2的三个模块,功能分别是embedding训练结果共享、单任务训练,多任务组合得到最终结果CVR。
用户行为序列"曝光-> 点击->D/O Action -> 购买",从收集到的数据集,我们可以知道构建不同的标签,是否点击、是否点击&发生D行为、是否点击&发生O行为,是否点击&是否转化(可以简化为是否转化),因为D行为和O行为是互斥的,点击&发生O行为=1-点击&发生D行为。不同的标签就可以用于不同的任务进行学习、训练。
曝光-> 点击:点击率建模。在整个曝光样本上进行训练。
表示曝光后发生点击的概率,v表示是否发生曝光,取值为{0,1};c表示是否发生点击行为,取值为{0,1}。下标i表示第i个曝光样本。 p i c t r = y 1 i p_i^{ctr}=y_{1i} pictr=y1i。
曝光-> 点击 -> D Action:在整个曝光样本上进行建模。
其中,a表示是否发生D行为,取值为{0,1}。
根据全概率公式可以,曝光样本发生D行为的概率等于曝光样本发生点击&D行为的概率 + 曝光样本未发生点击但发生D行为的概率。因为如果曝光样本发生了D行为,那么必然发生了点击行为,所以 p ( a i = 1 ∣ v i = 1 , c i = 0 ) = 0 p(a_i=1|v_i=1,c_i=0)=0 p(ai=1∣vi=1,ci=0)=0, p i c t a v r = y 2 i y 1 i p_i^{ctavr}=y_{2i}y_{1i} pictavr=y2iy1i,其中 y 2 i y_{2i} y2i表示第i个曝光点击样本发生D行为的概率:点击->D Action。
点击->转化:点击->D/O Action -> 转化。
其中b表示第i个曝光样本发生转化行为,取值为{0,1}。根据全概率公式和条件概率公式可以知道,
C V R = P ( 转 化 ∣ 点 击 , D A c t i o n ) + P ( 转 化 ∣ 点 击 , O A c t i o n ) CVR=P(转化|点击,D Action) + P(转化|点击,O Action) CVR=P(转化∣点击,DAction)+P(转化∣点击,OAction)
P ( 转 化 ∣ 点 击 , D A c t i o n ) = P ( 转 化 , D A c t i o n ∣ 点 击 ) ∗ P ( D A c t i o n ∣ 点 击 ) P(转化|点击,D Action)=P(转化,D Action|点击)*P(D Action|点击) P(转化∣点击,DAction)=P(转化,DAction∣点击)∗P(DAction∣点击)
P ( 转 化 ∣ 点 击 , O A c t i o n ) = P ( 转 化 , O A c t i o n ∣ 点 击 ) ∗ P ( O A c t i o n ∣ 点 击 ) P(转化|点击,O Action)=P(转化,O Action|点击) * P(O Action|点击) P(转化∣点击,OAction)=P(转化,OAction∣点击)∗P(OAction∣点击)
曝光-> 点击->转化:曝光-> 点击-> D/O Action->转化,完整行为序列。
PCTCVR=PCTR*PCVR.
根据收集到的三类标签:曝光后是否点击、曝光样本是否发生D Action(曝光->点击->D Action),曝光样本是否发生转化(曝光-> 点击->D/O Action ->转化),可以分别对pctr、pctavr、pctcvr在整个曝光样本上进行建模训练。同时根据条件概率可以知道,我们最终的目标PCVR也适用于整个曝光样本,pCVR=pCTCVR/pCTR,这样就可以解决样本选择偏差问题,同时由于D/O Action行为样本相比于转化样本数据量会提升,对于数据稀疏问题也可以得到进一步缓解。
三类标签,三种loss分别是pctr、pctavr、pctcvr loss。每种loss使用交叉熵损失函数:
最终loss为三者的加权和:
其他:
深度学习网络的超参数调整
控制变量法。逐个调整,对于调整的当前超参数,比如MLP层数,通过选择不同的参数,进行训练、评估验证;将评估结果整理,通过图表展示,选择合适的参数。
数值特征的embedding表示
对于数值特征进行embedding表示前,一般需要先进行离散化表示转化为one-hot特征,进而embedding训练。论文指出,数值特征离散onehot转化后进行embedding训练会影响模型的表现效果。因此,对数值特征进行正则化,然后进行tanh函数转化,这部分特征不进行embedding训练表示。
这部分特征转化后直接拼接离散特征的embedding表示,然后送到esm2模型进行训练、评估。