炼数成金 门户 商业智能 人工智能 查看内容

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

2018-6-11 11:02| 发布者: 炼数成金_小数| 查看: 5909| 评论: 0|原作者: Gerald Muriuki|来自: 云头条

摘要: 2018年世界杯足球赛开赛在即,全世界的球迷都想知道:谁将夺得令人垂涎的冠军杯?如果你不仅是个球迷,还是个技术达人,我猜你已意识到机器学习和AI也是目前的流行语。我们不妨结合两者来预测谁赢得世界杯。足球比赛 ...

工具 算法 模型 测试 机器学习

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轮淘汰赛。

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

预测如下:



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

预测:


最后是总决赛
巴西对阵德国

预测:


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

进一步研究/改进的方面

数据集:为了改进数据集,你可以使用FIFA(比赛而不是组织)来评估每一个球队成员的水准。
混淆矩阵(confusion matrix)适用于分析模型预测哪些比赛出错。
我们可以尝试结合更多模型以提高准确性。

结论
为了改进这项工作,有许多事情可以做。现在不妨看看我们是否预测很准。全面披露:我不是十足的球迷。所以预测准不准风险自负。

完整的代码可以在这里(https://github.com/itsmuriuki/FIFA-2018-World-cup-predictions)找到。


欢迎加入本站公开兴趣群
商业智能与数据分析群
兴趣范围包括各种让数据产生价值的办法,实际应用案例分享与讨论,分析工具,ETL工具,数据仓库,数据挖掘工具,报表系统等全方位知识
QQ群:81035754

鲜花

握手

雷人

路过

鸡蛋

相关阅读

最新评论

热门频道

  • 大数据
  • 商业智能
  • 量化投资
  • 科学探索
  • 创业

即将开课

 

GMT+8, 2018-6-18 11:42 , Processed in 0.162078 second(s), 26 queries .