玩家在某段時間內註冊開始遊戲,經過一段時間後,仍然繼續遊戲的被認作是留存;這部分使用者佔當時新增使用者的比例即是留存率,會按照每隔1單位時間(例日、周、月)來進行統計。顧名思義,留存指的就是「有多少玩家留下來了」。留存使用者和留存率體現了應用的質量和保留使用者的能力。
次日留存率
首次登陸後第二天登入遊戲使用者/統計日的註冊使用者數
三日留存率
首次登陸後第三天登陸過的使用者/統計日的註冊使用者數
七日留存率
首次登陸後第七天登入過遊戲的使用者/統計日的註冊使用者數
三十日留存數
首次登陸後第三十天登入過遊戲的使用者/統計日的註冊使用者數
留存率 在不同的遊戲中 演算法不一樣
留存率說明
某時間內的新增使用者,經過一段時間後,仍繼續登入遊戲的被認作時留存使用者;這部分使用者佔當時新增使用者的比例即是留存率。
例如:9月5日新增使用者200,這200人在6日登入遊戲的有100人,7日登入有80人,8日登入有50人;
則9月5日次日留存率是50%,3日留存率是40%,4日留存率是25%。
這是我們遊戲裡的計算方式
這樣統計 有科學根據的
比如 哪天 你開廣告了 就可以看 他帶來的使用者質量
還有 這樣的留存 資料 也會好看的
-- 登入日誌
droptableif exists log_login;
createtablelog_login(
id int(11) unsignednotnullauto_increment,
player_id int(11) unsignednotnull,
last_login_time timestampnotnulldefault'2000-01-01 00:00:00',
register_time timestampnotnulldefault'2000-01-01 00:00:00',
primarykey(id)
)engine=myisam defaultcharset=utf8;
log_login的資料在每個玩家登陸的時候產生一條,為了接下去的儲存過程執行效率的考慮,冗餘了每個玩家的註冊時間。
-- 統計留存率
droptableif exists stat_remain;
createtablestat_remain(
id int(11) unsignednotnullauto_increment,
dru int(11)notnull,-- 每日新註冊使用者
second_day int(11)defaultnull,
third_day int(11)defaultnull,
seventh_day int(11)defaultnull,
thirtieth_day int(11)defaultnull,
stat_time timestampnotnulldefault'2000-01-01 00:00:00',
add_time timestampnotnulldefault'2000-01-01 00:00:00',
primarykey(id)
)engine=myisam defaultcharset=utf8;
delimiter $$
-- 統計留存率
dropprocedureif exists stat_remain_player$$
createprocedurestat_remain_player()
begin
declareiint;
seti = 1;
insertintostat_remain(dru,stat_time,add_time)selectcount(a_qid),date_sub(curdate(),interval 1day),now()fromtb_fishwheredatediff(now(),add_time)=1;
while i<30 do
if (i=1) or(i=2)or(i=6)or(i=29)then
if exists(select*fromstat_remainwheredatediff(curdate(),stat_time) =i)then
updatestat_remainsetsecond_day=(select(selectcount(distinctplayer_id)fromlog_loginwheredatediff(curdate(),register_time) =ianddatediff(date_add(curdate(),interval 1-iday),last_login_time)=0)/(selectcount(distinctplayer_id)fromlog_loginwheredatediff(curdate(),register_time) =i))*100wheredatediff(curdate(),stat_time) =i;
updatestat_remainsetthird_day=(select(selectcount(distinctplayer_id)fromlog_loginwheredatediff(curdate(),register_time) =ianddatediff(date_add(curdate(),interval 2-iday),last_login_time)=0)/(selectcount(distinctplayer_id)fromlog_loginwheredatediff(curdate(),register_time) =i))*100wheredatediff(curdate(),stat_time) =i;
updatestat_remainsetseventh_day=(select(selectcount(distinctplayer_id)fromlog_loginwheredatediff(curdate(),register_time) =ianddatediff(date_add(curdate(),interval 6-iday),last_login_time)=0)/(selectcount(distinctplayer_id)fromlog_loginwheredatediff(curdate(),register_time) =i))*100wheredatediff(curdate(),stat_time) =i;
updatestat_remainsetthirtieth_day=(select(selectcount(distinctplayer_id)fromlog_loginwheredatediff(curdate(),register_time) =ianddatediff(date_add(curdate(),interval 29-iday),last_login_time)=0)/(selectcount(distinctplayer_id)fromlog_loginwheredatediff(curdate(),register_time) =i))*100wheredatediff(curdate(),stat_time) =i;
endif;
endif;
seti = i + 1;
endwhile;
enddelimiter ;
stat_remain_player 儲存過程在每新的一天的0點0分1秒左右去執行,生成stat_remain資料,並對離當天stat_time差距為1天,2天,6天和29天的記錄進行更新
使用者留存率計算
做企業級報表的人經常會遇到留存率的概念。對於不同的專案,留存率的概念也會有所不同。針對我所在的手機應用 手機遊戲方向的使用者留存率統計,在此做一些簡要的說明。使用者留存率這個概念在網上沒有搜到其具體的定義,在此僅對我公司的計算模式進行簡要整理 使用者留存率是只某一基礎使用者群在特定的一段時間內使用某...
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...