微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

我正在尝试使用 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 后,我能够在整个数据集上训练帕累托/nbd 模型,并得到下面的结果。但是,我也想使用该模型进行预测,这需要一个坚持期。如果我理解正确的话,SmokeyShakers,我现在应该可以将 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

但无论您的同类群组定义如何,所有客户都必须在估算期间完成第一笔交易: 该模型适用于估计期间存在的交易数据。对于在估计期内进行交易的所有客户,在您指定的预测范围内预测未来的交易数量,就像您处于估计期末一样。因此,所有客户都需要在估计期内进行第一笔交易,以便模型“知道”它们的存在。该模型无法对其不知道存在的客户(=未在估计期内进行交易)进行预测。

该软件包可以简单地删除在估计期内未进行首次交易的客户,并仅对进行了首次交易的客户进行预测。但是,我们认为用户应该知道会发生什么,因此有意识地自己准备数据。

我现在应该可以将估计值设置为有效的值, 究竟是什么

您必须将估计结束时间指定为数据中的所有客户已经完成第一笔交易的日期。如果您的数据不是这种情况,您应该将您的数据拆分为由第一笔交易定义的群组。

假设您在 2015 年 1 月 1 日至 2020 年 1 月 1 日之间有客户交易,并希望在 2017 年 1 月 1 日拆分。然后,您可以将第一组定义为在 2015 年 1 月 1 日至 2015 年 12 月 31 日之间进行第一次交易(=加入)的所有客户,以及在 2016 年 1 月 1 日至 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 预测,实际上习惯于在队列中的所有数据上拟合模型(即没有保持期)

,

我目前正在使用相同的软件包并且遇到了类似的问题。问题是一些客户在保留期间进行了第一笔交易(而在校准期间没有交易)。其他包(例如 BTYD 和 BTYDplus)似乎会自动过滤这些情况,但 CLVTools 不会。

因此,您必须手动过滤这些案例(即第一次交易发生在坚持期间的客户)。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。