天天看點

使用者行為名額淺析

前言

使用者行為分析是對使用者在産品或觸點上産生的行為及行為背後的資料進行分析,通過建構使用者行為資料分析體系或者使用者畫像,來改變産品、營銷、營運決策,實作精細化營運,指導業務增長。總之,很重要。
先來看下使用者類行為名額說明,然後下面詳解常寫的名額。僅供參考,實際開發邏輯還是按業務需求為标準。
名額名稱 解釋說明
新增使用者 首次聯網使用應用的使用者,如果一個使用者首次打開某APP,那這個使用者定義為新增使用者:解除安裝再安裝的裝置,不會被算作一次新增,新增使用者包括日新增使用者,周新增使用者,月新增使用者。
活躍使用者 打開應用的使用者即為活躍使用者,不考慮使用者的使用情況,每天一台裝置打開多次會話被記為一個活躍使用者
周(月)活躍使用者 使用者以裝置作為判斷标準,在移動統計中,每個獨立裝置認為是一個獨立使用者。安卓系統根據imei号,IOS系統根據openUDUID來辨別一個獨立使用者,每部手機一個使用者。
沉默使用者 使用者僅在安裝當天(次日)啟動一次,後續時間無再啟動的行為。該名額可以反應新增使用者品質和使用者與app的比對程度
版本分布 不同版本的周内新增使用者數,活躍使用者數和啟動次數。利于判斷app各個版本之間的優劣和使用者行為習慣。
本周回流使用者 上周未啟動過的應用,本周啟動了應用的使用者
連續n周活躍使用者 連續n周,每周至少啟動一次。
忠誠使用者 連續活躍5周以上的使用者
連續活躍使用者 連續兩周及以上活躍的使用者
近期流失使用者 連續n(2<=n <=4)周沒有啟動應用的使用者。(第n+1周沒有啟動過)
留存使用者 某段時間内的新增使用者,經過一段時間後,仍然使用應用的被認作是留存使用者:這部分使用者占當時新增使用者的比例即是留存率
使用者新鮮度 每天啟動應用的新老使用者比例,即新增使用者數占活躍使用者數的比例
單次使用時長 每次啟動使用的時間長度
日使用時長 累計一天内使用時間長度

使用者活躍

描述

判斷業務健康程度和發展趨勢的一個重要名額。

業務名額場景舉例

最近一個周/月内,有過連續活躍n天的人數。
最近一周/月内,每個使用者的平均活躍天數。
最近一周/月内,最大沉默天數超n天的使用者數。
最近七天内連續三天活躍使用者數。

分析思路

以日明細,擷取周,月使用者明細。

活躍使用者按天明細表 dws_uv_detail_day。

create  table dws_uv_detail_day
(
    `mid_id` string COMMENT '裝置唯一辨別',
    `user_id` string COMMENT '使用者辨別', 
    `app_time` string COMMENT '用戶端日志産生時的時間',
    . . . . . . (省略其他字段)
)
partitioned by(dt string)
. . . . . .
           

活躍使用者按周明細表 dws_uv_detail_wk。

create table dws_uv_detail_wk( 
    `mid_id` string COMMENT '裝置唯一辨別',
    `user_id` string COMMENT '使用者辨別', 
    `app_time` string COMMENT '用戶端日志産生時的時間',
    `monday_date` string COMMENT '周一日期',
    `sunday_date` string COMMENT  '周日日期' ,
    . . . . . . (省略其他字段)
) 
PARTITIONED BY (`wk_dt` string)
. . . . . .
           

案例

最近七天内連續三天活躍使用者數思路。

(1)查詢出最近7天的活躍使用者,并對使用者活躍日期進行排名。

(2)計算使用者活躍日期及排名之間的內插補點。

(3)對同使用者及內插補點分組,統計內插補點個數。

(4)将內插補點相同個數大于等于3的資料取出,然後去重,即為連續3天及以上活躍的使用者數。

select
    '2022-01-04',
    concat(date_add('2022-01-04',-6),'_','2022-01-04'),
    count(*)
from
(
    select uid_id
    from
    (
        select uid_id      
        from
        (
            select 
                uid_id,
                date_sub(dt,rank) date_diff
            from
            (
                select 
                    uid_id,
                    dt,
                    rank() over(partition by uid_id order by dt) rank
                from dws_uv_detail_day
                where dt>=date_add('2022-01-04',-6) and dt<='2022-01-04'
            )t1
        )t2 
        group by uid_id,date_diff
        having count(*)>=3
    )t3 
    group by uid_id
)t4;
           

使用者(裝置)新增

描述

使用者第一次打開應用,那這個使用者定義為新增使用者。

業務名額場景舉例

日新增使用者。
周新增使用者。
月新增使用者。

分析思路

每日活躍裝置 left join 每日新增産生的結果,每日新增的裝置id為null,則為新增。

案例

每日新增使用者(裝置)

dws_uv_detail_day:每日活躍使用者表
dws_new_mid_day:每日新增裝置表
select  
    ud.mid_id,
    ud.user_id
from dws_uv_detail_day ud left join dws_new_mid_day nm on ud.mid_id=nm.mid_id
where ud.dt='2022-01-04' and nm.mid_id is null;
           

使用者留存

描述

「使用者留存」:某段時間内的新增活躍使用者,經過一段時間後,有繼續通路或者使用應用被稱為留存使用者。
留存可以看成是一個使用者在今天出現,在明天也出現,那就是次日留存。
一個使用者在今天出現,在後天出現,那就是2日留存。
「留存率」:留存使用者占新增活使用者的比例。

業務名額場景舉例

次日留存率
3日留存率
7日留存率

分析思路

統計2022-01-04日,以統計2022-01-03日留存率為業務需求分析:
「2022-01-03裝置留存率= 01-03日新增裝置 且 01-04日活躍的 占 01-03日新增裝置。」

(1) 01-03日新增裝置

01-04日活躍表 left join 每日新增表,新增表id為null的為新增裝置。

(2)01-03日新增裝置 且 01-04日活躍的

01-03日新增 join 01-04的活躍。

(3)代入上面公式

案例

計算前1天新使用者通路留存明細
dws_uv_detail_day:每日活躍使用者表
dws_user_retention_day:每日留存使用者明細表
dws_new_mid_day:每日新增裝置表
select  
    nm.mid_id mid_id,
    nm.user_id user_id,
    ud.dt dt,
    1 retention_day // 留存天數
from dws_uv_detail_day ud join dws_new_mid_day nm 
        on ud.mid_id =nm.mid_id 
where ud.dt='2022-01-04' and nm.create_date=date_add('2022-01-04',-1)
           

沉默使用者

描述

指的是隻在安裝當天啟動過,且啟動時間是在一周/月(某段時間)前。

分析思路

(1)按照裝置id對日活表分組

(2)過濾隻是在啟動當天用過的

(3)時間在某個時間前的

案例

7日沉默使用者(裝置)數。

dws_uv_detail_day:每日活躍使用者表
select 
    '2022-01-04' dt,
    count(*) silent_count
from 
(
    select mid_id
    from dws_uv_detail_day
    where dt<='2022-01-04'
    group by mid_id
    having count(*)=1 and min(dt)<=date_add('2022-01-04',-6)
) t1;
           

回流使用者

描述

相當于回頭客的意思,以前用過某物,過一段時間再次使用某物,這樣的使用者就是回流使用者。使用者已經記錄n日以及n日以上未有登入(即先認定這部分使用者已經流失),而在今天有登入,那在今天這部分使用者稱之為回流使用者。

業務名額場景舉例

(時間周期)回流=(時間周期活躍-(時間周期新增-(上個時間周期)活躍
如:本周回流=本周活躍-本周新增-上周活躍。

分析思路

本周活躍 left join 本周新增 left join 上周活躍。
條件是:本周新增id為null,上周活躍id為null。

案例

本周回流

dws_uv_detail_wk:每周活躍使用者表
dws_new_mid_day:每日新增裝置表
mid_id:裝置id
select 
   '2022-01-04' dt,
   concat(date_add(next_day('2022-01-04','MO'),-7),'_',date_add(next_day('2022-01-04','MO'),-1)) wk_dt,
   count(*)
from 
(
    select t1.mid_id
    from 
    (
        select mid_id
        from dws_uv_detail_wk
        where wk_dt=concat(date_add(next_day('2022-01-04','MO'),-7),'_',date_add(next_day('2022-01-04','MO'),-1))
    )t1
    left join
    (
        select mid_id
        from dws_new_mid_day
        where create_date<=date_add(next_day('2022-01-04','MO'),-1) and create_date>=date_add(next_day('2022-01-04','MO'),-7)
    )t2
    on t1.mid_id=t2.mid_id
    left join
    (
        select mid_id
        from dws_uv_detail_wk
        where wk_dt=concat(date_add(next_day('2022-01-04','MO'),-7*2),'_',date_add(next_day('2022-01-04','MO'),-7-1))
    )t3
    on t1.mid_id=t3.mid_id
    where t2.mid_id is null and t3.mid_id is null
)t4;
           

流失使用者

描述

最近n天(自己定義)未登入我們稱之為流失使用者。

案例

流失使用者數:最近7天未登入使用者。
dws_uv_detail_day:每日活躍使用者表
select
     '2022-01-04',
     count(*)
from 
(
    select mid_id
from dws_uv_detail_day
    group by mid_id
    having max(dt)<=date_add('2022-01-04',-7)
)t1;
           

浏覽數與訪客數

浏覽量(PV):網站各頁面被檢視的次數。使用者多次打開或重新整理同一個頁面,該名額值累加。
訪客數(UV):網站各頁面的通路人數。所選時間段内,同一訪客多次通路會進行去重。
這兩個名額沒啥說的,count取值或者去重count即可。

使用者行為漏鬥分析

描述

舉例說明訂單轉化率

通路到下單轉化率 = 下單人數 / 日活躍人數
select 
    '2022-01-04',
    uv.day_count 日活躍人數,
    ua.order_count 下單數,
    cast(ua.order_count/uv.day_count as  decimal(10,2)) 通路到下單轉化率,
    ua.payment_count 支付人數,
    cast(ua.payment_count/ua.order_count as  decimal(10,2)) 下單到支付轉化率
from  
(
select 
        sum(if(order_count>0,1,0)) order_count,
        sum(if(payment_count>0,1,0)) payment_count
    from dws_user_action
where dt='2022-01-04'
group by dt
)ua 
join 
(select 
 dt ,
 count(*)  day_count 
 from dws_uv_detail_day 
 where dt='2022-01-04' group by dt
 )
 uv on uv.dt=ua.dt