我正试图使用CLVTools包在R中进行CLV分析。根据作者的说法,这个软件包是BTYD软件包的改进版本。我没有这个软件包的经验,所以我相信这个问题可以很容易地解决。
我的数据由client_id、transaction_date和total_revenue组成,其中每个观测代表一个客户购买。这是在我的背景下进行CLV分析所需的所有数据。
当我尝试使用clvdata()
函数创建CLV数据对象时,就会出现问题。我收到错误消息:
Error: Parameter estimation.split needs to indicate a point at least 2 periods before the last transaction!
我找不到任何解释为什么会发生这种情况,我的数据看起来和他们在示例中使用的数据相同。
以下是包含参数的clvdata()
函数:
clv.apparel <- clvdata(Data_for_CLV,
date.format="ymd",
time.unit = "week",
estimation.split = 40,
name.id = "Client_ID",
name.date = "Transaction_Date",
name.price = "Total_Revenue")
--------编辑--------
在去除estimate.split
之后,我能够在整个数据集上训练pareto/nbd模型,并得到下面的结果。然而,我也希望使用该模型进行预测,这需要一个保持期。如果我理解正确的话,SmokeShakers,我现在应该能够将estimation.split
设置为有效的值,这到底是什么?
> summary(est.pnbd)
Pareto NBD Standard Model
Call:
pnbd(clv.data = clv.apparel)
Fitting period:
Estimation start 2019-12-21
Estimation end 2020-08-21
Estimation length 34.8571 Weeks
Coefficients:
Estimate Std. Error z-val Pr(>|z|)
r 0.29540 0.02195 13.459 < 2e-16 ***
alpha 21.59114 1.18486 18.223 < 2e-16 ***
s 0.76215 0.04841 15.745 < 2e-16 ***
beta 1.45651 0.27221 5.351 8.76e-08 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Optimization info:
LL -26233.7198
AIC 52475.4396
BIC 52512.0753
KKT 1 TRUE
KKT 2 TRUE
fevals 26.0000
Method L-BFGS-B
Used Options:
Correlation FALSE```
免责声明:我是包的联合创建者
这些潜在流失的概率模型通常应用于客户队列,因为假设队列之间存在显著差异。因此,您可以在每个队列中拟合一个单独的模型。最常见的队列定义是指加入日期(=第一笔交易),但任何其他(进一步)定义都是可能的,例如按渠道或业务部门。另见Fader和Hardie(2010)关于为什么队列应用很重要:http://www.brucehardie.com/papers/022/fader_hardie_mksc_10.pdf
但无论您的确切队列定义如何,所有客户都必须在估计期内完成第一笔交易:该模型适用于估计期内存在的交易数据。对于在估计期内进行交易的所有客户,将在您指定的预测范围内预测未来的交易数量,就好像您站在估计期结束时一样。因此,所有客户都需要在估计期内完成他们的第一笔交易;知道";他们的存在。该模型不能简单地为不知道其存在的客户做出预测(=在估计期内没有进行交易)。
该软件包可以简单地删除在估计期内没有进行第一笔交易的客户,只对进行交易的客户进行预测。然而,我们认为用户应该意识到会发生什么,因此有意识地为自己准备数据。
我现在应该能够将estimation.split设置为有效的值,到底是什么
您必须指定数据中的所有客户已经进行第一笔交易的日期的估计结束时间。如果您的数据不是这样,您应该将数据划分为第一个事务定义的队列。
假设您在2015-01-01至2020-01-01期间有客户交易,并希望在2017-01-01进行拆分。然后,您可以将第一个队列定义为2015-01-01至2015-12-31期间进行第一笔交易(=加入)的所有客户,以及2016-01-01至2016-12-31期间的第二个队列。您将为每个队列创建2个独立的clvdata对象,然后还可以适应2个独立模型。请注意,您不能在2017-01-01创建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
,因为它会默认为保留期。这同样适用于plot()
中的prediction.end
。为了做出最终的CLV预测,实际上习惯于将模型拟合在队列中的所有数据上(即没有延迟期)
我目前使用的是同一个包,遇到了类似的问题。问题是一些客户在拒绝期内进行了第一笔交易(在校准期内没有交易)。其他包(如BTYD和BTYDplus)似乎可以自动过滤这些情况,但CLVTools没有。
因此,您必须手动筛选这些案例(即第一笔交易发生在拒绝期内的客户)。