分享

双色球预测模型构建【仅供娱乐参考】

 心死杂文社 2020-08-16

大家好!我是李渣渣,朋友都称呼我阿渣。


01

上周五和一位同事一起下班的时候,跟着他一起到了一个福彩站,看着他买了5注10块钱的“双色球”,阿渣之前对“双色球”不了解,只知道是2块钱一注,今日特意上网上了解了一下。

所谓双色,就是分红色和蓝色两种颜色的号码球,红色球是1-33共33个数字,蓝色球是1-16共16个数字。然后就是选6个不重复的红色球+一个蓝色球构成一注。

“双色球”通过摇奖器确定中奖号码。摇奖时先摇出6个红色球号码,再摇出1个蓝色球号码。

中奖条件和奖金分配规则


按照这个规则当资金池超过1亿元的时候,一等奖是有可能一注得到1000万的,也就是2元博1000W,诱惑相当大,当你多注都中一等奖的时候,亿元大奖就就发生了。

但是这个中一等奖的概率有多大呢?

一等奖的概率计算方法是:1/[C(33,6)*16]=1 /[ (33 * 32 * 31 * 30 * 29 * 28/6*5*4*3*2*1) * 16 ] = 1/17721088,即在33个红球中选出6个红球的概率,再乘以1/16。所以中一等奖的概率为1772万分之一。


虽然概率低,但是毕竟还是有希望的,而且时不时有新闻说谁谁谁中了亿万大奖,说不定哪天到自己头上呢,中不了一等奖,中个二等奖拿个十几二十万也是可以的嘛。退一步说,双色球是拿50%的资金池发奖,另外的50%是用来做公益的,即使自己没中奖,就当做公益了嘛。

感受一下大奖,近10期中奖情况

02
从网上简单获得了最近100期的历史数据,准备构建一个简单的小模型试试,验证一下会不会中大奖啊。

阿渣作为IT男很快就构建了一个最最最简单的模型,随机生成一组数,进行购买,看看情况。大概预测代码如下:
#预测数据,每次随机生成num组数据,相当于2*num块钱def predictData1(num): ret = dict() for i in range(0,num): prenum=[] while(True): x = random.randint(1, 33)#红色球 if x not in prenum: #红色球不重复 prenum.append(str(x)) if len(prenum)==6: break prenum.append(str(random.randint(1, 16))) #蓝色球 ret.setdefault(i,prenum) return ret

然后对过去的100期验证下看看中奖情况哈,有点兴奋呢,先每次买5注吧,不大哈,跟我同事一样,搞起......
if __name__=="__main__": TotalMoney=0 #开始资金 num = 5 #每次下注数 data = readData() for k,v in data.items(): #100期情况 print("当前日期:"+k) TotalMoney -= num*2 #下注钱 predata = predictData1(num)        for kk,pv in predata.items():#每注情况 grade = getGrade(pv,v)#获取中几等奖 money = getMoney(grade)#获取中奖金额 TotalMoney +=money #累计 print("最终盈利:"+str(TotalMoney))

结果是,除了会中一些六等奖和偶尔的五等奖外,别无他奖了。100期过去后亏了850元。

运行情况1:每次5注

我不服啊,我一个测试模型还中不了大奖吗,一定是我每次买得太少了,只有区区5注而已,修改下,改买500注看看,成本就是10万元。

额,紧张啊,几乎每期都中奖,中了一堆六等奖,但总体下来,还是亏了80365元。我的500万大奖在哪里?

运行情况2:每次500注


大奖在哪里?我不服啊,按照概率一等奖是1772万分之一,那么我要一次下177200注才行,可能会有一次中的,试试哈。

运行情况3:每次177200注

亏了2.3亿,额........

03
只是简单用随机数生成下注,测试情况不理想。具体根据历史数据构建模型或者用大量历史数据使用机器学习的方式训练一个模型,可能会有一个好一些的表现。看看后续有没有时间搞搞了。

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多