0

Lifetimes用来计算我的一些客户的 CLV。我有交易数据,并且通过summary_data_from_transaction_data(可以在此处找到实现)我想计算每个客户的新近度频率和时间间隔T。不幸的是,该方法似乎无法正确计算频率
这是测试我的数据集的代码:

df_test = pd.read_csv('test_clv.csv', sep=',')
RFT_from_libray = summary_data_from_transaction_data(df_test, 
                                                     'Customer', 
                                                     'Transaction date',
                                                      observation_period_end='2020-02-12',
                                                      freq='D')

根据代码,结果是:

          frequency  recency      T
Customer
1158624        18.0    389.0  401.0
1171970        67.0    396.0  406.0
1188564        12.0    105.0  401.0

问题是客户1188564和客户1171970分别进行了 69 次和 14 次交易,因此频率应该是 68 次和 13 次。打印每个客户的大小确认:

print(df_test.groupby('Customer').size())

Customer
1158624    19
1171970    69
1188564    14

我确实尝试过summary_data_from_transaction_data像这样在本地使用底层代码:

RFT_native = df_test.groupby('Customer', sort=False)['Transaction date'].agg(["min", "max", "count"])
observation_period_end = (
            pd.to_datetime('2020-02-12', format=None).to_period('D').to_timestamp()
        )
# subtract 1 from count, as we ignore their first order.
RFT_native ["frequency"] = RFT_native ["count"] - 1
RFT_native ["T"] = (observation_period_end - RFT_native ["min"]) / np.timedelta64(1, 'D') / 1
RFT_native ["recency"] = (RFT_native ["max"] - RFT_native ["min"]) / np.timedelta64(1, 'D') / 1

如您所见,结果确实是正确的。

                         min                 max  count  frequency           T     recency
Customer
1171970  2019-01-02 15:45:39 2020-02-02 13:40:18     69         68  405.343299  395.912951
1188564  2019-01-07 18:10:55 2019-04-22 14:27:08     14         13  400.242419  104.844595
1158624  2019-01-07 10:52:33 2020-01-31 13:50:36     19         18  400.546840  389.123646

当然,我的数据集要大得多,而且我的频率和/或新近度的微小差异会极大地改变 BGF 模型的计算。

我错过了什么?使用该方法时有什么需要考虑的吗?

4

1 回答 1

2

回答你的问题我可能有点晚了,但是就这样吧。

Lifestyles 包的文档将频率定义为:

频率代表客户重复购买的次数。这意味着它比购买总数少一。这实际上有点错误。这是客户进行购买的时间段的计数。因此,如果使用天数作为单位,那么它就是客户进行购买的天数。

因此,它基本上是客户重复购买的时间段数,而不是个人重复购买的次数。快速扫描您的样本数据集确认 1188564 和 1171970 确实在一天内进行了 2 次购买,分别是 2019 年 1 月 13 日和 2019 年 6 月 15 日。因此,在计算频率时,这 2 个事务将被视为 1,这将导致 summary_data_from_transaction_data 函数计算的频率比您的手动计数少 2。

于 2020-05-26T11:27:50.910 回答