新闻
首页  > 新闻  > 

AI 预测世界杯冠军是「巴西队」

AI 预测世界杯冠军是「巴西队」

2018-07-02

2018年世界杯足球赛开赛在即,全世界的球迷都想知道:谁将夺得令人垂涎的冠军杯?



如果你不仅是个球迷,还是个技术达人,我猜你已意识到机器学习和AI也是目前的流行语。我们不妨结合两者来预测谁赢得世界杯。


免责声明:本文不该用于投注或任何财务决策。你要是选择这么做,我也不会拦你(如果你中了头彩,可别忘了我)。


足球比赛涉及好多因素;正因为如此,所有这些因素无法在一个机器学习模型中加以分析。我只是想用数据搞一个有趣的项目……


目标


目标是使用机器学习来预测哪支球队将赢得2018年世界杯。

预测今年这届世界杯每一场比赛的结果。

模拟下一轮比赛,比如四分之一决赛、半决赛和决赛。


这些目标带来了一个独特而实际的机器学习预测问题,需要解决各项机器学习任务:数据整合、特征建模和结果预测。


数据


我使用了Kaggle的两个数据集,可以在这里(https://www.kaggle.com/martj42/international-football-results-from-1872-to-2017/data)找到。我们将使用自1930年世界杯开始以来所有参赛球队的历史比赛结果。


局限性:国际足联排名是上世纪90年代搞起来的,因此缺少数据集的大部分内容。于是我们坚持使用历史比赛记录。


环境和工具:jupyter笔记本、numpy、pandas、 seaborn、matplotlib和scikit-learn。

我们先要对两个数据集进行一些探索性分析,做一些特征工程以选择对预测最要紧的特征,做一些数据处理,选择一个机器学习模型,最后将模型部署到数据集上。


开始动手吧!


要紧的事先说,导入必要的代码库,并将数据集加载到一个数据框。



导入代码库



加载数据集……


为两个数据集调用world_cup.head()和results.head(),确保数据集已加载到数据框中,如下所示:



探索性分析


分析这两个数据集后,得到的数据集包含过去比赛的数据。因而得到的新的数据集对分析和预测将来的比赛很有用。


探索性分析和特征工程:这需要确定哪些特征对机器学习模型来说很要紧,这是任何数据科学项目中最耗时的部分。


现在让我们将目标差异和结果这一列添加到结果数据集。



查看新的结果数据框。



然后我们将处理数据子集,这部分包括只有尼日利亚参加的比赛。这将帮助我们专注于哪些特性对一个国家来说很要紧,然后扩大到参加世界杯的那些国家。



第一届世界杯在1930年举办。为年份创建一个列,并选择1930年以后的所有比赛。



现在我们可以直观显示历年来尼日利亚最常见的比赛结果。



获得每个参赛国家的胜率是一个有用的指标,我们可以用它来预测每场比赛的最有可能的结果。


比赛场地关系不大。


范围缩小到参加世界杯的球队


为所有参与球队创建一个数据框。



然后,我们会进一步过滤结果数据框,只显示1930年起出现在今年世界杯上的球队,并摈弃重复的球队。



创建年份列,摈弃1930年之前的比赛,并摈弃不会影响比赛结果的列,比如date、home_score、away_score、tournament、city、country、goal_difference和match_year。



修改“Y”(预测标签),以便简化我们模型的处理。


如果主队获胜,winner_team列将显示“2”,如果是平局,显示“1”,如果客队赢,则显示“0”。




通过设置伪变量,将home_team和_team从分类变量转换成连续输入。


使用pandas以及get_dummies()函数。它将分类列转换成独热(one-hot,数字“1”和“0”)表示,让它们能够加载到Scikit学习模型中。


然后,我们将X级和Y组分开,将数据分成70%是训练数据,30%是测试数据。



我们将使用逻辑回归,这是一种分类器算法。这个算法如何工作?它通过使用逻辑函数来估计概率,从而度量分类因变量和一个或多个自变量之间的关系。具体来说是累计逻辑分布。


换句话说,在给出可能影响结果的一组数据点的情况下,逻辑回归试图预测结果(赢或输)。


实际上其工作方式是,你每次为算法馈送一次比赛,同时馈送上述的“数据集”和比赛的实际结果。然后,模型学习你馈送的每一个数据如何积极或消极地影响比赛结果,影响多大。


馈送足够多的好数据,你就有了可以用来预测未来结果的模型。


模型的好坏取决于馈送给它的数据。


不妨看一下最后的数据框:



看起来很棒。现在我们准备将这个传递给我们的算法:



我们的模型在训练集上的准确率为57%,在测试集上的准确率为55%。这看起来不太好,但暂且不用管它。


这时候,我们将创建一个数据框,我们将部署模型。


我们先开始加载截至2018年4月的国际足联排名数据集(https://us.soccerway.com/teams/rankings/fifa/?ICID=TN_03_05_01)和含有从这里(https://fixturedownload.com/results/fifa-world-cup-2018)获得的小组赛阶段保留球队的数据集。排名较高的球队将被视为比赛的“热门”,因此它们放在“home_teams”这一列,这是由于世界杯比赛中没有“主队”或“客队”。然后,我们根据每支球队的排名位置将球队添加到新的预测数据集。下一步将创建伪变量,并部署机器学习模型。


预测比赛


现在你想知道我们怎么来预测?码了那么多代码,说了那么多,你啥时预测比赛?好了,马上预测比赛了。


将模型部署到数据集


我们先将模型部署到小组赛。



这是小组赛的结果。



模型预测三场平局,它还在葡萄牙和西班牙之间稳妥下注,但认为西班牙胜率高。我用该网站(https://ultra.zone/2018-FIFA-World-Cup-Group-Stage)来模拟小组赛的比赛。


下面是模拟16轮淘汰赛。




模型预测四分之一决赛在这些球队之间进行:葡萄牙对阵法国、巴西对阵英格兰、西班牙对阵阿根廷和德国对阵比利时。


预测如下:



半决赛


葡萄牙对阵巴西和德国对阵阿根廷


预测:



最后是总决赛


巴西对阵德国


预测:



根据这个模型,巴西很可能赢得这届世界杯。



转自:云头条

在线咨询
在线咨询
留言 输入中...