一、日活用户数(DAU)与次日留存
1、DAU:根据不同的业务场景DAU的统计口径有所不同,有些会定义为打开app就算活跃,有些有浏览行为才算活跃
2、用户构成:为什么要看用户构成?
活跃用户看的是一段时间的时间序列趋势,我们能够很直观地看到dau随着时间的变化的波动情况,但是我们却不知道构成dau的不同类型的用户随着时间序列是如何变化的
尤其是在精细化运营的时代,我们需要对处于不同生命周期的用户有不同的运营策略和方法,所以除了看dau的变化情况,我们更需要知道每天dau的用户构成以及每种成分的变化情况
3、分析dau的用户构成我们通常情况下是认为由当日新增用户,次日留存用户以及老用户组成(可根据使用场景调整构成)
二、实现逻辑:
step1:我们创建两个表,一个表存放用户的所有访问日期,另一个表存放用户的最早访问日期
step2:将用户的所有访问日期与首次进入时间做对比,如果等于首次进入时间则为新用户;如果在当前时间的前一天也有访问,则为次日留存用户;其他为老用户
三、示例
1、表t和表t2:保留用户的所有浏览日期
2、t1:保留用户的最小浏览日期
3、当日新增:当t的浏览日期与t1(最小浏览日期)一致,那么定义为当日的新增用户
4、次日留存:用户同时在昨日和今日都浏览了,那么定义为次日留存,一个deveviceid出现在了昨天的分区同时也出现在了今天的分区,也就是说一个deviceid在t表中的浏览日期=t2中的浏览日期+1,则为次日留存用户
老用户:其他
四、脚本实现
1、取所有用户的首次进入时间
drop table if exists mintime;
create table mintime as
select deviceid,min(visit_date) as min_visit_date
from visit_day_table t
group by deviceid;
2、取所有用户的所有交易时间
drop table if exists visit_date_all;
create table visit_date_all as
select distinct deviceid,visit_date
from visit_day_table t;

3、计算dau构成
select
t.visit_date,
case when t1.min_visit_date is not null then '新用户'
when t2.visit_date is not null then '次日留存'
else '老用户' end as category,
count(distinct t.deviceid) as deviceid_cnt
from visit_date_all t
left join mintime t1 on (t.deviceid=t1.deviceid and t.visit_date=t1.min_visit_date)
left join visit_date_all t2 on (t.deviceid=t2.deviceid and t.visit_date=date_add(t2.visit_date,1))
group by
t.visit_date,
case when t1.min_visit_date is not null then '新用户'
when t2.visit_date is not null then '次日留存'
else '老用户' end;


如若转载,请注明出处:https://www.yiheng8.com/44008.html