数据, 术→技巧

Python CLV分析工具:Lifetimes

钱魏Way · · 138 次浏览
!文章内容如有错误或排版问题,请提交反馈,非常感谢!

Lifetimes简介

Python的lifetimes包是一个专注于客户生命周期分析(Customer Lifetime Value, CLV)和重复购买行为建模的工具库。它基于概率模型(如Beta-Geometric和Gamma-Gamma模型),帮助预测客户的未来交易频率、留存率以及生命周期价值。

核心功能

  • 预测客户未来交易次数:使用BG/NBD模型(Beta-Geometric Negative Binomial Distribution)预测客户在一定时间内的交易次数。
  • 估计客户生命周期价值(CLV):使用Gamma-Gamma模型,结合交易频率和交易金额,预测客户的长期价值。
  • RFM分析工具:提供基于Recency(最近一次购买)、Frequency(购买频率)、Monetary(购买金额)的客户分群工具。
  • 可视化与诊断:支持绘制客户留存曲线、频率分布图等,辅助模型诊断。

适用场景

  • 电商、零售、订阅服务等需要预测客户重复购买行为的场景。
  • 识别高价值客户、流失风险客户,优化营销策略。
  • 计算客户生命周期价值,指导预算分配。

与其他模型的对比

模型 适用场景 优势 劣势
BG/NBD + Gamma-Gamma 重复购买场景(电商、订阅) 无需实时数据,长期预测 假设严格,需历史数据
深度学习模型 高维复杂行为数据 捕捉非线性关系 需要大量数据,计算成本高
马尔可夫链模型 状态转移明确的场景(如用户旅程) 动态建模客户状态变化 状态定义依赖业务知识

实际应用中的注意事项

  • 数据要求
    • 需要足够的交易历史(通常至少1年)。
    • 客户需有重复购买行为(Gamma-Gamma模型需至少2次交易)。
  • 模型假设验证
    • 检查交易金额与频率是否独立(可通过相关性分析)。
    • 验证交易次数是否符合泊松分布的假设。
  • 局限性
    • 对低频或高波动性交易(如奢侈品)预测效果较差。
    • 假设客户一旦流失则永不返回,不适用于可召回客户的场景。

备注:此项目已停止更新,建议使用PyMC-Marketing这个项目。

Lifetimes核心原理

Python的lifetimes包基于概率统计学中的经典模型,主要用于预测客户的未来交易行为和生命周期价值(CLV)。其核心原理围绕两个模型:BG/NBD模型(Beta-Geometric Negative Binomial Distribution)和Gamma-Gamma模型

BG/NBD模型:预测客户交易频率与流失概率

模型目标

预测客户在未来的交易次数,并估计其是否已流失(停止购买)。

基本假设

活跃客户的交易行为

客户在活跃状态下,交易次数服从泊松过程(Poisson Process),即单位时间内的交易次数服从泊松分布:

$$P(X=k)=\frac{(\lambda t)^k e^{-\lambda t}}{k!}$$

  • $\lambda$:交易速率(单位时间的平均交易次数)。
  • $t$:观察时间窗口。

客户的流失行为

每个客户在每次交易后,以概率p永久流失(不再购买)。流失概率p服从Beta分布:

$$p\sim\text{Beta}(a,b)$$

  • $a,b$:Beta分布的参数,控制流失概率的分布形态。

交易与流失的联合过程

客户的交易次数和流失时间通过几何分布建模,因此模型称为Beta-Geometric/NBD。

参数估计与预测

参数学习

通过历史数据(每个客户的frequency, recency, T)最大化似然函数,估计以下参数:

  • $r,\alpha$:控制交易速率$\lambda$的Gamma分布参数($\lambda\sim\text{Gamma}(r,\alpha)$)。
  • $a,b$:Beta分布的参数,描述流失概率$p$。

预测未来交易次数

对于客户$i$,已知其历史交易次数$x_i$、最近一次交易时间$t_i$和观察期长度$T_i$,预测其在未来时间$t$内的交易次数:

$$E[X(t)|x_i,t_i,T_i]=\frac{1}{1+\frac{a}{b+x_i}\left(\frac{\alpha+T_i}{\alpha+T_i+t}\right)^{r+x_i}}$$

Gamma-Gamma模型:估计客户交易金额

模型目标

在已知交易频率的基础上,预测客户的平均交易金额,从而计算生命周期价值(CLV)。

基本假设

交易金额的分布

客户的平均交易金额m服从Gamma分布

$$m\sim\text{Gamma}(p,q,\nu)$$

  • $p,q$:形状参数和尺度参数。
  • $\nu$:频率对金额的影响参数(通过模型消除频率与金额的相关性)。

独立性假设交易金额与交易频率无关(需通过数据验证)。若存在相关性,Gamma-Gamma 模型会通过参数调整消除。

参数估计与 CLV 计算

参数学习

使用历史数据中的 frequency 和 monetary_value,最大化似然函数估计参数 $p,q,\nu$。

计算期望交易金额

对于客户 $i$,其期望交易金额为:

$$E[m_i|x_i,m_{x_i}]=\frac{p\cdot\nu+x_i\cdot m_{x_i}}{q+x_i}$$

  • $x_i$:交易次数。
  • $m_{x_i}$:历史平均交易金额。

生命周期价值(CLV)

结合 BG/NBD 模型的未来交易次数预测和 Gamma-Gamma 模型的交易金额预测:

$$\text{CLV}=E[X(t)]\times E[m_i]$$

模型联合应用流程

  • 数据预处理
    • 从交易数据中提取每个客户的 frequency(交易次数)、recency(最近一次交易时间)、T(观察期长度)、monetary_value(平均交易金额)。
    • 过滤掉仅有一次购买的客户(Gamma-Gamma 模型需要重复交易数据)。
  • 训练 BG/NBD 模型
    • 输入 frequency, recency, T,估计参数 $r,\alpha,a,b$。
    • 预测客户未来交易次数 $E[X(t)]$。
  • 训练 Gamma-Gamma 模型
    • 输入 frequency 和 monetary_value,估计参数 $p,q,\nu$。
    • 计算客户期望交易金额 $E[m_i]$。
  • 计算 CLV
    • 将交易次数和交易金额相乘,得到客户生命周期价值。

Lifetimes 使用案例

Python 的 lifetimes 包在客户行为分析和价值预测中有广泛的实际应用。以下是6 个典型使用案例,涵盖电商、订阅服务、零售等行业,帮助您理解其实际价值。

案例 1:电商客户价值分层与精准营销

问题:某电商平台希望识别高价值客户,针对性地推送优惠券,但传统 RFM 方法无法预测未来行为。

解决方案:

  • 使用 BG/NBD 模型预测客户未来 90 天的购买次数。
  • 用 Gamma-Gamma 模型计算客户生命周期价值(CLV)。
  • 将客户分为四类:
    • 高价值活跃客户(高 CLV+近期购买)→推送新品和会员权益。
    • 高价值流失风险客户(高 CLV+长期未购买)→发送召回优惠。
    • 低价值活跃客户→推荐低价商品提升频率。
    • 低价值流失客户→减少营销投入。

代码片段:

# 计算 CLV 并分群
clv = ggf.customer_lifetime_value(...)
rfm_data["segment"] = "低价值流失客户"
rfm_data.loc[(clv > clv.quantile(0.8)) & (rfm_data["recency"] < 30), "segment"] = "高价值活跃客户"

结果:营销成本降低 25%,高价值客户留存率提升 18%。

案例 2:订阅服务的流失预警与干预

问题:某流媒体平台需提前识别可能取消订阅的用户,进行挽留。

解决方案:

  • 用 BG/NBD 模型计算每个客户的存活概率(未流失的概率)。
  • 筛选存活概率低于 30% 的客户。
  • 结合 recency(最近一次订阅时间)触发干预:
    • 若 recency < 7 天→发送专属内容推荐。
    • 若 recency > 30 天→提供 1 个月免费试用。

代码片段:

# 计算存活概率
alive_prob = bgf.conditional_probability_alive(rfm_data["frequency"], rfm_data["recency"], rfm_data["T"])
rfm_data["churn_risk"] = 1 - alive_prob

结果:流失率减少 12%,召回成本降低 40%。

案例 3:零售行业促销效果评估

问题:某连锁超市希望评估促销活动是否提升了客户的长期价值。

解决方案

  • 将客户分为参与促销组和未参与组。
  • 分别用 BG/NBD 模型预测两组客户的未来购买频率。
  • 比较两组 CLV 的差异,判断促销是否带来长期价值提升。

代码片段

# 分组预测
group1_clv = ggf.customer_lifetime_value(bgf, group1_freq, group1_recency, group1_T, ...)
group2_clv = ggf.customer_lifetime_value(bgf, group2_freq, group2_recency, group2_T, ...)
print(f"促销组 CLV 提升比例: {group1_clv.mean()/group2_clv.mean()-1:.2%}")

结果:发现促销仅短期提升销量,但未显著提高 CLV,优化策略转向忠诚度计划。

案例 4:低频高客单价行业(如奢侈品)的客户管理

问题:某奢侈品品牌客户购买间隔长,传统模型预测不准。

调整方案

  • 放宽数据过滤条件(允许单次购买客户进入模型)。
  • 使用 BG/NBD 模型时,重点关注存活概率而非短期购买次数。
  • 结合线下行为数据(如门店访问频率)增强模型。

代码片段:

# 放宽数据过滤
rfm_data = summary_data_from_transaction_data(..., include_first_purchase=True)

结果:高净值客户识别准确率提升 30%,定制化服务增加复购。

案例 5:内容付费产品的用户生命周期分析

问题:某知识付费平台需预测用户的续费周期,优化订阅套餐。

解决方案:

  • 用 BG/NBD 模型预测用户未来 6 个月的活跃概率。
  • 将用户分为:
    • 短期活跃型(前 3 个月活跃,后快速流失)→推荐月度套餐。
    • 长期留存型→推荐年度套餐并附加奖励。

代码片段:

# 预测未来 180 天的活跃概率
active_prob_6m = bgf.conditional_probability_alive(..., time=180)

结果:年度套餐购买率提升 22%,用户 LTV 提高 15%。

案例 6:跨平台客户价值迁移分析

问题:某集团拥有多个子品牌,需分析客户在不同平台间的价值分布。

解决方案:

  • 为每个平台单独训练 BG/NBD 和 Gamma-Gamma 模型。
  • 计算客户在每个平台的 CLV。
  • 识别跨平台高价值客户,设计联合会员计划。
# 合并多平台 CLV
clv_platform1 = gg_platform1.customer_lifetime_value(...)
clv_platform2 = gg_platform2.customer_lifetime_value(...)
total_clv = clv_platform1 + clv_platform2

结果:发现15%的客户贡献了跨平台60%的收入,推出联合会员后复购率提升30%。

总结:适用场景与最佳实践

场景 核心模型 关键指标 业务动作
精准营销 BG/NBD + GammaGamma CLV, 存活概率 分群推送优惠
流失预警 BG/NBD 流失概率, recency 召回活动、个性化触达
促销效果评估 BG/NBD 未来交易次数差异 优化促销策略
低频高客单价客户管理 BG/NBD(调整参数) 存活概率 + 线下行为数据 定制化服务
订阅套餐优化 BG/NBD 长期活跃概率 推荐差异化套餐
跨平台价值分析 多模型联合 总CLV + 平台贡献度 联合会员计划

参考链接:

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注