游戏数据分析
学习目标
- 知道游戏行业关键数据指标
- 掌握ARPU, ARPPU等指标的计算方法
一、游戏行业关键数据指标
1.1 运营数据
-
激活数据
- 总激活码发放量、总激活量、总登录账号数
- 激活率、激活登录率
- 激活率 = 激活量 / 安装量
- (激活码的)激活率 = 激活量 / 激活码发放量
- (激活码的)激活且登录率 = 激活且登录量 / 激活码激活量
-
激活且登录率应用场景
- 激活且登录率是非常常用的转化率指标之一,广泛用于端游、手游。
- 大多数游戏公司在游戏封测期间(不管是端游还是手游)为了限制用户数量,都会进行限量测试,对用户数量进行把控的主要方式就是发放激活码,激活码的激活且登录率反映实际进入游戏的用户数量,因此,监控该指标非常重要。
- 当激活且登录率较低时,我们首先想到的是玩家在登录环节是否遇到了困难,主要排查的是网络、客户端问题,以及是否有服务器维护等,如果游戏登录环节没有异常,则该指标能说明玩家对该游戏的兴趣程度。当然,对比不同渠道的激活且登录的数据,也能侧面反映各渠道的用户质量。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7EPVvqeQ-1632535304890)(img/激活且登录率应用参考.png)]
-
活跃数据
- 新登录、活跃用户数
-
在线数据
- ACU(Average concurrent users)平均同时在线玩家人数
- 即在一定时间段抓取一次数据,以一定周期为期限;周期内的ACU可取时间段的平均数据。[例如:系统每一小时抓取一次数据,全天24小时共24个不同时刻的在线数据,则每天的ACU是这24个数据的平均值(每个公司有每个公司的定义,一般ACU取平均值,若针对某一时刻,则直接在某时刻内直接统计用户数)
- PCU(Peak concurrent users)最高同时在线玩家人数
- 即在一定时间内,抓取最高在线数据。(例如:单天最高在线:系统每小时统计一次数据,全天24小时共24个不同时刻的在线数据,则24个时间段内最高的用户在线数据为PCU)
- 平均在线时长
- PCU峰值出现时间点
- ACU(Average concurrent users)平均同时在线玩家人数
-
留存数据
- 次日留存 ~ 7日留存
-
留存率和游戏质量关系
-
游戏从封测开始,多数公司都会投入固定的内、外部宣传资源作为游戏的初期市场推广,以收集游戏的封测数据,这其中主要就是留存率
-
无论是端游还是手游,都非常重视这一指标,留存率成为衡量产品质量的重要指标之一,用以判定游戏的基本品质,为后续的市场资源调配提供参考。
-
游戏封测主要有两种形式,为发放激活码测试和不发放激活码测试,由于发放激活码测试针对的用户群体更偏向核心用户,一般来说,其留存率高于非激活码测试。
-
限量发放激活码封测的游戏评级留存率标准
因用户规模对留存率有一定影响,当测试用户过少时,可能不能反映游戏真实的留存率数据,因此为保证封测数据准确性,封测周期要求7天及以上,新登录总人数在5000以上,才能按相应标准评估游戏级别,如下表所示是某渠道对游戏限量发放激活码测试节点进行评级的留存标准。
-
不限量封测,不发放激活码的游戏评级留存率标准
不限量封测时需要接入渠道,由渠道导入自然用户量,其用户导入量不能高于封测服务器最高承受的用户能力,当用户规模接近服务器上限时停止导入,因此从某种意义上讲也是限量的。同样考虑到用户规模对留存率的影响,为确保数据准确性,要求不限量封测的用户规模至少1万人。如下表所示是某渠道对游戏不限量封测节点进行评级的留存标准。
-
-
-
1.2 游戏行为数据
- 职业分布数据
- 举例: 不同种族人数排名: 人族, 精灵族
- 最喜欢的职业Top3
- 最高角色等级分布
- 流失用户等级分布
1.3 市场投放数据
- CPC CPA
1.4 用户付费指标
-
付费率:也称付费转化率,指每日付费用户占活跃用户的比例,当付费用户的生命周期总价值有一定保证后,提升付费用户比例,就将成为提升公司营收的有效途径。其计算公式为:
付费率=付费人数/活跃人数
可以按照计算时间区间推广到周付费率,月付费率等.
关注问题:
- 反映游戏付费情况
- 结合道具、付费点反映付费引导好坏
- 评估消费活动效果
- 评估渠道质量
-
ARPPU:**ARPPU(Average Revenue per Paying User)**即平均每付费用户收入,它反映的是每个付费用户的平均付费额度,其计算公式为:
ARPPU=付费金额/付费人数
-
ARPU: **ARPU(Average Revenue Per User)**即每用户平均收入,ARPU注重的是一个时间段内运营商从每个用户处所得到的收入。其计算公式为::
ARPU=付费金额/活跃人数
目前较好的手游每日ARPU超过5元;一般的手游ARPU在3~5元之间;ARPU低于3元则说明表现较差。
关注问题
- 反映游戏人均收入水平或者游戏盈利能力
- 评估活动效果指标之一
- 评估渠道质量指标之一
-
付费用户比例构成
- 根据每个付费用户的付费总金额,对整个付费用户进行分类:
- 大R: 大额付费(业内或称为鲸鱼用户)
- 中R: 中额付费(业内或称为海豚用户)
- 小R: 小额付费(业内或称为小鱼用户)
- 关注问题:
- 反映游戏付费深度(也称测验游戏挖坑深度)
- 通过不同付费用户的转换,优化付费引导
- 通过研究大额付费用户行为,优化游戏体验
- 根据每个付费用户的付费总金额,对整个付费用户进行分类:
1.5 转化率漏斗
-
游戏运营主要目标有4点:拉新、促活、留存、付费转化。
-
拉新就是通过渠道合作和广告营销等方式,获得新用户;留存是将获得的用户能够尽量持久地留在产品上;促活即“促进用户活跃”,让用户愿意更频繁、更开心的游戏;付费转化则包含促进用户充值和促进用户消费。
-
游戏行业的拉新成本很高,要投入广告、投入时间,这些都是成本。如果用户还没有产生什么价值就流失了,那一定是亏了。相反,拉过来的用户,留存的时间越长,产生的价值也就越大,也才能弥补其他流失用户所产生的损失。因此,提高用户的留存时间,也是提高公司收入,为公司创造更多价值的重要一环。
-
我们可以在产品设计的每个可控环节当中进行埋点,并监控每个节点的漏斗转换,用于帮助发现产品设计中的问题。通过改善这些环节,可以获得更多的新增用户。
-
案例分析
上图是某一款手游在某个渠道上线第1天的数据:从点击广告进入游戏的转化率只有9.8%,付费转化率只有0.5%,也就是说10万个用户点击广告,最终进入游戏的用户只有9800人,最终付费的用户只有500人。通过上图我们可以看出主要有两个问题:
- 点击广告后下载游戏的转化率低,只有30%,影响因素主要有:
- 广告素材会影响到玩家下载游戏的意愿;
- 包大小、联网环境、运营商会影响用户的下载成功率。
- 下载后激活的转化率低,只有39%,影响因素主要有:
- 程序bug影响客户端安装成功率;
- 包大小、联网环境、运营商这些因素同样也会影响用户激活的成功率。
除了优化产品自身的一些细节外,提高各个环节的转化率,对渠道各项转化率指标的长期监控,以及追踪不同渠道、媒体来源用户的后续质量(包括登录、活跃、留存、付费等),能够帮助我们快速发现渠道异常、调整广告投放策略等。
- 点击广告后下载游戏的转化率低,只有30%,影响因素主要有:
二、野蛮时代游戏数据分析实战
2.1 分析任务说明
- 本节针对野蛮时代游戏的用户及付费信息进行分析,部分数据如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6CJvElZs-1632535304892)(img/image-20200324224933173.png)]
数据包含近229万条记录,109个字段,以下取较重要的字段进行说明。
字段说明:
user_id:用户编码,用户唯一标识
bd_stronghold_level:要塞等级,相当于游戏账号等级
wood_reduce_value:木头消耗数量
stone_reduce_value:石头消耗数量
ivory_reduce_value:象牙消耗数量
meat_reduce_value:肉消耗数量
magic_reduce_value:魔法消耗数量
general_acceleration_reduce_value:通用加速消耗数量
building_acceleration_reduce_value:建筑加速消耗数量
reaserch_acceleration_reduce_value:科研加速消耗数量
training_acceleration_reduce_value:训练加速消耗数量
treatment_acceleration_reduce_value:治疗加速消耗数量
pvp_battle_count:玩家对玩家次数
pve_battle_count:玩家对机器次数
avg_online_minutes:日均在线时间
pay_price: 消费金额
pay_count:消费次数
我们将通过python的pandas包完成数据清洗和统计分析部分,使用matplotlib包进行数据可视化,以此来解决以下问题:
- 用户注册时间分布情况?
- 用户的付费情况(付费率,ARPU,ARPPU)?
- 各等级用户的付费情况?
- 消费用户的道具使用习惯?
- 消费玩家的游戏玩法是怎么样的?
2.2 数据清洗
- 导入数据:
import numpy as np
import pandas as pd
import pickle
from matplotlib import pyplot as plt
import seaborn as sns
from datetime import datetime
import re
%matplotlib inline
plt.rcParams['font.sans-serif'] = ['Arial Unicode MS'] # Mac用来正常显示中文标签
# plt.rcParams['font.sans-serif'] = ['SimHei'] # Windows用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
df = pd.read_csv('data/tap_fun_train.csv')
#复制一份数据
df1=df.copy()
#检查是否有空值
print(df.isnull().any().any())
False
- 查找是否有缺失值,得到结果为False,即没有缺失值,说明数据还是很完整的:
#查询数据条数
df1.shape[0]
# 2288007
#以user_id为维度,删除重复数据,并查看用户总数
df1 = df1.drop_duplicates(subset='user_id')
print('用户总数:',len(df1['user_id']))
# 用户总数: 2288007
去重后还有2288007条数据
2.3 用户注册时间分析
- 我们首先看下用户的注册时间的分布情况
reg_user=df1[['user_id','register_time']]
reg_user.head()
#首先将注册时间转化为天
reg_user.register_time=pd.to_datetime(reg_user.register_time,format="%Y/%m/%d")
reg_user.register_time=reg_user.register_time.apply(lambda x: datetime.strftime(x,"%Y-%m-%d"))
#计算每天注册人数
reg_user = reg_user.groupby(['register_time']).user_id.count()
#可视化
fig