LTV预估 | 深度学习PLTV之开山鼻祖ZILN

🤣 这一集让我们欢迎基于深度学习的pltv方法:ZILN,ZILN可以说是后面很多研究的参考方法,我看了好几篇最新的pltv论文,都是基于ZILN来做的。

文章目录

  • 1 精简总结
  • 2 背景&挑战:
  • 3 方法:
  • 实验:
  • 思考:

✅【arxiv-2019 谷歌 ZILN】《A Deep Probabilistic Model for Customer Lifetime Value Prediction》

  • 论文链接:https://arxiv.org/pdf/1912.07753
  • 官方代码tf:添加链接描述
  • torch实现代码参考:添加链接描述

1 精简总结

用零膨胀对数正态分布拟合ltv分布,模型结构为DNN,模型输出3元素(付费概率,均值,标准差),以此3元素计算loss与pltv。

2 背景&挑战:

  • 1、许多用户只付费一次,在预测周期内不再付费,导致预测目标值中出现大量的零值。

  • 2、对于在预测周期内再次付费的用户,ltv波动非常大,ltv分布高度不均匀(长尾)。一些大R用户的付费金额会比普通用户多几个数量级。
    在这里插入图片描述
    因此“付费金额-人数的分布“如图所示。注意:论文中举的是另一种例子,即大部分人是只付费一次,下图是排除第一次付费后的分布。这两种本质上是一样的,论文中称为 “zero-inflated lognormal (ZILN) distribution”

  • 3、回归任务中常用的MSE loss对于pltv中的数据挑战来说,它并不是理想的选择。MSE忽略了ltv是零和连续值的混合,并使模型学习两个分布的平均值。MSE中带有平方项,对异常值敏感。在随机梯度下降训练时,导致梯度嘈杂且偶尔爆炸(noisy and occasionally exploding),很容易造成数值不稳定或收敛问题。即数据中存在 大量不付费人群 和 少量高付费人群 ,这就导致模型更倾向于学习到低付费人群信息,而高付费很难学到,loss容易波动,学习困难。

3 方法:

【DNN + ZILN_loss】
论文抓住了LTV的分布特点:零膨胀+对数正态分布(存在较多不付费的人,ltv=0值的很多。在付费的人中,付费金额与人数服从 对数正态分布),将其命名为ZILN分布,根据它的似然函数构建了ZILN loss,最小化ZILN loss就是最大化ZILN分布的似然函数。该论文提出了一种基于零膨胀对数正态分布the zero-inflated lognormal (ZILN) distribution的混合损失函数,用来处理用户生命周期价值中常见的零值和极大值。
在这里插入图片描述
在这里插入图片描述


注:看之前,可以先补补基础:
正态分布原理:点击进入
对数正态分布原理:点击进入
伯努利分布(即0-1分布)原理:点击进入


🚀 在ziln中,还需要考虑某个用户是否付费,即需要额外考虑1个伯努利分布。同时要预测付费用户的付费金额(包含对数正态分布的均值与方差),即对数正态分布。因此ziln分布的概率密度函数为 伯努利分布 + 对数正态分布,两个分布独立。ZILN loss就等同于分类loss加回归loss。回归的loss只会计算在x>0上。
在这里插入图片描述

预测结果:
在这里插入图片描述
在这里插入图片描述

🚀模型需预测付费概率、对数正态分布的均值、对数正态分布的方差。然后用于计算pltv:

pltv = 模型预估是用付费概率 * 预测结果

优点: 能够同时预测流失概率和生命周期价值。减少了构建两阶段模型的工程复杂性:两阶段模型通常由一个二分类模型预测是否付费,再由一个回归模型预测第一阶段预测付费用户的ltv。其次,ZILN提供了生命周期价值的完整概率分布,从而允许对点预测的不确定性进行量化。

实验:

●提出了两种新的评估指标。从两个方面评估pltv模型的预测性能:区分能力和校准能力。
归一化的基尼系数:区分能力,区分高价值客户与其他客户的能力。
十分位的MAPE:校准能力,实际ltv和预测ltv之间的一致性。
●ZILN loss能很好地训练DNN,拟合ltv的数据分布,在两个公开数据集(Kaggle和KDD Cup1998)中normalized gini和MAPE指标均比 MSE/CE loss好。

思考:

Q:ziln网络batch里每个样本对应的输出都有着不同的均值和标准差,这怎么理解?不是应该拟合同一个ltv的分布吗?
A:每个样本确实有不同的均值和标准差,这是因为网络试图为每个样本生成一个接近真实 LTV 的预测分布。当我说“网络仍然在尝试拟合整个数据集的 LTV 分布”时,我的意思是,在整个数据集的范围内,网络试图学习如何根据输入特征生成逼真的 LTV 分布。
零膨胀对数正态损失函数的目标是最小化每个样本的预测分布与真实 LTV 之间的差异。这是通过以下两个部分实现的:

    1. 分类损失(classification loss):这部分损失函数鼓励网络正确预测用户是否付费(即,LTV 是否大于零)。这是通过计算二元交叉熵损失实现的,它衡量了网络预测的付费概率与实际付费情况之间的差异。
    1. 回归损失(regression loss):对于付费用户(即,LTV 大于零的情况),这部分损失函数鼓励网络生成接近真实 LTV 的预测分布。这是通过计算对数正态分布的负对数似然实现的,它衡量了网络预测的 LTV 分布与实际 LTV 之间的差异。

通过最小化这两部分损失函数,网络学会了为每个样本生成逼真的 LTV 分布。虽然每个样本的预测分布具有不同的均值和标准差,但在整个数据集范围内,网络仍然在尝试学习如何根据输入特征生成这些逼真的 LTV 分布。换句话说,网络在尝试捕捉输入特征与 LTV 之间的潜在关系,以便对新的输入样本进行更准确的预测。

Reference

  • 【广告算法论文1】用户全生命周期价值(LTV)建模https://zhuanlan.zhihu.com/p/683836377

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/9434.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

docker安装emqx

emqx安装 拉取emqx镜像 docker pull emqx/emqx:v4.1.0 运行docker容器 docker run -tid --name emqx -p 1883:1883 -p 8083:8083 -p 8081:8081 -p 8883:8883 -p 8084:8084 -p 18083:18083 emqx/emqx:v4.1.0 放行端口 1、如果要是自己的虚拟机,并且关闭了防火墙&a…

【C++题解】1393. 与7无关的数?

欢迎关注本专栏《C从零基础到信奥赛入门级(CSP-J)》 问题:1393. 与7无关的数? 类型:简单循环 题目描述: 一个整数,如果这个数能够被 7 整除,或者其中有一位是7,我们称…

分享| RL-GPT 框架通过慢agent和快agent结合提高AI解决复杂任务的能力-Arxiv

结论 “RL-GPT: Integrating Reinforcement Learning and Code-as-policy” RL-GPT 框架为解决大语言模型在复杂任务处理中的难题提供了创新有效的途径, 旨在将强化学习(RL)和代码即策略相结合, 以解决大语言模型&#xff08…

多级缓存(亿级并发解决方案)

多级缓存(亿级流量(并发)的缓存方案) 传统缓存的问题 传统缓存是请求到达tomcat后,先查询redis,如果未命中则查询数据库,问题如下: (1)请求要经过tomcat处…

3、C#基于.net framework的应用开发实战编程 - 实现(三、三) - 编程手把手系列文章...

三、 实现; 三.三、编写应用程序; 此文主要是实现应用的主要编码工作。 1、 分层; 此例子主要分为UI、Helper、DAL等层。UI负责便签的界面显示;Helper主要是链接UI和数据库操作的中间层;DAL为对数据库的操…

RPC是什么?和HTTP区别?

RPC 是什么?HTTP 是什么? 作为一个程序员,假设我们需要从A电脑的进程发送一段数据到B电脑的进程,我们一般会在代码中使用 Socket 进行编程。 此时,可选性一般就是 TCP 和 UDP 二选一,由于 TCP 可靠、UDP 不…

在无sudo权限Linux上安装 Ollama 并使用 DeepSeek-R1 模型

本教程将指导你如何在 Linux 系统上安装 Ollama(一个本地运行大型语言模型的工具),并加载 DeepSeek-R1 模型。DeepSeek-R1 是一个高性能的开源语言模型,适用于多种自然语言处理任务。 DeepSeek-R1 简介 DeepSeek-R1 是 DeepSeek …

大数据治理实战:架构、方法与最佳实践

📝个人主页🌹:一ge科研小菜鸡-CSDN博客 🌹🌹期待您的关注 🌹🌹 1. 引言 大数据治理是确保数据质量、合规性和安全性的重要手段,尤其在数据驱动决策和人工智能应用日益普及的背景下&…

JavaScript_02 表单

表单常用演示: 1.图片 结果失真了... 2.切换图片 切换结果 3.表单:

【MySQL】初始MySQL、库与表的操作

目录 基本使用 使用案例 SQL分类 存储引擎 库的操作 字符集和校验规则 查看系统默认字符集和校验规则 查看数据库支持的字符集 查看数据库支持的字符集校验规则 指定编码常见数据库 校验规则对数据库的影响 操纵数据库 库的备份与恢复 表的操作 创建表 查看表 …

three.js用粒子使用canvas生成的中文字符位图材质

three.js用粒子使用canvas生成中文字符材质 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Three.…

unity实现回旋镖函数

最近学习unity2D&#xff0c;想实现一个回旋镖武器&#xff0c;发出后就可以在角色周围回旋。 一、目标 1.不是一次性的&#xff0c;扔出去、返回、没有了&#xff1b;而是扔出去&#xff0c;返回到角色后方相同距离&#xff0c;再次返回&#xff1b;再次返回&#xff0c;永远…

Cursor 帮你写一个小程序

Cursor注册地址 首先下载客户端 点击链接下载 1 打开微信开发者工具创建一个小程序项目 选择TS-基础模版 官方 2 然后使用Cursor打开小程序创建的项目 3 在CHAT聊天框输入自己的需求 比如 小程序功能描述&#xff1a;吃什么助手 项目名称&#xff1a; 吃什么小程序 功能目标…

oracle比较一下统计信息差异吧

统计信息发生了哪些变化&#xff1f; 从上次收集到最近一次收集有什么不同&#xff1f; set long 999999 longc 99999 line 100 select report, maxdiffpct from table(dbms_stats.diff_table_stats_in_history(SYS,T1,to_timestamp(2025-01-22 09:01:46,YYYY-MM-DD hh24:mi:s…

STM32 LED呼吸灯

接线图&#xff1a; 这里将正极接到PA0引脚上&#xff0c;负极接到GND&#xff0c;这样就高电平点亮LED&#xff0c;低电平熄灭。 占空比越大&#xff0c;LED越亮&#xff0c;占空比越小&#xff0c;LED越暗 PWM初始化配置 输出比较函数介绍&#xff1a; 用这四个函数配置输…

机器人基础深度学习基础

参考&#xff1a; &#xff08;1&#xff09;【具身抓取课程-1】机器人基础 &#xff08;2&#xff09;【具身抓取课程-2】深度学习基础 1 机器人基础 从平面二连杆理解机器人学 正运动学&#xff1a;从关节角度到末端执行器位置的一个映射 逆运动学&#xff1a;已知末端位置…

低代码产品表单渲染架构

在React和Vue没有流行起来的时候&#xff0c;低代码产品的表单渲染设计通常会使用操作Dom的方式实现。 下面是一个表单的例子&#xff1a; 产品层 用户通过打开表单&#xff0c;使用不同业务场景业务下的表单页面&#xff0c;中间的Render层就是技术实现。 每一个不同业务的表单…

【教学类-89-01】20250127新年篇01—— 蛇年红包(WORD模版)

祈愿在2025蛇年里&#xff0c; 伟大的祖国风调雨顺、国泰民安、每个人齐心协力&#xff0c;共同经历这百年未有之大变局时代&#xff08;国际政治、AI技术……&#xff09; 祝福亲友同事孩子们平安健康&#xff08;安全、安全、安全&#xff09;、巳巳如意&#xff01; 背景需…

SpringBoot统一数据返回格式 统一异常处理

统一数据返回格式 & 统一异常处理 1. 统一数据返回格式1.1 快速入门1.2 存在问题1.3 案列代码修改1.4 优点 2. 统一异常处理 1. 统一数据返回格式 强制登录案例中,我们共做了两部分⼯作 通过Session来判断⽤⼾是否登录对后端返回数据进⾏封装,告知前端处理的结果 回顾 后…

Hive:日志,hql运行方式,Array,行列转换

日志 可以在终端通过 find / | grep hive-log4j2 命令查找Hive的日志配置文件 这些文件用于配置Hive的日志系统。它们不属于系统日志也不属于Job日志&#xff0c;而是用于配置Hive如何记录系统日志和Job日志, 可以通过hive-log4j2 查找日志的位置 HQL的3种运行方式 第1种就是l…