群组分析Cohort Analysis
本文中介绍的是一种数据分析方法:群组分析Cohort Analysis。群组分析是用于研究用户行为和提高增长的分析思路。在本文中,将结合一个数据集利用Python来实现该分析方法。
本文数据集下载地址:https://www.kaggle.com/mkechinov/ecommerce-events-history-in-cosmetics-shop
什么是群组分析
群组分析Cohort Analysis,重点就是群/组,它是一种利用用户分层和用户建模的方法,主要分析的是相同用户群体随着时间延续的变化发展情况。我们需要将获取到的全部用户分成一个个的组或者簇群,这样的群或组的分层方式可以是日期、渠道或者其他特定的用户为来划分。总之,我们可以按照实际的需求和维度来进行用户分层。
通过群组分析,我们可以看到不同组别的留存情况。群组分析Cohort Analysis图表和留存曲线是最常用的留存工具。这些图表主要是告诉我们用户在我们产品的中的参与度如何,留存率是怎样的情况,同时还可以分析用户新增速度是否达到我们的要求。
目前市面上很多的BI工具都可以绘制群组分析的图表和留存曲线,比如GrowingIO、神策大数据系统、PowerBI等。但是,如果想自定义一些分组或分群的维度,使用Python还是不二选择。
Cohort 分析使用场景
- 用户留存率分析
- 用户流失率分析
- 用户转化率分析
- 广告转化率分析
上面是很常见的使用场景,还可以进行其他场合的延伸,比如电商网站用户的交易支付数据,不同周期内获取的用户在交易频次、客单价等的比较分析
用户留存
用户留存指的是随着时间延续,用户在某个周期内的存在情况。为什么要看留存?
- 了解一个渠道的质量:通常是日留存,衡量用户的短期活跃情况
- 观察整体的情况:用周留存或者月留存,衡量用户在平台上的黏性
留存又分为次日留存、7日留存、14留存等。下面通过一个案例来说明常见的7日留存计算规则。
问题:如何计算产品的7日留存?
算法1-7日日留存
第一种算法是:第7天活跃人数 / 第1天活跃人数 * 100%
算法2-7日内留存
第二种算法是:第2天~第7天去重后/第1天*100%
算法3-不同定义的7日日留存
上面的算法1中是把当前日直接记为Day1,还有一种计算方法将当前日当做Day0,然后再开始计算;
举例说明一下算法3的使用,比如DAU=10刚好是星期2产生的数据:
- 如果使用算法1,7日日留存=下周1的数据/本周2的数据(10)
- 如果使用算法2,7日日留存=下周2的数据/本周2的数据(10)
说明:算法3在一定程度上能够巧妙避开星期级别的影响
3种留存算法
本文数据
导入数据
本文中使用的一份数据集是从kaggle下载,主要是包含事件发生时间、类型(阅览、加购、移除购物车和购买)、产品ID、分类ID、产品编码、品牌、价格、用户ID、用户会话,总共7个属性
1 | import numpy as np |
数据探索
主要查看的是数据类型、数据的行列数看大小、数据的缺失值情况
1 | df.dtypes # 数据类型 |
数据清洗
主要操作是挑选数据中价格大于和去重操作:
数据处理
在本文的案例中,群组分析是按照首次访问的时间和每次的访问来计算时间间隔,从而来计算留存情况,具体步骤为:
- 计算每个用户的首次访问时间min_day
- 记录后续每次访问时间和首次访问时间的间隔day_gap
- 因为是12月份的电商数据,我们将一个月分成10份,时间周期为3天
因为上面的两个因素都是和时间相关,所以必须导入Python中强大的datetime库来处理时间处理的需求。
1、获取event_time中的时间:年月日
1 | def get_time(datetime): |
2、根据每个用户user_id来确定最早时间
1 | # 用户本月的最早登陆时间确定 |
1 | df2["min_day"] = grouping.transform("min") |
3、计算访问日event_day和最早访问时间的间隔
1 | # 计算用户当日访问event_day和最早访问时间min_day之间的时间间隔 |
4、按照首次访问时间和时间间隔来统计用户数
1 | # 按照首次访问时间和下一次访问的间隔,统计用户数 |
上面表中的数据表示的是和当前的时间间隔分别为1,2,3…的人数分别为17519,2591,2276等
5、生成数据透视表
有了上面分组统计的数据,我们可以生成透视表
1 | # 数据透视部分 |
6、改变数据形式:方便最终使用百分比显示数据
一般情况下,我们习惯用百分比来表示用户的留存,很清晰地看到用户的留存比例。首先我们取出第一列的数据(全部行):
后面每个数据除以相应日期的第一个数据:
1 | # divide 函数 |
保留3位小数,同时改变数据table的索引值:
1 | # 保留3位小数并乘以100 |
群组分析绘图
绘制群组分析留存热力图:
1 | # 解决中文无法显示问题 |
从上面的数据中我们可以看到:前6天的留存情况还是很漂亮(颜色较浅,留存率相对较高)。可能原因是这是整个12月份的全量数据,导致了多数的活跃用户会被归类会月初前几天的新增活跃用户。但是数据整体上到了月末,留存占比还是较少,月留存情况并不可观。
后续可尝试从不同渠道的用户获取、注册转化、用户支付等方式分析用户的留存情况。