文章目录
- 什么是用户留存率?
- 创建数据源
- 计算留存率
- 计算 N 日的留存率
什么是用户留存率?
用户留存率是指在特定时间段内,用户在使用某个产品或应用程序后,再次使用该产品或应用程序的比例。
它可以帮助公司了解用户是否喜欢他们的产品,并提供有价值的信息,用于改进产品和增加用户满意度。例如,如果有 100 名用户在第一次使用某个应用程序后,有 80 名用户再次使用该应用程序,那么这个应用程序的用户留存率就是 80%。
创建数据源
drop table userinfo;
-- 记录用户的注册日期。
create table userinfo (
id int,
registerDate timestamp);
drop table log;
-- 记录用户后续使用产品的日期。
create table log (
id int,
logDate timestamp);
insert into userinfo values
(1,"2022-12-01 12:22:35"),
(2,"2022-12-01 12:22:35" ),
(3,"2022-12-03 12:22:35" ),
(4,"2022-12-03 12:22:35" ),
(5,"2022-12-02 12:22:35" ),
(5,"2022-12-02 12:22:35" ),
(7,"2022-12-03 12:22:35" ),
(8,"2022-12-03 12:22:35" ),
(9,"2022-12-03 12:22:35" ),
(10,"2022-12-01 12:22:35");
insert into log values
(1,"2022-12-02 20:21:40"),
(1,"2022-12-02 22:21:40"),
(1,"2022-12-02 22:21:40"),
(2,"2022-12-02 12:30:35"),
(3,"2022-12-04 12:22:35"),
(4,"2022-12-04 12:22:35"),
(5,"2022-12-04 12:22:35"),
(5,"2022-12-02 12:22:35"),
(7,"2022-12-05 12:22:35"),
(8,"2022-12-06 12:22:35"),
(9,"2022-12-07 12:22:35"),
(10,"2022-12-03 12:22:35");
计算留存率
我在 Hive 中创建了如下两张表:
用户表 userinfo:
日志表 log:
次日留存率计算:
SELECT date(u.registerDate) registerDate,
count(distinct l.id) / count(distinct u.id) leave_percent
FROM userinfo u
LEFT JOIN log l
ON u.id = l.id
and
date(l.logDate) = date_add(date(u.registerDate),1)
GROUP BY date(u.registerDate);
计算结果:
思路:
首先我们根据主键对用户表和日志表进行左连接,再加上连接条件 date(l.logDate) = date_add(date(u.registerDate),1)
进行过滤,根据注册日期进行分组统计。注意对 id
进行去重,利用左连接的特性,来完成计算。count
并不会统计 null
值。
可以看到 2022-12-01
的次日留存率为 66%,2022-12-02
的次日留存率为 0%,2022-12-03
的次日留存率为 40%。
验证:
从用户表中可以看到在 2022-12-01
日一共注册了 3 名用户(1,2,10)。
在日志表中 ,2022-12-02
日只出现了两名老用户(1,2)。显然,在次日留存率计算中,我们流失了一名用户(10)。所以,2022-12-01
的次日留存率为 2/3
,66%
计算 N 日的留存率
只需要修改连接条件 date(l.logDate) = date_add(date(u.registerDate),1)
即可。
如:date(l.logDate) = date_add(date(u.registerDate),N)
。