大家好,我是才哥。
不少朋友们看完后留言希望出一期关于LTV的计算和预估科普贴,刚好最近才哥也在做这方面的数据处理。
考虑到有的同学更习惯用Excel,那么今天我们就一起来看看分别用Excel与Python计算和预估LTV吧。
1. 认识LTV
LTV(Life Time Value
) 生命周期价值,也可以叫用户终身价值,一般来说我们用来指单个用户生命周期的平均价值,更通俗理解就是平均每个用户从开始使用到不再使用产品期间为产品贡献的总收入,注意这里是平均到每个用户的。
和LTV经常同时出现的还有CAC(Customer Acquisition Cost
)用户获取成本以及ROI(Return On Investment
)投资回报率。
其中CAC就是指产品获取单个用户需要的成本,我们在《》介绍过广告投放常见的数据指标中CP*
如CPA
、CPM
等计费方式都是可以折算为单用户获取成本的。
而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*首日apru + 第1日留存率*第1日apru+…
上面公式就是计算某天新增用户中在后续每天留存用户*留存用户的arpu
(也就是每天贡献的收入)求和。
我们回头看看留存的概念,可以发现上述公式等价于:
如果我们可以根据历史数据预估后续留存率
及对应留存日的arpu
,那么就可以预估LTV
了。
举个栗子:我们根据历史数据进行拟合得出了留存率和arpu的预估数据如下
以下面积部分就是LTV值:
>> LTV = LT * apru
细心的你可能会发现,假定apru
为恒定值(这是前提),那么……
还是根据LTV的定义,假定arpu为恒定值,则LTV = LT * apru
。而LT 是用户生命周期,也就是全部用户总生命周期 / 总用户数,所以LT计算公式如下:
同样根据留存的概念,上述公式等价于:
可以看到,LT等于1+后续留存率之和,如果有留存率预估模型,则可得到预估LTV值。
举个栗子:基于案例数据01
,我们可以得到LT,也就是全部留存率求和(含首日的100%)
以下面积就是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
操作流程:
- 将历史N日-LTV绘制成曲线图
- 选中曲线右键—>添加趋势线
- 在趋势线选项中选择合适的模型(我这边选的乘幂,大家可以对数、指数等都对比看看)
- 趋势预测可以前推和后推,选前推即可
以上步骤后,我们可以得到拟合函数,我们可以看到R²=0.9999,非常接近于1,拟合度极高。(我怀疑这数据就是这样生成的)
我们对比拟合结果:(如果想知道第N天的LTV预测数据,直接套用拟合函数公式即可)
我们根据拟合函数公式算出120日-LTV = 15.387*120^0.6632 = 368.19
。
>>预估留存率和apru值计算LTV
这里我们就介绍 LT*arpu 的操作流程:
- 根据现有留存数据拟合留存函数公式
- 然后求该函数的面积 即为LT(定积分)
- 根据现有arpu 求均值
- 最后两者乘积就是预估LTV
回到第2部分的案例数据01
,我们用excel的趋势线功能找到拟合函数如下:
我们对比拟合结果如下:
按照之前厘清楚的计算逻辑,LT = 1 + 后续留存率求和
,两种方式可以参考:
- 求拟合函数公式的定积分
- 将拟合结果都求出来然后求和
前10天的arpu我们取均值为 15.17,求120日-LTV结果如下:
120日LTV = (1+25.35) * 15.17 = 399.73
在线定积分计算
3.2. Python计算及预估LTV
通过Python来计算的话,其实重点也是进行拟合,这里我们 引入scipy
的用来进行拟合操作。
>>直接利用历史LTV计算和预估x日-LTV
同样利用第2部分的案例数据01
,进行幂拟合。可以得到拟合函数为LTV = 15.273*x^0.6675
,和excel拟合结果非常接近,后续计算逻辑就是一样了。
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)
>>预估留存率和apru值计算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,b
x2data = range(1,120)
y2 = [target_func(i, popt[0],popt[1]) for i in x2data]
plt.plot(x2data,y2,'r--')
print(popt)
计算LTV =LT * arpu
:
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)
397.884700260928
4. 补充
关于LTV的计算,除了上述的采用历史N日-LTV做拟合预测之外,还可以用LT*arpu做拟合预测的形式,同样我们还可以将用户群下钻到付费用户的形式用付费用户的LT*arppu
去处理,操作流程基本一致,这里就不再展开了。
我们可以看到不管是用excel还是python,又或者两种不同的计算方式,最终算出来的LTV值都是存在一定的差异的。不过毕竟是预测,所以只是用于参考。大家可以在每日更新数据源后将输入替换,从而修正后续预测结果。
而在实际操作过程中,可能遇到一些异常点的情况,这个时候选择性的将离群值舍弃能更好的修正预测,感兴趣的可以加作者好友交流!
今天的文章数据分析中关于LTV的计算与预估分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/23539.html