我正在使用生命周期库来构建客户生命周期价值模型。该库附带一个名为的方法,该方法conditional_expected_number_of_purchases_up_to_time
允许您预测数据集中每个客户在指定时间段内的购买情况。
这是我正在使用的数据框:
df = pd.DataFrame([[aaa@email.com, 6.0, 112.0, 139.0], [bbb@email.com, 11.0, 130.0, 130.0]], columns=['email', 'frequency', 'recency', 'T'])
数据框中的每一行代表一个单独的客户。为了预测每个客户在接下来的 4 个时期内的预期购买次数,我将执行以下代码:
t = 4
df['est_purchases'] = mbgf.conditional_expected_number_of_purchases_up_to_time(t, df['frequency'], df['recency'], df['T'])
我现在想要做的是,对于数据框中的每一行,在他们的余生中估计剩余购买的总数。我们将此数量称为剩余客户购买量 (RCP)。
为此,我定义了两个函数:第一个函数计算两个时间段之间的 RCP 增量,第二个函数通过递增来近似总 RCP,t
直到增量 RCP 低于特定容差水平:
## Function to calculate incremental RCP
def RCP(row):
dif = (mbgf.conditional_expected_number_of_purchases_up_to_time(t,
row['frequency'], row['recency'], row['T'])
- mbgf.conditional_expected_number_of_purchases_up_to_time((t-1),
row['frequency'], row['recency'], row['T']))
return dif
## Create column for incremental RCP
df['m_RCP'] = df.apply(RCP, axis = 1)
## Function to approximate total RCP
def approximate(fn, model, rfm, t=1, eps_tol=1e-6, eps=0, **kwargs):
eps = 0
cf = 0
while True:
cf += df.apply(fn, axis = 1)
if(cf - eps < eps_tol):
break
eps = cf; t+=1
return cf
## Create column for total RCP
df['t_RCP'] = df.apply(approximate(RCP, model = mbgf, rfm = df), axis = 1)
第一个功能按预期工作。但是当我尝试执行第二个函数(approximate
)时,我收到了这个错误:
ValueError:Series 的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。
我希望近似函数迭代单行的 RCP 函数,直到 RCP 值不再增加,并对数据帧中的每一行逐一执行此操作。
我做错了什么,我应该怎么做?