如何为 CLVTools::clvdata() 准备数据

Sou*_*und 1 r data-mining

我正在尝试使用 CLVTools 包在 R 中进行 CLV 分析。根据作者的说法,这个包是 BTYD 包的改进版本。\n我没有使用这个包的经验,所以我确信这个问题可以很容易地解决。

\n

我的数据由 client_id、transaction_date 和total_revenue 组成,其中每个观察代表一次客户购买。这是在我的环境中进行 CLV 分析所需的所有数据。

\n

当我尝试使用该函数创建 CLV 数据对象时,出现问题clvdata()。\n我收到错误消息:

\n
Error: Parameter estimation.split needs to indicate a point at least 2 periods before the last transaction!\n
Run Code Online (Sandbox Code Playgroud)\n

我无法找到任何解释为什么会发生这种情况,我的数据看起来与他们用于示例的数据相同。

\n

这是clvdata()包含参数的函数:

\n
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")\n
Run Code Online (Sandbox Code Playgroud)\n

- - - - 编辑 - - - -

\n

删除后,estimate.split我能够在整个数据集上训练 pareto/nbd 模型,并得到下面的结果。不过,我也想用模型进行预测,这需要一个坚持期。如果我理解正确的话,SmokeyShakers,我现在应该能够将 设定estimation.split为有效的值,这到底是什么?

\n
> 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```\n
Run 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.endplot(). 为了做出最终的 CLV 预测,实际上通常会根据队列中的所有数据拟合模型(即没有保留期)