今天分享一篇解决延迟反馈问题最经典的文章:《Modeling Delayed Feedback in Display Advertising》,于2014年发表在KDD上。
CVR预估的延迟反馈问题
广告场景中的CVR预估
CVR预估对广告平台而言非常重要,平台往往可以通过选择曝光给用户不同的广告而增加收益,假设广告主对获得一个用户的价位 b i d bid bid,将广告曝光给用户后的期望点击率为 p c t r pctr pctr,点击后的激活率为 p c v r pcvr pcvr,则每次曝光的期望收益 e c p m ecpm ecpm即为:
e c p m = p c t r ∗ p c v r ∗ b i d ecpm=pctr*pcvr*bid ecpm=pctr∗pcvr∗bid
在曝光之前需要预估曝光后的点击率 p c t r pctr pctr与点击转化率 p c v r pcvr pcvr,预估曝光的期望收益,从而优化曝光收益,由此可见pcvr预估的重要性。
延迟反馈造成的后果
延迟反馈现象非常普遍,用户在点击某个广告后往往需要经过一段时间之后才会付费,从而带来收益,而这一转化结果又需要一段时间才能传回,因此从用户点击物品到获知该次点击是否发生转化存在一定的时间间隔,这便是延迟反馈现象,文中给出了延迟反馈情况统计,对于30天内的反馈数据,延迟情况如下:
大概50%转化发生在一天以后,13%转化发生在2周以后,如果在一天后划分正负样本,则仅有一半的正样本能够被正确标注,其他一半则被误标记为负样本,基于偏差如此大的数据训练的模型效果可想而知。
从图中可以看出延迟的日期比较符合指数分布,因此后续建模时会用指数分布模型来拟合。
需要指出的是图中的数据仅仅包含30天内反馈的数据,如果考虑30天以上的转化,真实的延迟反馈现象可能更加严重。
建模的必要性
一个很自然的想法是,既然大部分转化有延迟,那是否可以等待更长时间,数据回流完成之后再对样本进行标记和使用,事实上这是因为线上模型对实时性具有很高的要求,为了证明这一点,作者给出了新流量占比图:
图中的横坐标代表日期,纵坐标代表该日期所有流量中新流量的占比,该指稳定上升,并在30天时达到了11%,若使用30天前的数据进行训练,则有至少11%的数据是模型从未遇见过的,这是无法接受的。
建模过程
模型建立
为了对延迟反馈现象进行建模,我们需要建立两个模型,第一个建模转化是否会发生(即cvr预估),第二个模型建模转化发生的延迟。
第二个模型仅仅用于辅助第一个模型的训练,在线上仅使用第一个模型进行CVR预估。
X表示所有特征(包括用户、物品及其他上下文特征),C为01变量,表示最终是否发生转化,Y表示01变量,表示当前是否已发生转化,D表示点击到转化之间的延迟长度(仅对C=1有定义),E表示点击到当前时刻经历的时间。C和Y的关系可由下图表示,若Y=1则必然C=1,若Y=0则C均有可能,即当前未发生转化,但未来有可能发生。
模型1:使用逻辑回归模型预测最终转化率C,其中 w c w_c wc为待解参数:
P r ( C = 1 ∣ X = x ) = p ( x ) Pr(C=1|X=x)=p(x) Pr(C=1∣X=x)=p(x)
p ( x ) = 1 1 + e x p ( − w c ⋅ x ) p(x)=\frac{1}{1+exp(-w_c\cdot x)} p(x)=1+exp(−wc⋅x)1
模型2:预测延迟时间
假设延迟时间服从参数为 λ ( x ) \lambda(x) λ(x)的指数分布,则:
P r ( D = d ∣ X = x , C = 1 ) = λ ( x ) e x p ( − λ ( x ) d ) ) Pr(D=d|X=x, C=1)=\lambda(x)exp(-\lambda(x)d)) Pr(D=d∣X=x,C=1)=λ(x)exp(−λ(x)d))
作者认为不同的特征的延迟时间是不同的,比如有些用户会很快给出反馈,有些业务场景需要较长的等待,因此指数分布的参数 λ ( x ) \lambda(x) λ(x)应该与x有关,另一方面为了保证其恒为正,将其建模为指数:
λ ( x ) = e x p ( w d ⋅ x ) \lambda(x)=exp(w_d\cdot x) λ(x)=exp(wd⋅x)
概率计算
如果我们知道 C C C的信息,那么可以直接训练模型1中的参数 w c w_c wc,而实际上我们不知道 C C C,只知道 Y Y Y与 D D D,因此需要使用模型表示出 Y Y Y与 D D D的联合概率分布,再基于已知的它们的值建立损失函数,从而训练模型中的参数。
首先计算图中蓝色部分,即 Y = 1 Y=1 Y=1部分的概率:
Pr ( Y = 1 , D = d i ∣ X = x i , E = e i ) = Pr ( D = d i ∣ X = x i , C = 1 ) Pr ( C = 1 ∣ X = x i ) = λ ( x i ) exp ( − λ ( x i ) d i ) p ( x i ) \begin{array}{l} \operatorname{Pr}\left(Y=1, D=d_{i} \mid X=\mathbf{x}_{i}, E=e_{i}\right) \\ =\operatorname{Pr}\left(D=d_{i} \mid X=\mathbf{x}_{i}, C=1\right) \operatorname{Pr}\left(C=1 \mid X=\mathbf{x}_{i}\right) \\ =\lambda\left(\mathbf{x}_{i}\right) \exp \left(-\lambda\left(\mathbf{x}_{i}\right) d_{i}\right) p\left(\mathbf{x}_{i}\right) \end{array} Pr(Y=1,D=di∣X=xi,E=ei)=Pr(D=di∣X=x