前提:(先按这个思路走,并不强调成立)
彩票的头奖开奖数据并不是纯随机的,而是根据购买的情况,挑选买的少的号选中开奖。
整体思路:
如果能拿到所有的购买数据,那么可以直接筛选即可,但拿不到;很多大的彩票站都有各种专家预测,这些预测的号会有很多人跟风购买,可以粗略的反应实际购买情况。好,开干!
以双色球为例:
第一步:收集数据
收集所有开奖数据,从2003年第一期(serial=03001)到最新一期2020年第九期(20009),包含每期开奖号码,一等,二等奖中奖数;
收集专家预测数据,这块不太好收集,主要有几个问题:
1:网上的预测数据是近几年才有,之前几乎没有
2:网上的预测数据很难看到热度,不能真实的反应用户的购买率
3:网上的预测数据比较乱,如预测的球数不一致,胆拖,复式各种情况。
综上所述,收集预测数据时,只选择大的网站,设置来源码,只收集较规则的预测数据,如6+1,7+1,8+2等,做好标注。
筛选预测数据,选择从最近一期往前连续的数据(接近300期),每期同标准的预测数据不少于100组。
第二步:构建模型 - 训练数据
名词解释:
Ssq:双色球,即一组双色球数据,包含期号,红球号,蓝球号;
SsqPre:双色球预测数据,包含期号,开奖Ssq,预测红球号,预测蓝球号;
SsqPreSerial:双色球预测数据序列,包含期号,开奖Ssq,一组SsqPre
选择同标准的预测数据,共计100期,每期100组同规格预测数据。
计算每一期每组预测数据的命中概率:
比如该期一共100组预测数据,都是6+1规格;
命中0个的10组,命中1个球的40组,命中2个球的30组,命中3个球的20组,其他0组,计算命中率。
统计100期的预测命中率,做了折线图便于观察:m_0.0即命中率为0,m_16.0即命中为1/6(命中一个球),以此类推。可以发现:命中率的整体趋势是很一致的

为了便于观察,将上面的折线图做了汇集,方法是:针对每个概率值上下浮动4%区间内(浮动区间可以手动设定,这是一个变量)的点,收为一个点,取中间值,上图做完汇集后如下图:可见折线少了很多,每根折线有多少根折线汇集而成也做好记录(体现概率大小)

针对上述概率折线按照汇集数做好排序,汇集根数多到少,至此生成了Base概率数据集。
第三步:构建模型 - 开始预测
拿20009期做实验。上面收集了从20008期往前的100期数据做训练;
随机生成一组6+1的预测号码 - Ssq;
收集20009期的预测数据100组,假定Ssq为开奖号码,计算命中率,也即生成了一根类似上述的概率折线;
将上述折线与第二步中的Base数据折线做对比,按顺序进行,此时也有两处变量,
A. 浮动区间,即单个点对比时可允许的浮动值;(暂定为4%)
B. 误差值,即整条折线各个点对比后的可允许的不匹配数(暂定为0,即必须在浮动区间内全部匹配)
p.s. 实际操作过程中这些变量都会区分红蓝球
举例:
当前概率折线先与Base集中汇集根数最多的做对比,如果匹配,则当前随机号码可用;
若a匹配失败,则往下继续匹配,如果匹配成功,乘以一定概率值(变量),再定为成功;
以此类推。
若全部失败,则当前随机号码不可用。
第四步:初步结果统计
按照上述方法和上面设定的变量值,每1000个随机号约能匹配成功10个。
按照上述方法投入1000元,中奖金额约为250,ROI约为0.25,太低了。
第一阶段总结:
基础预测数据不稳定是最大的问题,上面的预测数据是从一些网站收集的,鱼龙混杂,非常不稳定。这样即使是后面的变量经过了各种训练,最终的结果也依然是不理想。因此解决基础数据的来源是关键。