一、前言

用户增长对企业非常重要,主要包括: 新增、留存、召回 。留存率就是用户在某段时间内,开始使用某网站或APP,经过一段时间后仍然继续使用,这类群体就认为是留存用户,留存用户的占比即为留存率。N日留存率=N日留存用户数/新增用户数*100%,反应了网站或APP的质量和保留用户的能力。

本文介绍一个实用的分析留存率的方法: Cohort Analysis (群组分析)。就是利用用户分层&用户建模的方法,将新增用户分成一个一个小组,可以按照获客日期来分,或者按照获客渠道来分,或者按照特定用户行为来分。APP的下载量越高并不是说产品就越好,产品若没有很好的留存,花费大量时间和资源来挖掘新客户也将是竹篮打水一场空。群组分析有利于衡量用户在每个漏斗的用户流失节点、用户流失数据,从而帮助你发现产品的用户的行为模式和用户增长点。从本质上讲,群组分析Cohort Analysis为你提供了一种数据驱动的方法,用群组分析Cohort Analysis方法,可以来帮助提高用户留存率。

二、数据介绍

数据来自某网站2009年至2010年的用户登录数据(activity.csv)和用户的注册信息(user.csv)。
为了方便计算我做了修改,部分数据表预览如下:(特殊说明:数据已脱敏)

1、User表 用户的注册信息
列UID代表用户的唯一标志(账户),
列JOINDATE代表用户的注册日期。

2、Activity表 用户登录数据
列ACTION_ID代表每个用户每一次登录的标志,
列DAY代表用户登录的日期。

三、留存分析

1、计算在t1时刻处于活动状态的用户,然后计算在t2时刻留存的用户数

在SQL中可以用selfjoin方法,以次日留存为例:

select * from activity
left join activity as future_info
on  activity.UID = future_info.UID
and activity.DAY= subdate(future_info.DAY,1);

Join之后的表格每一行都包含了t1和t2时刻的登录情况,t2没有留存则为null。

2、以次日留存为例,计算去重后的活跃用户数、留存用户数、留存率

根据以上join之后的表格计算:

selectactivity.DAY, count(distinct activity.UID) as active_user, # 某日活跃用户,去重count(distinct future_info.UID) as retained_user,  # 次日留存用户,去重round(count(distinct future_info.UID)/count(distinct activity.UID),2) as retention_rate #留存率
from activity
left join  activity as future_info
on activity.UID = future_info.UID
and activity.DAY=subdate(future_info.DAY,1)     # 指定留存周期,这里是次日留存所以取相差一天的活动
group by activity.DAY
order by activity.DAY
limit 10;

3、新、老用户留存率计算

3.1、新用户的留存,只需要在上述代码中加入条件限制活动的日期,以次日留存为例:

selectactivity.DAY,count(distinct activity.UID) as active_user,count(distinct future_info.UID) as retained_user,count(distinct future_info.UID)/count(distinct activity.UID) as retention_rate
from activity
left join user on activity.UID=user.UID and activity.DAY = user.JOINDATE           # 限制活动日期
left join activity as future_info on activity.UID=future_info.UID and activity.DAY=subdate(future_info.DAY,1)
group by activity.DAY
order by activity.DAY
limit 10;


3.2、老用户留存:
将上述代码的条件改为 user.JOINDATE != activity.DAY,即可得到结果。

四、群组分析Cohort Analysis

一个网站或App,在某个连续的4周里陆续更新或新增了一个功能或设计,想要知道这些功能和设计上的改动对用户的影响,就可以将每周的新注册作为一个群组,观察这4个用户群组在接下来10天里的行为数据,就可以很清楚地观察到新增功能的影响。对于不同用户群组的留存率计算,需要对用户进行分组,先维度分,再粒度分。维度:可以是新增用户的渠道;粒度:新增用户是来源产品,还是来源具体网址,这属于粒度上的差异。将对比的差异值逐级锁定,寻找数据表象差异背后的原因,来找到用户增长点。对于用户的留存分析有两个比较常用的的分组方向:从用户的获取角度分组,从用户的行为角度分组。

1、从用户行为角度分组
网页浏览器、APP 不单单是解决用户访问的需求,用户流失可能是对产品不同功能模块体验上的不满结果。每日活跃的模块用户留存率自然很高,如果不同用户群组分析中,发现使用过某个功能的用户在之后的时间中留存情况很差,那就需要对这个功能进行优化了。

2、从用户获取的角度分组
(1)按 新增用户的渠道 对用户进行分组,来源产品,还是来源具体网址。
分析不同渠道的用户后续的留存情况,判定不同渠道表现的优劣情况,好的渠道可以加大促销或者广告投入,差的渠道可以淘汰不用。
(2)按 首次购买时间 对用户进行分组,粒度可选日、周、月、季度等。
各个时间段获取的客户在留存率表现上是否有差异,对流失的用户做用户画像分析,并在流失率高的时间段进行干预。

Step 1
–New_user_activity 将用户活动限制为新用户
–cohort_active_user_count 计算每个每日群组中活跃用户的总数 (留存率计算中的分母)

create table New_user_activity
select activity.* from activity
left join user on activity.DAY=user.JOINDATE

create table cohort_active_user_count       # 每个每日群组中活跃用户的总数
select DAY, count(distinct UID) as count
from new_user_activity
group by DAY

Step 2
留存期(period): future_activity.DAY - new_user_activity.DAY
每日新增用户作为一个群组,我们可以清楚的计算每个群组接下来的10天内的留存率变化:

select
DAY, period, new_users, retained_users, retention
from (select  new_user_activity.DAY,(future_activity.DAY-new_user_activity.DAY) as period,max(cohort_size.count) as new_users,count(distinct future_activity.UID) as retained_users,count(distinct future_activity.UID)/max(cohort_size.count) as retentionfrom new_user_activityleft join  activity as future_activityon new_user_activity.UID=future_activity.UIDand  new_user_activity.DAY < future_activity.DAYand  new_user_activity.DAY >= subdate(future_activity.DAY,10)left join  cohort_active_user_count as cohort_sizeon new_user_activity.DAY=cohort_size.DAYgroup by  1,2
) tmp
where period is not null
order by DAY, period;

Step 3
为了便于观察,我们将period转化为列

select  DAY, new_users,ifnull(max(case when period = 1 then retention end),0) DAY01,ifnull(max(case when period = 2 then retention end),0) DAY02,ifnull(max(case when period = 3 then retention end),0) DAY03,ifnull(max(case when period = 4 then retention end),0) DAY04,ifnull(max(case when period = 5 then retention end),0) DAY05,ifnull(max(case when period = 6 then retention end),0) DAY06,ifnull(max(case when period = 7 then retention end),0) DAY07,ifnull(max(case when period = 8 then retention end),0) DAY08,ifnull(max(case when period = 9 then retention end),0) DAY09,ifnull(max(case when period = 10 then retention end),0) DAY10
from (select  new_user_activity.DAY,(future_activity.DAY-new_user_activity.DAY) as period,max(cohort_size.count) as new_users,count(distinct future_activity.UID) as retained_users,count(distinct future_activity.UID)/max(cohort_size.count) as retentionfrom new_user_activityleft join  activity as future_activityon  new_user_activity.UID=future_activity.UIDand  new_user_activity.DAY<future_activity.DAYand  new_user_activity.DAY>=subdate(future_activity.DAY,10)left join  cohort_active_user_count as cohort_sizeon   new_user_activity.DAY=cohort_size.DAYgroup by  1,2
) tmp
where period is not null
group by DAY,
order by DAY;

每日新增维度细分的Cohort Analysis 表格:

Step 4
用 power BI 连接 mysql,选择2009.1.11 - 2009.1.20的数据制作留存曲线图,分析比较不同用户群组留存差异。

本例中前面的首日新增用户数留存率普遍偏高,在2009年1月11日 - 2009年1月20日是用户留存率下跌最严重的时间段,不同用户群组的留存率呈现同一种整体呈逐日递减趋势,需要对该用户流失率较高的时间段进行干预。

五、小结

用户增长的主线:获取(Acquisition)、激活(Activation)、留存(Retention)、变现(Revenue)、推荐(Referral),也就是AARRR模型。新用户的留存,在AARRR模型里,就是「激活」这一步。提升新增用户的留存率关键在多个指标的设定,可以定为三个:新增用户量、次日留存、获客成本,多个指标的设定可以相互约束和牵制。

提升新增用户的留存率方法有四步,分别是:用户运营的精细化、产品流程优化、活动激励、提供优质的服务。
第一步:将获客渠道精细化,针对不同的渠道做针对性的用户运营,同时也可以做渠道的筛选,来获取优质流量。
第二步:将获取的流量,更高效的转化到关键行为的使用。就需要做产品流程的优化,提升转化率。
第三步:为了提升每一步转化率,还可以通过活动的激励,引导用户转化。
第四步:产品要提供最优质的服务。只有用户满意,才会有后续的留存。

用 SQL 分析不同用户群组留存率相关推荐

  1. 陈桥五笔用户编号获取_用户群组分析

    目录: 项目介绍 定义阐述 分析流程 总结展示 一.项目介绍 背景: 当我们在做用户分析时,会遇到这样的一个问题,一个用户使用APP时,会留下一连串的使用数据,可能是一月份的购买了1次,二月份购买了2 ...

  2. 数据分析方法——用户群组分析

    文章目录 数据分析方法--用户群组分析 内容摘要 一.群组分析方法介绍 二.项目背景及目的 三.python实操 (1)数据导入 (2)数据处理 (3)用户群组存留率计算 (4)用户群组存留率可视化 ...

  3. 利用Python实现用户群组分析!

    本文中介绍的是一种数据分析方法:群组分析Cohort Analysis. 群组分析是用于研究用户行为和提高增长的分析思路.在本文中,将结合一个数据集利用Python来实现该分析方法. https:// ...

  4. 电脑修改ip地址方法cmd_Mac系统如何创建用户群组?苹果电脑修改用户名方法

    群组允许多个用户拥有相同的访问权限.例如,您可以将文件夹或文件的特定访问权限授予群组,这样该群组的所有成员都可以进行访问.您还可以将每个共享文件夹的特定访问权限分配给群组. Mac系统如何创建用户群组 ...

  5. Linux-新建用户/群组以及修改文件权限

    Linux 基础 操作系统 操作系统 Operating System 简称 OS ,是软件的一部分,它是硬件基础上的第一层软件,是硬件和其它软件沟通的桥梁. 操作系统会控制其他程序运行,管理系统资源 ...

  6. 基于数据分析的“用户群组+推送”,提升用户粘性

    背景 受众细分是精细化运营的重要方法之一.由于用户的偏好不同,对产品的需求也不一样,要想更好地培养用户粘性,就需要因人施策,精细化运营.受众细分是根据用户属性和行为数据,将具有相同或类似特征的用户归为 ...

  7. Linux 学习笔记 文件、目录操作与用户群组权限

    一.命令行提示符 1.1 命令行基础 bearpi:当前用户名,在@前是用户名 ubuntu:用户所在的域名,在@后面,这是我自定义的,默认应该是主机名 ~ 波浪线为目前所在目录,~代表家目录(hom ...

  8. SQL PASS北京用户群成功举办第一次线下活动,性能调优PPT分享

    昨天晚上在北京利星行举办了第一场PASS北京用户群的线下活动.     这次活动主要是由微软的大牛,也是MCM的何雷老师进行讲解SQL Server的性能调优.何老师内力深厚,由点带面的将性能调优的方 ...

  9. 六.用户.群组和权限

    1.用户及passwd文件 a)/etc/passwd 文件的功能:存储所有用户的相关信息,该文件为用户信息数据库 b)/etc/passwd 每个字段的含义: 第一个字段:表示用户的用户名 第二个字 ...

最新文章

  1. linux配置永久网管,企业Linux网管配置
  2. 【bzoj3524】Couriers——主席树
  3. Flow - JS静态类型检查工具
  4. JavaScript的基本语法
  5. 会计转行从事IT,如何在一年时间内全职学习?
  6. HP-JavaUtil: xls 操作类
  7. Keras 的预训练权值模型用来进行预测、特征提取和微调(fine-tuning)
  8. Linux常用解压文件
  9. Android NDK开发之 opencv for android 问题总结
  10. 使用GIT来管理代码的心得
  11. 详解iOS开发之自定义View
  12. JPA环境下使用Hibernate二级缓存
  13. Mybatis-Plus 的BaseMapper用法
  14. 第二章 MATLAB数据与矩阵
  15. JVM系列之JDK、JRE、JVM的区别是什么?(二)
  16. MinIO InvalidEndpointException: invalid host问题解决
  17. 「日常训练知识学习」树的直径(POJ-1849,Two)
  18. 二级网站域名怎么申请?
  19. linux 视频教程 韦山东,韦东山 linux 设备树详解
  20. el-date-picker 日期过滤周末节假日

热门文章

  1. python程序设计中、文件有哪两种展现形态_智慧职教APPPython程序设计(常州工业职业技术学院)作业期末考试答案...
  2. opencv历史BUG
  3. Pocket英语语法---六、感官动词接不同的动词表示什么意思
  4. 了解一个人最好的方式就是和他(她)去旅行,
  5. Table sink ‘default_catalog.default_database.t3‘ doesn‘t support consuming update and delete changes
  6. python的字符串的使用
  7. Python根据字幕文件自动给视频添加字幕(通用版)
  8. android投影到win7,求教,如何把安卓手机屏幕投射到win7电脑上-win7投屏设置,手机投屏到电脑win7...
  9. 可捕捉的 Microsoft Jet错误
  10. 静态内部类、静态变量的加载次数-理解静态内部类实现线程安全的单例模式懒加载