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

大家好,如今的企业有能力收集大量的数据,这些数据可以帮助企业制定更好的策略并了解其客户的行为。Cohort分析可以在其中发挥作用,Cohort分析是一种了解客户行为或用户互动的强大工具,并为企业提供有价值的见解,本文中将介绍如何使用Python进行Cohort分析。

Cohort分析

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

例如,对于电子商务业务,可以使用Cohort分析来监测不同的群体,比如客户群体、来自特定地区的群体或偏好特定产品类别的群体。通过这种分析,我们可以研究特定群体在一段时间内的行为和倾向。

应用Cohort分析

本文有一个由12个表组成的关系数据库,将在Python通过MS SQL从这个表中提取所需的特征。进行必要的预处理操作后将使用数据适合进行分析。

分析中需要两个特征,分别是客户ID和订单日期,目标是查看能够保留多少客户,并在其首次到达日期后的每个月基础上保留多长时间。

我们所想要的特征包含在一个单独的表中,因此在查询过程中,不需要从其他表中提取属性。为了举例说明,假设将在两个表上工作,接下来使用MS SQL中的JOIN获取本文想要的特征。

SELECT * FROM ORDERS

图片

SELECT * FROM USERS

图片

SELECT U.ID, O.DATE_ FROM USERS U JOIN ORDERS O ON U.ID= O.ID

图片

通过JOIN从USERS和ORDERS表中调用具有相同ID值的属性,为了在Python中进行分析,将访问该数据库,在其中运行我们的查询,并将数据作为数据帧在我们的操作中使用。

首先导入本文所需要的库:

import pandas as pd
import sqlalchemy as sa
import urllib
from datetime import datetime

在第二步中,使用urllib.parse.quote_plus函数来保护连接字符串免受环境因素的影响,并将连接信息写入这个将用于连接SQL Server数据库的字符串中。

params = urllib.parse.quote_plus("DRIVER={SQL Server};""SERVER=DESKTOP-F3H252;""DATABASE=E-COMMERCE;")

注:如果不知道服务器名称,可以通过查询"SELECT @@SERVERNAME"来找到它。

接下来,使用"SQLAlchemy (sa)"库创建与SQL Server数据库的连接,使用"sa.create_engine"函数,我们可以利用连接字符串和其他连接设置创建一个链接引擎。"odbc_connect"参数用于ODBC连接,并包含之前转换的连接字符串。

engine = sa.create_engine("mssql+pyodbc:///?odbc_connect={}".format(params))

在下一步中将创建一个SQL查询,使用查询"SELECT U.ID, O.DATE_ FROM USERS U JOIN ORDERS O ON U.ID= O.ID"来获取我们想要的特征。

qry ="SELECT U.ID, O.DATE_ FROM USERS U JOIN ORDERS O ON U.ID= O.ID"

通过"engine"对象建立数据库连接,并在"with"代码块中使用该连接,使用"con.execute(qry)"运行SQL查询并获取结果集(rs),最后将结果集转换为Pandas DataFrame。

with engine.connect() as con:rs = con.execute(qry)df = pd.DataFrame(rs)

图片

df.isnull().sum()ID 0
DATE_ 0
dtype: int64

由于我们将按月进行工作,所以小时数对我们来说并不重要,所以我们首先要删除小时数,然后再删除天数。首先,我们将日期列(DATE_)转换为日期时间格式,然后只获取日期。

df['DATE_'] = pd.to_datetime(df['DATE_'])
df['DATE_'] = df['DATE_'].dt.date

图片

下一步行动是删除天数,接下来为此定义一个lambda函数,希望保留年份和月份的值。datetime(x.year, x.month, 1)将使用年份和月份信息创建一个新的日期对象,其中包含该月的第一天。

get_year_month = lambda x: datetime(x.year, x.month, 1)

接下来使用这个函数创建一个新的变量,并将新数据存储在'DATE_MONTH'列中。

df['DATE_MONTH'] = df['DATE_'].apply(get_year_month)

将根据客户ID对要执行的流程进行分组,并通过创建'COHORT_MONTH'变量在这一列中保留每个客户的首次到达日期。

user_first_date = df.groupby('ID')['DATE_MONTH']
df['COHORT_MONTH'] = user_first_date.transform('min')

图片

当我们查看所获得的值时,如果对第一个订单日期和其他订单日期进行评估,就可以很容易地找到差异,可以通过创建一个新的'COHORT_INDEX'变量,将差异保留在这一列中。

years_diff = df['DATE_MONTH'].dt.year - df['COHORT_MONTH'].dt.year
months_diff = df['DATE_MONTH'].dt.month -df['COHORT_MONTH'].dt.month
df['COHORT_INDEX'] = years_diff * 12 + months_diff + 1

接下来计算每个首次到达日期的活跃客户的月度数量,通过分组创建名为cohort_data的数据帧,其中包含了每个月首次到达的唯一客户数量。

grouping_count = df.groupby(['COHORT_MONTH', 'COHORT_INDEX'])
cohort_data = grouping_count['ID'].apply(pd.Series.nunique)
cohort_data = cohort_data.reset_index()
cohort_data.head()

图片

进而将cohort_data数据帧整理到数据透视表中,并创建一个名为cohort_user_counts的新数据帧,该数据帧将包含每个群体的月活跃客户数量,计算每个客户的活跃百分比,通过将每个月群体中的客户数除以初始客户数来实现此目的。

cohort_sizes = cohort_user_counts.iloc[:,0]
retention = cohort_user_counts.divide(cohort_sizes, axis=0)
retention.index = retention.index.strftime('%m-%Y')

图片

最后在热图上可视化retention数据帧:

sns.set(style = 'white')
plt.figure(figsize = (15, 6))
plt.title('Cohort: Retention rate by month')
sns.heatmap(retention,cmap = plt.cm.Reds,annot = True,fmt = '.0%')
plt.xlabel("Ongoing months"
plt.ylabel("First arrival date")
plt.show()

图片

如上所述,图表中的百分比表达的是活跃率,从中可以推断出的内容回答了可以保留客户多长时间的问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/141853.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Lua的resty-request库写的一个爬虫

为了使用Lua的resty-request库进行爬虫,需要先安装OpenResty和resty-request库,并将其引入到Lua脚本中。然后,可以使用resty-request库提供的函数来发送HTTP请求和处理HTTP响应。 以下是一个使用resty-request库进行爬虫的示例代码&#xff1…

sqlyog安装和网址

网址Downloads webyog/sqlyog-community Wiki GitHub 1. 2. 3. 4. 5. 6. 7.

图论12-无向带权图及实现

文章目录 带权图1.1带权图的实现1.2 完整代码 带权图 1.1带权图的实现 在无向无权图的基础上,增加边的权。 使用TreeMap存储边的权重。 遍历输入文件,创建TreeMap adj存储每个节点。每个输入的adj节点链接新的TreeMap,存储相邻的边和权重 …

出入库管理系统vue2前端开发服务器地址配置

【精选】vue.config.js 的完整配置(超详细)_vue.config.js配置_web学生网页设计的博客-CSDN博客 本项目需要修改两处: 1、vue开发服务器地址:config\index.js use strict // Template version: 1.3.1 // see http://vuejs-templa…

传奇手游天花板赤月【盛世遮天】【可做底版】服务端+自主授权+详细教程

搭建资源下载地址:传奇手游天花板赤月【盛世遮天】【可做底版】服务端自主授权详细教程-海盗空间

使用MybatisPlus时出现的java.lang.NullPointerException异常~

错误描述如下所示: 错误原因:Junit的导包错误 单元测试的包有如下所示两个 我们应该根据springboot的版本进行选择, 在Spring Boot 2.2.X以后使用import org.junit.jupiter.api.Test Junit5 在Spring Boot 2.2.x之前使用import org.junit.T…

赛宁网安获评“铸网-2023”江西省实网应急演练优秀支撑单位

近日,南京赛宁信息技术有限公司(赛宁网安)获得了江西省工业和信息化厅颁发的“优秀支撑单位”荣誉。 该荣誉表彰是对赛宁网安在“铸网-2023”江西省工业领域网络安全实网应急演练中提供全程技术支撑能力的认可。 本次实网应急演练聚焦工业企…

理疗养生服务预约小程序要如何做

不少人面对身体症状疼痛,往往不会选择去医院,而是去理疗养生馆,选择艾灸、拔罐、中药贴敷等方式治疗改善或减轻疼痛。随着人们对中医信赖度增强,理疗养生市场增长迅速。 而在增长的同时,我们也注意到理疗养生馆经营痛…

Elasticsearch:检索增强生成 (Retrieval Augmented Generation -RAG)

作者:JOE MCELROY 什么是检索增强生成 (RAG) 以及该技术如何通过提供相关源知识作为上下文来帮助提高 LLMs 生成的响应的质量。 生成式人工智能最近取得了巨大的成功和令人兴奋的成果,其模型可以生成流畅的文本、逼真的图像,甚至视频。 就语…

UML软件建模软件StarUML mac中文版软件介绍

StarUML for mac是一款UML建模器,StarUML for mac提供了几个模版,帮助用户建立使用新的图表,是目前最流行的UML建模工具,给开发工作带来大大的便利。 StarUML mac软件介绍 StarUML 是一个流行的软件建模工具,用于创建…

解决Mac配置maven环境后,关闭终端后环境失效的问题(适用于所有终端关闭后环境失效的问题)

目录 问题的原因 解决方式一、每次打开终端时输入:"source ~/.bash_profile",这个方式比较繁琐 解决方式二、我们终端输入"vim ~/.zshrc"打开".zshrc"文件 1、我们输入以下代码: 2、首先需要按 " i…

unity 使用Vuforia扫描实体物体交互

文章目录 前言一、Vuforia是什么?二、Unity导入Vuforia1.去Unity - Windows – Asset Store,搜vuforia engine,添加到我的资源2.从 Unity 的菜单 Assets -> Import package -> Custom Package 导入脚本,添加 Vuforia Engine…

工作汇报怎么写?建议收藏

整体思路与模块: 背景/事件 成果展示 推动落实的方法论 收获与成长 存在的不足及改进措施 下一步工作安排 支持(选) 一、背景/事件 对于区分“功能性总结”和“应付性总结”,在背景/事件方面有一个关键点 是报告是否具有…

简洁高效的微信小程序分页器封装实践

前言 在现今的移动应用开发中,微信小程序已经成为了一个备受欢迎的平台。然而,随着应用的复杂性增加,数据的管理和加载成为了一个问题。本文将探讨微信小程序中的一个关键概念:封装分页器,它是提升小程序性能和用户体验…

Python实现WOA智能鲸鱼优化算法优化BP神经网络回归模型(BP神经网络回归算法)项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 鲸鱼优化算法 (whale optimization algorithm,WOA)是 2016 年由澳大利亚格里菲斯大学的Mirjalili 等提…

【Linux】-文件系统的详解以及软硬链接

💖作者:小树苗渴望变成参天大树🎈 🎉作者宣言:认真写好每一篇博客💤 🎊作者gitee:gitee✨ 💞作者专栏:C语言,数据结构初阶,Linux,C 动态规划算法🎄 如 果 你 …

说说你对React Router的理解?常用的Router组件有哪些?

一、是什么 react-router等前端路由的原理大致相同,可以实现无刷新的条件下切换显示不同的页面 路由的本质就是页面的URL发生改变时,页面的显示结果可以根据URL的变化而变化,但是页面不会刷新 因此,可以通过前端路由可以实现单页(SPA)应用 react-router主要分成了几个不…

香港和美国节点服务器的测试IP哪里有?

在选择服务器时,我们通常需要进行一些测试来评估其性能和稳定性。当然,这其中一个重要的测试指标就是服务器的 IP 地址。通过测试 IP 地址,我们可以了解到服务器所在地区以及网络连接质量等信息。作为香港及亚太数据中心领先服务商恒创科技&a…

docker简介和安装

0.前提 本文章意在告诉各位开发者学生有一个工具能够方便你未来的项目开发和部署,这也是我在给我留下一份备份,在我忘记的时候可以回头寻找。 1.docker简介 docker本身就有集装箱的意思。Docker: Accelerated Container Application Development Dock…

基于单片机智能浇花系统仿真设计

**单片机设计介绍, 基于单片机智能浇花系统仿真设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机的智能浇花系统可以实现自动化浇水、测土湿度和温度等功能,以下是一个基本的仿真设计步骤&am…