首页 > 解决方案 > 如何计算 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   

其中许多客户出现多个日期。

标签: pythonpandasdataframedata-analysis

解决方案


客户流失是指现有客户停止与您开展业务。这可能意味着不同的事情,具体取决于您的业务性质。示例包括:

取消订阅

  1. 关闭账户
  2. 不续签合同或服务协议
  3. 消费者决定在另一家商店购物/使用另一家服务提供商

在弄清楚您的流失率是多少之前,您需要决定如何量化上述行为,并就您的业务定义客户流失的因素达成一致。根据您共享的样本数据,最好的办法是计算 特定时期内流失的客户总数。您需要定义将客户视为流失的时间范围。例如。根据您正在查看的业务,在过去 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'

推荐阅读