同期群分析
问题
什么是同期群分析(Cohort Analysis)?和普通留存分析有什么区别?
答案
什么是同期群分析
同期群分析是将用户按某个共同事件的发生时间分组,然后跟踪每组在后续时间段的行为指标。最常见的是按首次注册/首次购买的时间分组,观察留存或付费行为。
留存矩阵
同期群分析最经典的输出就是留存矩阵:
| Cohort(注册月) | 用户数 | 第 1 月 | 第 2 月 | 第 3 月 | 第 4 月 | 第 5 月 |
|---|---|---|---|---|---|---|
| 2024-01 | 10,000 | 35% | 22% | 18% | 15% | 14% |
| 2024-02 | 12,000 | 38% | 25% | 20% | 17% | - |
| 2024-03 | 11,000 | 40% | 28% | 22% | - | - |
| 2024-04 | 15,000 | 42% | 30% | - | - | - |
| 2024-05 | 13,000 | 45% | - | - | - | - |
如何阅读留存矩阵
- 横向看(同一行):某一批用户随时间的留存衰减 → 看用户生命周期
- 纵向看(同一列):不同批次在同一生命周期阶段的留存 → 看产品改进效果
- 如果纵向越来越好(2024-05 的第 1 月 > 2024-01 的第 1 月),说明产品在持续改善
SQL 实现
按月 Cohort 留存矩阵
WITH cohort AS (
-- 确定每个用户的 Cohort(首次活跃月)
SELECT
user_id,
DATE_FORMAT(MIN(event_date), '%Y-%m') AS cohort_month
FROM user_events
GROUP BY user_id
),
activity AS (
-- 每个用户每月是否活跃
SELECT DISTINCT
user_id,
DATE_FORMAT(event_date, '%Y-%m') AS active_month
FROM user_events
)
SELECT
c.cohort_month,
COUNT(DISTINCT c.user_id) AS cohort_size,
-- 第 0~5 个月的留存率
ROUND(COUNT(DISTINCT CASE
WHEN PERIOD_DIFF(EXTRACT(YEAR_MONTH FROM STR_TO_DATE(a.active_month, '%Y-%m')),
EXTRACT(YEAR_MONTH FROM STR_TO_DATE(c.cohort_month, '%Y-%m'))) = 1
THEN a.user_id END) * 100.0 / COUNT(DISTINCT c.user_id), 1) AS month_1,
ROUND(COUNT(DISTINCT CASE
WHEN PERIOD_DIFF(EXTRACT(YEAR_MONTH FROM STR_TO_DATE(a.active_month, '%Y-%m')),
EXTRACT(YEAR_MONTH FROM STR_TO_DATE(c.cohort_month, '%Y-%m'))) = 2
THEN a.user_id END) * 100.0 / COUNT(DISTINCT c.user_id), 1) AS month_2,
ROUND(COUNT(DISTINCT CASE
WHEN PERIOD_DIFF(EXTRACT(YEAR_MONTH FROM STR_TO_DATE(a.active_month, '%Y-%m')),
EXTRACT(YEAR_MONTH FROM STR_TO_DATE(c.cohort_month, '%Y-%m'))) = 3
THEN a.user_id END) * 100.0 / COUNT(DISTINCT c.user_id), 1) AS month_3
FROM cohort c
LEFT JOIN activity a ON c.user_id = a.user_id
GROUP BY c.cohort_month
ORDER BY c.cohort_month;
Cohort 分析的变体
| 变体 | Cohort 划分依据 | 分析目的 |
|---|---|---|
| 时间 Cohort | 首次注册/购买的时间 | 留存趋势、产品改进效果 |
| 行为 Cohort | 首次使用某功能 | 功能价值评估 |
| 渠道 Cohort | 获客渠道 | 各渠道用户质量对比 |
| 付费 Cohort | 首次付费时间 | 付费用户生命周期 |
同期群分析 vs 普通留存分析
| 对比 | 普通留存分析 | 同期群分析 |
|---|---|---|
| 数据聚合 | 所有用户混在一起 | 按 Cohort 分组 |
| 能否看趋势 | ❌ 新老用户混杂 | ✅ 控制变量对比 |
| 受新增影响 | ⚠️ 新增暴涨会稀释留存 | ✅ 不受影响 |
| 能否评估改进 | 困难 | ✅ 纵向对比不同 Cohort |
常见面试问题
Q1: 为什么要用同期群分析?直接看整体留存率不行吗?
答案:
- 整体留存率会被新增用户稀释。如果某月拉了一大波新用户,短期留存数字会变差(因为新用户还没到第 7 天)
- 同期群把不同时期进来的用户分开,控制了"入组时间"这个变量
- 才能真正回答"产品改进有没有让留存变好"
Q2: 留存矩阵中,如果纵向留存在下降(越来越差),说明什么?
答案:
- 后进来的用户质量下降(可能是渠道质量变差)
- 或产品体验变差(Bug、功能变更)
- 需要按渠道拆分 Cohort,排除是否是某个渠道的问题
Q3: Cohort 的粒度应该怎么选?
答案:
| 粒度 | 适用场景 |
|---|---|
| 日 Cohort | 高频产品(社交、游戏)、关注次日留存 |
| 周 Cohort | 中频产品、消除周末效应 |
| 月 Cohort | 低频产品(电商)、长期趋势 |
- 原则:Cohort 内的用户应尽量相似(同一批拉新、同一个活动)