专栏名称: 毕马威KPMG
毕马威是一个由专业服务成员所组成的全球网络。成员所遍布全球152个国家和地区,拥有专业人员189,000名,提供审计、税务和咨询等专业服务。
目录
相关文章推荐
有车以后  ·  国产SUV最火爆的设计,10-40万的都在用 ... ·  20 小时前  
hdmap  ·  百度:新一代智能汽车地图 ·  昨天  
hdmap  ·  百度:新一代智能汽车地图 ·  昨天  
印象笔记  ·  爱具体的人|一周收藏排行 ·  昨天  
51好读  ›  专栏  ›  毕马威KPMG

【大数据挖掘】PageRank算法预测本赛季欧冠冠军

毕马威KPMG  · 公众号  ·  · 2017-06-05 18:15

正文


编辑推荐

西班牙皇家马德里队于昨天结束的欧冠决赛中夺冠,而我司大数据团队早在4月份就已通过PageRank算法成功做出预测。让我们来看看他们夺冠的过程中跟大数据技术的关系。


为什么PageRank算法适用于足球?


截至我写这篇文章的时候,本赛季欧冠正好刚刚打完四分之一决赛:


(上图名单按字母排序)


如上所示,四强就是皇马、马竞、尤文和摩纳哥啦。


能够打入四强的球队显然都不好对付,究竟谁能夺冠,大家也都给出了自己的猜测:有人觉得上届冠军皇马实力强劲,有望卫冕;有人认为马竞在过去三年两进决赛之后,怎么也该打破魔咒获得冠军了;尤文近几年表现出的实力也是有目共睹,今年更是完胜巴萨;当然还有摩纳哥,虽然看起来似乎比不了以上三家,但黑马总是令人忌惮的,谁知道会不会爆一个大冷门呢?



你可能觉得,看这四个球队的联赛成绩就可以知道谁更厉害了。不过事情不一定这么简单。欧冠常被认为代表了足球竞技的最高水平,参赛队伍都是欧洲内各大联赛的前几名,强强对话究竟谁占上风,恐怕不能简单地以联赛成绩来判断。键盘侠界一直有一种理念(也可能是迷信):联赛靠虐菜(尽可能战胜弱队拿分,毕竟打谁都是3分),欧冠靠死撑(对阵强队,即使不一定占据绝对优势,也不能被轻易打垮)。并且,由于球风、偏好甚至集中度的不同,每个球队擅长对付的对手也不同,因此,有的球队被誉为劫富济贫专打强队的能手,有的球队则被嘲笑是窝里横……


本来这种论调我是拒绝的,直到2013-14赛季的赛果颠覆了我的观念。13/14赛季的欧冠冠军是皇马,他们战胜了许多强敌打进决赛,又在决赛中艰苦地战胜了马竞,赢得球队历史上的第十冠;然而,在同赛季的西甲联赛中,皇马的表现实在是不怎么样,最后仅屈居第三,而西甲冠军正是——马竞。


这可能是一个相当典型的例子了,马竞赢得了一个赛季的长跑,却在最后关头倒在了皇马脚下,心中想必也是很不爽的。所以,难道马竞就是传说中的虐菜小能手,而皇马专克强敌?


于是我就想到了著名的网页排序算法——PageRank,Google用于用来标识网页的重要性的一种方法。比如,我搜索了“西甲”这个关键字,世界上当然有成千上万个网页里都有这两个字,Google到底应该首先推给我哪一个呢?PageRank算法的思想是,假设我们要评估网页A的重要性,那么就要看有多少网页(n)引用了网页A;一般来说,n越大、而且这n个网页的重要性越高,A就越重要,也就是说,网页A的重要性由所有引用它的网页的重要性共同决定。由于网页数量繁多,我们经过若干次迭代入链后,就可以得到一组收敛的评分——也就是所有网页的PageRank值。


这个道理似乎很适用于足球比赛。我们可以认为,一支球队的实力由所有输给它的球队的实力决定,别的球队输给它一次,就等于给它加血。球队的实力(PageRank),也就是通过所有输给它的球队的重要性经过递归算法得到的。


简单地说,球队:


  1. 不但赢得越多越厉害——这是各大联赛的积分标准


  2. 而且赢强队越多越厉害——这就是综合实力了


好了,这就是球队PageRank算法的理论基础。


拿13/14赛季试验一下


既然刚才已经说过了13/14赛季的西甲怪现象,不妨就拿这个赛季来算一下PageRank吧。条件所限,我是拿R来实现这一套流程的,其实可能底层语言方便得多.


感谢数据时代(或者菠菜业),现在找比赛资料真是容易得多,如果你不是执着于什么斯洛文尼亚第三级别联赛,应该都能在网上找到。我的数据来源是http://www.football-data.co.uk/data.php,可以提供22个欧洲联赛在过去19年中的赛果,包括半场结果、全场结果、角球、处罚等(看到这里你该知道它是为哪个行业服务的了)。



简单说一下思路:


1. 对源数据进行处理


从那家网站上获得的比赛数据很复杂,我只保留了双方球队名和进球数。同时,我认为一个赛季的表现并没有说服力:从实力提升到在欧冠中有所突破,往往需要几个赛季的时间,很多球队就倒在其中的某一环。因此,我选择了2010/11 - 2013/14共四个赛季的数据。比较理想的一点是,这四个赛季中,皇马和马竞都各有一位执教时间满3年的主教练,可以保证球队发展的连续性。关于主客场,我选择了忽略其中可能存在的差别。


经过简单处理之后,数据变成了“球队A - 球队B - A进球数 - B进球数”的格式,每场比赛都有一条记录。


2. 将数据变成有向图


网页PageRank算法中,如果网页A引用了网页B,则可以认为存在A->B的关系;生动一点说,“A把自己的重要性贡献了一部分给B”。我认为以图来思考PageRank非常简洁有效,也就是说,球队A输给了球队B,则可以认为存在A->B的关系,A给B加了血。


这样,我们就可以画出一个有向图:


3. 计算PageRank


每个赛季西甲有20支球队,但在前后4个赛季中,共有26个球队参加过比赛。计算的PageRank值如下:



我很困惑为什么我的R并不严格按照descending的顺序排序……但是很明显,从4年的时间段来看,巴萨和皇马是西甲的两大巨头,马竞与之尚有差距。事实上在那几个赛季中,马竞的确处于崛起的过程,然而大概还没有进阶成为老油条,所以在至关重要的决赛中,拼不过皇马也属正常了。



我并不希望把这个问题搞得太复杂,但这可能导致某些部分失去了应有的复杂性。不过,足球比赛中本来就有很多不能量化的东西,在此我也只是提出一种可能的思路,希望对大家有所帮助。


另外,在我漫长的算数过程中,我发现单赛季联赛PageRank排名与实际排名差异极小,实验了几个赛季,冠军位置都没有变过。——所以,联赛也不能光靠虐菜的。


预测本赛季欧冠


上面已经说过,今年的欧冠四强是皇马、马竞、尤文和摩纳哥。不过,坦白地说,摩纳哥真的让人很为难,要知道去年它都没有进入欧冠小组赛……同样,part 2里面的大量联赛数据也无法在尤文身上重演。


我考虑过是否要把欧洲五大联赛的数据完全混起来计算,但要知道,各联赛的中下游球队完全没有机会碰面,只有上游球队可能一年碰个两次,这样巨大的数据差异难以得出客观的结果。事已至此,我的想法是或者就拿近四年欧冠正赛(2013/14 - 2016/17四分之一淘汰赛)的数据来用,尽量保证参与节点的稳定性。


偷懒起见,我觉得可以先拿皇马、马竞、尤文三队之间的直接交战数据试一试,虽然绝对数量少得可怜,但四个赛季里他们三个一共交手10次(还不算今年没来得及碰上),这个数字在欧洲各队之间算是非常可观的。结果如下:


注:以90分钟结果为准


三个队没有差很多,但皇马确实略高一筹。不过这看起来怎么都有点敷衍,所以还是选取2013-14赛季开始至今的欧冠全数据试试吧。过程不赘述了,结果如下(仍然无法正确地排序,sad):



黑马摩纳哥在这种算法中当然是吃亏的,姑且不论。直接给答案:皇马>马竞>尤文。


我觉得也不妨单拿淘汰赛的结果试一下,参赛队伍一下减少到了29个:


如图,选中皇马的时候,给他贡献过经验值的球队都会高亮出来


看看最大的几个圆,皇马、拜仁、马竞、巴萨、尤文……西甲这几年真的是好厉害。具体PageRank分数如下:



我们关注的三支队伍的顺序依然是皇马>马竞>尤文。这么看来淘汰赛小能手皇马很有夺冠的希望啊。


不过,像任何一个算法一样,这种算法也有不完善的地方。比如……咳咳,请抬头看德甲的另两支球队,沃尔夫斯堡的得分竟然比多特蒙德还要高,然而谁会觉得前者比后者更有竞争力?回想一下,其实是因为这几年间该队只参加了一次欧冠淘汰赛,并且很意外地战胜了一次皇马……所以分数一下子就拉高啦。       


所以,请大家娱乐为主,领会算法精神为辅,毕竟,如果算法就能给出比赛结果,那还踢球干嘛?足球的魅力,本来也在于其不确定性。


其实PageRank与足球的潜(挑)在(口)结(水)合(话)点(题)真是太多了,比如:梅西和C罗,究竟谁是虐菜小王子、谁才是硬仗大师?英超真的像他们自己声称的那样,联赛内部竞争过于激励以至于欧战乏力吗?阿森纳为何在欧冠全排名中可以挤进前十,只算淘汰赛却连塞维利亚都比不上?……感觉我马上就可以收到太阳报的offer了,我先去办签证了哦。


TIPS 

在研究过程中,对我帮助最大的R程序包是:igraph, dplyr和visNetwork,最后一个简直是画交互图的神器。



关于本文

本文转载自毕马威大数据挖掘微信公众号。文章由项目经验丰富的博士以及资深顾问精心准备,内容也是结合实际业务的理论应用和心得体会等干货。



欢迎大家在阅读本文后留言与我们分享您的想法。