这个项目能做什么
该项目最初只是一个用于 Eurojackpot 的 Selenium 爬虫,后来发展成一个小型数据管道。它按计划收集彩票开奖数据,存储到 SQLite,并用于预测 OPAP SA 的季度总博彩收入(GGR),随后将每项预测与 OPAP 实际公布的数据进行回测。作者称其为教育/爱好项目:模型是在极少数据点上训练的简单回归,不构成投资建议。
架构与组件:
- 爬虫:eurojackpot_api.py 使用 eurojackpot.com Angular 前端背后的逆向工程 JSON API(wlinfo/WL_InfoService),可返回任意日期的投注额、完整奖项层级明细、中奖号码,以及最早至 2012 年的开奖日期。如果该端点发生变化,eurojackpot_playwright.py 可作为备用方案。joker_scraper.py 和 lotto_scraper.py 使用 Playwright 访问 allwyn.gr;该网站对普通 HTTP 客户端返回 403,且没有可用 API。_allwyn_common.py 包含共享的页面解析逻辑。opap_ir_scraper.py 用于尽最大努力抓取 OPAP 投资者关系新闻稿。
- 数据库:db/schema.sql 定义 SQLite 模式;db/repository.py 是 sqlite3 数据访问层。
- 管道:scrape_latest.py 通过 GitHub Actions 按计划运行;backfill_history.py 将 Eurojackpot 开奖数据回填至 2012 年;build_quarterly_features.py 将开奖数据聚合为各报告期特征;load_manual_ggr.py 加载 data/manual/opap_quarterly_ggr.csv。
- 预测:dataset.py 将特征与实际 GGR 关联;train_model.py 通过交叉验证训练 Ridge/GradientBoosting 回归;predict.py 预测下一个尚未公布的期间;backtest.py 执行滚动向前回测。
数据源与限制:Eurojackpot 拥有真实的 JSON API,是主要来源。Joker/Lotto 结果页会公布总投注栏数(每栏 1 欧元,因此是真实投注额)以及奖项层级表,但目前只抓取当前开奖;历史回填需要操作网站的搜索表单,该功能尚未实现。OPAP 公布的 GGR 来自 investors.opap.gr,但财务 PDF 版式各异,因此 opap_ir_scraper.py 只是尝试性抓取,并非事实来源。实际用于回测评分的是 data/manual/opap_quarterly_ggr.csv:该文件根据真实的 OPAP 新闻稿人工填写,每一行都引用了来源 URL。
预测与回测:模型根据聚合后的 Eurojackpot/Joker/Lotto 投注额和派彩,预测 OPAP 的 numerical_lotteries 板块 GGR。backtest.py 沿历史时间向前滚动,只使用严格更早的期间训练,然后进行预测和比较,并将各期 MAPE 以及是否正确判断增长或下滑写入 data/backtest_report.csv。手动 CSV 中至少需要两个已填充期间,随着更多报告加入,结果会更有意义。
本地运行:安装 requirements 和 Playwright 的 Chromium,然后按顺序运行管道模块(scrape_latest、backfill_history、load_manual_ggr、build_quarterly_features、train_model、backtest、predict)。
CI/CD:scrape.yml 每天运行 scrape_latest 并提交更新后的数据库;backtest.yml 大约每季度运行一次,也可通过 workflow_dispatch 按需运行,执行加载手动 CSV、构建特征、重新训练、回测、预测下一期间并提交结果。
README 说明了 GGR 按板块的构成(彩票、体育博彩、VLT、在线赌场、即开票/被动彩票),并包含一项原始免责声明:本项目不计算现实世界中的精确利润,因为税费、营销成本和运营成本不在范围内。
评论
0 评分人数达到10人后显示
登录后参与讨论。