查看原文
其他

根据四万场比赛结果,我给今年世界杯每场比赛计算了胜率,冠军竟然是…

Crossin先生 Crossin的编程教室 2020-10-08

四年一度的世界杯本周就要开赛啦!如果你和我一样是一名伪球迷,请先了解以下注意事项:

  1. 本届世界杯是在俄罗斯举办

  2. 一共32只球队分8个小组,每组前2名进入淘汰赛

  3. 比赛持续一个月

  4. 共64场比赛在俄罗斯多个城市举行

  5. 没有中国队,因为没出线

  6. 没有意大利队、荷兰队,因为也没出线

  7. 是国家队间比赛,因此没有巴萨、皇马、曼联、拜仁……

  8. 比赛常规时间,上下半场各45分钟

  9. 淘汰赛阶段常规时间打平,进入30分钟加时赛,再打平才是点球大战

  10. 梅西是阿根廷的,C罗是葡萄牙的,内马尔是巴西的,他们都不是西班牙的

  11. 大罗、小罗、卡卡、贝克汉姆都不参加

  12. 世界杯是足球比赛,没有哈登、库里、杜兰特


每到世界杯,一项保留节目就是预测当年冠军,各路大神啦、名嘴啦、章鱼啦、猫猫狗狗啦都少不了。这次我也来预测一把。但我不懂球啊怎么办?没关系,我可以用程序!(反正都是蒙呗)


数据来源


这份数据来自 Kaggle,是从1872年到2018年共38929场比赛的结果。我们这次就用这份数据作为预测的基础。


https://www.kaggle.com/martj42/international-football-results-from-1872-to-2017/data

可从文末项目中获取。

另外介绍下 Kaggle,它一个数据科学竞赛平台,强烈建议研究数据分析、机器学习这方面的同学多上去玩耍。


建立模型


有了这么多历史比赛数据,要怎么来预测呢?我建立了如下几条规则:


  1. 太久远的数据对于当下球队的参考价值有限,所以设定一个起始年限

  2. 查找对阵双方从起始年限至今的对战数据,并计算

    胜利概率=(胜利场次+平局场次/2)/总场次

  3. 小组赛阶段,胜利概率超过一定阈值(比如0.7)的球队赢,否则为平局

  4. 淘汰赛阶段,胜利概率大的球队赢

  5. 如果两队从起始年限至今没有进行过比赛,就往前再多选取N年的数据(一般出现在参加大赛较少的球队)

  6. 如果仍然没有交手过,则以各自对阵本届杯赛其余所有球队的战绩为基础,分别计算胜利概率。概率高的球队胜。但如果是小组赛,概率差必须高过一定阈值(比如0.1),否则为平局


赛程模拟


基于以上的规则模型,我们导入数据,通过 Python 程序模拟本届世界杯32支球队的64场比赛。



这样就“预测”了比赛的结果。


预测结果


所以,究竟这份代码 run 出怎样的结果?


因为不同的起始年限和平局阈值会得到不一样的结果。我尝试使用 2006~2016 11个不同年限,和4组N的取值,得到共44组比赛结果。最终夺冠的次数是:


巴西 23 次

西班牙 12 次

德国 6 次

英格兰 3 次


看来,巴西队还是毋庸置疑的夺冠热门。难怪各大菠菜网站都给他们开出最低的赔率。



但是抛开巴西队不谈,在我的结果中,英格兰队的表现异常得好。这主要源于他们近几年对战巴西的良好战绩:1胜2平0负。而相比之下,阿根廷恐怕又要“没戏”了。

另外,塞内加尔伊朗值得关注下,他们这几年对战其他球队的战绩不错,或许会成为黑马:

2012年以来

塞内加尔 4胜3平1负

伊朗 5胜6平3负


历史战绩查询工具


当然,我这个模型是很粗糙的。不过本来嘛,足球是圆的,拿历史数据预测比赛结果也就是娱乐一下,给看球增加点乐趣。如果你有自己的规则想实现,也可以在我代码的基础上进行修改。代码和数据的获取方法见文末说明。


另外,我把部分数据导出,做了一个在线查询的小工具,方便你直接查询任意两支球队之间的对战历史。



扫描下方二维码或者点击文末的“阅读原文”即可使用:


↑历史战绩在线查询工具↑


可以选择不同的年限。同时我还自创了一套“赔率”计算,以供参考。


主队综合胜率=总场数/(主队胜场+客队负场)


因为这个赔率模型基于的更多是历史战绩,而强队的对手多是强队,弱队的对手多是弱队,导致赔率上的差异并没有市面上的那么大,但总的来看也基本符合胜负关系。如果你发现有某场比赛计算出的结果和别人开出的结果差异很大,那或许这会是场会爆冷的比赛哦


预测结果仅供参考,如有雷同纯属巧合


最后,我突然想到,咱们国足对这32支球队的战绩如何呢?如果在另一个平行宇宙中有幸参赛,大概会是个什么结果?于是……


2014年以来:2胜, 5平, 8负

2002年以来:8胜, 19平, 35负

似乎只有和从未交过手的巴拿马在战绩上可以一战。


好吧,当我没说。还是让我们安心享受世界杯的欢乐吧!



点击文末“阅读原文”可进入历史战绩在线查询工具

本文中使用到的数据和代码,可在公众号(Crossin的编程教室)里获取,回复关键字 世界杯





如需了解视频课程及答疑群等更多服务,请号内回复 码上行动

代码相关问题可以在论坛上发帖提问 bbs.crossincode.com


推荐阅读:

知乎 | 排序 | 朋友圈 | 电影票 | 百万关注 | 技术宅 | 火车票 | 单词表 | 押韵工具 | 新手建议 | 就业 | 我用Python | 高考



欢迎加入

Crossin的编程教室

crossincode.com


  请把我们分享给身边爱学习的小伙伴 :)  

点击文末“阅读原文”,进入历史战绩在线查询工具

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存