“A Deep Probabilistic Model for Customer Lifetime Value Prediction“ 论文笔记
额,排除 LTV 为0的样本的影响
但是LTV 数据的分布及其特殊,存在大量零值(大量客户是"一次性购买者",其 residual LTV = 0)和严重的高偏态连续值(少数高价值客户的 LTV 比普通客户高出几个数量级)。现有使用 MSE 损失的工作试图用一个单一的连续分布去拟合两个本质不同的群体,结果是"两边不讨好";使用两阶段建模又需要两个模型、复杂度高,MSE 对异常值敏感
ZILN 混合损失
本文主要提出了 Zero-Inflated LogNormal(ZILN)损失函数本文来同时建模用户是否付费以及付费金额,其中第一项用交叉熵来建模用户是否付费,第二项用对数正态分布建模 LTV(假设了用户在已知付费的前提下付费金额服从对数正态分布),其中 � 为真实值,均值 � 和方差 � 为模型的输出值:
�ZILN(�;�,�,�)=�CrossEntropy(1{�>0};�)+1{�>0}�Lognormal(�;�,�)
�Lognormal(�;�,�)=log(��2�)+(log�−�)22�2
线上 infer 时模型的预估输出为学到的分布的期望 exp(�+�2/2),最优预测会自动大于观测样本的算术平均;此外,从图中可以看到(真实值是 20,横坐标是模型输出的点预测值),在原始值空间中 lognormal loss 对高值的惩罚比 MSE 小。综上所述,对数正态分布所以更匹配 LTV 数据 "零值多、右尾厚" 的分布特征
模型架构
本文使用 DNN 作为模型架构,DNN 的最后一层包含 3 个输出,分别表示付费概率、均值 μ 和方差 σ(分别使用 sigmoid、identity、softplus 激活函数)。最终通过 ZILN 混合损失实现一个模型同时完成分类和回归两个任务
评估指标
Gini 系数
Gini 系数是经济学中衡量收入或财富不平等程度的指标,值越大代表越不平等,本文对这个原始概念做了改造以用于 LTV 数据:
按客户的真实 LTV 从大到小排序
画出 Lorenz 曲线:横轴是累积客户百分比,纵轴是累积 LTV 百分比(20% 的客户贡献了 80% 的 LTV 即 80/20 法则)
Gini 系数 = Lorenz 曲线与 45° 对角线之间面积的两倍
所以标签 Gini 系数反映了客户消费的不平等程度,值越大说明头部客户越集中。本文还引入归一化 Gini 系数:Normalized Gini = (模型 Gini 系数) / (标签 Gini 系数) 用来衡量模型的区分度,有没有把真正的高价值用户排到前面
