详解如何利用Python进行客户分群分析

作者:Python数据挖掘 时间:2023-04-25 16:47:09 

每个电子商务数据分析师必须掌握的一项数据聚类技能

如果你是一名在电子商务公司工作的数据分析师,从客户数据中挖掘潜在价值,来提高客户留存率很可能就是你的工作任务之一。

然而,客户数据是巨大的,每个客户的行为都不一样。2020年3月收购的客户A与2020年5月收购的客户B表现出不同的行为。因此,有必要将客户分为不同的群组,然后调查每个群组在一段时间内的行为。这就是所谓的同期群分析。

同期群分析是了解一个特殊客户群体在一段时间内的行为的数据分析技术。

在这篇文章中,不会详细介绍同期群分析的理论。这篇文章更多的是告诉你如何将客户分成不同的群组,并在一段时间内观察每个群组的留存率。

导入数据和python库

import pandas as pd  
import matplotlib.pyplot as plt  
import seaborn as sns  
df = pd.read_csv('sales_2018-01-01_2019-12-31.csv')  
df  

详解如何利用Python进行客户分群分析

分离新老客户

first_time = df.loc[df['customer_type'] == 'First-time',]  
final = df.loc[df['customer_id'].isin(first_time['customer_id'].values)]  

在这里,不能简单地选择df.loc[df['customer_type']],因为在这个数据中,在customer_type列下,First_time指的是新客户,而Returning指的是老客户。因此,如果我在2019年12月31日第一次购买,数据会显示我在2019年12月31日是新客户,但在我第二次、第三次…时是返回客户。同期群分析着眼于新客户和他们的后续购买行为。因此,如果我们简单地使用df.loc[df['customer_type']=='First-time',],我们就会忽略新客户的后续购买,这不是分析同期群行为的正确方法。

因此,这里所需要做的是,首先创建一个所有第一次的客户列表,并将其存储为first_time。然后从原始客户数据框df中只选择那些ID在first_time客户组内的客户。通过这样做,我们可以确保我们获得的数据只有第一次的客户和他们后来的购买行为。

现在,我们删除customer_type列,因为它已经没有必要了。同时,将日期列转换成正确的日期时间格式

final = final.drop(columns = ['customer_type'])  
final['day']= pd.to_datetime(final['day'], dayfirst=True)  

按客户ID排序,然后是日期

final = final.drop(columns = ['customer_type'])  
final['day']= pd.to_datetime(final['day'], dayfirst=True)  

详解如何利用Python进行客户分群分析

定义一些函数

def purchase_rate(customer_id):  
   purchase_rate = [1]  
   counter = 1  
   for i in range(1,len(customer_id)):  
         if customer_id[i] != customer_id[i-1]:  
                purchase_rate.append(1)  
                counter = 1  
         else:  
                counter += 1  
                purchase_rate.append(counter)  
   return purchase_rate  
def join_date(date, purchase_rate):  
   join_date = list(range(len(date)))  
   for i in range(len(purchase_rate)):  
         if purchase_rate[i] == 1:  
                join_date[i] = date[i]  
         else:  
                join_date[i] = join_date[i-1]  
   return join_date  
def age_by_month(purchase_rate, month, year, join_month, join_year):  
   age_by_month = list(range(len(year)))  
   for i in range(len(purchase_rate)):  
         if purchase_rate[i] == 1:  
             age_by_month[i] = 0  
         else:  
             if year[i] == join_year[i]:  
                age_by_month[i] = month[i] - join_month[i]  
             else:  
                age_by_month[i] = month[i] - join_month[i] + 12*(year[i]-join_year[i])  
    return age_by_month
  • purchase_rate函数将决定这是否是每个客户的第二次、第三次、第四次购买。

  • join_date函数允许确定客户加入的日期。

  • age_by_month函数提供了从客户当前购买到第一次购买的多少个月。

现在输入已经准备好了,接下来创建群组。

创建群组

final['month'] =pd.to_datetime(final['day']).dt.month  
final['Purchase Rate'] = purchase_rate(final['customer_id'])  
final['Join Date'] = join_date(final['day'], final['Purchase Rate'])  
final['Join Date'] = pd.to_datetime(final['Join Date'], dayfirst=True)  
final['cohort'] = pd.to_datetime(final['Join Date']).dt.strftime('%Y-%m')  
final['year'] = pd.to_datetime(final['day']).dt.year  
final['Join Date Month'] = pd.to_datetime(final['Join Date']).dt.month  
final['Join Date Year'] = pd.to_datetime(final['Join Date']).dt.year  

详解如何利用Python进行客户分群分析

final['Age by month'] = age_by_month(final['Purchase Rate'],  
                                    final['month'],  
                                    final['year'],  
                                    final['Join Date Month'],  
                                    final['Join Date Year'])  

详解如何利用Python进行客户分群分析

cohorts = final.groupby(['cohort','Age by month']).nunique()  
cohorts = cohorts.customer_id.to_frame().reset_index()   # convert series to frame  
cohorts = pd.pivot_table(cohorts, values = 'customer_id',index = 'cohort', columns= 'Age by month')  
cohorts.replace(np.nan, '',regex=True)  

详解如何利用Python进行客户分群分析

**如何解释这个表格:**以群组2018-01为例。在2018年1月,有462名新客户。在这462人中,121名客户在2018年2月回来购买,125名在2018年3月购买,以此类推。

转换为群组百分比

for i in range(len(cohorts)-1):  
   cohorts[i+1] = cohorts[i+1]/cohorts[0]  
cohorts[0] = cohorts[0]/cohorts[0]  

详解如何利用Python进行客户分群分析

可视化

cohorts_t = cohorts.transpose()  
cohorts_t[cohorts_t.columns].plot(figsize=(10,5))  
sns.set(style='whitegrid')  
plt.figure(figsize=(20, 15))  
plt.title('Cohorts: User Retention')  
sns.set(font_scale = 0.5) # font size  
sns.heatmap(cohorts, mask=cohorts.isnull(),  
cmap="Blues",  
annot=True, fmt='.01%')  
plt.show()  

详解如何利用Python进行客户分群分析

详解如何利用Python进行客户分群分析

来源:https://blog.csdn.net/qq_34160248/article/details/129190522

标签:Python,客户,分群,分析
0
投稿

猜你喜欢

  • ORACLE 最大连接数的问题

    2009-07-23 14:27:00
  • Python中字符串对象语法分享

    2022-04-19 14:48:34
  • MySQL数据库8——数据库中函数的应用详解

    2024-01-23 18:18:07
  • pyinstaller打包python3.6和PyQt5中各种错误的解决方案汇总

    2021-01-13 18:58:48
  • python opencv读mp4视频的实例

    2022-04-13 00:32:11
  • 对python中的xlsxwriter库简单分析

    2022-08-22 22:46:01
  • 对python当中不在本路径的py文件的引用详解

    2022-12-17 15:12:42
  • python根据出生日期返回年龄的方法

    2023-10-10 23:04:53
  • Oracle 外连接实现代码

    2009-08-08 23:08:00
  • Python实现将Excel转换为json的方法示例

    2023-10-13 00:59:38
  • mac PyCharm添加Python解释器及添加package路径的方法

    2023-06-04 23:58:22
  • 超越MYSQL,ACCESS复合承载

    2008-12-09 13:31:00
  • Centos 安装 PHP7.4 和 Nginx的操作方法

    2023-10-14 01:11:55
  • CSS hacks与争议

    2007-11-19 12:56:00
  • JavaScript获取GridView中用户点击控件的行号,列号

    2024-04-23 09:30:04
  • 基于Python绘制一个摸鱼倒计时界面

    2022-09-02 03:03:26
  • 不到20行代码用Python做一个智能聊天机器人

    2021-07-21 08:43:40
  • 超详细汇总21个值得收藏的mysql优化实践

    2024-01-17 21:01:18
  • PyTorch实现MNIST数据集手写数字识别详情

    2021-08-03 17:30:36
  • FrontPage XP中的设计技巧

    2008-07-17 10:49:00
  • asp之家 网络编程 m.aspxhome.com