Py学习  »  Python

Python仿真|如何“操纵”足球比赛的输赢

CDA数据分析师 • 2 年前 • 279 次点击  

作者:Crossin先生

来源:Crossin的编程教室


欧洲杯马上就要决赛了。这届欧洲杯全是乌龙和冷门。于是网上少不了冒出各种“天台”梗。还衍生出球队配合“盘口”踢的说法。所谓盘口,就是指国外一些博彩公司给一场比赛的胜负开出的赔率。更有甚者会神秘地告诉你,通过分析盘口,你就能看出来接下来的一场比赛是什么结果。


好家伙!财富密码尽在掌握啊。

那博彩公司究竟是如何操纵比赛,从而让自己赚得盆满钵满呢?

答案很简单:

我也不知道……


哎,别急!我是说不知道他们有没有操纵比赛以及如何操纵比赛。但如果让我开一家这样的公司,我一样有办法可以把你们的钱都赚进我的口袋

因为做到这一点这压根儿就不需要操纵比赛,只要一要东西,那就是:
概率


假设现在A、B两队要进行一场比赛。阿汪同学说他觉得A队要赢,并愿意为此押上100枚硬币阿喵同学说他觉得B队要赢,也愿意押100枚硬币。我说那行,我来给你们做个见证,你们把硬币都放我这里,最后谁对了,我就把硬币全给谁。不过,我得从所有硬币里拿走10枚,也就是5%的硬币,作为我的辛苦费。也就是说,赢的人最终可以拿走190枚硬币



现在问题来了:谁最有可能去操纵比赛?

阿汪和阿喵都有动机,唯独不可能是我。因为不管谁赢谁输,我都稳赚10枚硬币。那我究竟是吃饱了撑的没事干,还是跟谁有深仇大恨,宁可瞒天过海偷天换日只为了把一人的钱转移给另一个人?

有人要说了,你举的这个例子不对。赢的人能拿多少钱走是博彩公司定的,所以他们会输小赢大!

No!No!No!


这个因果逻辑反了!

不同赔率的存在不是由博彩公司或者说庄家决定,而是由投注的人决定。

同样是刚才的例子阿汪依旧押100枚硬币支持A队赢;而B队这边,除了阿喵同学押了100枚阿咩同学也押了100枚。这时候,我依旧从中拿走5%,现在是15枚。如果A队赢了,阿汪可以得到 285 枚硬币,所以押A队的赔率是 (300-10)/100=2.85;而B队赢了,阿喵和阿汪同学各可以拿走 142.5 枚硬币,所以押B队的赔率是 (300-10)/2/100=1.425


作为庄家,我当然可以把赔率定的更低,比如A队为2.5,B队为1.2,这样我可以赚到更多的钱。但三位同学也不傻,他们一算,不对啊,怎么不管谁赢,我都还私藏了一部分硬币,以后就不来找我做公证了。于是我连原本稳赚的那5%也没了。

在现有普遍的博彩规则中,庄家需要在别人下注前预先给出明确赔率。这就要求博彩公司开出的赔率既要保证不管谁赢,自己都是能赚钱的,又要保证赔率尽可能高以便吸引人下注。

为此,就需要做两件事:
  1. 给出一个尽可能准的初始赔率

  2. 根据下注情况动态调整赔率


比如对于本届欧洲杯的决赛,某个网站给出了:
胜2.50 - 平3.10 - 负2.88 
这样的即时赔率。

计算一下就可以发现,此时它的预期抽成为:




我用一段程序来模拟一场比赛的投注过程,来看看是不是真的可以仅通过调整赔率就让自己稳赚不赔。为了简化模型,这里只考虑A队胜和B队胜两种情况,没有平局

假设初始预估的胜率各为50%,而投注者们的偏好是80%会押A20%押B

我的动态调整策略就是:根据最近1000个投注者的选择作为依据,按照前面说的方法计算出新的赔率。当然,我依旧会从中抽取5%

当有十万人次投注之后,我得到的结果是这样的:


解释一下:
红色曲线是我收到的投注总额;
蓝色曲线是A队胜利后我需要根据每个投注者当时赔率所需支付的奖金;
绿色曲线则是B队胜利后需支付的奖金;
黄色虚线和青色虚线则分别是AB两队的即时赔率。

可以很明显地看出来,除了一开始因为初始赔率定得过于随意,导致出现短暂的轻微亏损外,之后时间里,我都是稳赚不赔的。

有人又要说了,你这个情况太理想,观众投注分布不会这么稳定的!

OK,没关系,我们继续来模拟。

现在假设每经过一万人次的投注,大家就更看好B队一点,A队的投注偏好就会在现有基础之上降低10%。其他条件和策略不改变。我们将会得到这样的结果:


从投注开始到结束,尽管球迷们对AB两队的看好程度彻底发生了反转,但这依旧不影响我赚钱的稳定性

再进一步,我设定在投注期间,有万分之一的几率出现随机的球迷投注偏好的集体大波动,也就是说庄家完全无法预测比赛的胜负。


即使在这种奇葩的情况下,我的收益还是稳如老狗!

为了更有说服力,同样的规则,重复100次投注人次依次为 10000 到 110000递增,把收益比画出来:


看见没,不过来多少人,收益始终可以维持在5%左右,也就是我预设的抽成比例,而且人越多越接近这个比例。这就是概率学上大数定律的体现,即重复的次数越多真实发生的频率就越趋近于理论上的概率

现在,还有人觉得我需要去操纵某支队获胜吗?有必要吗?


我要的只是有很多很多人都来投注,越多越好。我不关心哪支球队状态更好,天气更适宜,主力球员的感情生活更稳定,甚至初始的赔率也并不重要。唯一关键的就是投注的实时情况。我调整赔率不是为了坑你上天台,反而恰恰是为了让不同方的下注者更加平衡,避免赢小赔大或赢大赔小的情况出现。

所以,决定赔率的不是我,而是在我这里投注的阿汪阿喵阿咩们。我不需要动任何手脚,只要你坚持投注,把自己老婆本赔光是必然的事情。



不信我们再来看一个模拟:

假设所有比赛的赛前预计胜率都是合理的,比如预计A队胜率80%,那实际就是有80%的可能赢球。在此基础上,阿汪带着1个w的硬币来了。每场比赛,他都会押上1000硬币,也就是初始总额的1/10。这样,一直持续下去,结果会怎样?


模拟了100次,这是硬币数量的变化曲线。虽然也有不少时候,1万硬币会赢到两三万甚至更多,但绝大部分情况下,在不到100次的时候,硬币数就归零了。而拉长到1000次,更是几乎不可能幸免。

如果阿汪执迷不悟,继续借钱参与:


可以看到,由于庄家抽成的存在,硬币数量的整体曲线是在不断下降的

而假如阿汪还很激进,动不动就 All-in,那么可以大大提速这个过程:


基本上两三次也就赔光了。运气爆棚的话能狗屎运多撑几次,但最后的结局总是一样的。

这个实验告诉我们:
在一个零和游戏中,作为注定劣势的一方,最好的策略就是一次都不要参与,这样数学期望才是最大的。

所以请切记:
大赌伤身,久赌必输,赌到最后,一无所有!



获取文中模拟实验代码,请在公众号后台回复关键字
足球比赛


 

点这里👇关注我,记得标星哦,么么哒~

 

推荐阅读


 

CDA课程咨询

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/116931
 
279 次点击