文章目录
- 什么是用户留存率?
- 创建数据源
- 计算留存率
- 计算 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)。

![[附源码]Node.js计算机毕业设计大学校园二手教材与书籍Express](https://img-blog.csdnimg.cn/3a2ab7308b65488088dfdebbb1335bc9.png)

![[附源码]Python计算机毕业设计Django的连锁药店销售管理系统](https://img-blog.csdnimg.cn/1f589cd1de8e4ed09eb0eb58871b9562.png)

![[附源码]Nodejs计算机毕业设计基于java旅游信息分享网站Express(程序+LW)](https://img-blog.csdnimg.cn/d0ab6759358043e49ec712731aa3a299.png)













