留存分析模型

留存模型按首日分组加后续活跃天数组织:先取用户首日行为日期作为 cohort,再统计第 N 日或第 N 周是否活跃;输出明细留存表或透视结果,供看板展示留存曲线。

留存模型是什么

留存模型用来回答“某一批新增用户之后还在不在”。做法分两步:先给每个用户取首次行为日期作为 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 的定义必须与业务确认,是首访、首登还是首单。
活跃定义前后不一致是留存分析最常见的错误:登录与下单是两种口径,中途换定义会让曲线出现无法解释的台阶。

易错点

  • 活跃定义中途更换(先按登录、后按下单),留存曲线出现无法解释的断崖
  • 把新老用户混进同一 cohort 计算,留存率被老用户拉高,误判产品健康度
  • 分母用了当日活跃用户而非新增用户,留存率长期偏低且无法与新增数对上
  • 按自然日计算跨时区业务的 day_diff,海外用户的留存天数整体偏移一天

数据来源与参考

  • 行业用户增长分析实践(留存口径)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌