Skip to content

Latest commit

 

History

History

sporttery

体彩预测

使用赔率数据预测足球比赛结果,进而按预定策略规划投注。

关注彩种为传统足球的胜负彩和任选九。

权威公告可以去 https://www.sporttery.cn/ctzc/ 看在售的是哪期,以及什么时间开奖。

V2EX 上有关于本项目的讨论 https://v2ex.com/t/758563 ,部分评论也比较有价值。

模型性能

模型使用简单的神经网络,单场预测准确率约 54%,可能是基于赔率进行预测的上限了吧。
使用合适的策略可达到约每三期投一期(不超过 24 元),投十期中一次奖的成绩。
不过结合每期真实的开奖金额来看,从 2017 年起能中的一等奖不超过 500 元,其它奖不超过 300 元,完全无法盈利。

说明类似预测方法早在 2017 年就已经有人在用了,除非有更好的算法能提升单场预测准确率,否则已没有空间。
不过可以改改参数,使得几乎每期都有方案可推荐,然后拿去卖软件/卖服务骗钱。

部署

需要安装 Python 库:

  • requests 爬网页
  • beautifulsoup4 解析网页
  • pandas 做数据处理
  • torch 做机器学习
pip3 install -r requirements.txt

另外需要安装 jq 在命令行中处理 JSON,get_award 这个脚本里用到。

此外,项目开始时需要新建如下 3 个文件夹,用来装中间数据:

mkdir html csv pred

之后先 python3 get_html.py 爬网页(手动改下文件里面的 periods,把新的几期也加进来),再 python3 get_csv.py 解析数据,之后就跟下面“日常使用”接轨了。

日常使用

日常流程如下:

  1. 爬上一期数据(更新赛果)和这一期数据(获取赔率)
  2. 预测这一期赛果
  3. 规划投注并输出

例如在预测第 21021 期时,使用如下命令:

./run 21020 21021

项目文件及功能

网页下载 get_html.py

首先从 500.com 上爬取网页。

例如如下命令爬 21017 和 21018 期数据,如果不带参数,就爬所有历史数据(很慢)。

python3 get_html.py 21017 21018

下载的网页在 html/21017-{id}.html,id 是该期 14 场比赛之一的 id,其中包含该比赛的时间、所属赛事、主客队名字与得分(如果没有开始或者取消了等异常,得分位置是 VS)。

因为这部分形成的 html 文件比较大,不定时期进行压缩归档。以该压缩包中最后一期命名:

tar czvf zip/{period}.tar.gz html/*

网页解析 get_csv.py

解析 21017 期比赛数据到 csv/21017.csv,赔率数据到 csv/21017-{id}.csv

python3 get_csv.py 21017

如果不带参数,就处理所有 html 文件(很慢)。 csv 文件中异常比分是 -1:-1,赔率包括初赔和终赔。

赔率与比分数据汇总 get_total.py

将主流公司的赔率数据与比赛数据汇总到 csv/total.csv

python3 get_total.py

预测比分并下注(已停用) main.py

预测 csv/total.csv 中最后 1001 期赛事的比分,保存到 pred/scores.csv。并根据预测规划最后一期的投注,保存到 pred/{period}.csv,同时检查前一期的得奖情况。

python3 main.py

之后的预测思路换成了先预测赛果(三分类)再下注的方式,而非预测比分。

两者各有好处:

  • 预测比分。根据预测比分进行赛果的三分类准确率更高(约 0.5%),但难以进行投注的规划
  • 预测赛果。三分类的同时也得到各赛果的估计概率,以此指导的投注规划更简单,表现也更好。

预测比赛结果 predict_result.py

预测 csv/total.csv 中最后 1001 期赛事的结果,保存到 pred/results.csv

python3 predict_result.py

调试策略参数 simulate.py

根据预定义的几个策略进行投注,以测试策略与策略组合的表现以及参数的效果。

目前包含三个策略,按统计效果顺序为:

  1. 胜负彩复投。不断扩充进概率最高的组合,直到满足概率下限或达到投注上限
  2. 任选九方案1:计算概率最高的 k 个组合(为了方便投注,k=5)
    • 这个方案近似于在最确定(std 最高)的 10 场比赛中,前 5 固定,后 5 轮流不选
  3. 任选九方案2:将概率按 std 排序,最高的九场比赛按类似 1 的方案复式投注

各策略都可通过调整参数在一定程度上控制收益率与参与度。目前的参数设置为大概每三期去一期的水平。

python3 simulate.py

规划投注方案 bet.py

配置好策略参数后,根据预测的结果规划投注,并按便于投注的格式打印

python3 bet.py

获取开奖数据 get_award

用体彩中心的 API 获取开奖数据。

使用需要编辑该文件改参数。