做企業級報表的人經常會遇到留存率的概念。對於不同的專案,留存率的概念也會有所不同。針對我所在的手機應用、手機遊戲方向的使用者留存率統計,在此做一些簡要的說明。
使用者留存率這個概念在網上沒有搜到其具體的定義,在此僅對我公司的計算模式進行簡要整理:使用者留存率是只某一基礎使用者群在特定的一段時間內使用某一應用(遊戲)的比率。需要注意兩個概念:
1、基礎使用者群:是指按照給定要求規範出的特定群體。例如,我們要統計2月份《二戰風雲》的日留存,統計的基礎使用者群是指2月1日全天使用了《二戰風雲》這一遊戲的所有玩家。
2、特定的一段時間內使用:這個概念對不同的人可能有不同的兩種理解。一是連續的時間內,每天都在使用該應用;二是在特定的時間段內,不定期的使用該應用。這裡,我們統計採用的是後者。
現在舉例說明該統計所要達到的效果:
第一天 第二天 第三天 第四天 第五天 第六天 第七天
訪問量 100 110 120 130 140 150 160
留存量 100 90 80 70 60 50 40
對於以上資料進行說明:我們以第一天訪問的總人數100作為基數統計日留存。可以看到,雖然每天的使用者訪問量是在遞增的,但是使用者留存量是遞減的(使用者留存當然是越來越少嘍!)。其計算方法我想大家也就可以看出一二了吧!對,第二天的留存量是指在第一天基數的100人中,有90人第二天又使用了該應用;而第三天的留存量是指在第一天基數的100人中,有80人第三天又使用了該應用,以此類推……
可能有人會問,第三天的80人為什麼不是以第二天的90人作為基數呢?我個人認為第二種方式在統計上是存在弊端的。舉例說明:如果乙個使用者第二天沒有使用該應用,但以後的每天都在使用,在這種情況下,我們可以確定的是:該使用者是活躍使用者;但如果用第二種方法統計的話,該使用者就不會在我們統計的資料內。
現就以上所述方法的統計流程進行簡單介紹:
1、抽取基礎資料作為統計基數
2、抽取第二天訪問資料資料,並以該資料與抽取的基礎資料做交集,得到第二天留存量
3、用留存量/基礎資料得出第二天的留存率
4、以上方法每天迴圈,提取每天的使用者留存資料
一下是使用者日留存的儲存過程,僅供參考(mysql)
create procedure `pro_remain_user_by_day`(in in_day datetime)
begin
declare ttime datetime;
declare tflag int;
declare ttemflag int;
declare tdayflag2 varchar(20);
declare tnum int;
declare tnum1 int;
declare tcount int;
set in_day=ifnull(in_day,adddate(current_date(),-1));
set tcount=(select count(1) from remain_user_data where addtime =in_day );
if tcount =0 then
insert into remain_user_data(addtime) values(in_day);
end if;
set tflag=1;
set ttemflag=0;
set ttime=in_day;
create temporary table temptable(id bigint );
while tflag<30 do
truncate table temptable;
#抽取基礎資料
insert into temptable
select player_id from day_logout_notify where logout_time>=ttime and logout_time0 then
#抽取第 tnum天留存量
set tnum1=(select ifnull(count(distinct p.player_id),0)
from temptable t join day_logout_notify p on t.id=p.player_id
where p.logout_time>=in_day and logout_timeif tflag=1 then
set tnum=1;
end if;
set tdayflag2=concat( 'data',tflag);
#計算留存率 並更新
set @sqlstr=concat('update remain_user_data set ',tdayflag2,'=',tnum1/tnum,' where addtime=',concat('\'',date(ttime),'\''));
prepare stmt from @sqlstr;
execute stmt;
end if;
#時間加1,迴圈
set ttime=adddate(ttime,-1);
set tflag=tflag+1;
end while;
drop table temptable;
end;
該儲存過程已經過測試,可以放心使用。
php mysql計算留存率 使用者留存率演算法
玩家在某段時間內註冊開始遊戲,經過一段時間後,仍然繼續遊戲的被認作是留存 這部分使用者佔當時新增使用者的比例即是留存率,會按照每隔1單位時間 例日 周 月 來進行統計。顧名思義,留存指的就是 有多少玩家留下來了 留存使用者和留存率體現了應用的質量和保留使用者的能力。次日留存率 首次登陸後第二天登入遊...
sql計算留存 SQL 使用者月留存率
sql 使用者月留存率 sql資料分析 6月4日sql 使用者月留存率 需求背景 根據訂單表,統計每個月在接下來幾個月使用者複購情況 如 5月下單使用者10000人 這10000人又在6月又下單的使用者有5000人,這10000人在7月下單的使用者有8000人 解析思路 核心 資料預處理 使用者,月...
HIVE SQL 計算留存率 思路
計算每日訪問使用者在之後日期的留存數 基礎表 每日訪問使用者idcreate external table ifnot exists user visit date user id bigint comment 使用者id comment 每日訪問使用者 partitioned by p day d...