如何计算 Pandas 中的 "churned" 客户? (定期停止购买的顾客)

How to calculate "churned" customers in Pandas? (Customers who have stopped buying regularly)

我清理并格式化了一些数据。 其中,我有这些列:名称、订购日期和订阅(具有布尔值)。

您如何在 pandas 中实现这一目标?

示例数据帧:

    Date    Name                Subscription
2020/06     Super Mario             False   

2020/06     Princess Peach      False 

2020/06     Bowser              False   

2020/06     Koopa               False   

2020/06     Yoshi               False   

许多这样的客户出现了多个日期。

客户流失是指现有客户不再与您开展业务。根据您的业务性质,这可能意味着不同的事情。示例包括:

取消订阅

  1. 关闭帐户
  2. Non-renewal 合同或服务协议
  3. 消费者决定在另一个 store/use 另一个服务提供商处购物

在确定客户流失率是多少之前,您需要决定如何量化上述行为,并就贵企业客户流失的定义达成一致。 根据您共享的样本数据,最好的办法是计算, 特定时期内流失的客户总数。您需要定义时间范围以将客户视为已流失。对于前。根据您正在查看的业务,过去 30 天、60 天等未购买的客户。

示例数据:

import pandas as pd
import datetime as dt
df = pd.DataFrame({'Date':['2020-06-30','2020-05-05','2020-04-10','2020-02-26'],'Name':['Super Mario','Princess Peach','Bowser','Super Mario'],'Subscription':['False','False','False','False']})
df['Date'] = pd.to_datetime(df['Date'], dayfirst=True)

使用这些数据,我们将获得每个客户的最大交易日期,并确定客户是流失还是存活。

last_trans=df.groupby('Name')['Date'].max().reset_index()

获取计算上次购买持续时间的当前日期。

today=pd.to_datetime(dt.date.today())
last_trans['last_purchase']=today-last_trans['Date']
last_trans['last_purchase']=last_trans['last_purchase'].apply(lambda x: x.days)

我正在考虑 90 天 window 来考虑客户是否流失。 (即,如果客户在过去 90 天内没有购买,我将其视为 Churned else Survived)。

last_trans.loc[last_trans['last_purchase']>90,'Category']='Churned'
last_trans.loc[last_trans['last_purchase']<=90,'Category']='Survived'