python - 如何计算 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
其中许多客户出现多个日期。
解决方案
客户流失是指现有客户停止与您开展业务。这可能意味着不同的事情,具体取决于您的业务性质。示例包括:
取消订阅
- 关闭账户
- 不续签合同或服务协议
- 消费者决定在另一家商店购物/使用另一家服务提供商
在弄清楚您的流失率是多少之前,您需要决定如何量化上述行为,并就您的业务定义客户流失的因素达成一致。根据您共享的样本数据,最好的办法是计算 特定时期内流失的客户总数。您需要定义将客户视为流失的时间范围。例如。根据您正在查看的业务,在过去 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)
I am considering 90 day window to consider if a customer has churned. (i.e. If customer has not purchased within last 90 days I am considering it as Churned else Survived).
last_trans.loc[last_trans['last_purchase']>90,'Category']='Churned'
last_trans.loc[last_trans['last_purchase']<=90,'Category']='Survived'
推荐阅读
- scala - Spark 和 AWS Kinesis
- maximo-anywhere - 无法在 maximo Anywhere 屏幕中找到条目
- maven - 从 Jenkins 向 Nexus 发布 Maven 多模块工件
- reactjs - 反应本机日历
- python - 合并 2 个文件以创建 1 个文件作为输出
- css - ReactJS无法识别小屏幕上的触摸/点击
- python - 如何使用 SciKit Learn 转换一次编码多个特征
- azure - 将 Azure VM 快照转移到不同的帐户
- kubernetes - x509:flannel 和 coredns pod 上的证书问题
- php - PHP/IMAP : 内容邮件 MIME 转换