用Python编写代码来理解赢得《英雄联盟》游戏的胜利的最重要因素

介绍

在过去的几年里,电子竞技社区发展迅速,曾经只是休闲娱乐的电子竞技产业,到2022年有望创造18亿美圆的收入。虽然在这个生态系统中有不少电子游戏,但不多有游戏像《英雄联盟》那样成为社区的主要元素,该游戏在2019年世界锦标赛期间吸引了超过1亿的独立观众。git

《英雄联盟》于2009年末发行,是一款免费的多人在线战斗竞技场(MOBA)视频游戏,由Riot Games公司开发,这款游戏在早期就产生了普遍的竞争场景,2011年的第一届世界冠军创造了约160万观众。随着Riot开始了解如何改变才能使游戏更具竞争性和趣味性,这款游戏在受欢迎程度和可玩性方面都有所提升。github

在《英雄联盟》的比赛中,两队各有五名玩家,每一队都控制着一个独特的角色或“冠军”,当其中一队位于其基地深处的Nexus被摧毁时,比赛就会结束。在这个过程当中,一个团队能够实现不少目标,好比摧毁炮塔,杀死中立的怪物,好比龙和男爵,以得到整个团队的增益,等等。有些目标,如摧毁至少五个炮塔和一个兵营,是赢得游戏所必需的,而其余目标,如得到第一滴血,是有益的,但不是必须的。经过这个项目,我想更好的了解这些目标中哪个是赢得英雄联盟游戏最重要的。就此而言,我提出的问题以下:web

英雄联盟最重要的获胜条件是什么?api

收集数据

我首先申请了一个使用Riot Developer Portal的应用程序,在个人应用程序被接受后,我浏览了api列表,以了解我能够请求的数据类型。不幸的是,没有一种直接的方法能够从一个区域中取出最后X个排名的匹配项,因此我必须找到一种方法来解决这个问题。svg

个人解决方案是使用召唤者名称列表(用户名)来为每一个玩家生成最近的比赛列表。经过Python包Riot-Watcher的调用,获取了差很少10000行的数据与五个地区最新联赛比赛的前100名玩家的数据。乍一看,DataFrame看起来是这样的:测试

在前7列中,0表示“False”,1表示“True”,而在后面的列中,单元格中编码的数据表示事件发生的次数。每行都包含了一场排位比赛中的一支队伍的统计数据。例如,在第一排,没有得到任何目标的团队首先输掉了整个比赛。编码

探索性数据分析热图和主成分分析

首先,我发现91%的获胜团队摧毁了第一个兵营,80%杀死了第一个男爵,70%摧毁了第一个塔,63%杀死了第一条龙,59%的获胜团队以第一滴血开始游戏。如今看来,最重要的获胜条件是摧毁第一个兵营,这是有意义的,由于摧毁一条线路的兵营会给他们的基地带来压力,并容许对方拥有更多的地图控制。翻译

接下来,我可视化了数据集中各列之间的相关性:3d

我还为个人数据中所表明的每一个独立地区找到了相同的关联热图,以比较不一样地区之间的关联,但愿能注意到游戏风格的一些差别。通常来讲,相关矩阵看起来很是类似。一个可能的缘由是,个人数据包含了每一个地区最好的玩家的比赛,其中许多人是职业选手。所以,因为良好的游戏实践在竞争性社区中是一致的,因此个人数据中所表明的匹配涉及到那些在每一款游戏中顶级玩家,而这些玩家相对于每一个区域中排名较低的玩家来讲是类似的。视频

我如今很想知道数据中的方差是如何用较少的特征来解释的,而不是我用来预测游戏结果的10个特征。在这种程度上,我进行了主成分分析,以了解我能够将数据简化成多少特征,同时保留大部分的方差:

十个预测列中超过80%的方差能够用一半的特征量来解释。这确实颇有趣,经过将每一个组件与原始数据集的列关联起来,我但愿了解在解释数据的差别时哪些特性是最重要的,这能够帮助我弄清楚哪些列对一个团队是否会获胜最关键。

用于生成上述热图的组件来自一个包含六个PCA对象,由于我但愿这些组件可以解释数据中超过90%的差别。看来推塔,摧毁兵营,以及一个团队是否摧毁了第一个兵营在肯定方差最重要的特征数据,第一个组件解释40%的方差和三个上述列加权最该组件。

重申一下我在这一点上的领悟:

从个人关联热图来看,不管一个团队是否摧毁了第一个兵营,一个团队推掉了多少塔,以及一个团队摧毁了多少兵营都与获胜有最高的相关性。

从个人PCA分析来看,团队是否摧毁了第一个兵营,团队摧毁了多少塔,以及团队摧毁了多少兵营在解释数据中的差别方面发挥了最大的做用。

使用逻辑回归进行数据建模

我使用了Logistic回归模型来理解《英雄联盟》排名比赛的获胜条件。个人过程是首先将个人数据分割成一组特征和一组目标,其中个人特征是除‘win’和‘region’列以外的全部列,个人目标是‘win’列。而后我将个人数据分解为一个列集和一个测试集,经过Logistic回归模型进行运行,并检查分类报告和混淆矩阵,确保有较强的预测能力。当逻辑回归模型在整个数据集上运行时,模型的精度和召回率分别为。86和。85。

从这里开始,我对只包含一个区域的数据子集进行逻辑回归,好比只在NA、BR等中进行的匹配,并在一个Pandas数据模型中记录模型的系数。这个数据图被可视化了,因此我能够比较不一样的区域:

回归系数描述预测变量和目标变量之间的关系。例如,当咱们看上面的一血预测变量时,第一个拿到一血的队伍是对比赛结果的适度预测,由于第一个拿一血的队伍更有可能获胜。另外一方面,峡谷先驱的击杀其实是在相反的方向上相关的(除了EUNE),而且得到更多峡谷先驱击杀的队伍更有可能输掉。

经过这个分析过程,我了解了哪些专栏更能预测胜利,帮助我回答了关于《英雄联盟》中获胜条件的问题。

结论

经过个人项目,我得出如下结论:

根据个人逻辑回归模型,按照最大到最小的顺序,第一个兵营,第一个塔,塔摧毁是数据集中最重要的获胜条件(这是推塔游戏)。

根据个人关联热图,从最大到最小,塔摧毁,第一个兵营,兵营摧毁数是数据集中最重要的获胜条件(这是推塔游戏)。

虽然得到第一个baron的NA和EUW团队更有可能获胜,但随着杀死的baron数量的增长,这些地区的团队更有可能失败。

与其余地区相比,在NA地区的团队更有可能赢得第一只龙,这一事实或许代表在NA地区的游戏更倾向于龙的爱好者和围绕龙的战斗

滚雪球式的游戏(当一个团队在游戏中扩大一个小优点以赢得胜利)。

KR游戏并无受到一个特性的不均衡影响。这可能代表KR的队员比其余地区的队员更了解如何在劣势中有细,这促使团队比其余地区的团队更常常地赢得组合目标。

本文源代码:https://github.com/ankushbharadwaj/league-of-legends-win-conditions

译者注:这个模型没有使用 “region”列做为训练参数使用国服数据训练多是个败笔,毕竟处理祖安的玩家数据可能须要更多的天然语言处理技术提取聊天的特征,这才是祖安人胜利的关键😂

做者:Ankush Bharadwaj

deephub翻译组