目录

  • 一、同期群分析的定义

  • 二、SQL 步骤

    • 1. 查看数据

    • 2. 根据 uid 、年月聚合用户人数

    • 3. 计算年月的差额(天数)

    • 4. 计算年月的差额(月数)

    • 5. 透视(根据 uid 、首次付费年月去透视年月差额的用户人数)

    • 6. 计算留存率

一、同期群分析的定义

「同期群分析」(Cohort Analysis)是一种通过“纵横”结合对用户分群的细分类型分析的方法:

  • 「横向上」——分析同期群随着周期推移而发生的变化

  • 「纵向上」——分析在生命周期相同阶段的群组之间的差异

「同期群」指的是同一时期的群体,可以是同一天注册的用户、同一天第一次发生付费行为的用户等。

「周期的指标变化」是指用户在一定周期内的留存率、付费率等指标。

同期群分析包含三个核心的元素:

  • 「客户首次行为时间」:这是划分同期群体的基点

  • 「时间周期维度」:比如 N 日留存率、N 日转化率中的 N 日,一般即为 +N 日、+N 月

  • 「变化的指标」:比如注册转化率、付款转化率、留存率等指标

同期群分析给到更加细致的衡量指标,可以实时监控真实的用户行为、衡量用户价值,并为营销方案的优化和改进提供支撑,避免“被平均”的虚荣数据。

二、SQL 步骤

下面我使用 PostgreSQL 拆分步骤来实现基于首单日期的用户留存率同期群报表,「每一步骤都是在前一步骤的基础上进行再加工」,这在代码中的子查询中也得到体现,理清了思路就会发现其实很简单。

重点有以下几点:

  • 统计出每个用户的「首单时间」

  • 计算首单时间和实际下单时间的「日期差」

  • 对于付费用户数需要「去重统计」

  • 注意字段「格式的转换」

1. 查看数据

-- 0. 查看数据SELECT * FROM "日志" LIMIT 10;

2. 根据 uid 、年月聚合用户人数

-- 1. 根据 uid 、年月聚合用户人数SELECT"日志".uid,to_char( to_date( "日志"."日期", 'YYYY-MM' ), 'YYYY-MM' ) AS 年月,min(to_char( to_date( "日志"."日期", 'YYYY-MM' ), 'YYYY-MM' )) OVER(PARTITION BY "日志".uid) AS 首次付费年月
FROM"日志"
GROUP BY"日志".uid,to_char( to_date( "日志"."日期", 'YYYY-MM' ), 'YYYY-MM' )ORDER BY "日志".uid;

3. 计算年月的差额(天数)

-- 2. 计算年月的差额(天数)SELECT *,to_date(t.年月,'YYYY-MM') - to_date(t.首次付费年月,'YYYY-MM') AS 天数差额
FROM (SELECT"日志".uid,to_char( to_date( "日志"."日期", 'YYYY-MM' ), 'YYYY-MM' ) AS 年月,min(to_char( to_date( "日志"."日期", 'YYYY-MM' ), 'YYYY-MM' )) OVER(PARTITION BY "日志".uid) AS 首次付费年月
FROM"日志"
GROUP BY"日志".uid,to_char( to_date( "日志"."日期", 'YYYY-MM' ), 'YYYY-MM' )ORDER BY "日志".uid) AS t;

4. 计算年月的差额(月数)

-- 3. 计算年月的差额(月数)SELECT t.*,
(case when t."天数差额" <= 30 then '首月' when t."天数差额" <= 60 then '+1月'when t."天数差额" <= 90 then '+2月' when t."天数差额" <= 120 then '+3月'when t."天数差额" <= 150 then '+4月'else NULLEND)  AS 月差额
FROM (SELECT *,to_date(t.年月,'YYYY-MM') - to_date(t.首次付费年月,'YYYY-MM') AS 天数差额
FROM (SELECT"日志".uid,to_char( to_date( "日志"."日期", 'YYYY-MM' ), 'YYYY-MM' ) AS 年月,min(to_char( to_date( "日志"."日期", 'YYYY-MM' ), 'YYYY-MM' )) OVER(PARTITION BY "日志".uid) AS 首次付费年月
FROM"日志"
GROUP BY"日志".uid,to_char( to_date( "日志"."日期", 'YYYY-MM' ), 'YYYY-MM' )ORDER BY "日志".uid) AS t) AS t;

5. 透视(根据 uid 、首次付费年月去透视年月差额的用户人数)

-- 4. 透视(根据 uid 、首次付费年月去透视年月差额的用户人数)SELECT t.首次付费年月,
count(distinct case when t.年月差额 = 0 then t.uid else NULL end) AS 首月,
count(distinct case when t.年月差额 = 1 then t.uid else NULL end) AS "+1月",
count(distinct case when t.年月差额 = 2 then t.uid else NULL end) AS "+2月",
count(distinct case when t.年月差额 = 3 then t.uid else NULL end) AS "+3月",
count(distinct case when t.年月差额 = 4 then t.uid else NULL end) AS "+4月"
FROM (SELECT * FROM (SELECT *,round((to_date(t.年月,'YYYY-MM') - to_date(t.首次付费年月,'YYYY-MM')) / 30,0) AS 年月差额
FROM (SELECT"日志".uid:: text,to_char( to_date( "日志"."日期", 'YYYY-MM' ), 'YYYY-MM' ) AS 年月,min(to_char( to_date( "日志"."日期", 'YYYY-MM' ), 'YYYY-MM' )) OVER(PARTITION BY "日志".uid) AS 首次付费年月
FROM"日志"
GROUP BY"日志".uid,to_char( to_date( "日志"."日期", 'YYYY-MM' ), 'YYYY-MM' )ORDER BY "日志".uid) AS t) AS t) AS tGROUP BY t.首次付费年月;

6. 计算留存率

-- 5. 计算留存率SELECT t.首次付费年月,t.首月,
round((t."+1月"::numeric / t.首月::numeric) * 100,2)::text || '%' AS "1月后",
round((t."+2月"::numeric / t.首月::numeric) * 100,2)::text || '%' AS "2月后",
round((t."+3月"::numeric / t.首月::numeric) * 100,2)::text || '%' AS "3月后",
round((t."+4月"::numeric / t.首月::numeric) * 100,2)::text || '%' AS "4月后"
FROM(SELECT t.首次付费年月,
count(distinct case when t.年月差额 = 0 then t.uid else NULL end) AS 首月,
count(distinct case when t.年月差额 = 1 then t.uid else NULL end) AS "+1月",
count(distinct case when t.年月差额 = 2 then t.uid else NULL end) AS "+2月",
count(distinct case when t.年月差额 = 3 then t.uid else NULL end) AS "+3月",
count(distinct case when t.年月差额 = 4 then t.uid else NULL end) AS "+4月"
FROM (SELECT * FROM (SELECT *,round((to_date(t.年月,'YYYY-MM') - to_date(t.首次付费年月,'YYYY-MM')) / 30,0) AS 年月差额
FROM (SELECT"日志".uid:: text,to_char( to_date( "日志"."日期", 'YYYY-MM' ), 'YYYY-MM' ) AS 年月,min(to_char( to_date( "日志"."日期", 'YYYY-MM' ), 'YYYY-MM' )) OVER(PARTITION BY "日志".uid) AS 首次付费年月
FROM"日志"
GROUP BY"日志".uid,to_char( to_date( "日志"."日期", 'YYYY-MM' ), 'YYYY-MM' )ORDER BY "日志".uid) AS t) AS t) AS tGROUP BY t.首次付费年月) AS t;

END -

对比Excel系列图书累积销量达15w册,让你轻松掌握数据分析技能,可以点击下方链接进行了解选购:

同期群分析是什么?教你用 SQL 来搞定相关推荐

  1. 数据分析方法 - 同期群分析

    记录通过网上各类文章学习关于同期群分析的笔记,如有侵权,请联系本人删除文章. 举例 该例出自知乎"同期群"分析的好处是什么? - 于晓松 例 1:一个 App,某一天有 100 位 ...

  2. Python 数据分析实战:经典的同期群分析

    作者 | 周志鹏 责编 | 郭   芮 本文首先对同期群分析的概念做了简短介绍,然后循着数据概览.数据清洗.思路剖析.单点实现以及最终实现的流程,力图做到每一步清晰明确和可复现.跟着实践一遍,无论是模 ...

  3. 使用Python进行同期群分析(Cohort Analysis)

    技术作者:小小明 理论修订:才哥 原文链接:https://blog.csdn.net/as604049322/article/details/116505941 文章目录 同期群分析 同期群分析概念 ...

  4. [转] 同期群分析Cohort Analysis

    一个漂亮的平均数完全是用数据创造出来的虚幻景象,会给我们的决策造成误导,因此我们需要掌握一个行之有效的方法来剖析真实的用户行为和用户价值,这个方法就是同期群分析(Cohort Analysis).事实 ...

  5. pandas练习_同期群分析(Cohort Analysis)

    1. 同期群分析理论回顾 参考 https://www.jianshu.com/p/145a13355fa1 2. 构造练习数据(Excel) 我们设计一份数据, 2019年期间某店铺的成交订单明细, ...

  6. 『数据分析』使用python进行同期群分析

    目录: 同期群分析概念 数据读取 分析方向 数据预处理 同期群分析 从留存率角度进行同期群分析 从人均付款金额角度进行同期群分析 从人均购买次数角度进行同期群分析 每月总体付费情况 将结果导出网页或截 ...

  7. 同期群分析(Cohort Analysis)

    什么是同期群? 将相同时间段内具有共同行为特征的用户划分为同一个群体,其被称为同期群."共同行为特征"是指在某个时间段内的行为相似.最常见的是按不同时间的新增用户来划分,然后分析留 ...

  8. 分群思维(五)特殊的分群思维-同期群分析

    分群思维(五)特殊的分群思维-同期群分析 小P:小H,用户留存率降了,增长也缓慢了,这是什么原因啊,会不会是新用户出了问题啊,还是说老用户不满意了? 小H:可以尝试同期群分析,看看新老用户的差异. i ...

  9. 零售行业交易数据分析(3)——群组/同期群分析(留存率分析)

    内容简介 本文介绍了群组分析(同期群分析)的方法以及Python实现过程,并继续对一家零售公司的交易数据进行用户留存分析和可视化. 本系列的文章: <零售行业交易数据分析(1)--客户终身价值( ...

最新文章

  1. 用计算机KADIO算方差,KADIO计算器怎样算方差
  2. 跨站请求伪造攻击(CSRF)
  3. 【进程】进程通信-信号方式(中断)
  4. 车贷P2P平台设计市场需求文档(MRD)
  5. 工作3、5年,选择大厂还是小厂?
  6. linux 错误信息 输出到管道,linux grep通过管道输出到head出现write error: Broken pipe错误...
  7. input 模糊匹配功能 文本框模糊匹配(纯html+jquery简单实现) demo
  8. linux 添加硬盘
  9. 改写反话技巧_2021考研唐迟阅读技巧总结
  10. Karta:IDA源代码辅助插件
  11. 读书篇:《细说PHP》二、PHP的基本语法、变量、常量、以及运算符
  12. 极光笔记丨搭建UMS私有云文件服务器
  13. 应用,传输层协议和端口对应关系
  14. JAVA实现PDF合并、拆分代码工具类
  15. 网络棋牌游戏创造快乐心情
  16. Python编写端口扫描器
  17. 2018,我的这一年
  18. UGUI源码解析——总览
  19. 基于心电的疲劳分析论文
  20. 每天一篇论文 289/365Deep Reinforcement Learning for Robotic Pushing and Picking in Cluttered Environment

热门文章

  1. Oracle vm visualbox虚拟机双网卡设置-解决主机无法连接靶机的问题
  2. python分析出nba球员的位置_虎扑热帖|Python数据分析|NBA的球星们喜欢在哪个位置出手...
  3. 【ImportError: cannot import name ‘json‘ from ‘itsdangerous‘】
  4. 监控安防人员入门基础
  5. 解决LS-DYNA中负体积方法
  6. 俄乌战争乌克兰死了多少人?
  7. 雏鸟(1)--Foundation
  8. 计算机中的同步和异步
  9. 【风口浪尖】徽剑万言书直指蛮子薛身份 “发家史”
  10. 企业大楼AI无感考勤解决方案