草庐IT

【数据分析项目实战】篇1:游戏数据分析——新增、付费和用户行为评估

ohhhhhmeme 2023-04-13 原文

目录

0 结论

1 背景介绍

1.1 游戏介绍

1.2 数据集介绍

2 分析思路

3 新增用户分析

3.1 新增用户数:

3.2 每日新增用户数:

3.3 分析

4 活跃度分析

4.1 用户平均在线时长

4.2 付费用户平均在线时长

4.3 日活跃用户(日平均在线时长>10min)数及占比

4.4 分析与建议

5 游戏行为分析

5.1 对比普通玩家和付费玩家的pvp及pve情况

​5.2 对比普通玩家和付费玩家各类资源使用情况

5.3 分析与建议

6 用户付费分析

6.1 游戏的总体付费转化率

6.2 新增付费用户数:

6.3 每日新增付费人数

6.4 每日新增付费用户占比

6.5 ARPU

6.6 ARPPU

6.7 不同等级的玩家对应付费情况

6.8 分析与建议


0 结论

先上结论,想看操作和分析思路的可以最后再来看结论。

(1)新增用户分析

新增用户有828934人,其中付费玩家有19549人,付费人数占注册总人数的2.36%。 游戏在3月10日有开设新服,新增玩家在当天大幅增长,但后续新增用户下降很快,而且恢复的和开新服前水平一样,并没有维持高热度。建议加大活动力度,并保持一定的时间维度,给玩家充分了解游戏的时间;提高用户分享、拉新奖励,才能持续提高游戏热度。

(2)玩家活跃度分析

游戏用户平均在线时长为12分钟,付费玩家平均在线时长为136分钟,付费玩家的平均在线时长要远远大于平均值。 开新服后,日活跃率在15%-20%波动。

(3)付费玩家习惯分析

普通用户和付费用户都更倾向于发起PVE模式,从获胜率来看,是由于PVE模式中获胜的概率远高于PVP;在PVP模式中,付费玩家的发起概率和获胜概率都高于普通用户,且付费玩家相比普通玩家更多的发起PVP的对战,可以看出付费玩家对此款游戏的忠诚度高。

付费用户对各项加速道具消耗更高、使用率相也更高,付费玩家更愿意花钱获得加速。这也解释了为什么付费玩家更愿意发起PVP,因为相对一般用户,付费用户的各项等级都要高于一般用用户,更容易取得胜利。

建议将失败率较高的玩家发起PVP匹配的对手为人机,使用户获得心理满足,使用户更愿意发起PVP对战,也可提高游戏整体活跃人数。在前期可对玩家赠送充足的加速道具,提升玩家等级,加强用户对加速道具的依赖程度,提高大部分未付费的用户体验感。

​​​​​​​​

对游戏里那些花了很多时间但0氪的大佬玩家,则要发挥他们在游戏里的号召力以及社交影响力,鼓励这一群体制作游戏二创视频,在互联网上发布,针对优质内容制作者给予现金奖励或流量扶持,维持游戏高热度。

(4)玩家付费情况分析

付费用户有19549人,付费率2.36%,由于3月10日众多新用户的涌入,每日新增付费用户占比趋于下降,这次开服主要是为了吸引新用户而非盈利,为后续进一步付费转化做准备。游戏的ARPU为4.31元,ARPPU为28.49元。

从各等级人均付费金额(ARPU)来看,低等级用户基本不付费,用户在10、11级之后付费金额上升比较明显。针对低等级用户0氪且流失率高的情况,应用如下办法应对:

  • 开展一个首充活动,比如首充1元可得648礼包,提高游戏付费率,以提高广告渠道商认可;

  • 增长新手引导流程,尽可能提高用户等级;

  • 用户升级后,引导用户发起PVP或PVE对战,并为其匹配低难度玩家,使其赢得对战,以此提升用户升级欲望。

针对氪金用户:

  • 优化付费流程,减少游戏用户付费阻力;

  • 不断更新版本,不断保持用户新鲜感;

  • 新增开发者问答板块,采纳用户合理且有价值建议,利用“宜家效应”,提升用户在游戏开发中的参与感;

  • 发展游戏内社交属性,提高用户沉没成本。


1 背景介绍

1.1 游戏介绍

对游戏进行数据分析,首先离不开对游戏的了解,不了解游戏很可能会影响自己的分析,从而得出错误的结论。在体验了游戏之余,混迹了微博、贴吧等社群,对游戏的玩法有了一定了解后,对数据集的各种字段代表的含义也有了一定的理解,由此开始对该数据集进行数据分析分析。

《野蛮时代》(Brutal Age)是一款SLG类型的手机游戏。即策略类游戏,像我们熟知的《文明》系列(虽然是买断制主机游戏,但也还是肝疼)、《率土之滨》以及最近腾讯天美大力宣发的《重返帝国》就是属于这一类型的,这类型有个共同点就是废肝(最近这一类型抽卡的也变多了),当然如果氪金的话可以少花很多时间。

1.2 数据集介绍

该数据集为该游戏自2018/3/7至2018/3/22的数据,有用户ID、注册时间、游戏资源(木头、石头、象牙、肉、魔法等)、兵种(勇士、驯兽师、萨满)、加速券(通用、建筑、科研、训练、治疗)、建筑、科研、PVP、PVE、在线时长、付费金额、付费次数等109个字段。其中:主键为user_id,在线时长为avg_online_minutes,且一部分用户该字段的值为小于一的小数,可以理解为该在线时长为此用户七天平均的在线分钟数。

编辑切换为居中

添加图片注释,不超过 140 字(可选)

2 分析思路

根据现有数据集,大概制定了以下的的初步思路:

3 新增用户分析

3.1 新增用户数:

 

 共有828934个用户注册。

3.2 每日新增用户数:

 

3.3 分析

从上图我们可以看到,每日新增用户在3月10日大幅增长,根据官博的信息:这两天是游戏新服开服的时间,故注册人数大幅增加。

 

4 活跃度分析

4.1 用户平均在线时长

4.2 付费用户平均在线时长

 

4.3 日活跃用户(日平均在线时长>10min)数及占比

整理可得图表如下:

 

4.4 分析与建议

结论

  • 付费用户与活跃用户的人数增长呈现相同波动趋势。
  • 开新服后,日活跃率在15%-20%波动,日付费率在3%左右波动,数据较好。

建议

  • 合理分析活跃用户变化和付费用户的具体游戏情况,找到该人群的特点,以便引导普通玩家向活跃用户和付费用户转化。
  • 做好预防用户流失的措施,提高用户留存率。

5 游戏行为分析

通过对用户游戏行为进行分析,可以知道游戏道具的资源使用率,从而帮助运营调整方案,同时可以了解用户的使用习惯,帮助广告更加精准的投放。

分析思路

  • 对比普通玩家和付费玩家的pvp及pve情况
  • 对比普通玩家和付费玩家各类资源使用情况

5.1 对比普通玩家和付费玩家的pvp及pve情况

  • PVP

普通用户:

SELECT 
	ROUND(AVG(pvp_battle_count),0) AS '平均PVP次数'
	, CONCAT(ROUND((SUM(pvp_lanch_count)/SUM(pvp_battle_count))*100, 2), '%') AS '主动发起的占比'
	, CONCAT(ROUND((SUM(pvp_win_count)/SUM(pvp_battle_count))*100, 2), '%') AS '获胜的占比'
FROM data
WHERE pay_price = 0

返回结果如下:

 

付费用户:

SELECT 
	ROUND(AVG(pvp_battle_count),0) AS '平均PVP次数'
	, CONCAT(ROUND((SUM(pvp_lanch_count)/SUM(pvp_battle_count))*100, 2), '%') AS '主动发起的占比'
	, CONCAT(ROUND((SUM(pvp_win_count)/SUM(pvp_battle_count))*100, 2), '%') AS '获胜的占比'
FROM data
WHERE pay_price > 0

返回结果如下:

  • PVE

普通用户:

SELECT 
	ROUND(AVG(pve_battle_count),0) AS '平均PVE次数'
	, CONCAT(ROUND((SUM(pve_lanch_count)/SUM(pve_battle_count))*100, 2), '%') AS '主动发起的占比'
	, CONCAT(ROUND((SUM(pve_win_count)/SUM(pve_battle_count))*100, 2), '%') AS '获胜的占比'
FROM data
WHERE pay_price = 0

返回结果如图:

付费用户:

SELECT 
	ROUND(AVG(pve_battle_count),0) AS '平均PVE次数'
	, CONCAT(ROUND((SUM(pve_lanch_count)/SUM(pve_battle_count))*100, 2), '%') AS '主动发起的占比'
	, CONCAT(ROUND((SUM(pve_win_count)/SUM(pve_battle_count))*100, 2), '%') AS '获胜的占比'
FROM data
WHERE pay_price > 0

返回结果如图:

整理可得图表如下:

5.2 对比普通玩家和付费玩家各类资源使用情况

  • 资源类:

普通用户:

SELECT 
	CONCAT(ROUND(SUM(wood_reduce_value)/SUM(wood_add_value)*100, 2), '%') AS '木材使用率'
	, CONCAT(ROUND(SUM(stone_reduce_value)/SUM(stone_add_value)*100, 2), '%') AS '石头使用率'
	, CONCAT(ROUND(SUM(ivory_reduce_value)/SUM(ivory_add_value)*100, 2), '%') AS '象牙使用率'
	, CONCAT(ROUND(SUM(meat_reduce_value)/SUM(meat_add_value)*100, 2), '%') AS '肉类使用率'
	, CONCAT(ROUND(SUM(magic_reduce_value)/SUM(magic_add_value)*100, 2), '%') AS '魔法使用率'
FROM data
WHERE pay_price = 0

返回结果如下:

付费用户:

SELECT 
	CONCAT(ROUND(SUM(wood_reduce_value)/SUM(wood_add_value)*100, 2), '%') AS '木材使用率'
	, CONCAT(ROUND(SUM(stone_reduce_value)/SUM(stone_add_value)*100, 2), '%') AS '石头使用率'
	, CONCAT(ROUND(SUM(ivory_reduce_value)/SUM(ivory_add_value)*100, 2), '%') AS '象牙使用率'
	, CONCAT(ROUND(SUM(meat_reduce_value)/SUM(meat_add_value)*100, 2), '%') AS '肉类使用率'
	, CONCAT(ROUND(SUM(magic_reduce_value)/SUM(magic_add_value)*100, 2), '%') AS '魔法使用率'
FROM data
WHERE pay_price > 0

返回结果如下:

整理可得:

​从图中可以看出:

付费用户对象牙资源的使用率相比普通用户更高,其余的资源使用率差别不大。

  • 加速类:

普通用户:

SELECT 
	CONCAT(ROUND(SUM(general_acceleration_reduce_value)/SUM(general_acceleration_add_value)*100, 2), '%') AS '通用加速使用率'
	, CONCAT(ROUND(SUM(building_acceleration_reduce_value)/SUM(building_acceleration_add_value)*100, 2), '%') AS '建筑加速使用率'
	, CONCAT(ROUND(SUM(reaserch_acceleration_reduce_value)/SUM(reaserch_acceleration_add_value)*100, 2), '%') AS '研究加速使用率'
	, CONCAT(ROUND(SUM(training_acceleration_reduce_value)/SUM(training_acceleration_add_value)*100, 2), '%') AS '训练加速使用率'
FROM data
WHERE pay_price = 0

返回结果如下:

付费用户:

SELECT 
	CONCAT(ROUND(SUM(general_acceleration_reduce_value)/SUM(general_acceleration_add_value)*100, 2), '%') AS '通用加速使用率'
	, CONCAT(ROUND(SUM(building_acceleration_reduce_value)/SUM(building_acceleration_add_value)*100, 2), '%') AS '建筑使用率'
	, CONCAT(ROUND(SUM(reaserch_acceleration_reduce_value)/SUM(reaserch_acceleration_add_value)*100, 2), '%') AS '研究加速使用率'
	, CONCAT(ROUND(SUM(training_acceleration_reduce_value)/SUM(training_acceleration_add_value)*100, 2), '%') AS '训练加速使用率'
FROM data
WHERE pay_price > 0

返回结果如下:

整理可得:

5.3 分析与建议

(1)对战分析:

结论

  • 用户都更倾向于发起PVE模式,从获胜率来看,可能是由于PVE模式中获胜的概率远高于PVP;也可能是由于PVP更难匹配到其他用户。
  • 在PVP模式中,付费玩家的发起概率和获胜概率都高于普通用户,付费玩家相比普通玩家更多的发起PVP的对战。
  • 付费玩家的PVP及PVE次数,明显高于普通玩家,并且可以看出付费玩家对此款游戏的忠诚度高。

建议

  • 将失败率较高的玩家发起PVP匹配的对手为人机,使用户获得心理满足,使用户更愿意发起PVP对战,也可提高游戏整体活跃人数。

(2)材料、道具分析

付费用户对各项加速道具的使用率相比普通用户更高,加速道具是游戏前期会赠送的,也是游戏内付费购买的重要道具,由此可见,付费玩家更愿意花钱获得加速。这也解释了为什么付费玩家更愿意发起PVP,因为相对一般用户,付费用户的各项等级都要高于一般用用户。

建议:

(1)针对大R(鲸鱼用户),开展有针对性的活动,保护继续付费;

(2)优化游戏设计,在前期可对玩家赠送充足的加速道具,提升玩家等级,加强用户对加速道具的依赖程度,提高大部分未付费的用户体验感。

 

6 用户付费分析

6.1 游戏的总体付费转化率

6.2 新增付费用户数:

6.3 每日新增付费人数

 结合文章第三部分新增用户分析整理可得注册人数与付费人数的变化趋势图:

6.4 每日新增付费用户占比

整理可得图表如下:

6.5 ARPU

ARPU = 总付费金额/活跃用户数(日平均在线时长>10min)

SELECT 
    ROUND(SUM(pay_price)/SUM(CASE WHEN avg_online_minutes > 10
                                  THEN 1 ELSE 0 END), 2) ARPU
FROM data

可得结果:

 

6.6 ARPPU

ARPPU = 总付费金额/付费用户数

SELECT ROUND(SUM(pay_price)/COUNT(user_id), 2) AS ARPPU
FROM data
WHERE pay_price > 0

可得结果:

 

6.7 不同等级的玩家对应付费情况

要塞等级(bd_stronghold_level)是玩家游戏时长、游戏游玩深度、体验程度、参与度等直接体现,该指标与付费金额也具有一定相关性。

 

6.8 分析与建议

分析:

(1)根据注册人数与付费人数变化趋势图、新增用户及付费用户占比趋势图,由于3月10日众多新用户的涌入,每日新增付费用户占比趋于下降,这次开服主要是为了吸引新用户而非盈利,为后续进一步付费转化做准备。

(2)游戏的ARPU为4.31元,ARPPU为28.49元。根据GameAnalytics2019年发布的《全球手游分析报告》,全球策略类(SLG)手游的ARPU值平均为0.4美元,头部策略类(SLG)手游的ARPU大约为2.4美元。所以综上对比来看,本文分析案例的SLG手游收入为0.68美元,高于平均值,但距离头部产品还有较大差距。当然这也与我们选取活跃用户的标准有关。如果将活跃用户标准拔高,这个值会更高。

(3)从各等级人均付费金额(ARPU)来看,低等级用户基本不付费,用户在10、11级之后付费金额上升比较明显,13级之后上升明显加快;等级超过20级之后出现明显的波动,分析原因发现是因为样本量太少,代表性不强(21级3人,22级2人,24级2人)。

建议:

(1)增长新手引导流程,尽可能提高用户等级;

(2)用户升级后,引导用户发起PVP或PVE对战,并为其匹配低难度玩家,使其赢得对战,以此提升用户升级欲望。


WELL,这次的项目分享暂时就到这里,下期我们来看一个淘宝用户分析的实战,敬请期待嗷!

有关【数据分析项目实战】篇1:游戏数据分析——新增、付费和用户行为评估的更多相关文章

  1. ruby - 如何在 buildr 项目中使用 Ruby 代码? - 2

    如何在buildr项目中使用Ruby?我在很多不同的项目中使用过Ruby、JRuby、Java和Clojure。我目前正在使用我的标准Ruby开发一个模拟应用程序,我想尝试使用Clojure后端(我确实喜欢功能代码)以及JRubygui和测试套件。我还可以看到在未来的不同项目中使用Scala作为后端。我想我要为我的项目尝试一下buildr(http://buildr.apache.org/),但我注意到buildr似乎没有设置为在项目中使用JRuby代码本身!这看起来有点傻,因为该工具旨在统一通用的JVM语言并且是在ruby中构建的。除了将输出的jar包含在一个独特的、仅限ruby​​

  2. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  3. ruby-on-rails - 项目升级后 Pow 不会更改 ruby​​ 版本 - 2

    我在我的Rails项目中使用Pow和powifygem。现在我尝试升级我的ruby​​版本(从1.9.3到2.0.0,我使用RVM)当我切换ruby​​版本、安装所有gem依赖项时,我通过运行railss并访问localhost:3000确保该应用程序正常运行以前,我通过使用pow访问http://my_app.dev来浏览我的应用程序。升级后,由于错误Bundler::RubyVersionMismatch:YourRubyversionis1.9.3,butyourGemfilespecified2.0.0,此url不起作用我尝试过的:重新创建pow应用程序重启pow服务器更新战俘

  4. ruby-on-rails - 使用 rails 4 设计而不更新用户 - 2

    我将应用程序升级到Rails4,一切正常。我可以登录并转到我的编辑页面。也更新了观点。使用标准View时,用户会更新。但是当我添加例如字段:name时,它​​不会在表单中更新。使用devise3.1.1和gem'protected_attributes'我需要在设备或数据库上运行某种更新命令吗?我也搜索过这个地方,找到了许多不同的解决方案,但没有一个会更新我的用户字段。我没有添加任何自定义字段。 最佳答案 如果您想允许额外的参数,您可以在ApplicationController中使用beforefilter,因为Rails4将参数

  5. ruby-on-rails - 新 Rails 项目 : 'bundle install' can't install rails in gemfile - 2

    我已经像这样安装了一个新的Rails项目:$railsnewsite它执行并到达:bundleinstall但是当它似乎尝试安装依赖项时我得到了这个错误Gem::Ext::BuildError:ERROR:Failedtobuildgemnativeextension./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/rubyextconf.rbcheckingforlibkern/OSAtomic.h...yescreatingMakefilemake"DESTDIR="cleanmake"DESTDIR="

  6. ruby - 如何根据特征实现 FactoryGirl 的条件行为 - 2

    我有一个用户工厂。我希望默认情况下确认用户。但是鉴于unconfirmed特征,我不希望它们被确认。虽然我有一个基于实现细节而不是抽象的工作实现,但我想知道如何正确地做到这一点。factory:userdoafter(:create)do|user,evaluator|#unwantedimplementationdetailshereunlessFactoryGirl.factories[:user].defined_traits.map(&:name).include?(:unconfirmed)user.confirm!endendtrait:unconfirmeddoenden

  7. ruby - Ruby 有 `Pair` 数据类型吗? - 2

    有时我需要处理键/值数据。我不喜欢使用数组,因为它们在大小上没有限制(很容易不小心添加超过2个项目,而且您最终需要稍后验证大小)。此外,0和1的索引变成了魔数(MagicNumber),并且在传达含义方面做得很差(“当我说0时,我的意思是head...”)。散列也不合适,因为可能会不小心添加额外的条目。我写了下面的类来解决这个问题:classPairattr_accessor:head,:taildefinitialize(h,t)@head,@tail=h,tendend它工作得很好并且解决了问题,但我很想知道:Ruby标准库是否已经带有这样一个类? 最佳

  8. Ruby 从大范围中获取第 n 个项目 - 2

    假设我有这个范围:("aaaaa".."zzzzz")如何在不事先/每次生成整个项目的情况下从范围中获取第N个项目? 最佳答案 一种快速简便的方法:("aaaaa".."zzzzz").first(42).last#==>"aaabp"如果出于某种原因你不得不一遍又一遍地这样做,或者如果你需要避免为前N个元素构建中间数组,你可以这样写:moduleEnumerabledefskip(n)returnto_enum:skip,nunlessblock_given?each_with_indexdo|item,index|yieldit

  9. ruby-on-rails - 简单的 Ruby on Rails 问题——如何将评论附加到用户和文章? - 2

    我意识到这可能是一个非常基本的问题,但我现在已经花了几天时间回过头来解决这个问题,但出于某种原因,Google就是没有帮助我。(我认为部分问题在于我是一个初学者,我不知道该问什么......)我也看过O'Reilly的RubyCookbook和RailsAPI,但我仍然停留在这个问题上.我找到了一些关于多态关系的信息,但它似乎不是我需要的(尽管如果我错了请告诉我)。我正在尝试调整MichaelHartl'stutorial创建一个包含用户、文章和评论的博客应用程序(不使用脚手架)。我希望评论既属于用户又属于文章。我的主要问题是:我不知道如何将当前文章的ID放入评论Controller。

  10. ruby - RVM "ERROR: Unable to checkout branch ."单用户 - 2

    我在新的Debian6VirtualBoxVM上安装RVM时遇到问题。我已经安装了所有需要的包并使用下载了安装脚本(curl-shttps://rvm.beginrescueend.com/install/rvm)>rvm,但以单个用户身份运行时bashrvm我收到以下错误消息:ERROR:Unabletocheckoutbranch.安装在这里停止,并且(据我所知)没有安装RVM的任何文件。如果我以root身份运行脚本(对于多用户安装),我会收到另一条消息:Successfullycheckedoutbranch''安装程序继续并指示成功,但未添加.rvm目录,甚至在修改我的.bas

随机推荐