php mysql計算留存率 使用者留存率演算法

2021-10-17 23:50:25 字數 3639 閱讀 7529

玩家在某段時間內註冊開始遊戲,經過一段時間後,仍然繼續遊戲的被認作是留存;這部分使用者佔當時新增使用者的比例即是留存率,會按照每隔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...