1

python 包生命周期使用与 R 包 BTYD 相同的 BG/NBD 方法。

在 R 论文中,我们可以估计给定时间范围内任何新获得的客户的客户生命周期 (CLV) 包。但是,我无法在 python 中找到等效的函数。

似乎我能找到的所有信息都是以过去的频率和新近度作为条件概率来估计 CLV。有没有人有这方面的经验?

4

1 回答 1

1

是的。来自使用 Gamma-Gamma 模型估计客户生命周期价值的文档

第 1 步:拟合 BG 模型

确保您有frequency, monetary_value格式的数据,例如:

from lifetimes.datasets import load_cdnow_summary_data_with_monetary_value

data = load_cdnow_summary_data_with_monetary_value()
data.head()
             frequency  recency      T  monetary_value
customer_id
1                    2    30.43  38.86           22.35
2                    1     1.71  38.86           11.77
6                    7    29.43  38.86           73.74
7                    1     5.00  38.86           11.77
9                    2    35.71  38.86           25.55

然后拟合一个 BG 模型:

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'])

第 2 步:拟合 Gamma-gamma 模型

# Filter out customers who did not return 
returning_customers_summary = data[data['frequency']>0]

from lifetimes import GammaGammaFitter

ggf = GammaGammaFitter(penalizer_coef = 0)
ggf.fit(returning_customers_summary['frequency'],
        returning_customers_summary['monetary_value'])

第 3 步:估计生命周期价值

在这里,您使用先前拟合的 BetaGeoFilter 和一组客户数据调用拟合的 gamma-gamma 函数,其中包含 {频率、新近度、T 及其支出/事件 ( monetary_value)}(以天为单位)以及以为单位的时间线和每月折扣率。

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(10))
"""
customer_id
1      140.096211
2       18.943467
3       38.180574
4       38.180574
5       38.180574
6     1003.868107
7       28.109683
8       38.180574
9      167.418216
10      38.180574
Name: clv, dtype: float64
"""
于 2018-12-27T01:04:15.103 回答