留存模型是什么
留存模型用来回答“某一批新增用户之后还在不在”。做法分两步:先给每个用户取首次行为日期作为 cohort(首日分组),再统计这批用户在首日之后第 N 日或第 N 周是否仍有活跃行为,最后按首日与留存天数(day_diff)聚合出人数。输出通常是一张首日乘留存天数的明细表,看板再把它画成留存曲线;分母是当日新增用户数,分子是这批人中第 N 日仍活跃的人数,分母口径一变整条曲线就会跳变。
基本信息
| 口径 | 首日 cohort + 第 N 日活跃标志 |
|---|---|
| 粒度 | 首日 × 用户 × 留存天数 |
| 算法 | 按日期差 day_diff 计算 |
| 活跃定义 | 需与业务统一:登录、下单或访问 |
| 分母 | 当日新增(或当日活跃)用户数 |
典型使用场景
- 评估渠道质量:同样投放成本下哪个渠道的次留与七留更高
- 版本或策略灰度后对比新用户的留存曲线是否改善
- 新用户引导流程优化,观察首日与次日留存的变化
- 流失预警:看特定 cohort 在第 7 日、第 30 日的断崖点
- 按首单或首访拆分 cohort,验证不同首因的留存差异
N 日留存 SQL
N 日留存 SQL
-- 首日分组:每个用户第一次登录的日期
WITH first_day AS (
SELECT user_id, MIN(dt) AS first_dt FROM dwd_user_login_di GROUP BY user_id
)
SELECT f.first_dt,
DATEDIFF(l.dt, f.first_dt) AS day_diff, -- 留存天数
COUNT(DISTINCT l.user_id) AS user_cnt -- 第 N 日仍活跃的人数
FROM first_day f
JOIN dwd_user_login_di l ON f.user_id = l.user_id
WHERE DATEDIFF(l.dt, f.first_dt) BETWEEN 0 AND 30
GROUP BY f.first_dt, DATEDIFF(l.dt, f.first_dt);
-- 留存率 = 第 N 日人数 / 首日新增人数常见留存口径
| 口径 | 第 N 日定义 | 特点 |
|---|---|---|
| 次留 | 第 1 日活跃 | 敏感,反映首日体验 |
| 七日留存 | 第 7 日活跃 | 反映习惯养成 |
| 滚动留存 | 第 1 日到第 N 日任一天活跃 | 数值高于同日留存 |
| 周留存 | 按周对齐的留存 | 适合低频业务 |
留存率的分母是当日新增用户数,分子是第 N 日仍活跃的这批人;分母口径(是否含自然新增与回流)变化会让整条曲线跳变,变更时要在看板注明。
把新老用户混进同一个 cohort,留存率会被老用户拉高;cohort 的定义必须与业务确认,是首访、首登还是首单。
活跃定义前后不一致是留存分析最常见的错误:登录与下单是两种口径,中途换定义会让曲线出现无法解释的台阶。