簡體   English   中英

生命周期 package 給出不一致的結果

[英]Lifetimes package gives inconsistent results

我正在使用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 model 的計算。

我錯過了什么? 使用該方法時有什么我應該考慮的嗎?

我回答你的問題可能有點晚了,但就這樣吧。

Lifestyles 包的文檔將頻率定義為:

頻率表示客戶重復購買的次數。 這意味着它比購買總數少一。 這其實有點不對。 這是客戶進行購買的時間段的計數。因此,如果使用天數為單位,則它是客戶進行購買的天數。

因此,它基本上是客戶重復購買的時間段數,而不是個人重復購買的次數。 對您的示例數據集進行快速掃描,確認 1188564 和 1171970 確實分別在 2019 年 1 月 13 日和 2019 年 6 月 15 日的一天內進行了 2 次購買。 因此,在計算頻率時,這 2 個事務將被視為 1,這將導致 summary_data_from_transaction_data 函數計算的頻率比您的手動計數少 2。

根據文檔,您需要設置:

include_first_transaction = True

include_first_transaction (bool, optional) – 默認值:False 默認情況下,在計算頻率和 m.netary_value 時不包括第一筆交易。 可以設置為 True 以包含它。 如果您要在生命周期內將此數據用於任何裝配工,則應為 False package

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM