目前该系列的几篇:
用户增长 - BG/NBD概率模型预测用户生命周期LTV(二)
文章1 提及,
LTV(Life Time Value),也即用户在生命周期中贡献的商业价值,是用户增长中非常核心的一个指标项。快速准确的对LTV进行建模预估,对于产品商业能力衡量、渠道质量优劣评估、甚至产品的商业闭环能否跑通都起着关键作用。本文将主要介绍LTV建模及其场景应用。
用户的生命周期持续时间很长(几个月甚至到几年),如果等用户经历了整个生命周期再来计算用户LTV,对于绝大多数商业决策是严重滞后的。因此需要对LTV进行预测,通过用户一定时间窗口(例如7天,14天)的实际数据,预估用户整个生命周期的LTV。
对于大多数产品而言,用户在刚开始阶段贡献较多的价值,随着用户逐渐流失,商业价值越来越低,直至归零。
因此用户LTV过程呈现出图1的走势,很类似幂函数(指数小于1)或者logistic函数(sigmod函数)形状。因此可以采集用户前N天实际产生的数据,通过幂函数、logistic回归、或者神经网络对LTV建模预测未来趋势,从而计算得出用户LTV。这种方式由于没有深入建模产品的收入过程,因此LTV预估准确率相对较为一般。
文章1 提及,
LTV伴随着整个产品方方面面的决策,最主要应用在以下2类场景:
几个基本的概念:
LTV:Life Time Value,指用户在整个生命周期中贡献的商业价值;LTV365也即用户在新增期后的365天所贡献的商业价值。
CAC:Customer Acquisition Cost,指获取一个用户所付出的成本,例如在SEM渠道获取一个激活用户所花费的费用。
ROI:Return On Investment,投资回报率,ROI=LTV/CAC。
ARPU DAU( 平均每用户收入 - 日活 Average Revenue Per User Daily Active User):活跃用户日均ARPU值,也即用户活跃一天所能带来的日均收入。
R:用户日留存率,例如次日留存率、7日留存率等,第t天留存率记为R(t)。
CPI:Cost per install,按照安装付费
文章1 提及,
互联网产品主流盈利模式主要有以下几种:电商、广告、游戏、打赏,不同的盈利模式下用户LTV计算方法均各不相同。
例如:
DTC 品牌会采用「增长黑客」的模式关注用户增长,这个法则就是:LTV / CAC > 3。
LTV / CAC 是一个计算效率的工具,LTV(Life time Value)是客户终身价值,指的是每个用户(购买者、会员、使用者)在未来可能购买该产品或服务带来的收益总和,CAC(Customer Acquisition Cost)则是单个客户的平均费用。
它通过提出一个简单的问题:一个客户的价值(LTV)是否大于获取该客户的成本(CAC)?
所以,相比传统计算 CPC 和 CPA,DTC 品牌会通过这个公式来解决以下问题:
未来品牌指南:DTC 品牌的核心特点 | BrandStar
客户终身价值(CLV)是从一个关键人物业务。它通常描述了客户在整个“客户生活”期间实现的贡献边际,折扣到分析时。因此,CLV可以理解为客户多年来对公司或未来的平均价值。因此,除历史收入外,未来预期收入也会被考虑(客户潜力)。在确定CLV时,必须将可能的客户价值与实际客户价值区分开来。可能的客户价值考虑了某个区域内客户的总支出,包括竞争对手的支出,而实际的CLV仅考虑了客户对其公司的支出。公司使用CLV更有效地为客户量身定制营销。例如,高CLV证明更高的预算用于照顾特定客户。
python数据分析:使用lifetimes进行客户终身价值(CLV)探索
用户生命周期,是一种刻画用户的方法。一般用来解决两类问题:
用户还有多少价值、用以衡量投入产出比在干预用户后,根据用户生命周期价值的变化,优化资源的投放。
即用户管理的两个核心问题:用户所具备的价值以及策略的有效性。
需要注意的是,CLV 的产品形态要求非合约。合约在国内最有代表的是合约手机。一般互联网产品,合约形态较为少见。
CLV 的用户群体需已经产生交易,未付费用户不纳入考量。当然,概念迁移,将付费换成活跃或内容消费,该模型也能处理。
这三个问题,是用户生命周期价值能够回答的。
CLV是一个非常重要的概念,因为它决定了获得一个新客户的成本的上限,企业可借助CLV模型来计算其市场和广告花费的回报。CLV与CP(Customer Profitbility)是不同的概念,后者指的是在一定时间内在客户上获得的收益与维系客户关系所付出的成本之间的差,CLV主要关注未来而CP关注历史已发生的事。
CLV的一个最直接用途就是评价客户的金融价值,也可以用来做客户分段模型(有兴趣可参见本人的另一篇博客customer segmentation model)。基于CLV的客户分段模型可以帮助企业理解不是所有的客户都是同等重要的,预测更具备可盈利的客户群体并了解他们的共同特性,另外可以和SOW(Share of Wallet)模型结合使用来定位那些可以最大化企业利益的客户,即高CLV且低SOW的客户。
CLV这个指标主要用于关系敏感的业务模型,特别是那些有客户合同的,例如银行、保险、电信和大多数B2B企业。然而,CLV的理念可以延展到属于事务聚焦的业务体系中,例如通过使用个体客户的随机购买模型或集合行为的大众消费品。在这些情况下,留存率都会对CLV产生重大影响,因为低留存率会导致CLV长期不能增长。
参考:生命周期价值LTV预测
如以下产品:新用户CAC成本29元,计算出各阶段用户LTV后,可评估出在第24天时可收回成本,90日LTV=32,成本回收期=24天发现回收期太长,或难以收回成本时,则需要改造产品功能及商业逻辑。
参考:生命周期价值LTV预测
参考:生命周期价值LTV预测
UE(Unit Economics)通常衡量的是收入和可变成本的关系(当然也有企业也会将固定成本折算成单位固定成本进行计算),但通常情况是衡量收入和可变成本关系的。
单用户净收入= 生命周期价值LTV -(获取流量成本+转客成本+后续运营成本…),UE计算需将各项收入、成本逐项计算并体现,如示例图:
通过UE模型,可以知道:
其中,成本计算一种方式为:
60日内每日成本 = 获取新付费用户总成本 / 新用户中转化为付费用户人数
(新用户中转化为付费用户人数,每天的累计付费人数在增加,所以成本在减缓;
人数的增长服从logit增长函数)
比如针对一家SAAS公司,投资方会要求你的LTV是CAC的三倍,成本回收需要在12个月内,要不就会判断你无法很好的发展。
企业内部会根据这个值规划不同企业阶段和客户的营销策略等。
LTV = 每日价值(动态) * 存续天数(动态留存)
这个公式就好比:路程 = 速度 * 时间,,优点就是非常好理解,缺点也非常明显,就是非常理论化。
一般来说做留存率分析的时候,一般是用cohort analysis,也就是把一群同一时间周期的用户合在一起看他们第N天的留存(再谈LTV模型的构建和应用)。
参考:生命周期价值LTV预测
计算方式:
适用场景:
被广泛使用,尤其适合功能稳定产品LTV预测
优缺点
优点:简单、常用、模型化,适合产品功能稳定后预测。
缺点:①留存率拟合存在误差 ②忽视了不同生命周期用户ARPU是动态变化的,用户贡献价值是不同的。
计算方式:
预测用户付费生命周期(Pay_LT):幂函数拟合各周付费率衰减趋势
假定不同阶段用户周付费ARPU值稳定不变
如需预测全部用户,需加入付费转化率
适应场景
适合电商、游戏等付费用户价值预估,重视付费转化的行业。
** 优缺点**
优点:简单粗暴、常用、模型化
缺点:需要预测3个变量增大预测偏差
①付费率拟合存在误差
②不同付费周期用户ARPU是动态变化的,用户贡献价值是不同的。
③付费转化率受产品调整及运营活动影响较大
依据LTV历史数据,拟合幂函数趋势预测未来LTV。
优点:只有LTV单变量,预测精度较高
缺点:①需要足够历史数据拟合函数 ②幂函数数据量越少,预测结果越低,需要人工修正
文章1 提及,
在ARPUDAU稳定不变的情况,全生命周期的价值就等于用户的活跃天(LT)和每天价值(ARPUDAU)的乘积。到此,我们如果只需要计算ARPUDAU和留存率R(t),即可得到用户的LTV。
其中有两个决定因素:
每天价值(ARPUDAU):
用户的ARPUDAU是相对稳定的,如果已经获得了用户14天真实的行为数据,对这14天的数据直接进行统计然后求平均,即可得到一个相对准确的ARPUDAU数据了。
用户的活跃天(LT):
不难看出用户的留存率走势和幂函数形状很类似,因此可以用幂函数,结合用户前14天已知的留存率数据,对未来趋势进行拟合,得出留存率预估函数y=b*x^a。
y=b*x^a
只会无限接近0,但是不会等于0,因此在实际建模过程中,需要选定一个阈值alpha,当留存率低于alpha时,认为用户生命周期结束。alpha的选择需要根据留存率变化的实际趋势来确定,例如1%,5%等。关联关键词:
第一版LTV —— 冷启动环节:
在推量后的第5天,得到一个预估的LTV14、LTV30、LTV60的数值,并且这个数值只要符合商业上的误差容忍度,我们便可以“预知未来”,更快更好地制定下一步的推量策略。
计算1-7天的ARPU乘以累加留存率预测产生的收入。
然而结合我们的商业场景,第一版LTV算法实际上线后,我们发现
第二版:稳定版LTV
第二版创建了两种模型,最后需对两个模型的预测结果进行叠加得到预测结果。
一种模型是基于累计收入的非线性回归,
另一种模型是基于留存率、收入和用户打点数据的预测模型,
沿用了GBDT算法的核心思想,对预测结果的误差进行多轮迭代以提升预测精度。没有最好的万能的模型算法,只有最适合自身业态和商业场景的模型算法。
最终,得到的新LTV模型相较于第一版的LTV模型,预测的平均绝对误差率从30%降低到9.5%,更符合广告流量变现的商业场景。
LTV预测模型的输出数据是每批推量用户第7、14、30、60天的预测LTV。
判断渠道质量的时候,选用多长时间窗口预估LTV更适合?
文章1 提及,
当LTV用于判断渠道质量时,很重要的一件事情是选择时间窗口,也即需要累积多长时间实际样本数据来预估LTV。
如果时间窗口较长(例如3个月),LTV预估结果与真实值偏差较小,但是意味着我们对于渠道的筛选决策要延后3个月。
如果时间窗口较短(例如3天),LTV预估结果与真实值偏差较大,但是决策周期可以很短。
在实际场景中,需要根据模型实际效果来确定合适的时间窗口。对于广告收入为主的产品,一般选择714天,ltv模型预估准确率可达到还不错的一个水平,714天也是产品可以接收的决策周期。
除了LTV预估模型的准确率之外,更重要是要构建一个完整的LTV数据服务。
文章1 提及,
由于产品自身的商业能力的迭代,以及渠道的复杂和不可控性,LTV会经常发生变动,以至于模型准确率也会经常发生波动。因此需要对LTV预估结果做完整的跟踪监控,以便支持产品做更迅速准确的商业决策。
预测某月新用户价值,在分别使用200天实际数据、90天、30天、7天预测结果如下图:
数据结论:预测同样人群LTV,使用数据天数越多预测越准确。
200天、90天数据R方达到1,基本较精准的预测360天LTV,在数据不充分时使用90天数据可预估全年结果。
使用30天数据时,比实际值低5.3元,预测值低17%。
仅使用7天数据时,比实际值低10.6元,预测值低35%。
当5月仅有7天数据,仍要预估360天数据时,是否可以预测?
答案是可以的,使用7天数据预测,需要加上后续偏差修正值。
仅使用7天数据拟合,跟实际值之间的偏差是有规律的,偏差幅度可以拟合出规律函数,可以函数计算出7天之后每一天预测少了多少,实际预测值将偏差修正回来
4月仅使用7天数据预测时,预测360天价值23.69,修正后360天价值为39.40,验证修正后结果更符合实际情况。
基于新用户的7天甚至是3天这种非常短的时间的用户行为,去预估用户的长期生命周期价值,比如30天、90天或者180天的活跃天的预估。这里会用到一些画像或者消费行为。
在建模时会考虑前几天的序列信息,用transformer做一个建模,然后也会做一个多任务。
接下来去分析数据,能看到用户,特别是新用户中有相当多用户的LT的量是比较小的,所以我们引入零膨胀模型,类似于先是分类,然后是一个回归。
在实际的应用中会发现很多小渠道的用户会被大渠道给淹没掉,所以我们去考虑分渠道建模来解决这个问题。
我们的模型是用户粒度预估模型,在产品早期阶段,数据量非常少的时候,比较典型的像曲线拟合,就是基于渠道的数据去做一个曲线拟合,这个需要结合业务的发展阶段和需求去做选型。
用户粒度模型的好处是能灵活的做各种维度聚合,做一些LTV的预估和分析。
具体可参考:用户增长 - BG/NBD概率模型预测用户生命周期LTV(二)
数据运营36计(六):BG/NBD概率模型预测用户生命周期LTV,Python实现
BG/NBD模型又称为贝塔几何/负二项模型。
他是基于Pareto/NBD模型假设设计的概率预测模型。
BG/NBD模型是用于描述非契约客户关系情境下重复购买行为。
即用户可以随时购买产品,无时间约束。
该模型可利用用户历史交易数据(RFM)来预测未来每个用户的交易次数和流失率
该模型的几个假设前提:
(1)【交易假设】用户在活跃状态下,一个用户在时间段t内完成的交易数量服从均值为λt的泊松分布。
(2)【交易假设】用户的交易率λ服从形状参数为r,逆尺度参数为α的gamma分布,PDF函数如下所示。
(3)【流失假设】每个用户在交易j完成后流失的概率服从参数为p(流失率)的几何分布。
【流失假设】用户的流失率p服从形状参数为a,b的beta分布,PDF函数如下所示。
用户的流失率p服从形状参数为a,b的beta分布,PDF函数如下所示
(4)【联合假设】每个用户的交易率λ和流失率p互相独立。
差异点:
由于该模型只关注时段T内的交易数量和最终交易日期,所以不能表示具有周期性的客户,根据t的设置周期性的客户可能在预期的交易数和实际的交易数之间有很大的差异。
【参考文献:如何预测(计算)用户价值—BG/NBD模型】
周留存率数据
周ARPU数据
#这里以留存率数据的处理代码为例,ARPU数据处理过程一样
#宽窄转换和数值化
df_r2 = pd.melt(df_r,id_vars=['Date'])
df_r2['x'] = df_r2['variable'].str.split(' ',1,True)[1].astype(int)
df_r2['y'] = df_r2['value'].str.split('%',1,True)[0].astype(float)/100
#描绘成散点图
%matplotlib inline
import matplotlib.pyplot as plt
plt.scatter(x=df_r2['x'],y=df_r2['y'])
# 对留存率曲线,根据业界经验可以用指数函数拟合:
from scipy.optimize import curve_fit
import numpy as np
def fun_r(x, a, b):
return a**x + b
popt1, pcov1 = curve_fit(fun_r, df_r2['x'], df_r2['y'])
#用图像输出结果
y1 = [fun_r(i,popt1[0],popt1[1]) for i in df_r2['x']]
plt.plot(df_r2['x'],y1,'r--')
# 对ARPU数据观察后,尝试用二项式函数拟合:
def fun_a(x, a, b, c):
return a*x*x + b*x + c
popt2, pcov2 = curve_fit(fun_a, df_a2['x'], df_a2['value'])
#用图像输出结果
y2 = [fun_a(i,popt2[0],popt2[1],popt2[2]) for i in df_a2['x']]
plt.plot(df_a2['x'],y2,'r--')