我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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

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

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

然而,客户数据是巨大的,每个客户的行为都不一样。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  

分离新老客户

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)  

定义一些函数

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  

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

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)  

**如何解释这个表格:**以群组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]  

可视化

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客户分群分析内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

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

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

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

每个电子商务数据分析师必须掌握的一项数据聚类技能,如果你是一名在电子商务公司工作的数据分析师,从客户数据中挖掘潜在价值,来提高客户留存率很可能就是你的工作任务之一。这篇就来告诉你如何将客户分成不同的群组,并在一段时间内观察每个群组的留存率
2023-02-24

怎么利用Python进行客户分群分析

这篇文章主要讲解了“怎么利用Python进行客户分群分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么利用Python进行客户分群分析”吧!导入数据和python库import pand
2023-07-05

利用Python群组分析方法剖析客户行为

Cohort分析是一种经常在市场营销、客户忠诚度、用户体验和产品开发等领域使用的数据分析技术。通过这种分析方法,我们可以详细了解特定时期内人群或群体的行为。Cohort用于识别具有相似特征或经历的人群或群体。

怎么用python进行客户价值分析

今天就跟大家聊聊有关怎么用python进行客户价值分析,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。一个完整的数据分析项目由如下几个步骤组成:1)数据获取:分为本地文本文件、数据库链
2023-06-02

利用Python中的pandas库对cdn日志进行分析详解

前言 最近工作工作中遇到一个需求,是要根据CDN日志过滤一些数据,例如流量、状态码统计,TOP IP、URL、UA、Referer等。以前都是用 bash shell 实现的,但是当日志量较大,日志文件数G、行数达数千万亿级时,通过 she
2022-06-04

商业分析师如何利用 SQL 进行数据分析

在当今数据驱动的营销环境中,利用 SQL 可以显著提高商业分析师的工作效率与效果,并根据业务需求定制数据分析,实时优化营销活动,以易于理解的方式向相关人员展示数据报告。

如何利用Python进行商品的亲和性分析

这篇文章将为大家详细讲解有关如何利用Python进行商品的亲和性分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。01数据挖掘简介数据挖掘旨在让计算机根据已有数据做出决策。决策可以是预测明年的销量,人口的
2023-06-15

JavaScript如何利用performance.timing进行性能分析

小编给大家分享一下JavaScript如何利用performance.timing进行性能分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!performance.timing:利用performance.timing进行
2023-06-03

如何用Python进行回归分析与相关分析

这篇文章主要介绍了如何用Python进行回归分析与相关分析,这两部分内容会放在一起讲解,文中提供了解决思路以及部分实现代码,需要的朋友可以参考下
2023-03-22

如何利用 java quarter 进行数据趋势分析?(java quarter如何进行数据趋势分析)

在当今的数据驱动时代,数据趋势分析对于企业和开发者来说变得越来越重要。JavaQuarter作为一种常用的编程语言和工具,提供了丰富的功能和库,可用于有效地进行数据趋势分析。本文将介绍如何使用JavaQuarter进行数据趋势分析的步骤和技巧。一、数据
如何利用 java quarter 进行数据趋势分析?(java quarter如何进行数据趋势分析)
Java2024-12-19

如何利用Angr进行简单CTF逆向分析

如何利用Angr进行简单CTF逆向分析,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一、符号执行概括简单的来说,符号执行就是在运行程序时,用符号来替代真实值。符号执行相较于
2023-06-17

如何利用机器学习进行静态分析

机器学习和人工智能这两种技术在许多领域广泛应用,尤其是在营销分析和网络安全方面,它们在这些领域的成功应用促使有些人试图将它们用于所有方面。这其中包括使用机器学习系统创建用于定位安全漏洞的静态代码分析器。
人工智能2024-12-03

如何利用沙箱进行恶意软件分析?

根据 Malwarebytes 的 2022 年威胁评估结果,2021 年检测到 4000 万台 Windows 商用计算机的威胁。为了对抗和避免此类攻击,恶意软件分析必不可少。

如何利用大数据分析实现有效的客户体验

组织可以利用大数据分析做出明智的数据驱动决策,从而改善与业务相关的结果。这可以带来更有效和高效的营销、客户个性化和新的收入机会。

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录