昨日,kevinmhaube发表了题为Choose Wisely: Pick/Ban & Predicting the Outcome of the Game(机器学习与英雄联盟)一文,原文(翻译)大意如下(未经允许禁止转载、搬运截图):原作者注:谢谢所有指出我的疏忽之处的Reddit用户。我用了我所有的数据来计算胜率矩阵,不只是用了测试数据。我会吧文章放在这,欢迎大家来指出错误,我已经用更新过后的胜率预测数据来修改了文章。请大家细品!

前言

你看LEC具有高度对抗性的比赛的时候,是否见过还在BP阶段,观众就开始欢呼,就行一支队伍发动了一次出人意料的gank而另一支队伍没有视野无动于衷那样?几乎每次两支强队在载入阶段时观众都会欢呼。英雄联盟的职业选手最喜欢的就是暴打对手,挑选那些他们单排中练了很多的英雄,当然,还有那些在数月甚至数年的沉寂之后重新出现的具有历史意义的英雄。我从2018年初才开始接触这一游戏,直到2019年春,也就是我加入TL团队的一年后,我才开始关注这些事件。事实上,大约在同一时间,我了解到BP阶段可以在很大程度上改变比赛的进程,这就引出了我们的话题:你能仅仅根据BP阶段的数据来预测比赛的结果吗?

情况评估

在深入研究数据之前,让我们先退一步,看看更宏观的层面。我们在做什么?我们有什么现成的信息可以在BP阶段后和在播音员亲切地说“欢迎来到召唤师峡谷”之前使用?我们所做的是根据赛前的因素来预测比赛的结果。游戏有两种可能的结果:赢或输。听起来,我们可以利用机器学习中最受欢迎的二元分类器之一——逻辑回归。在赛前数据方面,我们有哪些信息可以访问呢?

·红蓝方选择

·英雄和位置

·对位

所以……可用信息不多,但这并不是说我们手头没有一些有意义的信息!我们将不得不成为有创造力的数据工程师,充分利用不太理想的情况。当你是英雄联盟的专业分析师时,你会对这些数据点有一种直觉,基于你是想要针对对方的哪个位置,或者你的中野联动与对手相比如何,你有一种知道应该选择哪一边的直觉。有一样东西你还没有,至少现在还没有,那就是你大脑里的一台内置电脑,它可以浏览数千场的训练数据,给你比那些基于直觉的东西更多的信息。

可以说,BP中最重要的因素,也是我决定将这个项目作为基础的因素,就是对位,或者说是这些选定的英雄如何形成一个阵容。有了这些信息,根据大数定律,我们应该能够得到对一个英雄面对对方阵容的实用性的表述。

量化对位

你如何量化对位呢?虽然我们最终需要在一定程度上考虑熵值,但是今天我们将专注于一个更明显的特性:胜率!一段时间以来,我一直在拖延,现在终于创建了这个数据集了。我最终打造的是一个基于所有主要赛区和少数次要赛区的2018-2019年每一场职业比赛的英雄对位胜率矩阵。有了这个矩阵,我们现在可以开始量化阵容,因为它们与对手阵容相关。

英雄联盟比赛有大量的数据,但我选择的数据来源于OracleElixir数据网站和Riot的API。我下载了2018-2019年所有比赛的数据,通过一些有创意的数据工程,我创建了我们的第二个数据集,它包含了以下数据:

·游戏id(整型)

·联赛(字符串)

·蓝色方队伍,红色方队伍(字符串)

·蓝色方的BP(数组)

·红色方的BP(数组)

·蓝色方总数(浮点数)

·红色方总数(浮点数)

·第一滴血、第一座防御塔、第一条男爵和比赛结果(0-1之间的浮点数)

将每场游戏的12行数据压缩到1行并添加我想要的功能并不是一件容易的事情,我必须承认这也是我在这个项目上花费大量时间的原因。现在我们有了我们的数据集,让我们来量化对位吧!

首先,我编写了一个逐行运行的Python脚本,将一个数组中每个英雄面对对方队伍的5个英雄的胜率分别提出来,并将它们加在一起。当我为每个队伍计算出了这5个数字之后,我将它们加在一起得到了蓝色方队伍和红色方队伍的数据。这些数字就是逻辑回归时用来预测比赛结果的。当我决定采用这种方法时,我的直觉是,考虑到每个英雄基于对方5个英雄而得出的一个胜率相加的数字,不仅能准确地描述各个位置的对位,而且还能反映阵容在中后期的能力。我知道这不是100%合理的逻辑,但我觉得这个想法可以得到B+左右的分数。

训练

剩下要做的就是进行测试,调整模型。

我将70%的数据作为训练集提供给模型,剩下的30%用作测试集。幸亏有了SciKit Learn(译者注:机器学习中的一款开源框架),我不必自己创建逻辑回归类(尽管我在当天早些时候自己创建了),而且我可以用几行简单的代码来实现这个算法。

令我惊讶的是,仅考虑红色方总数和蓝色方总数这两种情况时,我预测比赛结果的准确率高达84.9% !对于这个训练了一天的模型来说结果还算不错!我决定使用那些数据来预测一些重要资源的夺取,比如第一座防御塔、第一滴血和第一条男爵。

比赛结果预测正确率(赢/输)——84.89%(在校正了生成胜率矩阵时产生的意外遗漏,我再次进行了比赛结果预测,准确率仍高达73.52%)

·第一滴血预测正确率——56.28%

·第一座防御塔预测正确率——62.23%

·第一条男爵预测正确率——74.69%

我就说吧,我感觉我直觉给出的算法能得到B+的分数。

结论

在加载入召唤师峡谷之前,就有很多我们可以知道的东西了,也许有一天,借助Elon的神经网络,我们可以在没有近期偏差和确认偏差的情况下处理这些数据。但在那一天到来以前,我希望队伍们搞好他们的数据科学和分析项目。如果你和我一样,对创造性地解决问题和数据探索有着坚定不移的热情,请查看Oracle的Elixir和Riot的API。对于英雄联盟这款游戏,我们还有很多全新的视角去探索。

来源:Kevinmhaube