什么是队列分析?和普通留存有何不同?
考察意图
留存是数据岗最高频指标之一,但这题考的不是会不会算次日留存,而是候选人是否理解「整体留存会被用户结构带节奏」。面试官想听:队列如何把同一批人钉住、和普通留存差在哪、什么时候必须拆队列,而不是只报一个大盘数字。
回答框架
- 先给定义:队列(cohort)是同一时期、经历同一关键事件的一批人,跟踪这批人后续行为。
- 对比普通/整体留存:整体是「当天所有活跃用户混在一起」;队列是「同一批人往后看」。
- 点破差异的本质:结构效应——人变了,整体会动;队列没动,说明产品对老用户未必变差。
- 落地讲法:怎么建队列、怎么读热力图、怎么用来评估渠道/版本/活动。
参考答案(口述版)
一句话:队列分析是把用户按「何时、因何事进入观察」切成一批一批,然后看这同一批人在第 1 天、第 7 天、第 30 天还在不在;普通留存(整体次日/周留存)则是把当天所有人搅在一个锅里算回访率。
队列(cohort / 同期群)最常见的切法是获取队列:同一天(或同一周)新注册 / 首活 / 首单的用户算一批。也可以做行为队列:同一周完成了「第一次加购」「第一次看完课」的人算一批。关键不是日期本身,而是「进入队列的事件对齐」——这批人的「第 0 天」是同一类事件。
普通留存在算什么:D 日活跃用户里,有多少人在 D+1 还活跃。分母每天都在换人。新渠道灌进来一波低质量用户、活动把羊毛党冲进来、某天大盘里老用户占比突然变高,整体次日留存都会跳,哪怕你对「上周那批新用户」什么都没改。
队列留存在算什么:对「9 月 1 日新增」这一批人,看他们自己的 D1 / D7 / D30。9 月 2 日新增是另一行。热力图的一行是一个队列,一列是存活天数。这样你比较的是「同一批人随时间的衰减」,不是「今天这锅汤咸不咸」。
为什么必须拆:
1. 结构效应(composition):整体留存掉了,先问是「老队列也掉」还是「新进来的人更差」。后者是拉新质量/渠道问题,前者才更像产品或体验衰退。
2. 评估干预:发版、改注册流程、换激励,应对「干预后的新队列」看曲线,而不是拿大盘和上周比——大盘里大部分人根本没碰到新流程。
3. 渠道 / 活动复盘:同一产品,应用商店、信息流、线下地推的队列曲线往往差一截;只看整体会被占比最大的渠道淹没。
实现上,先有一张用户日活去重表 dau(user_id, dt),再钉住进入日:
WITH cohort AS (
SELECT user_id, MIN(dt) AS cohort_dt
FROM dau
GROUP BY 1
),
labeled AS (
SELECT
c.cohort_dt,
DATEDIFF(d.dt, c.cohort_dt) AS day_n,
d.user_id
FROM cohort c
JOIN dau d ON d.user_id = c.user_id
AND d.dt >= c.cohort_dt
)
SELECT
cohort_dt,
COUNT(DISTINCT CASE WHEN day_n = 0 THEN user_id END) AS size,
COUNT(DISTINCT CASE WHEN day_n = 1 THEN user_id END) * 1.0
/ COUNT(DISTINCT CASE WHEN day_n = 0 THEN user_id END) AS d1,
COUNT(DISTINCT CASE WHEN day_n = 6 THEN user_id END) * 1.0
/ COUNT(DISTINCT CASE WHEN day_n = 0 THEN user_id END) AS d7
FROM labeled
GROUP BY 1;
口径要先对齐:分母是队列人数(D0 那批),分子是这批人里第 N 天仍活跃的人数;活跃定义、时区、自然日还是滚动 24h,必须和整体留存用同一套,否则两张图不能对读。
口述收尾:先说「队列钉住同一批人,整体混着看」;再主动提「整体掉了先拆结构,别急着判产品变差」。面试官一般会顺着问热力图或渠道。
关键词
面试官可能的追问
追问 1:整体次日留存掉了,但最近几周的新队列 D1 没掉,说明什么?
优先怀疑结构,而不是产品突然变差。常见原因:老用户活跃在衰减、大盘里新用户占比升高(新用户 D1 天然低于老用户次日回访)、或某条差渠道量上来了但还没反映到「最近队列」的口径(比如你看的是周队列、掉的是日整体)。下一步:按新老、渠道、版本切整体,并核对分母有没有被活动/刷量撑大。
追问 2:获取队列和行为队列怎么选?
问「这批人从哪来、质量如何」用获取队列(注册日/首活日/首单日)。问「完成了某个关键动作的人,后续是否更留得住」用行为队列(首次加购、首次发布、首次付费)。行为队列的 D0 是该事件日,不是注册日,别和新增留存混报。评估某次改版对「新进来的人」的影响,用改版后的获取队列;评估「已经会用核心功能的人」是否更粘,用行为队列。
追问 3:队列热力图怎么读?一行一列分别是什么?
一行一个队列(通常按获取日/周),一列是存活期(D0、D1、D7…),格子是该队列在该天的留存率。横着看是一条衰减曲线;竖着看同一存活期、不同队列,用来比「这周新用户是不是不如上周」。读图时先看样本量:队列太小(几十人)的波动不要当趋势。还要注意右下角是「还没活到那天」的空窗,不是留存为 0。
常见踩坑
- 把整体次日留存直接叫队列留存,分母每天在换人却当同一批
- 队列的活跃定义、时区、自然日和整体留存不一致,两张图对不上还硬解释
- 小样本队列(活动日、小渠道)把噪声当成渠道质量差异
- 只报 D1,不看曲线形状——有的渠道 D1 高、D7 塌,是激励羊毛不是真留存
记忆锚点
整体留存混着看;队列把同一批人钉住,才能分清是产品变差还是人变了。