ARTICLE · 1278210
我让 AI 写了个彩票选号器,它干的第一件事是劝我别买
上周刷到一篇文章,讲怎么用 AI 挑号码。看完我的反应不是「这准吗」,而是——这我也能做啊。
于是花了两个晚上,真做了一个。
做完之后,程序自己跑了一遍测试,给我算了笔账:这套调了半天参数的算法,跑了 1000 期,一次都没赢过闭眼瞎选。
我先说结论,再说过程。
第一版,翻车了
一开始做的是快乐8。80 个号选 20 个,中奖面宽,看着友好。
我照着那篇文章的思路,把 80 个号拆成 6 组 11 码复式——六组加起来 132 块。界面做得挺像样:选号、胆拖、机选,还能自动对奖。
然后我自己用了两次,就烦了。
问题不在功能,在于它没有任何判断。所谓的「智能推荐」,本质是把随机数排了个队,再套一层好看的皮。你给我一个随机数生成器,我也能做出这个效果,还不用写两千行代码。
扔了。改成做双色球。
理由很朴素:双色球规则简单,33 个红球选 6 个,16 个蓝球选 1 个,两块钱一注。规则越简单,越容易看清楚里面到底有没有东西。
先把 3500 期数据摆出来
做任何分析,第一步都是把数据弄到手。
双色球从 2003 年 2 月开到现在,一共 3521 期。这个量级有点意思——不算多,但足够让各种「规律」和「巧合」都露头。
有了数据,第一件事是画走势图。不是那种花里胡哨的折线图,就是把每一期摊开:横着是 33 个红球,竖着是每一期,出过的号标红。默认看最近 30 期,想看得更细可以拉到 100 期。

33 列逐期往下滚,出过的号标红
很多人对走势图的想象是「看规律」。但你真把它铺开看,先感受到的其实是另一件事:
没有规律。
有些号连着出,有些号几十期不出。有些区段密集得像下雨,有些区段干得开裂。你以为抓住了什么,往后翻两页,它又变了。
不过有几件事是可以算的,而且算得挺准:
遗漏值 —— 这个号有多少期没出了
冷热排名 —— 近 100 期出现次数排序
和值分布 —— 6 个号加起来是多少
三区比 —— 小号 / 中号 / 大号的分布
奇偶比、质合比 —— 形态特征
这些不是玄学,是描述性的统计。它们能告诉你「现在是什么样」,但不能告诉你「接下来会是什么样」。这两件事之间隔着的,是概率论。
加了节奏推演,然后开始调参
后来加了个功能,叫节奏推演。思路是这样:不猜具体某个号,而是看整体的出手节奏。四个维度:
1 遗漏张力这个号憋了多久没出,憋得越久张力越大
2 近期热度近 30 期出了几次
3 短期动能最近几期的活跃度变化
4 间隔节奏它自己历史上的间隔规律,这次是不是「到点了」
四个分数算出来,加权合成一个总分,排前面的进候选池,再从池子里按形态挑一组。
听起来挺唬人吧。这里有个坑我踩了两天。
四个指标的量纲完全不一样。遗漏值是「期」,可能到 30;热度是「次数」,可能到 10;动能是个小数。你直接加权,等于让遗漏值一个人说了算,其他三项形同虚设。
第一次跑出来,我发现「稳健档」选出来的号比「抓冷档」还冷——两个档位权重明明不同,但都被遗漏值压死了,差异全被淹没。
改成 z-score 标准化才对。把每个指标先减去均值再除以标准差,四个分量拉到同一把尺子上,权重才真正起作用。
改完之后,三个档位的冷热差异从「几乎看不出」变成 0.43 倍 / 1.05 倍 / 1.89 倍。总算能拉开距离了。
还有个细节:间隔不能「越冷越好」。憋了 80 期没出的号,不是「快出了」,是「它就是个冷号」。所以我用了条饱和曲线,间隔收益到一定程度就封顶,避免算法一头扎进冷号堆里。

推演的是下一期(26125),每个号标出它憋了多少期
然后是打脸环节
做的时候我一直提醒自己一件事:不能只做能证明自己有用的测试。
所以我写了个自检功能。逻辑是这样:从第 1000 期开始,每一期都用它之前的数据去推演一组号,然后跟真实开奖结果对,看中了几个。滚完 1000 期,统计平均命中数。同一批期数,再跑一遍纯随机选号做对照。
结果我跑了五次:
双色球 · 1000 期回测
平均每期命中红球数(理论值 1.09)
第 1 次 策略 1.07 / 随机 1.08
第 2 次 策略 1.06 / 随机 1.08
第 3 次 策略 1.03 / 随机 1.10
第 4 次 策略 1.08 / 随机 1.11
第 5 次 策略 1.06 / 随机 1.14
五次,一次都没赢。
注意最右那一列纯随机:它自己就在 1.08 到 1.14 之间跳,跨度 0.06。而策略这一列是 1.03 到 1.08,跨度 0.05。
同一个算法两次运行之间的差距,比算法和随机之间的差距还大。
大乐透用同样的方法跑,结果更有意思:
大乐透 · 1000 期回测
平均每期命中前区号数
第 1 次 策略 0.71 / 随机 0.66
第 2 次 策略 0.65 / 随机 0.71
第 3 次 策略 0.71 / 随机 0.67
三次里赢了两次。但你把数字排开看:赢的时候是 0.71 对 0.66,输的时候是 0.65 对 0.71,一来一回正好抵消。
如果这套算法真有点东西,结果不该这么随机。
为什么每次跑出来的数不一样?因为候选池里具体挑哪一组是带随机性的,回测起点也有一点浮动。正是这个细节最有说服力——一个真能提高命中率的算法,不会跑一次一个样。

第 5 次的完整结果面板 · 这个结果就摆在「节奏推演」下面,谁点都能看到
顺便说个更直观的。同一次回测里,1000 期按每期 2 元算,投入 2000 元,回收 565 元;纯随机对照组回收 800 元。
这个差距看着比 0.08 个号刺激多了。但它同样不能证明策略更差——它俩只是同一次抽样里的两个结果,换一次运行,两个数都会变。
我把结论原样放进了页面里,文案写得很直白:
这组号不是「必出号」。它只是把最近 30 期里遗漏超标、间隔到点、热度靠前的号先圈进候选池,再从中挑出一组形态最贴近近期开奖的组合。号码会挑得更「顺眼」,中奖概率一分没多——下面的自检就是证明。
有人问我,既然没用,为什么还留着这个功能。
因为「没用」本身就是一种有用的信息。你把 3521 期数据认认真真跑一遍,得出「这条路走不通」,比稀里糊涂相信某种方法,要值钱得多。
让它自己更新
静态页面有个硬伤:它没法自己去抓数据。浏览器有跨域限制,对方网站也不会给你开权限。
所以更新逻辑得挪到服务器上跑。我用 GitHub Actions——相当于 GitHub 免费给的定时服务器。每天北京时间 22:30(双色球 21:15、大乐透 20:30 开奖),自动跑一次:
抓最新开奖 → 比对期号 → 有新期就合并→ 重建页面 → 部署
没新开奖就直接退出,几秒钟,不产生任何提交。
这里踩了个挺有意思的坑。抓数据我配了两个源:官方接口和 500 彩票网。GitHub 的服务器在海外,跑出来是这样:
[ OK ] 双色球 500.com 80 条 26124 1.6s [FAIL] 双色球 福彩官网 HTTP 403 Forbidden [ OK ] 大乐透 500.com 80 条 26123 21.0s [FAIL] 大乐透 体彩官网 HTTP 567
两个官网都主动拒绝了境外 IP。不是网络不通,是明确不让你进。反而是 500.com 一路畅通。
所以最后是靠 500.com 跑通的。数据抓回来之后,我跟官方源逐字段比对过一遍,完全一致——连奖池金额差的那一块钱,都是四舍五入造成的。
最后说点实话
这个工具现在有四个页面:
走势图 33 列逐期往下滚,20/30/50/100 期可切换
号码分析 遗漏、冷热、和值分布、形态统计
节奏推演 就是上面那个「打脸」的算法
选号方案 按你想要的形态筛几注出来
第四个功能我得说清楚:它不预测,它只是按你给的条件筛号。你想要和值 100 左右、三区 2:2:2、奇偶 3:3,手动挑一注得试半天,算法一秒钟给你五注。省的是力气,不是概率。
双色球和大乐透共用一个页面,顶部切换。
有人可能会问,既然都证明没用了,你做这个图什么。
我想了想,大概是两个原因。
一个是,我想知道 3521 期摊开到底长什么样。这个好奇心本身,跟中不中奖没关系。就像有人喜欢看星图,不是因为能预测明天。
另一个是,这个时代最容易骗人的东西,就是那种「我有一套方法」的自信。而一个愿意把「打不过随机」这个结果摆在你面前的工具,反而难得。
如果它真能预测,我不会写成网页发给你,我会自己买。
每期开奖都是独立随机的。任何分析方法都不可能提高中奖概率。两块钱买个乐子,别多。
页面和这 3521 期数据都开源在 GitHub,仓库名 G-E-M0816/lottery-trend,想自己翻的可以去看看。
本文仅为数据可视化与技术实践记录,不构成任何投注建议。















































































