下表是我的数据帧的一个示例.我正在使用终身套餐.

Organization id Lifetime_orders DOY(most recent date by day) Tenure
54302 22 69 43
32453 4 72 44

这是我用来在LifeTimes包中运行bgModel的代码

from lifetimes.plotting import plot_period_transactions, plot_frequency_recency_matrix, plot_probability_alive_matrix, plot_history_alive

bgModel = BetaGeoFitter()
bgModel.fit(new_df['lifetime_orders'], df['tenure'], df['DOY'])

bgModel.summary

但是当我运行代码时,我得到一个ValueError:新近向量中的一些值大于T向量.

我预计会有一张显示系数和上下限的汇总表.我try 将数据类型更改为FLOAT、OBJECT和INT,但不起作用.我看了一下git https://github.com/CamDavidsonPilon/lifetimes/blob/master/lifetimes/utils.py的包装,但帮助不大.

推荐答案

看看前documentation名中频率、新近和任期(T)的定义--它们可能不是你想的那样:

对于所有型号,使用以下命名法:

  • frequency表示客户重复购买的次数.这意味着它比购买总量少了一次.这实际上是略微错误的.它是客户进行购买的时间段的计数.因此,如果使用天数作为单位,那么它就是客户购买商品的天数.
  • T代表客户的年龄,无论 Select 哪种时间单位.这等于从客户第一次购买到研究期间结束之间的持续时间.
  • recency代表客户最近一次购买的年龄.这等于客户第一次购买和最近一次购买之间的持续时间.(因此,如果他们只进行了一次购买,则新近为0.)
  • monetary_value代表给定客户购买的平均价值.这等于客户所有购买量的总和除以总购买量.请注意,这里的分母与上面描述的频率不同.

你的DOY看起来有点像recency,但请注意,对于这个型号,recency是客户最近一次购买的年龄.T是当今客户的年龄,所以如果您正确地计算了这两个年龄,则recency不可能大于T,这就是ValueError告诉您的.

例如,如果我第一次购物是在10天前,最后一次购物是在3天前,那么我的recency是7,T是10.

另外,判断一下你的论点的顺序--它应该是bgModel.fit(data['frequency'], data['recency'], data['T'])--看起来你的终身教职(T)和recency被调换了.

最后,值得指出的是,lifetimes包现在处于维护模式,请参见readme.PyMC-marketing中有一个后继者,但请注意,这个包还处于开发周期的早期( compose 本文时为0.0.4版).

Python相关问答推荐

LAB中的增强数组

如何使用scipy从频谱图中回归多个高斯峰?

Python会扔掉未使用的表情吗?

DataFrame groupby函数从列返回数组而不是值

Pystata:从Python并行运行stata实例

对整个 pyramid 进行分组与对 pyramid 列子集进行分组

_repr_html_实现自定义__getattr_时未显示

基于字符串匹配条件合并两个帧

多处理队列在与Forking http.server一起使用时随机跳过项目

在Python中使用yaml渲染(多行字符串)

搜索按钮不工作,Python tkinter

基于另一列的GROUP-BY聚合将列添加到Polars LazyFrame

Gunicorn无法启动Flask应用,因为无法将应用解析为属性名或函数调用.'"'' "

Python—为什么我的代码返回一个TypeError

比Pandas 更好的 Select

如何从比较函数生成ngroup?

裁剪数字.nd数组引发-ValueError:无法将空图像写入JPEG

如何使用大量常量优化代码?

为什么按下按钮后屏幕的 colored颜色 保持不变?

高效地计算数字数组中三行上三个点之间的Angular