活跃用户数怎么计算_留存率计算
數據源:來自猴子老師的留存率分析教程
鏈家面試題:如何分析留存率??mp.weixin.qq.com【面試題】
手機中的相機是深受大家喜愛的應用之一,下圖是某手機廠商數據庫中的用戶行為信息表中部分數據的截圖。
用戶id:用戶唯一標識;
應用名稱:是手機中的某個應用,例如相機、微信、大眾點評等。
啟動時長:某一天中使用某應用多長時間(分鐘)。啟動次數:某一天中啟動了某應用多少次。
登陸時間:使用手機的日期。例如2018-05-01。
現在該手機廠商想要分析手機中的應用(相機)的活躍情況,需統計如下數據:
某日活躍用戶(用戶id)在后續的一周內的留存情況(計算次日留存用戶數,3日留存用戶數,7日留存用戶數)
指標定義:
某日活躍用戶數,某日活躍的去重用戶數。
N日活躍用戶數,某日活躍的用戶數在之后的第N日活躍用戶數。
N日活躍留存率,N日留存用戶數/某日活躍用戶數
例:登陸時間(20180501日)去重用戶數10000,這批用戶在20180503日仍有7000人活躍,則3日活躍留存率為7000/10000=70%
求解過程:
第一步:通過數據自聯結,然后找出數據a和數據b都是相機,且b的時間小于a的時間的數據(例如a中日期為2020-05-02,b中則為5月2日之后的數據)。
select a.用戶id, a_t, b_t from (select 用戶id, 登陸時間 a_t from 留存率題目 where 應用名稱 = '相機') a left join (select 用戶id, 登陸時間 b_t from 留存率題目 where 應用名稱 = '相機') b on a.用戶id = b.用戶id and a_t < b_t[1]第二步:求出at 和 b_t 的時間間隔,使用函數datediff[2]。
select *, datediff(b_t, a_t) as 時間間隔 from (select a.用戶id, a_t, b_t from (select 用戶id, 登陸時間 a_t from 留存率題目 where 應用名稱 = '相機') a left join (select 用戶id, 登陸時間 b_t from 留存率題目 where 應用名稱 = '相機') b on a.用戶id = b.用戶id and a_t < b_t) c第三步:使用case when分組計算
select a_t, count(distinct case when 時間間隔=1 then 用戶id else null end) 次日留存數, count(distinct case when 時間間隔=1 then 用戶id else null end)/count(distinct 用戶id) 次日留存率, count(distinct case when 時間間隔=3 then 用戶id else null end) 3日留存數, count(distinct case when 時間間隔=3 then 用戶id else null end)/count(distinct 用戶id) 3日留存率, count(distinct case when 時間間隔=7 then 用戶id else null end) 7日留存數, count(distinct case when 時間間隔=7 then 用戶id else null end)/count(distinct 用戶id) 7日留存率 from (select *, datediff(b_t, a_t) as 時間間隔 from (select a.用戶id, a_t, b_t from (select 用戶id, 登陸時間 a_t from 留存率題目 where 應用名稱 = '相機') a left join (select 用戶id, 登陸時間 b_t from 留存率題目 where 應用名稱 = '相機') b on a.用戶id = b.用戶id and a_t < b_t) c) d group by a_t總結:1、涉及到時間間隔,要考慮自連表的使用;
2、時間間隔的計算,datediff和timestampdiff的用法區別;
3、分組計算case when的用法。
參考
總結
以上是生活随笔為你收集整理的活跃用户数怎么计算_留存率计算的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 无线路由器如何设置-无线路由器如何设密码
- 下一篇: 两个或者是多个路由器串连最接地气的方法-