我正在尝试使用 CLVTools 包在 R 中进行 CLV 分析。根据作者的说法,这个包是 BTYD 包的改进版本。\n我没有使用这个包的经验,所以我确信这个问题可以很容易地解决。
\n我的数据由 client_id、transaction_date 和total_revenue 组成,其中每个观察代表一次客户购买。这是在我的环境中进行 CLV 分析所需的所有数据。
\n当我尝试使用该函数创建 CLV 数据对象时,出现问题clvdata()。\n我收到错误消息:
Error: Parameter estimation.split needs to indicate a point at least 2 periods before the last transaction!\nRun Code Online (Sandbox Code Playgroud)\n我无法找到任何解释为什么会发生这种情况,我的数据看起来与他们用于示例的数据相同。
\n这是clvdata()包含参数的函数:
clv.apparel <- clvdata(Data_for_CLV, \n date.format="ymd", \n time.unit = "week",\n estimation.split = 40,\n name.id = "Client_ID",\n name.date = "Transaction_Date",\n name.price = "Total_Revenue")\nRun Code Online (Sandbox Code Playgroud)\n- - - - 编辑 - - - -
\n删除后,estimate.split我能够在整个数据集上训练 pareto/nbd 模型,并得到下面的结果。不过,我也想用模型进行预测,这需要一个坚持期。如果我理解正确的话,SmokeyShakers,我现在应该能够将 设定estimation.split为有效的值,这到底是什么?
> summary(est.pnbd)\nPareto NBD Standard Model \n\nCall:\npnbd(clv.data = clv.apparel)\n\nFitting period: \nEstimation start 2019-12-21 \nEstimation end 2020-08-21 \nEstimation length 34.8571 Weeks\n\nCoefficients:\n Estimate Std. Error z-val Pr(>|z|) \nr 0.29540 0.02195 13.459 < 2e-16 ***\nalpha 21.59114 1.18486 18.223 < 2e-16 ***\ns 0.76215 0.04841 15.745 < 2e-16 ***\nbeta 1.45651 0.27221 5.351 8.76e-08 ***\n---\nSignif. codes: 0 \xe2\x80\x98***\xe2\x80\x99 0.001 \xe2\x80\x98**\xe2\x80\x99 0.01 \xe2\x80\x98*\xe2\x80\x99 0.05 \xe2\x80\x98.\xe2\x80\x99 0.1 \xe2\x80\x98 \xe2\x80\x99 1\n\nOptimization info: \nLL -26233.7198\nAIC 52475.4396 \nBIC 52512.0753 \nKKT 1 TRUE \nKKT 2 TRUE \nfevals 26.0000 \nMethod L-BFGS-B \n\nUsed Options: \nCorrelation FALSE```\nRun Code Online (Sandbox Code Playgroud)\n
小智 6
免责声明:我是该包的共同创建者
这些潜在消耗的概率模型通常应用于客户群体,因为假设群体彼此之间存在很大差异。因此,您可以为每个队列拟合一个单独的模型。最常见的是,群组的定义是指加入日期(=第一笔交易),但任何其他(进一步)定义都是可能的,例如按渠道或按业务部门。另请参阅 Fader 和 Hardie (2010),了解为什么按队列应用很重要: http://www.brucehardie.com/papers/022/fader_hardie_mksc_10.pdf
但无论您的确切群组定义如何,所有客户都必须在估计期内完成第一笔交易:该模型适合估计期内出现的交易数据。对于在估计期内进行过交易的所有客户,将在您指定的预测范围内预测未来的交易数量,就像您处于估计期结束时一样。因此,所有客户都需要在估计期内进行第一笔交易,以便模型“知道”他们的存在。该模型根本无法对不知道其存在的客户进行预测(=在估计期内未进行交易)。
该软件包可以简单地删除在估计期内未进行首次交易的客户,并仅对进行了首次交易的客户进行预测。然而,我们认为用户应该知道发生了什么,因此有意识地自己准备数据。
我现在应该能够将estimation.split 设置为有效的值,这正是
您必须指定数据中所有客户已完成第一笔交易的估计结束日期。如果您的数据不是这种情况,您应该将数据拆分为由第一个事务定义的群组。
假设您在 2015 年 1 月 1 日至 2020 年 1 月 1 日期间有客户交易,并希望在 2017 年 1 月 1 日拆分。然后,您可以将第一组定义为在 2015-01-01 至 2015-12-31 之间进行第一笔交易(=加入)的所有客户,将第二组定义为从 2016-01-01 至 2016-12-31 之间。您将为每个队列创建 2 个单独的 clvdata 对象,然后还拟合 2 个单独的模型。请注意,您无法创建从 2017-01-01 到 2018-01-01 的第三个群组,并在 2017-01-01 进行估计分割,而对于这个第三个群组,您必须定义稍后的分割日期,例如 2019-01 -01。
其他分组窗口(例如 1 个月、3 个月、6 个月等)也是惯例,但取决于您的数据。确保选择足够长的估计期,以便模型能够实际看到每个客户的重复购买模式(检查平均间隔购买时间summary(clvdata))。因此,估计周期通常比群组窗口长,即群组的估计结束在 max(customer_join_date) 之后。您可能还对我关于数据准备和群组分析的更深入的回答感兴趣:
https://github.com/bachmannpatrick/CLVTools/issues/101
https://github.com/bachmannpatrick/CLVTools/issues/146
不过,我也想用模型进行预测,这需要一个坚持期
成功拟合模型后,您始终可以进行预测,也无需等待期。但是,您必须指定prediction.end参数来告诉您要预测多远(周期数或确切日期)。您不必指定prediction.end数据是否具有保留期,因为它会默认为保留期。这同样适用prediction.end于plot(). 为了做出最终的 CLV 预测,实际上通常会根据队列中的所有数据拟合模型(即没有保留期)