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 + 平台贡献度 | 联合会员计划 |
参考链接: