做产品或者运营的时候,你是不是经常被老板问:“上个月拉来的那1000个用户,现在还剩多少个?” 这时候如果你只能愣住或者随便报个数,那就太丢分了。留存率可是产品的“心跳”,它直接决定了你的用户是来了就走,还是真正爱上了你。
别急,今天我们就把这个让无数新手头疼的指标掰开了、揉碎了讲清楚。我会带你从最基础的公式聊到代码实现,再给你看几个真实的案例,保证你看完就能上手算,还能算得漂亮。
为什么要算留存?它到底在告诉你什么?
首先,咱们得明白,留存率不是用来炫耀的,是用来诊断的。
想象一下,你开了一家奶茶店。
- 第一天来了100个人买奶茶。
- 第二天,只有10个人再来了。
- 第七天,只有5个人再来了。
这时候,你会怎么想?
- 是奶茶太难喝?(产品问题)
- 是价格太贵?(定价问题)
- 还是竞争对手搞了促销?(市场问题)
如果你连留存率都不知道,你就只能在黑暗中摸索。但如果你算出了次日留存是10%,七日留存是5%,你就能知道:绝大多数用户在第一次尝试后就流失了。这就像医生看化验单,数值异常才能对症下药。
所以,留存率的核心意义是:衡量用户对你的产品是否真的“上头”。
留存率的黄金公式:别搞错了分母!
很多新手最容易犯的错误,就是把“当前在用的用户数”除以“总用户数”。错!大错特错!
正确的留存率公式是这样的:
\[ \text{留存率} = \frac{\text{第N天还在使用的初始用户数}}{\text{第1天新增的用户总数}} \times 100\% \]
这里有几个关键点,你一定要拿小本本记下来:
- 分母是“第1天新增的用户”:这是你的“ cohort ”(同期群)。比如,我们看的是3月1日新增的用户,那么分母就是3月1日那天注册的所有人。
- 分子是“第N天还在使用”:这里的“还在使用”是指第N天有活跃行为(比如打开APP、登录、下单等,具体看你们定义的核心行为)。
- 时间窗口要对应:次日留存看的是第2天,7日留存看的是第8天,30日留存看的是第31天。
举个例子说明
假设你在3月1日新增用户1000人:
- 3月2日,这1000人里有100人再次活跃。
- 3月8日,这1000人里有50人再次活跃。
- 4月1日,这1000人里有20人再次活跃。
那么:
- 次日留存率 = 100 / 1000 = 10%
- 7日留存率 = 50 / 1000 = 5%
- 30日留存率 = 20 / 1000 = 2%
看懂了吗?分母始终是3月1日那批人,而不是所有历史用户。这样算出来的,才是这批新用户真正的“忠诚度”。
不同时间节点的留存率,代表什么?
为什么非要算次日、7日、30日?这三个数字可不是随便选的,它们分别代表了用户生命周期的不同阶段。
次日留存率:验证“第一印象”
次日留存是最简单的,也是最残酷的。它回答的问题是:用户第二天还会回来吗?
- 如果次日留存很低(比如低于10%),说明你的“冷启动”有问题。可能是新手引导太烂,可能是产品核心功能没让用户感受到价值,也可能是用户纯粹是点错进来的。
- 对于工具类APP,次日留存20%左右算及格;对于游戏,次日留存50%以上才算优秀。
实际建议:如果你的次日留存低,别急着搞大活动拉新,先回头看看新用户进来的前三分钟,他到底经历了什么。
7日留存率:验证“核心体验”
7日留存看的是用户是否养成了初步的习惯。一周时间,足够让用户从“好奇”变成“习惯”或者“失望”。
- 7日留存率高,说明用户已经找到了产品的“啊哈时刻”(Aha Moment),也就是那个让他觉得“这产品真香”的瞬间。
- 如果7日留存远低于次日留存,说明用户只是被新鲜感吸引,但找不到持续使用的理由。
实际建议:分析7日留存,可以看看那些在第3-5天活跃的用户,他们做了什么特别的事?是完成了某个任务?还是参与了某个活动?把这些动作复制给新用户。
30日留存率:验证“长期价值”
30日留存是衡量用户忠诚度的金标准。一个月后还在用的,才是真正的核心用户。
- 这个指标对于内容型产品(比如视频、社交)非常重要。
- 如果30日留存低,说明产品缺乏长期粘性,用户用完即走,没有形成社区或习惯。
实际建议:30日留存可以通过构建用户成长体系、会员权益、社区互动来提升。让用户觉得“不回来会有损失”。
用代码实现留存率计算:数据分析师的必备技能
光说不练假把式。假设你手里有一份用户行为日志表,里面记录了每个用户的user_id和event_date(行为日期)。下面我用Python和SQL两种方式来演示如何计算留存率。
方法一:SQL查询(适用于有数据库的情况)
假设你的表名叫user_events,结构如下:
user_id: 用户IDevent_date: 事件发生日期(YYYY-MM-DD)
我们要计算3月1日新增用户的次日、7日、30日留存率。
-- 子查询:找出3月1日新增的所有用户及其首次注册日期
WITH first_day_users AS (
SELECT
user_id,
MIN(event_date) AS first_date
FROM user_events
WHERE event_date = '2023-03-01'
GROUP BY user_id
),
-- 计算每次活跃与首次活跃的天数差
active_days AS (
SELECT
f.user_id,
f.first_date,
DATEDIFF(e.event_date, f.first_date) AS day_diff
FROM user_events e
JOIN first_day_users f ON e.user_id = f.user_id
WHERE e.event_date >= f.first_date
)
-- 按day_diff分组,计算留存率
SELECT
day_diff,
COUNT(DISTINCT user_id) AS retained_users,
COUNT(DISTINCT user_id) * 1.0 / (SELECT COUNT(DISTINCT user_id) FROM first_day_users) AS retention_rate
FROM active_days
WHERE day_diff IN (1, 7, 30)
GROUP BY day_diff
ORDER BY day_diff;
这段代码的逻辑是:
- 先找出3月1日所有新用户的
first_date。 - 然后关联所有行为数据,计算每个用户每次行为距离首次行为的天数(
day_diff)。 - 最后筛选出
day_diff为1、7、30的记录,统计人数并除以总新用户数,得到留存率。
方法二:Python Pandas(适用于数据量不大或做分析报表)
如果你用的是Excel导出数据,或者数据量在千万级以内,用Python会更方便。
import pandas as pd
from datetime import timedelta
# 假设df是你的用户行为数据,包含 'user_id' 和 'event_date' 列
# 先筛选出3月1日新增的用户
target_date = '2023-03-01'
cohort_users = df[df['event_date'] == target_date]['user_id'].unique()
cohort_df = df[df['user_id'].isin(cohort_users)].copy()
# 找到每个用户的首次活跃日期
cohort_df['first_date'] = cohort_df.groupby('user_id')['event_date'].transform('min')
# 计算距离首次活跃的天数
cohort_df['day_diff'] = (cohort_df['event_date'] - cohort_df['first_date']).dt.days
# 筛选出关键的天数:1, 7, 30
retention_days = [1, 7, 30]
total_cohort = len(cohort_users)
# 计算留存率
retention_rates = []
for day in retention_days:
retained = cohort_df[cohort_df['day_diff'] == day]['user_id'].nunique()
rate = retained / total_cohort
retention_rates.append({
'Day': day,
'Retained Users': retained,
'Total Cohort': total_cohort,
'Retention Rate': f"{rate:.2%}"
})
# 输出结果
retention_df = pd.DataFrame(retention_rates)
print(retention_df)
运行这段代码,你会得到类似这样的输出:
Day Retained Users Total Cohort Retention Rate
0 1 100 1000 10.00%
1 7 50 1000 5.00%
2 30 20 1000 2.00%
怎么样?是不是比人工数数快多了?
真实案例分析:为什么你的留存率这么低?
光讲理论不够刺激,咱们来看两个真实的案例,看看大厂是怎么玩转留存率的。
案例一:某教育类APP的次日留存救亡
背景: 这款APP主打“每天15分钟英语打卡”。上线初期,通过广告投放拉来了大量用户。但数据显示,次日留存率只有8%,远低于行业平均的15%。老板急得跳脚,以为是广告渠道有问题。
诊断过程: 数据分析师没有盲目换渠道,而是打开了留存漏斗。发现:
- 用户下载APP后,第一步是注册,这一步流失率高达30%(因为要填太多信息)。
- 注册成功后,进入首页,首页全是课程广告,用户不知道点哪里开始“第一天”的学习。
- 只有30%的用户在第一天完成了“打卡”这个核心行为。
优化措施:
- 简化注册:改为手机号一键登录,注册流失率降到10%。
- 新手引导:注册后直接弹出“今天就开始你的第一次打卡”按钮,点击后直接进入学习界面。
- 激励机制:完成第一次打卡后,立刻奖励一枚“坚持徽章”,并推送一条“你已经迈出了第一步”的鼓励消息。
结果: 三个月后,次日留存率从8%提升到18%,7日留存率从3%提升到9%。
启示: 次日留存低,往往不是产品不行,而是新手路径太堵。用户还没体验到核心价值,就被各种麻烦劝退了。
案例二:某社交APP的7日留存提升
背景: 这款社交APP主打“附近的人”。首日新增用户很多,但7日留存只有5%,用户来了就散,很难形成稳定社区。
诊断过程: 分析师对比了“7日留存用户”和“次日流失用户”的行为差异。发现:
- 留存用户平均每天发送10条消息,且前3天内有至少2次“双向聊天”(你问我答)。
- 流失用户平均每天只发送1条消息,且很多是单向广播,没有回复。
优化措施:
- 算法调整:在推荐“附近的人”时,优先展示那些“回复率高”的用户,让用户更容易得到回应。
- 破冰机制:当用户匹配成功后,系统自动推送3个“破冰话题”,降低开口难度。
- 早期提醒:对于注册后24小时内没有发起聊天的用户,推送通知:“有人看了你的资料,快去打招呼吧!”
结果: 7日留存率从5%提升到12%,用户平均聊天时长增加了40%。
启示: 7日留存的关键是建立互动习惯。社交产品的核心不是“认识人”,而是“聊起来”。
常见误区:别让这些坑毁了你的数据
在计算留存率的时候,有几个坑你一定要避开:
混淆“新增用户”和“活跃用户”:
- 错误做法:用当天活跃用户数除以当天总用户数。
- 正确做法:始终使用“同期群”(Cohort)的概念,即盯着同一批新增用户看他们在不同时间的活跃情况。
忽略“活跃”的定义:
- 你的“活跃”是什么?打开APP就算?还是要完成某个核心功能(如下单、发送消息)?
- 建议:定义一个对你业务最有意义的“核心价值行为”作为活跃标准。比如电商APP,下单才算活跃,光浏览不算。
数据口径不一致:
- 有的团队用日志数据算,有的用后台数据库算,结果对不上。
- 建议:统一数据源,最好有一个权威的“数据中台”提供留存率报表。
只看平均值,不看分布:
- 次日留存10%,可能是一半用户留存20%,一半留存0%。平均数会掩盖问题。
- 建议:分渠道、分机型、分用户画像来看留存,找到哪类用户流失最严重。
如何提升留存率?实战建议汇总
聊了这么多计算和案例,最后给你一个“留存率提升工具箱”,你可以直接拿去用:
优化新手引导(Onboarding):
- 让用户在最短时间内体验到产品的核心价值(Aha Moment)。
- 减少注册和初始设置的步骤。
建立用户激励机制:
- 签到、积分、徽章、等级体系。
- 让用户有“不回来就会损失”的感觉。
精准的Push通知:
- 不要群发!根据用户的行为触达。
- 比如,用户3天没打开了,推送一个“老朋友,想你了”的个性化消息。
持续的产品迭代:
- 定期分析流失用户的特征,找出共性问题。
- 快速迭代,解决用户的痛点。
构建社区氛围:
- 对于社交和内容产品,让用户之间产生连接,比官方运营更有效。
结语:留存率是一场持久战
最后,我想说,留存率不是一个能一劳永逸解决的指标。它像你的体重,需要每天关注、每周调整。
下次再有人问你“留存率怎么算”,你可以 confidently 地告诉他:用同期群的方法,分母是首日新增用户,分子是第N天还活跃的那部分人。然后,再聊聊你们是怎么通过优化新手引导和激励机制,把留存率从5%做到15%的。
记住,数据是冷的,但背后的用户故事是热的。算好留存率,是为了更好地服务那些真实的人。
希望这篇文章能帮到你!如果有具体的业务场景想讨论,欢迎随时交流。
