football-prediction-skill
Health Warn
- License — License: MIT
- Description — Repository has a description
- Active repo — Last push 0 days ago
- Low visibility — Only 7 GitHub stars
Code Fail
- spawnSync — Synchronous process spawning in bin/skill-cli.mjs
- process.env — Environment variable access in bin/skill-cli.mjs
- new Function() — Dynamic code execution via Function constructor in scripts/validate-report.mjs
Permissions Pass
- Permissions — No dangerous permissions requested
No AI report is available for this listing yet.
竞彩足球智能预测 Skill:Dixon-Coles、赔率价值、赛前情报、回测与离线 HTML 报告
football-prediction-skill
面向 Codex、Claude Code 与命令行的竞彩足球概率研究 Skill。它把竞彩赛单、球队特征、独立参考市场、目标竞彩价格、阵容事实、模型版本和历史回放放进同一条事件时间管线,最终生成可追溯、可离线打开的深色 HTML 研究报告。
只做赛前概率研究与回测,不代客操作、不提供下注通道、不承诺命中率或收益。理性购彩,未成年人禁止购彩。
为什么是 v0.5
v0.5 的重点不是把界面包装得更像“预测神器”,而是让每个概率都能回答四个问题:
- 这条数据在预测截点时是否已经可用?
- 概率是否独立于正在比较的竞彩价格?
- 模型是否通过样本外校准和晋级门槛?
- 证据不足时,系统是否愿意明确弃权?
因此,本版本完成了以下重构:
- 日常预测与历史回放共用同一个
PredictionPipeline。 - DuckDB 管理快照目录,Parquet/JSON 保存不可变赛前数据。
reference_market / target_market / benchmark_market角色强隔离。- Dixon-Coles、去水方法、融合器和温度校准进入本地模型注册表。
- 只有样本外 Brier、Log-loss、RPS 与 ECE 通过门槛的模型才能晋级。
candidate / lean / no_edge / abstain成为一等决策状态。- 报告重构为高密度概率与价格工作台,桌面端使用赛单表和详情抽屉,移动端使用紧凑比赛卡。
60 秒开始
需要 Node.js 18+ 和 Python 3.10+。
安装 Skill 与独立运行环境:
npx -y github:JetQiao/football-prediction-skill install
安装完成后先运行离线演示:
football-predict daily \
--date today \
--demo \
--no-open \
--out ./reports/demo
生成真实日期的竞彩报告:
football-predict daily --date today
未注册全局命令时,可以直接使用:
npx -y github:JetQiao/football-prediction-skill \
daily --date today
在 Codex 或 Claude Code 中也可以直接说:
使用 football-prediction-skill 按严格赛前截点分析今天的竞彩足球,
区分参考市场与目标竞彩,生成完整 HTML 报告。
核心能力
- 完整保留官方赛单:HAD 未开售、仅 HHAD 在售或玩法暂未开放都不会漏场。
- 动态 Dixon-Coles、Elo/xG、Power/Shin 去水、样本外融合与概率校准。
- 自动尝试 ClubElo;可选接入 The Odds API 和 API-Football。
- 结构化阵容事实映射为有界 xG 调整,不让智能体直接填写胜平负影响。
- 统一生成胜平负、公平赔率、比分矩阵、让球、总进球和半全场推演。
- Brier、Log-loss、RPS、ECE、校准斜率、ROI、覆盖率和最大回撤评估。
- 小组赛蒙特卡洛排名与赛事推演。
- 自包含 HTML:CSS、JavaScript、SVG 与数据全部内联,离线打开不发网络请求。
决策状态
| 状态 | 含义 |
|---|---|
candidate |
独立概率、校准状态和价格优势全部通过门槛 |
lean |
有概率方向,但价格、校准或优势强度不足 |
no_edge |
目标竞彩价格没有正向独立优势 |
abstain |
数据不足、未来数据风险、循环价值或不确定性过高 |
“没有优势”和“弃权”是正式结论,不是运行失败。
事件时间与市场隔离
进入模型的赛前数据必须满足:
observed_at <= as_of < kickoff_at
model.trained_until < business_date
三类市场的职责严格分离:
| 市场角色 | 用途 | 示例 |
|---|---|---|
reference_market |
预测先验或融合输入 | Pinnacle、可靠多公司共识 |
target_market |
价值比较对象 | 竞彩 HAD/HHAD SP |
benchmark_market |
历史概率评估或 CLV | 同截点市场、收盘市场 |
目标竞彩价格一旦参与概率形成,同一场比赛会自动禁止独立价值候选。
架构
flowchart LR
A["竞彩赛单与目标 SP"] --> S["不可变赛前快照"]
B["独立参考市场"] --> S
C["Elo / xG / 历史赛果"] --> S
D["阵容与有来源情报"] --> S
S --> T["事件时间与身份校验"]
R["模型注册表"] --> P["PredictionPipeline"]
T --> P
P --> M["Dixon-Coles + OOF 融合 + 校准"]
M --> G["四态决策与价值门禁"]
G --> O["JSON / Manifest / 离线 HTML"]
H["历史快照与赛果"] --> E["同管线回放"]
E --> V["指标评估与模型晋级"]
V --> R
推荐每日工作流
# 1. 获取赛单、生成情报队列并写入不可变快照
football-predict sync \
--date today \
--as-of now \
--out ./work/today
# 2. 对 A 级场补充有来源的结构化 facts[]
football-predict validate-intel ./work/today/intel.json
# 3. 在同一预测截点生成报告
football-predict daily \
--date today \
--as-of now \
--input ./work/today/matches_YYYY-MM-DD.json \
--intel ./work/today/intel.json
历史日期没有显式提供 --as-of 时,系统会使用最早比赛前 90 分钟作为安全截点。截点前已经开赛的比赛只保留原始快照,不生成伪赛前预测。
模型生命周期
训练 challenger:
football-predict train ./E0.csv \
--competition 英超 \
--alias "Premier League"
查看模型注册表:
football-predict models
通过门槛后晋级:
football-predict train ./E0.csv \
--competition 英超 \
--promote
未通过样本外门槛时,命令会拒绝晋级。--force-promote 只用于明确的研究实验,不应作为生产默认设置。
回测与当前结果
生产概率回放:
football-predict backtest ./E0.csv \
--pipeline production \
--no-open
独立价值策略回放:
football-predict backtest ./E0.csv \
--pipeline independent-value \
--no-open
批量运行多联赛赛季:
python scripts/run-benchmark.py /path/to/csv-directory \
--pipeline production \
--out /tmp/football-benchmark.json
v0.5 使用 2023/24、2024/25、2025/26 五大联赛 15 组 CSV 完成首轮回放:
| 管线 | 样本 | Brier | Log-loss | RPS | ECE | 候选 |
|---|---|---|---|---|---|---|
| v0.5 production | 3,436 | 0.1950 | 0.9818 | 0.1968 | 0.0582 | 0 |
| v0.5 independent-value | 3,436 | 0.2002 | 1.0053 | 0.2046 | 0.0564 | 0 |
| 市场基线 | 3,436 | 0.1923 | 0.9696 | 0.1942 | — | — |
相比 v0.4 审计的 Brier 0.2001、Log-loss 1.0057,生产管线已有改善,但目前仍未稳定击败市场基线。因此系统不会制造候选下注,也不会把“比旧版好”描述成“已经存在稳定超额”。
审计和设计记录:
可选数据源
| 环境变量 | 用途 |
|---|---|
SPORTTERY_API_URL |
本地或自部署 SportteryAPI |
SPORTTERY_API_KEY |
SportteryAPI 可选鉴权 |
THE_ODDS_API_KEY |
独立参考市场 |
API_FOOTBALL_KEY |
结构化伤病;赛单需要提供 provider_fixture_id |
FOOTBALL_AUTO_CLUBELO |
无本地特征时自动尝试 ClubElo,默认 true |
没有配置付费数据源也可以运行,但报告会明确标记数据降级,并提高弃权概率。
CLI 索引
| 命令 | 用途 |
|---|---|
doctor [--strict] |
检查依赖、数据源和生产模型 |
sync / prepare |
获取赛单、生成情报队列并写入快照 |
daily |
生成每日预测 JSON、manifest 与 HTML |
validate-intel |
校验来源、时间和重复阵容事实 |
fetch-features |
生成 ClubElo/xG 特征快照 |
train |
训练 Dixon-Coles、融合器和校准器 |
models |
查看或晋级模型注册表 |
snapshots |
查看本地不可变快照目录 |
backtest |
使用生产管线做滚动历史回放 |
evaluate-daily |
用赛后比分评估已保存预测 |
tournament |
运行小组赛蒙特卡洛模拟 |
运行 football-predict <command> --help 查看完整参数。
产物
每日运行会生成:
prediction_YYYY-MM-DD.json:机器可读预测与决策状态。report_YYYY-MM-DD.html:自包含离线研究报告。manifest_<run_id>.json:截点、快照、模型、参数、警告和产物路径。- DuckDB 目录与 Parquet/JSON 快照:不可变赛前数据。
run_id 由预测截点、快照 ID、模型版本和关键参数确定;相同输入会得到相同运行标识。
从源码开发
python3 -m venv .venv
. .venv/bin/activate
pip install -e '.[dev]'
python -m unittest discover -s tests -p 'test_*.py'
ruff check src tests scripts
node scripts/validate-report.mjs /path/to/report.html
python /path/to/skill-creator/scripts/quick_validate.py \
skill/football-prediction-skill
发布记录见 CHANGELOG。Issue 和 Pull Request 欢迎提交。
License
MIT。第三方数据与服务受各自条款约束,详见 NOTICE。
Reviews (0)
Sign in to leave a review.
Leave a reviewNo results found