做产品或者运营,最怕听到的一个词就是“流水账”——钱赚进来又花出去,池子里的水始终没见涨。为什么?因为留存没做好。
很多新手一上来就盯着DAU(日活)或者新增用户数看,觉得自己每天拉新几千人是牛人。但等夜深人静一算账,发现第二天只剩一半人,第三天剩三分之一……这就像往一个底部有洞的桶里倒水,倒得越欢,漏得越快。
今天咱们不整那些虚头巴脑的理论,我把留存率这个事儿掰开了、揉碎了讲清楚,顺便把那些让无数运营踩坑的“套路”都给你排掉。
一、 留存率到底是个啥?别被名字骗了
首先得纠正一个概念:留存率 ≠ 用户忠诚度的唯一标准,但它是最直观的“健康指标”。
想象一下,你开了家餐馆。今天来了100个客人(新增),一个月后,这100人里又有20个人回来吃了第二顿(留存)。那你的留存率就是20%。
但这20%里,有5个人是每周都来,15个人是偶尔来凑热闹。这能说明你餐馆好吗?不一定。所以,看留存不能只看一个总数,得分群、分层、看趋势。
核心逻辑: cohort(用户群)分析
留存的核心是“ cohort analysis”(同期群分析)。简单说,就是把同一时间段内注册/首次使用的用户归为一组,然后观察他们在随后不同时间点还有多少人留下来。
比如:
- 3月1日-3月7日注册的用户,算作“3月1周群”。
- 看这群用户在3月8日、3月15日、3月30日还有多少人活跃。
这样做的目的是剔除新增用户对数据的干扰。如果你只看总留存,上个月来的老用户和新来的用户混在一起,根本看不出产品自身的生命力。
二、 留存率的正确计算公式(附代码示例)
公式很简单,但怎么算、算哪一天,容易搞错。
1. 基础公式
\[ \text{留存率} = \frac{\text{第N天仍活跃的原新增用户数}}{\text{第1天的新增用户总数}} \times 100\% \]
2. 关键定义:什么是“新增用户”?
这里有个大坑!新增用户(New User) ≠ 当天活跃用户。
- 新增用户:指首次安装/注册/启动App的用户。
- 当天活跃用户(DAU):当天有任何行为(启动、点击等)的用户,包含老用户。
错误算法:用当天DAU / 昨天DAU = 留存率 ❌ 正确算法:用“首日新增用户中,在第N天仍活跃的人数” / “首日新增用户总数” ✅
3. SQL 代码示例(以Hive/Spark SQL为例)
假设你有一张用户行为表 user_events,字段包括:
user_id:用户IDevent_time:事件发生时间event_type:事件类型(’install’ 代表首次安装/注册,’active’ 代表当日活跃)dt:日期分区(格式 yyyy-MM-dd)
我们要计算每日新增用户的次日留存率(即第2天还活跃的比例)。
WITH new_users AS (
-- Step 1: 找出每天的首次安装用户
SELECT
dt,
user_id,
MIN(event_time) AS first_install_time
FROM user_events
WHERE event_type = 'install'
GROUP BY dt, user_id
),
retained_users AS (
-- Step 2: 找出这些用户在安装后第二天仍活跃的记录
-- 这里简化逻辑:只要用户在 dt+1 有任意活跃行为就算留存
SELECT
nu.dt,
nu.user_id,
COUNT(1) AS retained_count
FROM new_users nu
JOIN user_events ue
ON nu.user_id = ue.user_id
AND ue.dt = DATE_ADD(nu.dt, 1) -- 次日
AND ue.event_type != 'install' -- 排除再次安装的情况(视业务而定)
GROUP BY nu.dt, nu.user_id
),
daily_new AS (
-- Step 3: 统计每天的新增用户总数
SELECT
dt,
COUNT(user_id) AS new_user_count
FROM new_users
GROUP BY dt
)
-- Step 4: 计算留存率
SELECT
d.dt,
d.new_user_count,
IFNULL(r.retained_count, 0) AS retained_count,
ROUND(
IFNULL(r.retained_count, 0) * 100.0 / d.new_user_count,
2
) AS retention_rate_pct
FROM daily_new d
LEFT JOIN retained_users r
ON d.dt = r.dt
ORDER BY d.dt DESC
LIMIT 30;
代码解读:
new_usersCTE:先锁定每天“第一次来”的人是谁,避免老用户被重复计算。retained_usersCTE:通过时间偏移(DATE_ADD(dt, 1))找到这些人在“明天”是否出现。- 最终将保留人数除以新增总人数,得到百分比。
💡 提示:如果你的业务是“签到”类,留存定义可以是“连续N天登录”;如果是“游戏”,可能是“7日内充值”;定义需根据业务目标调整,但基数必须是首日新增,这点不能变。
三、 新手必踩的5大误区(附真实案例)
误区1:把“日留存”当成唯一指标,忽视“周留存”和“月留存”
案例:某社交App上线后,次日留存高达85%,运营团队觉得产品非常成功,加大投放。结果一个月后,月留存不到5%,用户全部流失,公司倒闭。
为什么错:次日留存高,说明“钩子”做得好(比如新人礼包、引导流程顺畅),但用户没有形成习惯。真正的留存要看30日留存或60日留存,它反映的是用户是否真正认可产品价值。
✅ 正确做法:关注N7、N14、N30留存。游戏行业看N1留存和N7留存,工具类APP看N30留存更有意义。
误区2:混淆“新增用户”和“活跃用户”,导致留存率虚高
案例:某电商APP统计“昨日新增用户今日留存”,发现留存率90%。仔细一查,发现这“新增用户”里包含了大量老用户重新下载后打开APP的记录(被误判为新用户)。
为什么错:如果用户多次安装/卸载,每次都被算作“新增”,那么次日留存率会被严重高估,因为很多是“回流用户”而非“真正的新增”。
✅ 正确做法:用user_id + first_install_time 来定义唯一的新增用户群,并用device_id或fingerprint辅助去重,确保“新增”是真实的首次行为。
误区3:只看整体留存,不看分群留存
案例:某内容APP整体7日留存率为20%,看起来不错。但细分后发现:
- 通过SEO搜索进来的用户,7日留存率仅5%(他们只想看一篇文章就走)
- 通过KOL推荐来的用户,7日留存率达45%
运营团队只看了整体数据,继续加大SEO投放,结果成本越来越高,用户质量却越来越差。
为什么错:不同渠道、不同来源、不同行为路径的用户,留存能力天差地别。整体数据会掩盖问题。
✅ 正确做法:分层分析:
- 按渠道分(自然流量 vs 付费广告)
- 按用户行为分(首次使用路径A vs 路径B)
- 按设备/地区分
误区4:认为“留存率高 = 产品好”,忽视“留存率低 = 产品差”的因果关系
案例:某工具类APP留存率只有10%,产品团队认为是“用户太挑剔”,继续优化UI和动画,试图“留住用户”。但根本没解决核心问题:这个工具没有差异化功能,用户用完就走,没有理由留下。
为什么错:留存率低,根本原因是产品价值未被感知,而不是体验细节。优化UI是“锦上添花”,不是“雪中送炭”。
✅ 正确做法:留存低时,先问三个问题:
- 用户为什么来?(价值主张)
- 用户为什么走?(流失原因调研)
- 用户用什么来替换我?(竞品分析)
误区5:用“算术平均”计算多日留存,而非“队列追踪”
案例:某公司统计“周留存率”,方法是:把本周所有活跃用户中,上周新增的用户数,除以本周新增用户数。结果算出来留存率30%。
但正确做法应该是:追踪上周新增的特定人群,看他们在本周还有多少人活跃。两种算法结果可能相差甚远。
为什么错:算术平均会混入“本周新增用户中的一部分”,导致数据失真。
✅ 正确做法:坚持cohort(队列)追踪,始终基于“首日新增用户”这一固定群体进行计算。
四、 如何提升留存率?三个实战技巧
技巧1:优化“首因效应”——让前7天成为关键
用户流失高峰期通常在前7天。这期间,你需要:
- Aha Moment(顿悟时刻):让用户尽快体验到产品的核心价值。比如知乎让用户“第一次回答”获得点赞,抖音让用户“刷到第一条感兴趣的视频”。
- 新手引导轻量化:不要一上来就弹出10个功能介绍,而是通过“任务体系”让用户在操作中自然学习。
技巧2:建立“流失预警”机制
不要等用户走了才后悔。设置阈值:
- 用户3天未登录 → 推送优惠券
- 用户7天未打开 → 触发短信/电话回访
- 用户30天未活跃 → 标记为流失用户,分析原因
技巧3:用“游戏化”和“社交关系”锁定用户
- 游戏化:签到、勋章、排行榜,利用人的成就感心理。
- 社交关系:让用户邀请朋友一起使用(如微信读书的“好友正在读”),关系链是留存的最强护城河。
五、 总结:留存是产品的生命线
记住一句话:新增是面子,留存是里子。
没有留存的拉新,就像往漏水的桶里倒水,倒得越多,亏得越惨。而有了留存,拉新才是“造血”,而不是“输血”。
下次再看数据报表时,别只盯着DAU那个数字傻笑,多花5分钟看看不同 cohort 的留存曲线。那条曲线,才是你产品真正的生命力所在。
如果数据不好,别急着骂用户,先问问自己:我给用户留下了什么理由?
