一个快速高效简单统计游戏留存率的方法,用于现在公司游戏运营商业务上。
有一个必须的用户数据表user_play
, 主要数据字段有:
user_id
用户id
game_appid
游戏id
promote_id
推广员id
register_time
注册时间(时间戳)
register_ip
注册ip
device_id
注册设备id
login_time
最近登录时间(时间戳)
login_ip
最近登录ip
一个留存统计表retention
, 主要数据字段有:
game_appid
游戏id
register_time
注册时间(格式:yyyy-mm-dd)
login_time
登录时间(格式:yyyy-mm-dd)
login_num
登录数
当用户登录时,判断user_play
表里是否含有此用户数据,没有则认为是首次游戏注册+登录,添加一条记录到user_play
表。此条记录的
注册时间等于登录时间,注册IP等于登录IP。接着通过(游戏id,注册天,登录天)寻找retention
表是否含有此记录。如果有,则在登录数里+1,
否则新增一条记录。
如果用户登录时,user_play
已经含有此用户数据,则判断用户上一次登录时间和此次登录时间是否为同一天,如果不是同一天,则通过
(游戏id,注册天,此次登录天)寻找retention
表是否含有此记录。如果有,则在登录数里+1,否则新增一条记录。最后再更新user_play
的登录时间。
//一小段统计数据
+------------+---------------+------------+-----------+
| game_appid | register_time | login_time | login_num |
+------------+---------------+------------+-----------+
| 1001 | 2016-06-20 | 2016-06-20 | 800 |
| 1001 | 2016-06-20 | 2016-06-21 | 200 |
| 1001 | 2016-06-21 | 2016-06-21 | 500 |
| 1001 | 2016-06-20 | 2016-06-22 | 80 |
| 1001 | 2016-06-21 | 2016-06-22 | 100 |
+------------+---------------+------------+-----------+
我们可以了解到,当注册时间和登录时间相等时,也就是此游戏当天的新增用户数
。如 2016-06-20 新增用户数为800人,这800人中,在
第二天(2016-06-21)登录有200人。这800人中,在第三天(2016-06-22)登录有80人。
已知次日留存率算法为: (第一天新增用户中,在第二天还登录的用户数)/第一天新增用户数
所以我们可算得 2016-06-20 的 次日留存为:
retention_day1 = (200/800)*100% = 25%
按照以上做法我们就可以算得任何一天的留存,如 2016-06-20 的 2日留存率
retention_day2 = (80/800)*100% = 10%
总结:
-
按照此方法进行留存率计算,将大大减少数据的统计,无需用户每次登录都要写入一条记录。
-
统计某一天的留存率,我们只需要提取必要的两条记录,一条注册时间等于登录时间的记录,和一条需要计算留存率时间的记录。对这 两天记录做登录数相除即可。
-
使用用户注册时间作为基准,真正做到不用关注游戏实际开服时间。
-
数据直观明了,单从数据表我们也可以快速定位到数据情况。
-
实现简单。