v1.1.0 · 单机部署 · 回测可复现

把一场足球比赛拆成 λ × 比分矩阵 × 概率

这是一个 Windows PC 桌面客户端 + 笔记本本地私有服务端的项目:服务端负责赛事采集、因子计算、 模型推理与会员权限下发,客户端只做展示、心跳与收银台。 对外发布的每一个百分比都来自项目内 reports/ 的可复现报告,并可一键重跑校验。

来源:README.md「形态」段 来源:01_源码/AISportsAnalytics/common/version.py(APP_VERSION = 1.1.0)

版本轴:五个独立演进的版本号

项目把「安装包版本」「线上模型」「实时因子链」「赛前回测契约」「指标定义」拆成五个互不牵连的版本号, 改任何一个发布的回测数字都必须同时升级 PREMATCH_MODEL_VERSION 并重新锁定测试集。

常量取值管的是什么
APP_VERSION1.1.0安装包 / API 应用版本,客户端同值
MODEL_VERSION8.3.0-dc-elo-live生产环境实时预测模型(server/model/engine.py)
LIVE_FACTOR_MODEL_VERSIONfactor-1.3.0实时因子链(factors/live.py)
PREMATCH_MODEL_VERSIONfactor-prematch-1.2.0冻结的赛前回测契约(backtest/config.py)
BASELINE_VERSIONbaseline-1.1.0Poisson / Dixon-Coles 基线实现版本
METRICS_VERSIONmetrics-2.0.0指标定义版本(Brier 口径在此变更)
来源:01_源码/AISportsAnalytics/common/version.py 第 29–35 行

核心能力

下面每一条都对应源码/文档里的实际实现,不是路线图承诺。

赛前概率:1X2 / 大小球 / 亚盘 / 双方进球

赛前 λ → 精确比分矩阵 → 从同一张矩阵派生胜平负、1.5/2.5/3.5 大小球、 −1.00 至 +1.00 共 9 档亚洲让球、双方进球(BTTS)。

来源:reports/MULTI_MARKET.md「范围与口径」

实时因子链:L0 → L4 分层

L0 只读数据源事实,L1 推单场速率,L2 产出剩余进球强度 λ,L3 出概率,L4 由概率与价格出 edge / Kelly。 因子注册表在导入时校验层级依赖,不允许读到同层或更高层。

来源:factors/__init__.py 模块文档

3 秒事件节拍 + 单场隔离

每场独立协程与锁,采集超时 2.0 秒、推理硬超时 2.5 秒(超时杀死并重建模型进程池), 状态哈希不变就跳过推理,连续失败触发单场熔断。

来源:config.ini [scheduler] 来源:docs/ARCHITECTURE.md §2.3

会员权益只在服务端判定

客户端不写任何「会员是否有效」的授权判断,只展示服务端下发字段; 脱敏边界 redact.py 按 tier 裁剪,周卡拿不到高级块,因子权重与 edge 永不下发。

来源:docs/ARCHITECTURE.md §2.7

本机回环 + 签名请求

服务端默认只监听 127.0.0.1:8765,管理后台独立回环端口 8766; 用户请求走 HMAC-SHA256 签名 + 时间窗 + 一次性 nonce,密码用带随机盐的 scrypt 哈希。

来源:config.ini [server] 来源:README.md「安全与权限边界」

数据缺失不补 0

匿名详情页没有的字段(xG、犯规)在界面显示「—」而不是 0; 缺失输入走 FactorMissing,因子日志标记 degraded,数据完整度评分下调。

来源:使用说明.md §5「数据来源与降级提示」 来源:reports/CHANGES.md「D-03」

真实数据源与更新频率

默认数据源

  • type = nowscore,基址 https://m.nowscore.com(捷报比分移动站公开端点)
  • 读取赛程、即时变化、赔率,另解析 /Analy/ShiJian/{id}.htm 与 /Analy/Analysis/{id}.htm 的匿名可见内容
  • 不登录、不绕过登录或付费墙;xG 与犯规不在匿名页面,界面显示「—」
  • 另有三种可选实现:demo(内置 1200 场模拟赛事,仅离线验收)、http、file
来源:config.ini [provider]来源:docs/DATA_PROVIDER.md

节拍与缓存 TTL

项值
实时 tick3.0 s
赛程发现 / 维护30.0 s
赛程缓存 TTL25.0 s
即时变化缓存 TTL2.5 s
赔率缓存 TTL8.0 s
详情页刷新(进行中)60.0 s
交锋 / 近期页缓存1800.0 s
单场采集超时2.0 s
推理硬超时2.5 s
客户端心跳60 s
来源:config.ini [scheduler] / [provider] / [server]

3 秒是派发节拍,不是每场刷新间隔。 max_matches = 2000 且采集并发 32 时,一轮最坏约 188 秒;要 3 秒级刷新必须降低 max_matches 或提高采集并发。

来源:docs/DEPLOYMENT_CHECKLIST.md §8;reports/CHANGES.md「D-12 容量口径」

支持联赛与赛季

回测与因子拟合覆盖 8 个联赛、11 个赛季(2015/16 – 2025/26), 原始文件按 联赛代码_赛季起始年.csv 落在 data/raw/,共 88 个 CSV。

代码联赛赛季范围原始文件
E0英格兰超级联赛2015 – 2025E0_2015.csv … E0_2025.csv
E1英格兰冠军联赛2015 – 2025E1_2015.csv … E1_2025.csv
D1德国甲级联赛2015 – 2025D1_2015.csv … D1_2025.csv
D2德国乙级联赛2015 – 2025D2_2015.csv … D2_2025.csv
I1意大利甲级联赛2015 – 2025I1_2015.csv … I1_2025.csv
SP1西班牙甲级联赛2015 – 2025SP1_2015.csv … SP1_2025.csv
F1法国甲级联赛2015 – 2025F1_2015.csv … F1_2025.csv
N1荷兰甲级联赛2015 – 2025N1_2015.csv … N1_2025.csv
来源:backtest/config.py 的 LEAGUES / LEAGUE_NAMES / SEASONS 来源:data/raw/ 目录实际文件名 来源:reports/metrics.json → config.leagues / config.seasons

回测数据集规模

比赛行数
32,491
清洗后 data/clean/matches.csv
特征行数
32,459
data/clean/features.csv
日期跨度
2015-07-24
→ 2026-05-24
按日历日期分组切分,整日归入同一侧
train / val / test
19492 / 6469 / 6498
0.60 / 0.20 / 0.20
来源:reports/metrics.json → dataset 块(matches / features / train / val / test / date_min / date_max)

准确率:全部来自回测报告

口径先说清。下面所有数字都是时间冻结测试集上的回测结果, 不是在线的真实战绩。测试集 split=test、n = 6498,已被评估 4 次并冻结(test_runs = 4),因此只能作为历史披露, 不得用于选模型或调参。系统没有线上命中率公开数据 —— 这一项本站标注为 待补充。

来源:docs/ACCURACY.md 来源:reports/baseline.md 顶部更正(2026-10-29) 来源:reports/metrics.json → test_runs

赛前 1X2(胜平负)· 测试集 n = 6498

市场基线 命中率
51.86%
95% CI 50.64%–53.08%;RPS 0.2003
因子链赛前分支 命中率
50.63%
95% CI 49.42%–51.85%;RPS 0.2058
因子 − 市场(RPS)
+0.005091
95% CI 0.003790–0.006419,区间整体 > 0 → 因子模型更差
Brier(因子链 / 市场)
0.2006 / 0.1967
口径 metrics-2.0.0:三类平方误差的均值

必须如实说明:测试集上市场基线优于因子链赛前分支。 LogLoss 差值 +0.016373(95% CI 0.012258–0.020201)同样整体大于 0。 本系统不宣称因子模型在赛前 1X2 上击败收盘赔率聚合。

来源:reports/baseline.md「因子模型相对市场的配对差异」 来源:reports/metrics.json → claims_metrics(market_test_* / factor_full_test_*) 来源:docs/ACCURACY.md「不可对外宣称的内容」

多市场 · 测试集 n = 6498

大小球 1.5 方向命中率
77.73%
95% CI 76.70%–78.73%;Brier 0.1703;无公开盘口基准
大小球 2.5 方向命中率
56.79%
Brier 0.2442 vs 公开盘口 0.2399 → 不优于公开盘口
亚盘 +1.00 方向命中率
83.44%
走水率 16.94%(走水已从命中分母剔除)
双方进球 BTTS 命中率
55.40%
95% CI 54.19%–56.61%;该数据源无公开 BTTS 赔率
来源:reports/MULTI_MARKET.md「测试集」各节 来源:reports/metrics.json → multi_market.test

滚动起点稳健性诊断(24 个月训练窗口)

origin 数
9
2016 – 2024,每年一个 origin
因子模型 RPS 低于市场的 origin
0 / 9
所有 origin 都未击败市场
合并 RPS(market)
0.1996
9 个 origin 合并
合并 RPS(factor_full)
0.2068
9 个 origin 合并
来源:reports/WALK_FORWARD_24M.md §1–§2 来源:reports/metrics.json → walk_forward.origin_count / factor_beats_market_origins

该文件自己写明:这是稳健性诊断,不是对外宣传指标,也不参与模型选择。

待补充

  • 线上命中率 / 线上样本量 —— 待补充。项目里没有任何线上实盘命中率的统计文件;只有回测报告。
  • 真实投注收益 —— 无。reports/STAKING.md 的测试集资金曲线归零(ROI −100.00%),作为负面结果原样披露;本系统不执行投注。
  • 实时因子链的回测验证 —— 不存在。数据源没有分钟级比赛快照,回测只验证赛前分支,不能宣称实时链已被回测验证。
来源:docs/ACCURACY.md「不可对外宣称的内容」 来源:reports/CHANGES.md(S9 §5「投注模拟」) 来源:reports/MULTI_MARKET.md「范围与口径」第 11 行

下一步

安装包 AISportsAnalytics-Setup-1.1.0.exe,179,897,132 字节, SHA-256 已在下载页列出可直接复制核对。默认按当前用户安装到 %LOCALAPPDATA%\Programs\AISportsAnalytics,不需要管理员权限。

来源:使用说明.md §1 来源:downloads/manifest.json(脚本现场计算)