Loading [MathJax]/jax/output/CommonHTML/jax.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >浅谈游戏运营中LTV的计算

浅谈游戏运营中LTV的计算

作者头像
可以叫我才哥
发布于 2021-08-05 07:03:09
发布于 2021-08-05 07:03:09
8.9K00
代码可运行
举报
文章被收录于专栏:可以叫我才哥可以叫我才哥
运行总次数:0
代码可运行
我们的第69篇原创

作者:才哥


大家好,我是才哥。

上回咱们介绍了《关于移动游戏运营数据指标,这里有一份简单说明,请查收》,不少朋友们看完后留言希望出一期关于LTV的计算和预估科普贴,刚好最近才哥也在做这方面的数据处理。

考虑到有的同学更习惯用Excel,那么今天我们就一起来看看分别用Excel与Python计算和预估LTV吧。

目录:

  • 1. 认识LTV
  • 2. LTV的数理逻辑
    • 2.1. 最直接的计算公式
    • 2.2. 用于预估LTV的计算公式
  • 3. 计算及预估LTV
    • 3.1. Excel计算及预估LTV
    • 3.2. Python计算及预估LTV
  • 4. 补充

1. 认识LTV

LTV(Life Time Value) 生命周期价值,也可以叫用户终身价值,一般来说我们用来指单个用户生命周期的平均价值,更通俗理解就是平均每个用户从开始使用到不再使用产品期间为产品贡献的总收入,注意这里是平均到每个用户的。

LTV经常同时出现的还有CAC(Customer Acquisition Cost)用户获取成本以及ROI(Return On Investment)投资回报率

其中CAC就是指产品获取单个用户需要的成本,我们在《关于移动游戏运营数据指标,这里有一份简单说明,请查收》介绍过广告投放常见的数据指标中CP*CPACPM等计费方式都是可以折算为单用户获取成本的。

ROI = LTV / CAC:如果ROI>1,我们可以理解为收回了获量成本;业内一般认为ROI≥3,潜力无限啊;而若ROI<1,要哭了!!

到这里,有小伙伴可能就会问了,如果单纯在LTV是需要知道生命周期的,再去计算ROI的时候似乎是很滞后了。

对,小伙伴说的对。所以,这里我们会再引入PBP(Payback Period)回收周期N日-LTV(N日内的LTV)。

关于N日-LTV,就是指平均每个新用户在N天内累计为产品贡献的总收入。

关于PBP,就是指当 N日-LTV / CAC>=1 时,N的值,此时意义上就是第N天收回了获量成本。

基于以上介绍,我们大致知道了LTV就是用户生命周期价值,它可以用来做以下事情:

  • 衡量用户的质量(付费能力)
  • 计算投资回报率
  • 以及基于上述两点延展开的如 渠道用户质量对比、不同用户群质量对比,以此再进行投放计划调整或者产品内容推送优化等等

基于以上概念,接下来我们再详细介绍LTV的数理逻辑利用历史数据计算N日-LTV以及利用历史数据预估LTV

2. LTV的数理逻辑

我们再看一下概念:LTV(Life Time Value) 生命周期价值,也就是平均每个用户从开始使用到不再使用产品期间为产品贡献的总收入

2.1. 最直接的计算公式

那么,我们得到最简单的计算公式如下:

LT(Life Time)就是用户生命周期,如果我们要计算N日-LTV,则直接将公式中的LT改为N日即可。

举个栗子:某日新增用户100,首日他们充值200元,则首日-LTV = 200/100 = 2元;第2天充值300元,则2日-LTV = (200+300) / 100 = 5元,以此类推...

这个公式常用于利用已知历史数据精确计算N日-LTV

2.2. 用于预估LTV的计算公式

我们知道,新增用户中只有在后续某天使用产品的用户才有可能在当天进行付费行为,这里把某天使用产品的用户叫当天留存用户,所以对于当天的充值收入来说只可能来自当天留存用户,而当天留存用户的人均付费金额为arpu,所以,我们可以得到LTV的如下计算公式:

注:这里以第0日为这批用户新增日期(和目前大多数第三方数据分析平台保持一致)

怎么理解?

>> LTV = 1*首日arpu + 第1日留存率*第1日arpu+...

上面公式就是计算某天新增用户中在后续每天留存用户*留存用户的arpu(也就是每天贡献的收入)求和。

我们回头看看留存的概念,可以发现上述公式等价于:

如果我们可以根据历史数据预估后续留存率及对应留存日的arpu,那么就可以预估LTV了。

举个栗子:我们根据历史数据进行拟合得出了留存率和arpu的预估数据如下

案例数据01

以下面积部分就是LTV值:

图1:计算每日留存用户付费总额求LTV

>> LTV = LT * arpu

细心的你可能会发现,假定arpu为恒定值(这是前提),那么......

还是根据LTV的定义,假定arpu为恒定值,则LTV = LT * arpu。而LT 是用户生命周期,也就是全部用户总生命周期 / 总用户数,所以LT计算公式如下:

同样根据留存的概念,上述公式等价于:

可以看到,LT等于1+后续留存率之和,如果有留存率预估模型,则可得到预估LTV值。

举个栗子:基于案例数据01,我们可以得到LT,也就是全部留存率求和(含首日的100%)

以下面积就是LT值:

图2:计算留存率求LT

然后,假定的arpu值为历史数据的均值,那么 LTV = LT*arpu

我们发现,其实这两个面积图形状着实差不太多。因为留存率都是一样的值,另外一个参数arpu对于图1来说每天是不一样的,对于图2来说将是固定值,其变化来自arpu的偏差。

一般来说,我们直接根据历史数据算一个arpu恒定值,采用LT*arpu方式计算LTV值就行了

接下来,我们看看怎么用Excel和Python分别进行留存率预估以及LTV值计算吧!

3. 计算及预估LTV

本节我们采用的工具是Excel 和 Python,大家可以根据自己喜好进行选择。

注:本节计算用的输入均为第2部分中案例数据01 前10天原数据

3.1. Excel计算及预估LTV

>>直接利用历史LTV计算和预估x日-LTV

操作流程:

  1. 将历史N日-LTV绘制成曲线图
  2. 选中曲线右键—>添加趋势线
  3. 在趋势线选项中选择合适的模型(我这边选的乘幂,大家可以对数、指数等都对比看看)
  4. 趋势预测可以前推和后推,选前推即可

图3:操作流程

以上步骤后,我们可以得到拟合函数,我们可以看到=0.9999,非常接近于1,拟合度极高。(我怀疑这数据就是这样生成的)

图4:通过现有历史LTV计算和预估x日-LTV

我们对比拟合结果:(如果想知道第N天的LTV预测数据,直接套用拟合函数公式即可

图5:拟合与现有数据结果

我们根据拟合函数公式算出120日-LTV = 15.387*120^0.6632 = 368.19

>>预估留存率和arpu值计算LTV

这里我们就介绍 LT*arpu 的操作流程:

  1. 根据现有留存数据拟合留存函数公式
  2. 然后求该函数的面积 即为LT(定积分)
  3. 根据现有arpu 求均值
  4. 最后两者乘积就是预估LTV

回到第2部分的案例数据01,我们用excel的趋势线功能找到拟合函数如下:

图6:拟合留存率函数公式

我们对比拟合结果如下:

图7:拟合与实际结果对比

按照之前厘清楚的计算逻辑,LT = 1 + 后续留存率求和,两种方式可以参考:

  • 求拟合函数公式的定积分
  • 将拟合结果都求出来然后求和

图8:在线定积分计算

前10天的arpu我们取均值为 15.17,求120日-LTV结果如下:

120日LTV = (1+25.35) * 15.17 = 399.73

在线定积分计算 https://zh.numberempire.com/definiteintegralcalculator.php

3.2. Python计算及预估LTV

通过Python来计算的话,其实重点也是进行拟合,这里我们 引入scipy的用来进行拟合操作。

>>直接利用历史LTV计算和预估x日-LTV

同样利用第2部分的案例数据01,进行幂拟合。可以得到拟合函数为LTV = 15.273*x^0.6675,和excel拟合结果非常接近,后续计算逻辑就是一样了。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from scipy.optimize import curve_fit
import matplotlib.pyplot as plt
import numpy as np

# 定义幂拟合函数, y = a * x^b 
def target_func(x, a, b):
    return a * (x ** b)
# 基础数据(前10天数据)
xdata = df.天数.to_list()
ydata = df.LTV.to_list()
# 绘制原始数据(蓝色)
plt.figure(figsize=(10, 6.5)) 
plt.plot(xdata,ydata,'b-')
# 求拟合函数的参数
popt, pcov = curve_fit(target_func, xdata, ydata)
# popt数组中,三个值分别是待求参数a,b
x2data = range(1,121)
y2 = [target_func(i, popt[0],popt[1]) for i in x2data]
# 将120日的LTV值显示出来
plt.text(x2data[119], y2[119], round(y2[119],2), ha='right', va='bottom', fontsize=16)
plt.plot(x2data,y2,'r--')
print(popt)

图9:python幂拟合结果-LTV

>>预估留存率和arpu值计算LTV

同样的逻辑计算留存拟合函数并做曲线如下,可以得到拟合函数为 0.5927*x^(-0.2760),和excel拟合的结果也非常接近。(需要注意,留存的拟合我们从次日留存开始算哦)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 定义幂拟合函数, y = a * x^b 
def target_func(x, a, b):
    return a * (x ** b)

xdata = df.天数.to_list()[:9]
ydata = df.留存率.to_list()[1:]
# 绘制原始数据(蓝色)
plt.figure(figsize=(10, 6.5)) 
plt.plot(xdata,ydata,'b-')
popt, pcov = curve_fit(target_func, xdata, ydata)
#popt数组中,三个值分别是待求参数a,b
x2data = range(1,120)
y2 = [target_func(i, popt[0],popt[1]) for i in x2data]
plt.plot(x2data,y2,'r--')
print(popt)

图10:python幂拟合-留存

计算LTV =LT * arpu

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from sympy import *

x = symbols('x')
# 计算定积分
sum_R = integrate(popt[0] * (x**popt[1]), (x, 1, 119))
# 计算LTV
LTV = (1+sum_R)*15.17
print(LTV)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
397.884700260928

4. 补充

关于LTV的计算,除了上述的采用历史N日-LTV做拟合预测之外,还可以用LT*arpu做拟合预测的形式,同样我们还可以将用户群下钻到付费用户的形式用付费用户的LT*arppu去处理,操作流程基本一致,这里就不再展开了。

我们可以看到不管是用excel还是python,又或者两种不同的计算方式,最终算出来的LTV值都是存在一定的差异的。不过毕竟是预测,所以只是用于参考。大家可以在每日更新数据源后将输入替换,从而修正后续预测结果。

而在实际操作过程中,可能遇到一些异常点的情况,这个时候选择性的将离群值舍弃能更好的修正预测,感兴趣的可以加作者好友交流!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-04-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 可以叫我才哥 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
机器学习项目:使用Python进行零售价格推荐
日本最大的社区购物应用Mercari遇到了一个问题。他们希望向卖家提供定价建议,但这很难,因为他们的卖家能够在Mercari上放置任何东西。
AiTechYun
2018/08/16
1.9K0
机器学习项目:使用Python进行零售价格推荐
如何构建商品定价模型?Mercari Price Suggestion Challenge 最佳方案出炉
上面的两件毛衣,一件价值 335 美元,另一件价值 9.99 美元。对于我们人类来说,想要通过上面的描述为毛衣定价简直可以说是「不可能完成的任务」! 有了自然语言处理这个利器,它是否能帮助我们解决这个
AI研习社
2018/03/28
3K0
如何构建商品定价模型?Mercari Price Suggestion Challenge 最佳方案出炉
深度学习数据集成
本文将讨论如何利用多种生物信息源,OMIC数据,以便通过深度学习实现更准确的生物系统建模。
代码医生工作室
2019/06/21
1.5K0
深度学习数据集成
教程 | 如何用深度学习处理结构化数据?
选自TowardsDataScience 作者:Kerem Turgutlu 机器之心编译 参与:Panda 这篇博客主要关注的是深度学习领域一个并不非常广为人知的应用领域:结构化数据。本文作者为旧金山大学(USF)在读研究生 Kerem Turgutlu。 使用深度学习方法按照本文所介绍的步骤处理结构化数据有这样的好处: 快 无需领域知识 表现优良 在机器学习/深度学习或任何类型的预测建模任务中,都是先有数据然后再做算法/方法。这也是某些机器学习方法在解决某些特定任务之前需要做大量特征工程的主要原因,这些
机器之心
2018/05/10
2.2K0
智能食品消费行为分析:基于Python与深度学习的实现
这里推荐一篇实用的文章:《解决问题src.checkVector(2, CV_32F) == 4 && dst.checkVector(2, CV_32F) ==4》,作者:【大盘鸡拌面】。
Echo_Wish
2024/11/17
1850
智能食品消费行为分析:基于Python与深度学习的实现
只能用于文本与图像数据?No!看TabTransformer对结构化业务数据精准建模
自 Transformers 出现以来,基于它的结构已经颠覆了自然语言处理和计算机视觉,带来各种非结构化数据业务场景和任务的巨大效果突破,接着大家把目光转向了结构化业务数据,它是否能在结构化表格数据上同样有惊人的效果表现呢?
ShowMeAI
2022/10/30
8801
只能用于文本与图像数据?No!看TabTransformer对结构化业务数据精准建模
深度学习实战-CNN猫狗识别
本文记录了第一个基于卷积神经网络在图像识别领域的应用:猫狗图像识别。主要内容包含:
皮大大
2023/08/23
7480
[Keras深度学习浅尝]实战一·DNN实现Fashion MNIST 数据集分类
Fashion-MNIST是一个替代MNIST手写数字集的图像数据集。 它是由Zalando(一家德国的时尚科技公司)旗下的研究部门提供。其涵盖了来自10种类别的共7万个不同商品的正面图片。Fashion-MNIST的大小、格式和训练集/测试集划分与原始的MNIST完全一致。60000/10000的训练测试数据划分,28x28的灰度图片。你可以直接用它来测试你的机器学习和深度学习算法性能,且不需要改动任何的代码。
小宋是呢
2019/06/27
1.2K0
[Keras深度学习浅尝]实战一·DNN实现Fashion MNIST 数据集分类
机器学习入门与实践:从原理到代码
在本文中,我们将深入探讨机器学习的基本原理和常见算法,并提供实际的代码示例。通过本文,读者将了解机器学习的核心概念,如监督学习、无监督学习和强化学习,以及如何在Python中使用Scikit-Learn库构建和训练机器学习模型。
海拥
2023/09/20
5820
机器学习入门与实践:从原理到代码
Fashion_mnist 数据集 图像识别
fashion_mnist 和 mnist 一样,都是深度学习入门用的简单数据集,两者的图片尺寸一样,都是28x28。fashion_mnist的训练集有6万张图片,测试集有1万张图片,全是衣服、鞋、包包之类的图片,共10个类别:
用户6021899
2020/01/17
1.4K0
Fashion_mnist 数据集 图像识别
针对时尚类MINIST数据集探索神经网络
fashion MNIST数据集可以从Github获取。它包含10种类别的灰度图像,共7000个,每个图像的分辨率均为28x28px。下图以25张带有标签的图片向我们展示了该数据集中的数据。
AI研习社
2019/05/14
1.2K0
使用Python实现深度学习模型:个性化推荐与广告优化
在这篇教程中,我们将构建一个深度学习模型,用于个性化推荐和广告优化。我们将使用TensorFlow和Keras库来实现这一目标。通过这个教程,你将学会如何处理数据、构建和训练模型,并将模型应用于实际的推荐和广告优化任务。
Echo_Wish
2024/07/23
2620
使用Python实现深度学习模型:个性化推荐与广告优化
【机器学习】机器学习的重要技术——生成对抗网络:理论、算法与实践
生成对抗网络(Generative Adversarial Networks, GANs)由Ian Goodfellow等人在2014年提出,通过生成器和判别器两个神经网络的对抗训练,成功实现了高质量数据的生成。GANs在图像生成、数据增强、风格迁移等领域取得了显著成果,成为深度学习的重要分支。本文将深入探讨GANs的基本原理、核心算法及其在实际中的应用,并提供代码示例以帮助读者更好地理解和掌握这一技术。
E绵绵
2024/07/03
8380
【机器学习】机器学习的重要技术——生成对抗网络:理论、算法与实践
使用Python实现深度学习模型:智能食品市场分析
这里推荐一篇实用的文章:《一文速学-知识图谱从零开始构建实战Python指南》,作者:【fanstuck】。
Echo_Wish
2024/11/30
870
使用Python实现深度学习模型:智能食品市场分析
使用机器学习生成图像描述
图像描述是为图像提供适当文字描述的过程。作为人类,这似乎是一件容易的任务,即使是五岁的孩子也可以轻松完成,但是我们如何编写一个将输入作为图像并生成标题作为输出的计算机程序呢?
deephub
2021/04/30
1K0
[Keras深度学习浅尝]实战五·使用DNN自编码器实现聚类操作数据降维
[Keras深度学习浅尝]实战五·使用DNN自编码器实现聚类操作数据降维 代码部分 # TensorFlow and tf.keras import tensorflow as tf from tensorflow import keras # Helper libraries import os os.environ["KMP_DUPLICATE_LIB_OK"]="TRUE" import numpy as np import matplotlib.pyplot as plt print(tf.__
小宋是呢
2019/06/27
1.7K0
[Keras深度学习浅尝]实战五·使用DNN自编码器实现聚类操作数据降维
深度学习检测疟疾
欢迎来到AI for Social Good系列,将重点关注人工智能(AI)与流行的开源工具,技术和框架如何用于发展和改善社会的不同方面。“健康就是财富”也许是一个陈词滥调,但却非常真实!在这篇特别的文章中,将研究如何利用AI来检测疟疾,这是一种致命的疾病,并且有望建立一个低成本,有效和准确的开源解决方案。本文的目的是双重的 - 了解致命疾病疟疾的动机和重要性以及深度学习在检测疟疾方面的有效性。将在本文中介绍以下主要主题:
代码医生工作室
2019/06/21
1.1K0
深度学习检测疟疾
[Keras深度学习浅尝]实战二·CNN实现Fashion MNIST 数据集分类
与我们上篇博文[Keras深度学习浅尝]实战一结构相同,修改的地方有,定义网络与模型训练两部分,可以对比着来看。通过使用CNN结构,预测准确率略有提升,可以通过修改超参数以获得更优结果。 代码部分
小宋是呢
2019/06/27
1.3K0
使用Python实现深度学习模型:模型安全与防御
随着深度学习模型在各个领域的广泛应用,模型的安全性和防御能力变得尤为重要。攻击者可能会利用模型的漏洞进行对抗性攻击,导致模型输出错误的结果。本文将介绍如何使用Python实现深度学习模型的安全与防御,并提供详细的代码示例。
Echo_Wish
2024/07/12
1990
使用Python实现深度学习模型:模型安全与防御
【机器学习】机器学习重要方法——迁移学习:理论、方法与实践
迁移学习(Transfer Learning)作为机器学习的一个重要分支,通过将一个领域或任务中学得的知识应用到另一个领域或任务中,可以在数据稀缺或训练资源有限的情况下显著提升模型性能。本文将深入探讨迁移学习的基本原理、核心方法及其在实际中的应用,并提供代码示例以帮助读者更好地理解和掌握这一技术。
E绵绵
2024/07/03
2.9K0
【机器学习】机器学习重要方法——迁移学习:理论、方法与实践
推荐阅读
相关推荐
机器学习项目:使用Python进行零售价格推荐
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档