用户留存率计算方式详解 公式拆解 常见误区 提升策略一站式指南
用户留存率计算方式详解 公式拆解 常见误区 提升策略一站式指南
先从一个故事开始
你开了一家咖啡馆,第一天来了100位客人,第二天有40位回来继续喝咖啡,第三天又有12位回来,第四天只剩下3位,之后慢慢趋于稳定——每天可能就1-2位。
如果你问我”你的用户留存率怎么样”,我肯定不能只说”还行”或者”不太好”。因为不同人说留存率,可能根本说的是两件事。
这篇文章,就是想帮你把”用户留存率”这件事,彻底说清楚。
一、留存率的本质:它到底在算什么?
很多人对留存率的理解停留在”回头率”三个字上,但这个词太模糊了。
留存率的本质,是衡量用户在某个时间点之后,是否依然被你的产品”留住”了。
它回答的核心问题是:第一次来的用户,有多大概率在N天后(或N周后、N月后)依然活跃?
这里的关键是——分母是第一次来的用户,而不是当前所有用户。
举个例子你就明白了:
假设1月1日那天有100个新用户注册了你的App。 到1月8日,这100人里还有20人打开了App。 那么1月1日这批用户的7日留存率就是 20÷100 = 20%。
注意,这里的20人,是从”1月1日注册的人”里算的,不是1月8日当天登录的全部用户。这个区别特别重要,很多人一开始就搞混了。
二、留存率的完整计算公式拆解
2.1 基础公式
留存率最基础的计算公式是:
用户留存率 = 第N天仍活跃的原新客数 / 第N天新客总数 × 100%
或者用更通用的写法:
N日留存率 = (第N天仍活跃的用户数 / 第1天新增用户数) × 100%
举个例子:
假设你的产品数据如下:
| 日期 | 当日新增用户 | 当日仍活跃的新增用户 |
|---|---|---|
| 3月1日 | 1000人 | — |
| 3月2日 | 800人 | 3月1日新增中有300人活跃 |
| 3月3日 | 900人 | 3月1日新增中有200人活跃 |
那么:
- 次日留存率(1日留存) = 300 ÷ 1000 × 100% = 30%
- 2日留存率 = 200 ÷ 1000 × 100% = 20%
可以看到,3月1日新增的1000个用户,第二天只剩30%还在,第三天只剩20%还在。这个数字说明产品粘性比较一般,需要改进。
2.2 不同时间维度的留存率
留存率不是一个固定的天数,不同的业务场景需要不同的观察周期:
| 留存类型 | 说明 | 常见适用场景 |
|---|---|---|
| 次日留存(1日留存) | 用户注册后第二天是否回来 | 所有产品,最基础指标 |
| 7日留存 | 注册后第7天是否回来 | 大多数App的核心指标 |
| 14日留存 | 注册后第14天是否回来 | 游戏类产品常用 |
| 30日留存 | 注册后第30天是否回来 | 电商、SaaS类产品 |
为什么时间维度重要?
如果你做的是工具类App(比如计算器、手电筒),用户用完就走,次日留存可能很高,但30日留存就很低——这是正常的。
如果你做的是社交或游戏类产品,用户需要时间”上瘾”,7日留存、30日留存才是关键指标。
2.3 留存曲线的完整视角
单一的天数留存率只能给你”快照”,但留存曲线能让你看到用户的完整”生命周期轨迹”。
日期: 1 2 3 4 5 6 7
留存: 60% 45% 38% 33% 30% 28% 27%
从上面的曲线可以看出,流失最严重的是第一天到第二天(掉了15个百分点),之后逐渐趋于平缓。这说明用户在第二天是关键流失点。
2.4 分群留存(更专业的做法)
高级的分析不会只看整体,而是会按不同维度拆分留存:
- 按渠道:来自抖音的用户 vs 来自搜索的用户
- 按版本:v1.0用户 vs v2.0用户
- 按行为:完成了注册流程的用户 vs 只浏览未注册的用户
- 按用户类型:免费用户 vs 付费用户
渠道 次日留存 7日留存
抖音 35% 18%
自然搜索 50% 32%
广告投放 25% 10%
这个分群分析的价值在于:你会发现自然搜索渠道的用户质量明显更高,而广告投放来的用户虽然量大但留存很差。这直接指导你调整投放策略。
2.5 留存率的代码实现示例
如果你是做数据分析的,下面用 Python 演示一下如何计算留存率:
import pandas as pd
import numpy as np
# 模拟用户行为数据
# first_login: 用户首次登录日期
# active_dates: 用户活跃的所有日期
data = {
'user_id': ['u001', 'u002', 'u003', 'u004', 'u005'],
'first_login': ['2024-01-01', '2024-01-01', '2024-01-01', '2024-01-02', '2024-01-02'],
'active_dates': [
['2024-01-01', '2024-01-02', '2024-01-03', '2024-01-05'],
['2024-01-01', '2024-01-03', '2024-01-08'],
['2024-01-01'],
['2024-01-02', '2024-01-03', '2024-01-04'],
['2024-01-02', '2024-01-09']
]
}
df = pd.DataFrame(data)
df['first_login'] = pd.to_datetime(df['first_login'])
# 计算每个用户的活跃天数相对于首次登录的天数差
def calc_retention(row):
first = row['first_login']
dates = pd.to_datetime(row['active_dates'])
days = (dates - first).dt.days
return set(days) # 返回所有活跃天数的集合
df['active_day_set'] = df.apply(calc_retention, axis=1)
# 计算留存率(以1月1日新用户为例)
cohorts = df[df['first_login'] == '2024-01-01']
total_in_cohort = len(cohorts)
retention_by_day = {}
for day in range(0, 15): # 看15天的留存
retained = sum(
1 for user in cohorts['active_day_set']
if day in user
)
retention_by_day[f'第{day}日'] = retained / total_in_cohort * 100
for day, rate in retention_by_day.items():
print(f"{day}: {rate:.2f}%")
运行结果大致是:
第0日: 100.00%
第1日: 66.67%
第2日: 33.33%
第3日: 33.33%
第4日: 0.00%
第5日: 33.33%
第6日: 0.00%
第7日: 0.00%
...
这样你就得到了一个完整的留存表。实际业务中,数据量可能是几百万条,上面的逻辑同样适用,只是需要用更高效的方式(如 Spark 或 Hive SQL)来处理。
三、常见误区:这些坑千万别踩
误区一:把”次日留存”当成唯一标准
很多团队会把”次日留存率”当作万能指标,认为只要这个高就好。但实际上:
- 次日留存高但长期留存低:说明产品有”一次性吸引力”,但缺乏持续价值
- 次日留存低但长期留存高:说明产品有”慢热型用户”,需要更长的培育期
正确的做法是:同时关注次日、7日、30日留存,看整体趋势。
误区二:混淆”留存率”和”活跃率”
活跃率 = 某时段活跃用户 / 总用户数
留存率 = 某时段仍活跃的原新客 / 某时段新增新客
这两个指标完全不同。举个例子:
你的App总用户数是100万,其中有80万是从各个历史时段陆续积累来的。 今天有10万活跃用户。 活跃率是 10万 / 100万 = 10%。
但如果你是看1月1日新增的1000个用户,到1月8日还剩200人活跃。 那么1月1日的7日留存率是 200 / 1000 = 20%。
很多人把这两个搞混,导致对产品的判断完全错误。
误区三:只看平均值,不看分群
平均留存率会掩盖很多信息:
整体7日留存率是25%。 但按渠道拆分后发现:
- 自然流量用户:7日留存40%
- 付费广告用户:7日留存15%
- 老用户推荐:7日留存55%
只看平均数,你以为产品还行。但拆分后发现,付费广告的ROI可能极低——这些用户虽然量大,但留存差,长期来看会”稀释”整体质量。
误区四:留存率越高越好
虽然听起来反直觉,但过高留存率也可能有问题:
- 如果次日留存90%,可能说明你的产品是”刚需工具”(比如天气App),而不是”高频社交/内容产品”
- 如果留存率异常高但DAU在下降,可能是你在吸引大量低质量用户(比如靠虚假广告),这些用户虽然来了但不会带来长期价值
留存率应该放在行业基准和业务阶段的语境下理解,不要盲目追求数字本身。
误区五:把”留存”和”留存率”混为一谈
“用户留存”是一个动作——你通过哪些手段让用户留下来。
“留存率”是一个结果——用数字来衡量你留存的效率。
很多团队花了很多精力在”做留存”上(比如发优惠券、做推送),但从来没有系统性地算过”留存率”。这就相当于你一直在开车,但从来不看里程表。
误区六:不区分新增用户和存量用户
留存率的分母,必须是某一时段的新增用户,而不是所有用户。
有些团队会把”今天活跃的用户数 / 历史累积总用户数”叫做留存率,这其实是”活跃率”,不是留存率。两者数值可能相差甚远。
四、不同行业的留存率参考标准
了解行业标准,才能判断自己的留存率是”好”还是”差”:
| 行业 | 次日留存参考 | 7日留存参考 | 30日留存参考 |
|---|---|---|---|
| 社交App | 30%-40% | 15%-25% | 8%-12% |
| 工具类App | 50%-60% | 20%-30% | 10%-15% |
| 游戏类 | 40%-50% | 25%-35% | 15%-20% |
| 电商类 | 20%-30% | 10%-15% | 5%-8% |
| 内容/资讯 | 35%-45% | 20%-30% | 10%-15% |
| SaaS | 60%-70% | 40%-50% | 30%-40% |
注意: 以上只是粗略参考,具体数值会因产品成熟度、市场阶段、用户群体等因素有较大差异。 比如,拼多多早期的次日留存可能只有20%,但随着产品迭代和市场扩张,后续数字会大幅提升。
五、如何提升用户留存率:实战策略
5.1 找到流失的真正原因
提升留存的第一步,不是急着做策略,而是先搞清楚用户为什么离开。
常见的方法:
- 漏斗分析:看用户在哪个环节流失最多
- 用户访谈:直接问离开的原因
- 行为路径分析:看流失用户活跃时的行为特征
- A/B测试:对比不同策略的效果
注册 → 完成新手引导 → 核心功能体验 → 二次打开 → 长期活跃
↓ ↓ ↓ ↓ ↓
流失1 流失2 流失3 流失4 流失5
不同的流失点,对应不同的优化策略。
5.2 新手引导:黄金72小时
用户在首次使用产品的前72小时,是留存的关键窗口期。
有效的引导策略包括:
- 极简注册流程:能用微信/手机一键登录,就不要让用户填一堆信息
- 场景化引导:不是让用户”看完所有功能介绍”,而是直接带用户完成第一个核心操作
- 即时反馈:用户完成某个操作后,立刻给予正向反馈(动画、提示、奖励等)
举个例子: 很多App的新手引导是这样的:”欢迎使用XX!这里有以下功能:1…2…3…4…” 用户看了两秒就关掉了。
更好的方式是: “你想试试XX功能吗?点一下这里试试 👉” 用户操作完,立刻弹出:”太棒了!你已经完成了第一次…”
前者是”教用户”,后者是”让用户体验”。体验式的引导留存率高出很多。
5.3 个性化体验:让用户觉得”这是为我准备的”
当产品能记住用户的偏好、提供个性化的内容时,留存率会显著提升。
# 简单的个性化推荐逻辑示例
def get_personalized_feed(user_id, user_history):
"""根据用户历史行为推荐内容"""
# 获取用户最近浏览的内容类别
recent_categories = user_history.groupby('created_at').tail(5)['category'].value_counts()
# 按类别热度排序推荐
recommended = []
for cat in recent_categories.index:
items = get_items_by_category(cat).exclude(user_history['item_id'].tolist())
recommended.extend(items.head(3))
return recommended[:10]
这个代码只是一个简化示意,但核心思路是:了解用户喜欢什么,然后多推类似的。
5.4 建立用户习惯:触发-行动-奖励-投入模型
这是经典的Hook模型(由 Nir Eyal 提出):
触发 → 行动 → 奖励 → 投入
(T) (A) (R) (I)
- 触发:外部触发(推送通知、邮件)和内部触发(用户想到某个需求时主动打开)
- 行动:用户要完成一个简单明确的操作
- 奖励:用户完成后获得某种满足感(内容、积分、社交认可)
- 投入:用户在产品上投入了时间、数据、社交关系等
具体应用:
推送策略要精准:不要每天群发,而是根据用户行为触发
用户3天没打开App → 发送"好久不见,这里有5个新内容等你来看" 用户昨天购买了商品 → 发送"你的订单正在配送中,预计明天到达"让用户投入沉没成本:
- 完成个人资料
- 添加好友/关注
- 收藏/收藏内容
- 建立每日签到习惯
投入越多,离开的成本越高。
5.5 建立会员/付费体系
付费用户比免费用户的留存率高出数倍,这是有数据支撑的结论。
- 付费用户有”沉没成本”在心理上
- 付费后会更深度地使用产品功能
- 付费产品通常会提供更多专属价值
设计建议:
- 付费点要和产品核心价值挂钩,不要只卖”去广告”
- 提供免费试用期,让用户先体验再付费
- 设计会员等级体系,让付费有”升级感”
5.6 建立用户社区/社交关系
当用户在产品中有社交关系(关注、好友、社群)时,留存率会显著提升。
这是因为:
- 用户离开意味着要和社交关系断开
- 社交关系带来持续的内容消费动力
- 社区氛围会形成”大家都在用”的正向循环
举个例子: 小红书的留存率高,一个重要原因是用户在上面建立了”关注关系”和”内容收藏”。即使你不打开App,你也会想着”我关注的那个博主最近发了什么”。
同样的,微信游戏的小游戏留存率也高,因为朋友之间的互动形成了社交锁定。
5.7 持续迭代:用数据驱动优化
最后,也是最关键的一点:留存率的提升不是一次性的,而是持续迭代的过程。
你需要建立一个循环:
数据采集 → 分析洞察 → 制定策略 → 执行优化 → A/B测试 → 再采集 → ...
↑ ↓
└──────────────────── 持续迭代 ←─────────────────────┘
每个阶段都要看数据,而不是拍脑袋。
六、一个完整的实战案例
假设你是一个电商App的产品经理,你们最近发现留存率在下降。
第一步:先看数据
整体次日留存:从35%下降到28%
7日留存:从18%下降到12%
用户来源:自然流量占比提升,付费广告占比下降
新用户注册流程:最近做了改版,从3步缩减到2步
第二步:拆分分析
按来源拆分次日留存:
- 自然流量:32%(基本稳定)
- 付费广告:22%(下降了10个百分点)
- 老用户推荐:40%(下降了5个百分点)
按新用户注册流程拆分:
- 改版前用户:次日留存35%
- 改版后用户:次日留存28%
第三步:找原因
通过用户访谈发现:
- 付费广告用户质量本身就比较差(这是之前就知道的)
- 注册流程改版后,虽然减少了步骤,但部分用户”没搞清楚怎么注册”,导致转化失败或注册后放弃
第四步:制定策略
- 针对注册流程:增加注册过程中的即时帮助提示(如”下一步会帮你做什么”)
- 针对付费广告:调整投放人群定向,提高质量
- 针对广告用户:增加新用户的专属优惠券,提升首次购买转化率
第五步:验证效果
两周后重新看数据:
整体次日留存:恢复到31%
7日留存:恢复到15%
注册转化率:提升了8个百分点
虽然还没恢复到之前的水平,但趋势是向好的,继续优化。
七、总结:几个核心要点
回顾全文,最重要的几件事:
- 留存率 = 某时段仍活跃的原新客 / 某时段新增用户,分母一定是新客,不是总用户。
- 不要只看一个数字,次日、7日、30日留存要看趋势。
- 拆分比平均更有价值,按渠道、版本、行为分群分析。
- 新用户引导是关键,黄金72小时决定用户会不会留下。
- 让用户投入越多,离开成本越高,社交关系、数据积累、会员身份都是锁定的好方法。
- 持续迭代,留存率提升没有一劳永逸。
希望这篇文章能帮你把”用户留存率”这件事彻底理清楚。如果你正在做数据分析或者产品运营,记住:留存率不是一个冷冰冰的数字,它背后是每个真实用户的选择。 理解他们的选择,才能持续提升留存。
