浅谈游戏运营中LTV的计算

可以叫我才哥
可以叫我才哥
可以叫我才哥
3
文章
0
评论
2021-04-2618:15:22 评论 4,036 4635字
摘要

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

大家好,我是才哥。

上回咱们介绍了《关于移动游戏运营数据指标,这里有一份简单说明,请查收》,不少朋友们看完后留言希望出一期关于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. 最直接的计算公式

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

浅谈游戏运营中LTV的计算

新增用户在内贡献的总收入新增用户数

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的如下计算公式:

浅谈游戏运营中LTV的计算

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

怎么理解?

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

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

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

浅谈游戏运营中LTV的计算

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

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

浅谈游戏运营中LTV的计算

案例数据01

以下面积部分就是LTV值:

浅谈游戏运营中LTV的计算图1:计算每日留存用户付费总额求LTV

>> LTV = LT * arpu

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

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

浅谈游戏运营中LTV的计算

第日留存用户数新增用户数

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

浅谈游戏运营中LTV的计算

第日留存率

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

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

以下面积就是LT值:

浅谈游戏运营中LTV的计算

图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. 趋势预测可以前推和后推,选前推即可浅谈游戏运营中LTV的计算
图3:操作流程

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

浅谈游戏运营中LTV的计算图4:通过现有历史LTV计算和预估x日-LTV

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

浅谈游戏运营中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的趋势线功能找到拟合函数如下:

浅谈游戏运营中LTV的计算

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

我们对比拟合结果如下:

浅谈游戏运营中LTV的计算图7:拟合与实际结果对比

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

  • 求拟合函数公式的定积分
  • 将拟合结果都求出来然后求和
浅谈游戏运营中LTV的计算图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拟合结果非常接近,后续计算逻辑就是一样了。

from scipy.optimize import curve_fitimport matplotlib.pyplot as pltimport 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,bx2data = 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)
浅谈游戏运营中LTV的计算图9:python幂拟合结果-LTV

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

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

# 定义幂拟合函数, 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,bx2data = range(1,120)y2 = [target_func(i, popt[0],popt[1]) for i in x2data]plt.plot(x2data,y2,"r--")print(popt)
浅谈游戏运营中LTV的计算图10:python幂拟合-留存

计算LTV =LT * arpu

from sympy import *x = symbols("x")# 计算定积分sum_R = integrate(popt[0] * (x**popt[1]), (x, 1, 119))# 计算LTVLTV = (1+sum_R)*15.17print(LTV)
397.884700260928

4. 补充

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

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

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

 

End.

作者:可以叫我才哥

介绍:混迹过北上深的资深游戏运营师,数据爱好者,喜欢学习分享游戏运营、数据分析、网络爬虫和数据可视化等知识笔记

本文为爱数据网站专栏作者原创文章,未经允许禁止转载,需要转载请微信联系授权(微信号:lovedata0520)

更多文章前往首页浏览http://www.itongji.cn/ 

  • 我的微信公众号
  • 微信扫一扫
  • weinxin
  • 我的微信公众号
  • 微信扫一扫
  • weinxin
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: