如何跑赢菠菜公司的赔率(三)
根据历史数据,训练数学模型,然后对新输入的数据预测结果,这种操作在数学模型上有两种思路来做:(晦涩的东西来了,对数学感兴趣的朋友可以仔细看,不感兴趣的朋友可以跳着看)
第一种,白盒子的方法(即,知道输入和输出数据之间确定的数学关系,以及模型中参数明确物理意义),可以用经典概率,即单纯的统计不同的赔率对应不同结果出现的概率,但是这种方法效果非常差,我测试过,准确率甚至不到50%,等于瞎猜。好一点的是贝叶斯数学模型,但是,表征先验概率的似然函数 (likelihood) 如何定义是个头疼的问题,你用高斯分布好呢,还是学生分布好呢?这里,学术界争议较大。当然还有无参贝叶斯模型,此模型一个经典应用就是“中国餐馆问题”(我有阿尔法狗祖师爷,美国三院院士,伯克利大学特牛逼的教授Michael I. Jordan关于无参贝叶斯的视屏课,讲的极其精彩,感兴趣的朋友们,我可以发给你们,不过没有字幕,需要你英语和数学较好)。而且用贝叶斯模型,经过我测试,效果也不尽人意。
第二种,黑盒子的方法(即,数学模型中各参数对应的物理意义不明确,但是就是能工作),黑盒子典型的代表就是人工神经网络,人工神经网络模拟人大脑中无数神经元(其实就是一些有参数的数学函数),利用历史数据,不断把数据输入到神经网络中,同时告诉神经网络与之对应正确的输出应该是什么(此种方法成为有监督的学习,还有无监督的学习,就不展开说了),如此这般,人工神经网络就能像人的大脑一样,通过不停地训练,学习,最后能举一反三,从而实现预测。这是人工智能的基础,而大家都知道的阿尔法狗之类的,是深度神经网络,又叫深度学习网络,因为模型中有非常多的神经元,以及隐层非常多。下面简要的描述一下神经网络,明白这些知识,才能进行建模,预测,甚至之后用深度学习算法来预测。
神经网络简介:
如上图所示,一个简单的神经网络有三层,首先是输入层,即输入数据在这里,再具体点,就是一场比赛各种结果的赔率;然后是隐层,隐层中包含很多神经元,每个神经元都是带有可调参数的函数;最后隐层的输出到输出层,输出数据,即比赛的结果。当然,第一次输入赔率,经过神经网络,计算出来结果可能不正确,但是我们有正确的结果,计算两者的误差,然后通过求梯度,把误差往后传播,这一过程神经网络就会自动不断调整神经元的参数,最后,使得输出正确。要想准确表达这些,需要用数学来表达,其中牵扯到矩阵知识,以及梯度知识,我就不展开说了,我用个比方来解释:
一个脑子有点问题病人去看医生,医生问:“1+1, 1+2, 2+4 分别等于几?”
病人回答:“分别为3, 4, 5”
医生说:“错了,第一个答案误差为1,第二个答案误差为1,第三个答案误差为-1. 给你点药吃,下次再来!”
病人回家吃药,并记住医生说的误差了(这个过程就是神经网络误差往后传,自动修改)。然后病人又去看医生了,还是同样的问题,但是病人回答还是有错误,不过误差比上次小了。如此一遍又一遍,病人回答终于正确了,脑子也变好了,不但知道这三个题的答案,而且还能举一反三,例如,病人能知道1+1.5=2.5了!
这就是神经网络,这就是人工智能的基础!(篇幅有限,对神经网络感兴趣的朋友可以上网搜一下,教程很多的)
第三部分:如何利用神经网络进行比赛结果的预测
在第二部分简单介绍完神经网络之后,这一部分就要具体介绍如何用神经网络进行预测了。
首先是历史数据的获得,这个在网上很多地方都能找到各个联赛的历史盘口,结果,都能找到,我不确定头条允许不允许发外部网站链接,以防万一,我就不发了,想要的朋友可以私信我(英文网站,你英文至少马马虎虎),我可以告诉你网站。
然后就是数据的选择和清洗了。当然输入数据越多,涵盖的信息越多,模型越准确(大数据时代,其实数据才是钱,谁掌握了海量的数据,谁就能比别人做的好,典型代表就是头条,抖音,和某宝。其实头条,抖音的关联推荐算法,我懂,但是,我没有他们那样海量的数据)。
我发个截图,看看我用来输入输出的数据为什么,如下图:
可以看到,这个表格里就是英超历史比赛的盘口以及结果,先看赛果,FTHG表示全场主队进球数,FTAG表示全场客队进球数,FTR表示全场结果,其中H表示主队赢,A表示客队赢,D表示平局。还有,HTHG表示上半场主队进球数,HTAG表示上半场客队进球数,HTR表示上半场结果。
而我选择的要预测的结果是上半场总进球数,即,HTHG+HTAG(为何选择上半场总进球数,因为验证下来,这个预测的准确率最高)
再看我用的输入数据,截图如下:
我用的是betbrain公司收集了很多家菠菜公司的赔率给出的平均赔率,用到的赔率为:
主队胜赔率,平局赔率,客队胜赔率,总进球大于/小于2.5球赔率,主队让球个数,以及相应的打出/打不出的赔率,一共8维输入数据!
然后就是我的神经网络了,我的神经网络就是设置了一层隐层(多层的,即,深度学习网络以后写),然后让程序自动不停的利用输入输出数据,计算上半场两队总进球为多少。我选择的是上半场总进球1球的盘口,如果我算出来的上半场总进球大于等于1球,并且实际结果确实如此,算我预测准确,否则,上半场没有进球,算我预测失败。
部分程序截图如下,我用的是Python,同时用了谷歌开源的第三方库,牛逼的TensorFlow(我对谷歌真的太葱白了):
我其实搞了好几个欧洲的联赛,效果都不错,就以英超为例,我让模型自动循环训练了4000次(耗时大概不到两分钟吧),然后结果截图如下:
可以看到,训练时候,准确率达到大概73%,然后用新的数据进行预测验证,用来验证的场次有150场,我的程序自动选了98场,认为,这98场应该是上半场总进球大于等于1球,最后和实际结果对比,发现,程序挑出来这98场中,有98*79%=77场确实上半场总进球大于等于1球了,验证准确率高达79%(我保守点,就认为我模型准确率有73%吧)
最后,还是回到如何跑赢菠菜公司赔率这个话题上。以上我已经展现,我的神经网络算法可以有73%的预测准确率了,假如我的程序挑选出1000场比赛认为可以投注,我大概有730场可以猜中,270场猜错。如果这1000场上半场总进球大于等于1球的平均赔率为1.37,那么我就能立于不败之地了。为何?
我们来算一下,假设每场我投注1元,那么730场猜中,我的盈利为1*730*(1.37-1)=270.1元,同时,我有270场猜错,损失1*270=270元。盈利减去亏损是正值,最终我盈利。
况且上半场大于等于1球的赔率一般都是大于1.37,这意味着我盈利更多,例如,平均赔率为1.42,我最终盈利为1*730*(1.42-1) - 1*270 = 36.6。
需要说明的是,这是假设每场投注1元的情况,如果每场投注100元,一万元呢,那么相应1000场后,总盈利为3,660以及366,000元。而且,你的本金其实不是100*1000元(假设每场投注100元),因为每场比赛结束后,立刻结算,回来的钱立刻可以投入下一场。这还是没有把赢的钱再追加投注,那就是复利了。(至于是不是一定每场等额投入,不一定,可以用凯利准则,这个我还没验证,有兴趣的朋友可以试一下)
通过三篇文章,大概讲清楚如何把数学应用于菠菜了!最后祝看到文章的大佬们事业有成步步高升!