使用机器学习预测2018年世界杯足球赛

  1. 云栖社区>
  2. 博客>
  3. 正文

使用机器学习预测2018年世界杯足球赛

小丑丁丁 2018-06-29 20:08:19 浏览3065
展开阅读全文

2018年世界杯正进行的如火如荼,日本、塞内加尔相继爆冷战胜了强大的对手,东道主俄罗斯依旧保持开挂状态,碾压拥有萨拉赫的埃及队,豪取两连胜。在足球的世界里,没有强者恒强的定律,这或许也是足球的魅力所在吧。然而对于世界各地的球迷们来说,世界杯的最终归属仍然是最热门的话题。


如果你不仅仅是一个足球迷而且还是一个技术人员,我想你已经意识到机器学习和人工智能也是目前流行语。让我们结合这两个来预测哪个国家会赢得FIFA世界杯。


0_TS9yYkdL98sQKELf.jpeg


免责声明:这不应该用于投注或任何财务决策。如果你选择,我是谁来阻止你(如果你遇到困境,不要忘了我)。


足球比赛中涉及很多因素,因此所有这些因素都无法在机器学习模型中进行探讨。这只是一个黑客试图用一些很酷的数据...


目标


  1. 目标是使用机器学习预测谁将赢得2018年世界杯足球赛

  2. 预测整场比赛的单项比赛结果。

  3. 运行下一场比赛的模拟,例如四分之一决赛,半决赛和决赛。


这些目标提出了一种独特的真实世界机器学习预测问题,并涉及解决各种机器学习任务:数据整合,特征建模和结果预测。


数据


我使用了Kaggle的两个数据集。你可以在这里找到它们。我们将使用自1930年冠军开始以来所有参赛队的历史赛事结果。


限制:国际足联排名是在90年代创建的,因此缺乏大部分数据集。所以让我们坚持历史比赛记录。


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


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


理论联系实际


首先,导入必要的库并将数据集加载到一个数据帧。

0_bXKg0bN4YvtbtkI5.png


导入库


0_nfowjaVzfZCEXgHl.png


加载数据集...


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


0_lHRcFby7nyPulhYb.png


探索性分析


分析两个数据集后,所得数据集包含过去匹配的数据。新的(产生的)数据集对分析和预测未来的匹配很有用。


探索性分析和特征工程:涉及确定哪些特征与机器学习模型相关是任何数据科学项目中最耗时的部分。


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


0_SKjQScHRi7lc0N-v.png


查看新的结果数据帧。


0_0yBBTt_WMkmN8Ekb.png


然后我们将处理一部分数据。其中包括只有尼日利亚参加的比赛。这将有助于我们关注哪些国家的特色有趣,并随后扩展到参加世界杯的国家。


0_sBeSQbcTX1AZdZ8V.png


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


0_PoGK7Bz5y7aj_6Jv.png


我们现在可以想象这些年来尼日利亚最常见的比赛结果。


0_YXjJOV4BUhmXdO5K.png

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


比赛场地无关紧要。


缩小到参加世界杯的球队


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


0_vqV9xha0SqSDbwKg.png


然后,我们会进一步过滤结果数据帧,以显示从1930年起仅在今年世界杯上的球队以及数据去重。


0_SuU31_Shc-VTCmFJ.png


创建一个名称为year的列把1930年之前的比赛以及不影响比赛结果的因素(例如日期、主场得分、客场得分、联赛、城市、国家、目标差异、比赛年份)过滤掉。


0_zhlGjYfWdaxdTZcU.png

0_Rdtd4w3tnlA5Rrfk.png


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


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


0_OVM3pce_lKsabcHF.png

0_4Lu1Nux9JEH91k9j.png

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


使用pandas,get_dummies()函数。它用独一无二的(数字“1”和“0”)表示替代分类列,使其可以加载到Scikit学习模型中。


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


0_ZaDFapNjHkjg0C8_.png


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


换句话说,逻辑回归试图预测给定可能影响该结果的一组数据点(统计量)的结果(胜利或损失)。


在实践中这种方式的工作原理是,您一次只用一组比赛来提供算法,同时提供上述“数据集”和比赛的实际结果。然后,模型会学习如何以每种数据的形式对比赛结果产生积极、消极影响以及在多大程度上影响比赛结果。


给它足够的(好的)数据,并且你有一个可以用来预测未来结果的模型。


模型与您提供的数据一样好。


让我们来看看我们的最终数据帧:


0_KIZ0pM1ypFuvVuM3.png


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


0_u5ccKca0NacVjaza.png


我们的模型在训练集上的准确率为57%,在测试集上的准确率为55%。这看起来不太好,但让我们继续前进。


在这一点上,我们将创建一个数据帧,我们将部署我们的模型。

我们将首先加载截至2018年4月的国际足联排名数据集和一个包含从这里获得的比赛小组赛阶段的数据集。国际足联排名较高的球队将被视为比赛的“最爱”,因此,由于世界杯比赛中没有“主场”或“客场”球队,他们将被定位在“home_teams”栏目下。然后,我们根据每个团队的排名位置将团队添加到新的预测数据集中。下一步将创建虚拟变量并部署机器学习模型。


匹配预测


现在你想知道我们会不会得到预测结果?这里有太多的代码和谈话,你什么时候会向我们展示预测?再坚持一会儿,我们几乎在快完成了......


将模型部署到数据集


我们将从把模型部署到小组比赛开始。


0_r_ffRVtk31sKOjrY.png


这是小组赛的结果。


0_4lyV02pz6DCFn7EV.png

(结果数据太多,剩余数据可以直接阅读原文查看)


该模型预测三人将在葡萄牙和西班牙之间安然下注,但给予西班牙很高的获胜概率。我用这个网站模拟了小组赛的比赛。


下面是16轮淘汰赛模拟的一轮。


0_2s_umRuSM6QPivdb.png

0_CNcMyW7Zeg3NDFpR.png

0_CFscXh75TGSmqUQQ.png

该模型预测在四分之一决赛之间:葡萄牙vs法国,巴西vs英格兰,西班牙vs阿根廷,德国vs比利时。

这里是预测;

0_synTt_dlWur57E_Z.png


0_5nwcBh7yAKm8ubnc.png半决赛


葡萄牙vs巴西和德国vs阿根廷


预测;


0_P2soHCGBJ_AwCd-P.png


最后是决赛


巴西vs德国


预测;


0_zeLvgAE3KTSiMyhW.png

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


进一步研究/改进的领域


  1. 数据集;为了改进数据集,您可以使用FIFA(游戏而不是组织)来评估每个团队成员的质量。

  2. 混淆矩阵对分析模型出错的比赛非常有用。

  3. 我们可以合作,也就是说,我们可以尝试将更多模型堆叠在一起以提高准确性。


结论


有很多事情可以做,以改善这项工作。现在看看我们是否幸运。充分披露:我不是资深球迷。所以预测你自己的风险。



本文为翻译作品,原文来自goodaudience,作者Gerald Muriuki。原文地址:https://blog.goodaudience.com/predicting-fifa-world-cup-2018-using-machine-learning-dc07ad8dd576


网友评论

登录后评论
0/500
评论
小丑丁丁
+ 关注