Google用户付费预估深度模型笔记

问题

问题:给定用户特征,预估未来n天的付费概率、付费金额

样本:用户特征 xx,标签是未来n天是否付费 pp、付费金额 yy

数据分布特点:

  • 90% 用户不付费,10% 用户付费
  • 付费用户中,90% 是低付费用户,9% 是高付费用户,1% 是超高付费用户

建模

多任务模型,分别预估付费概率和付费金额

pred_ltv(x)=pay_prob(x)pay_amount(x)pred\_ltv(x) = pay\_prob(x) \cdot pay\_amount(x)

付费概率预估损失函数有:

  • LCEL_\text{CE} 交叉熵损失函数

付费金额预估损失函数有:

  • LMSE(y,x)=1ni=1n(yiyi^(xi))2L_\text{MSE}(y,x)=\frac{1}{n}\sum_{i=1}^n (y_i- \hat{y_i}(x_i))^2
  • LRMSE(y,x)=1ni=1n(yiyi^(xi))2L_\text{RMSE}(y,x)=\frac{1}{n}\sum_{i=1}^n\sqrt{(y_i- \hat{y_i}(x_i))^2}
  • Llognormal(y,x,μ(x),σ(x))=1ni=1nlog(yiσ2π)+(logyiμ)22σ2L_\text{lognormal}(y,x,\mu(x),\sigma(x))=\frac{1}{n}\sum_{i=1}^n \log(y_i\sigma \sqrt{2\pi})+\frac{(\log y_i - \mu)^2}{2\sigma^2}

其中 xx 是用户样本,yy 是付费金额;p,μ,σp,\mu,\sigma 分别是付费概率、付费金额均值、付费金额标准差。

MSE Loss 假设拟合误差服从标准正态分布,Loss 是关于均值对称的,对高付费样本,产生较大的 Loss。

ZILN Loss 假设随机变量 LTV 服从对数正态分布,对高付费样本,不会产生较大的 Loss。

img

考虑样本 LTV 更接近对数正态分布,本文使用 ZILN Loss 建模,获得效果提升。

推导

模型定义

p,σ,μ=dnn(xi)pay_prob(xi)=ppay_amount(xi)=exp(μ+σ22)pred_ltv(xi)=pay_prob(xi)pay_amount(xi)\begin{aligned} p, \sigma, \mu &= dnn(x_i) \\ pay\_prob(x_i) &= p \\ pay\_amount(x_i) &= \exp(\mu +\frac{\sigma^2}{2})\\ pred\_ltv(x_i) &= pay\_prob(x_i) \cdot pay\_amount(x_i)\\ \end{aligned}

其中 p,σ,μp,\sigma,\mu 激活函数分别是 sigmoid identity softplus;pay_amount 等于服从对数正态分布的随机变量期望。

其中 pp 表示付费概率;μ,σ\mu,\sigma 表示均值和标准差,是付费金额服从对数正态分布的参数。

img

损失函数推导

pay_probpay\_probP1P_1pay_amountpay\_amountP2P_2

求参数 θ^\hat\theta 使得极大似然函数最大

θ^=argmaxθMLE(x,y)=argmaxθxi,yi(1P1(xi))1yi=0(P1(xi)P2(xi))1yi>0argmaxθxi,yi1yi=0log(1P1(xi))+1yi>0logP1(xi)+1yi>0logP2(xi)argmaxθxi,yiLCE(1yi>0;P1(xi))+1yi>0Llognormal(yi;μ(xi),σ(xi))\begin{aligned} \hat\theta & =\arg \max_\theta \text{MLE}(x,y) \\ &= \arg \max_\theta\prod_{x_i,y_i} (1-P_1(x_i))^{\mathbb 1_{y_i=0}}(P_1(x_i)P_2(x_i))^{\mathbb 1_{y_i>0}} \\ &\approx \arg \max_\theta \sum_{x_i,y_i} \mathbb 1_{y_i=0} \log (1-P_1(x_i))+ \mathbb 1_{y_i>0} \log P_1(x_i) + \mathbb 1_{y_i>0} \log P_2(x_i)\\ &\approx \arg \max_\theta \sum_{x_i,y_i} L_\text{CE}(\mathbb 1_{y_i>0};P_1(x_i)) + \mathbb 1_{y_i>0} L_\text{lognormal}(y_i;\mu(x_i), \sigma(x_i)) \end{aligned}

其中

Llognormal(y;μ(x),σ(x))=xi,yiPDFlognormal(yi;μ(xi),σ(xi))=xi,xjlog(yiσ2π)+(logxμ)22σ2\begin{aligned} L_\text{lognormal}(y;\mu(x), \sigma(x))&= -\prod_{x_i,y_i} PDF_\text{lognormal}(y_i;\mu(x_i),\sigma(x_i))\\ &=-\sum_{x_i,x_j} \log(y_i\sigma\sqrt{2\pi}) + \frac{(\log x - \mu)^2}{2\sigma^2} \end{aligned}

评估

绘制洛伦兹曲线如下图,使用基尼系数(= 预测曲线下面积 / GT 曲线下面积)评估回归模型,使用 AUC 评估分类模型。

img

使用十分位图评估对不同分数层用户的预测效果:

img

参考

《A-deep-probabilistic-model-for-customer-lifetime-value-prediction》 PDF 2019 DeepAI Google

《Behavior Sequence Transformer for E-commerce Recommendation in Alibaba》PDF 2019 阿里

附录

正态分布

概率密度函数 wiki

PDFnormal(x;μ,σ)=1σ2πe(xμ)22σ2PDF_{normal}(x;\mu,\sigma)=\frac{1}{\sigma\sqrt{2\pi}} e^{-\frac{(x-\mu)^2}{2\sigma^2}}

img

对数正态分布

概率密度函数 wiki

PDFlognormal(x;μ,σ)=1xσ2πe(lnxμ)2/2σ2PDF_{lognormal}(x;\mu,\sigma)=\frac{1}{x\sigma\sqrt{2\pi}} e^{-(\ln x - \mu)^2 / 2\sigma^2}

img

期望 E(X)=eμ+σ2/2E(X) = e^{\mu + \sigma^2/2}

方差 var(X)=(eσ21)e2μ+σ2var(X)=(e^{\sigma^2} - 1) e^{2\mu + \sigma^2}

如果随机变量 XX 的对数服从正态分布,则这个随机变量服从对数正态分布。

如果 YY 是正态分布的随机变量,则 exp(Y)\exp(Y) 为对数正态分布。

如果 XX 是对数正态分布,则 lnX\ln X 为正态分布。

如果一个变量可以看作是许多很小独立因子的乘积,则这个变量可以看作是对数正态分布。一个典型的例子是股票投资的长期收益率,它可以看作是每天收益率的乘积。

中心极限定理

大量统计独立的随机变量的平均值的分布趋于正态分布。

LogNormal Loss 推导

假设随机变量 yy 符合 Log Normal 分布,其概率密度函数为

PDFLogNormal(x;μ,σ)=1xσ2πe(lnxμ)2/2σPDF_{LogNormal}(x;\mu,\sigma) = \frac{1}{x \sigma\sqrt{2\pi}}e^{-(\ln x-\mu)^2/2\sigma}

从对数最大似然函数可以推导出 LogNormal Loss

LLlognormal(y;μ,σ)=i=0mPDFLogNormal(x=yi;μ,σ)=i=0mlog(yiσ2π)+(lnyiμ)22σ2LL_{lognormal}(y;\mu,\sigma) =\prod_{i=0}^m PDF_{LogNormal}(x=y_i;\mu,\sigma)= \sum_{i=0}^m \log(y_i\sigma\sqrt{2\pi}) + \frac{(\ln y_i - \mu)^2}{2\sigma^2}

TF 实现,其中 loc scale label 对应 μ,σ,y\mu,\sigma,y

1
regression_loss = -tf.keras.backend.mean(tfd.LogNormal(loc=loc, scale=scale).log_prob(labels),axis=-1)

MSE Loss 推导

假设目标与输入变量存在如下关系,且误差服从标准正态分布

yi=hθ(xi)+ϵiy_i = h_\theta(x_i)+\epsilon_i

ϵiN(μ=0,σ2=1)\epsilon_i\in N(\mu=0,\sigma^2=1)

正态分布概率密度函数

PDFNorm(x;μ,σ)=12πexp(12(xμσ)2)PDF_{Norm}(x;\mu,\sigma)=\frac{1}{\sqrt{2\pi}}\exp{(-\frac{1}{2}(\frac{x-\mu}{\sigma}})^2)

误差概率密度函数

p(ϵi;μ=0,σ=1)=12πexp(ϵi22)p(\epsilon_i;\mu=0,\sigma=1)=\frac{1}{\sqrt{2\pi}}\exp(-\frac{\epsilon_i^2}{2})

给定 xix_i 模型输出 yiy_i 的概率 pp

p(yixi)=12πexp((yihθ(xi))22)p(y_i|x_i)=\frac{1}{\sqrt{2\pi}}\exp{(-\frac{(y_i - h_\theta(x_i))^2}{2})}

从对数最大似然函数可推导出 MSE Loss

LLMSE=logi=0mp(yixi;θ)=mlog12π12i=1m(yihθ(xi))2LL_{MSE}=\log\prod_{i=0}^{m} p(y_i|x_i;\theta)=m\log\frac{1}{\sqrt{2\pi}}-\frac{1}{2}\sum_{i=1}^m (y_i - h_\theta(x_i))^2

MAE Loss 推导

假设目标与输入变量存在如下关系,且误差服从拉普拉斯分布

yi=hθ(xi)+ϵiy_i = h_\theta(x_i)+\epsilon_i

ϵiL(μ=0,b=1)\epsilon_i\in L(\mu=0,b=1)

拉普拉斯概率密度函数

PDFLaplace(x;μ,b)=12bexp(xμb)PDF_{Laplace}(x;\mu,b)=\frac{1}{2b}\exp(-\frac{|x-\mu|}{b})

误差概率密度函数

p(ϵi;μ=0,b=1)=12exp(ϵ)p(\epsilon_i;\mu=0,b=1)=\frac{1}{2}\exp(-|\epsilon|)

给定 xix_i 模型输出 yiy_i 的概率 pp

p(yixi)=12πexp(yihθ(xi)2)p(y_i|x_i)=\frac{1}{\sqrt{2\pi}}\exp{(-\frac{|y_i - h_\theta(x_i)|}{2})}

从对数最大似然函数可推导出 MSE Loss

LLMAE=logi=0mp(yixi;θ)=mlog12π12i=1myihθ(xi)LL_{MAE}=\log\prod_{i=0}^{m} p(y_i|x_i;\theta)=m\log\frac{1}{\sqrt{2\pi}}-\frac{1}{2}\sum_{i=1}^m |y_i - h_\theta(x_i)|

Huber Loss

将 MSE 与 MAE 结合起来,[-1,1] 用 MSE 平滑,其余区间用 MAE。

对比

MSE 比 MAE 收敛更快

MAE 比 MSE 对异常点更加鲁棒

本文有帮助?