python summary_「Python 计算」用户生命周期价值(CLV)--用户分层、释放潜力

在用户关系管理中,常会遇到些直击灵魂的问题:

  • 这批用户到底价值几何?
  • 为什么要用这种措施去干预用户,而不是另一种方式。
  • 为什么干预这类用户,而不去干预另一类,他们的划分标准是什么。

有这些问题,实质是因为对客户价值不够了解,缺乏行之有效的划分方式。

用户精细化运营价值巨大

随着人口红利的消失,增长逐渐见顶,急需在现有用户池做学问。过去粗放式的买量策略已经不再生效,一是买量成本逐渐高企,二是买量带来的用户忠诚度极低。对现有客户群体的划分和互相倒流,成为重中之重。行业中的黑话“洗用户”,即是讲的这一策略。

对于如何划分用户,不用的职能会有不同的看法。产品有产品的看法,可能基于某项功能偏好;运营有运营的看法,是各种活动玩法的定义;甚至领导还有他的一套看法。但是,无论怎么切入,商业的核心拿捏住,才会八九不离十。

什么是商业的本质:商业的本质是获利。因此,我们从用户的货币价值切入,评估和划分用户的生命周期。

用户生命周期价值,这并不是学界的新鲜产物,该理论在上世纪80年代就已经提出。但对于互联网,网上可搜寻到的资料少之又少。可能的原因有两个:一是互联网在过去20年快速爆发,风口上躺着也能赚钱;二是各家的策略内部不统一,无法形成统一的口径。

但这些都不是不去应用他的理由,反而说明其中价值巨大。这里,我们剥离开复杂的商业逻辑,仅从交易入手,分析用户的生命周期价值,以及用户所处的状态。

用户生命周期价值(CLV)

随着精细化运营的铺开,过去粗放式的、买量用户已经不再买账。每个用户所能接受的最低服务各不相同。如何根据用户价值,进行资源的有效利用。最大化杠杆的使用,成为企业生死的关键。

过去,没有统一的理论出现在互联网应用或是游戏中。但是,运用跨学科的思维,就可以发现:市场营销领域已进行过研究,并给出了精度极高、可解释性强的模型方法。

这种方法,就叫做用户生命周期价值,英文名称 Customer Life Time Value,简称 CLV 或者 LTV。

CLV 是什么

用户生命周期,是一种刻画用户的方法。一般用来解决两类问题:

  1. 用户还有多少价值、用以衡量投入产出比
  2. 在干预用户后,根据用户生命周期价值的变化,优化资源的投放。

即用户管理的两个核心问题:用户所具备的价值以及策略的有效性。

需要注意的是,CLV 的产品形态要求非合约。合约在国内最有代表的是合约手机。一般互联网产品,合约形态较为少见。

CLV 的用户群体需已经产生交易,未付费用户不纳入考量。当然,概念迁移,将付费换成活跃或内容消费,该模型也能处理。

CLV 回答哪些问题

用户活跃还是流失,用户还有多少付费潜力,用户在未来某段时间会否再次购买。这三个问题,是用户生命周期价值能够回答的。

如何在自家产品中引入 CLV

应用场景

  • 判断用户所处生命周期阶段
  • 预测用户指定周期内购买概率
  • 预测用户的生命周期价值
  • 通过历史付费数据,预测未来付费

活跃与流失的定义

定义:

用户有交互为活跃

用户一段时间不交互,即为流失

lifetims 工具包引入

安装 python 的工具包:

pip install lifetimes

CLV 数据挖掘

用户生命周期判定,需要三个指标

  1. frequency 用户登录的频率,这里为周期内的天数
  2. recency 用户的最大周期,即第一次活跃到最后一次活跃
  3. T 用户所处阶段,第一次活跃到观察周期结束

对于付费预测,还需要用户的平均付费金额。

数据获取

从数据库获取

    SELECT      customer_id,      COUNT(distinct date(transaction_at)) - 1 as frequency,      datediff('day', MIN(transaction_at), MAX(transaction_at)) as recency,      AVG(total_price) as monetary_value,      datediff('day', CURRENT_DATE, MIN(transaction_at)) as T    FROM orders    GROUP BY customer_id

python 处理

    from lifetimes.datasets import load_transaction_data    from lifetimes.utils import summary_data_from_transaction_data        transaction_data = load_transaction_data()    print(transaction_data.head())    """                      date  id    0  2014-03-08 00:00:00   0    1  2014-05-21 00:00:00   1    2  2014-03-14 00:00:00   2    3  2014-04-09 00:00:00   2    4  2014-05-21 00:00:00   2    """        summary = summary_data_from_transaction_data(transaction_data, 'id', 'date', observation_period_end='2014-12-31')        print(summary.head())    """    frequency  recency      T    id    0         0.0      0.0  298.0    1         0.0      0.0  224.0    2         6.0    142.0  292.0    3         0.0      0.0  147.0    4         2.0      9.0  183.0    """        bgf.fit(summary['frequency'], summary['recency'], summary['T'])    # ​​from lifetimes.datasets import load_cdnow_summarydata = load_cdnow_summary(index_col=[0])​print(data.head())"""     frequency   recency      TID1    2           30.43       38.862    1            1.71       38.863    0            0.00       38.864    0            0.00       38.865    0            0.00       38.86"""

BG/NBD 模型

BG/NBD 是一个经典模型改进型,详细的数学论证参见:A Note on Deriving the Pareto/NBD Model and Related Expressions

该模型有如下假设:

092bcf446d469df28581bf19bd8774d1.png

通过模型拟合,得到4个参数。

from lifetimes import BetaGeoFitter​# similar API to scikit-learn and lifelines.bgf = BetaGeoFitter(penalizer_coef=0.0)bgf.fit(data['frequency'], data['recency'], data['T'])print(bgf)""""""bgf.summary
ced568a0028133ea47f7c32d5eb25132.png

效果可视化

from lifetimes.plotting import plot_probability_alive_matrix​plot_probability_alive_matrix(bgf)
71f3f5e850b333a1903ed4a16c31a49c.png

右下角为最佳客户,交易频率高。交易跨度大;右上的客户短时多次交易,极可能已流失。

预测单个用户的购买行为

t = 10 #predict purchases in 10 periodsindividual = summary.iloc[20]# The below function is an alias to `bfg.conditional_expected_number_of_purchases_up_to_time`bgf.predict(t, individual['frequency'], individual['recency'], individual['T'])# 0.0576511

生命周期价值预测

在预测价值时,需要第四个参数:用户交易的次均金额。

该模型有个重要前提:购买频次和购买金额无相关性。具体可参考 The Gamma-Gamma Model of Monetary Value

from lifetimes.datasets import load_cdnow_summary_data_with_monetary_value​summary_with_money_value = load_cdnow_summary_data_with_monetary_value()summary_with_money_value.head()returning_customers_summary = summary_with_money_value[summary_with_money_value['frequency']>0]​print(returning_customers_summary.head())"""             frequency  recency      T  monetary_valuecustomer_id1                    2    30.43  38.86           22.352                    1     1.71  38.86           11.776                    7    29.43  38.86           73.747                    1     5.00  38.86           11.779                    2    35.71  38.86           25.55"""

相关性检验

returning_customers_summary[['monetary_value', 'frequency']].corr()"""                monetary_value  frequencymonetary_value        1.000000   0.113884frequency             0.113884   1.000000"""
from lifetimes import GammaGammaFitter​ggf = GammaGammaFitter(penalizer_coef = 0)ggf.fit(returning_customers_summary['frequency'],        returning_customers_summary['monetary_value'])print(ggf)""""""

次均估计

print(ggf.conditional_expected_average_profit(        summary_with_money_value['frequency'],        summary_with_money_value['monetary_value']    ).head(3))"""customer_id1     24.6586192     18.9114893     35.170981

总价值估计

最后,使用 DCF 现金流折现,得到用户总体价值的当下估值。

# refit the BG model to the summary_with_money_value datasetbgf.fit(summary_with_money_value['frequency'], summary_with_money_value['recency'], summary_with_money_value['T'])​print(ggf.customer_lifetime_value(    bgf, #the model to use to predict the number of future transactions    summary_with_money_value['frequency'],    summary_with_money_value['recency'],    summary_with_money_value['T'],    summary_with_money_value['monetary_value'],    time=12, # months    discount_rate=0.01 # monthly discount rate ~ 12.7% annually).head(3))"""customer_id1      140.0962112       18.9434673       38.180574Name: clv, dtype: float64"""

总结

用户生命周期价值模型,不同于其它模型。该模型对每个用户单独建模,而不是硬性的按流失天数划分,有极强的灵活性。在得到用户生命周期阶段、以及用户的生命周期价值,下一步就是具体应用了。

落地场景多种多样,但要推动上下游,仍需要足够信服的理由。这里给到的建议是,去模拟历史的数据表现,用数据说明效果。

喜欢本文的朋友,别忘了点赞 、喜欢 ❤ +关注 哦,您的小小举动,是对作者最大的支持~

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值