足球赛事多维数据分析模型
当前版本 v5.9.2 · 35 联赛基线 · 31 联赛实测 ρ · 36 回归守卫全 PASS · 版本历史见文末
⚡ 快速开始(30 秒上手)
① 推荐入口 analyze_match()(v5.9.2)——4 个参数即跑,赛前三清单与价值投注层自动接线,不存在"忘记回传"问题:
from football_calc import analyze_match
r = analyze_match("英超", 2.10, 3.50, 3.20) # 最小调用
print(r["home_win"], r["draw"], r["away_win"], "星级:", r["star"])
print(r["checklist"]) # 三清单自动执行并生效(traps_count/star_modifier)
print(r["value"]) # EV + 模型-市场分歧度(自动)
print(r["kelly"]) # 建议仓位(自动)
print(r["signal_tier"]) # 联赛统计信号分级 A/B/C(自动)
# 有更多数据就多传(其余参数原样透传主函数):
r = analyze_match("德甲", 1.05, 11.0, 21.0, current_round=2,
home_form=8, away_form=4, support_home=77,
open_odds={"home": 1.18, "draw": 10.5, "away": 19.0}, # 触发热钱因子
popularity=80)
print(r["hot_money"]) # 热钱流向 + 诱盘警示
② 手动两步(进阶)——需要自己把三清单结果回传 checklist_result=chk,忘了传则降权/降级完全不生效(实测同一场景主胜会虚高 19pp):
from football_calc import run_prematch_checklist, calc_1X2_probabilities
chk = run_prematch_checklist(2.10, 3.50, 3.20, league="英超")
r = calc_1X2_probabilities(league="英超", odds_home=2.10, odds_draw=3.50,
odds_away=3.20, home_form=7.0, away_form=7.5,
checklist_result=chk) # ← 这行忘了 = 白跑清单
③ 世界杯/欧洲杯等国家队杯赛(v5.9.3 P5)——FIFA 排名先验统计基准,69 队开箱即用:
from football_calc import predict_cup_match
r = predict_cup_match("西班牙", "阿根廷") # 2 参数即跑
print(r["home_win"], r["draw"], r["away_win"], r["expected_goals"])
# ⚠️ 统计基准层: 未含近期状态/伤停; 样本外 RPS=0.1497 (P5 实测)
④ 高频参数速查(analyze_match / calc_1X2_probabilities 通用,其余见 references/quick_reference.md)
| 参数 | 类型/默认 | 说明 |
|------|----------|------|
| league | str, 必填 | 联赛名(35 联赛收录,别名/模糊匹配自动纠错) |
| odds_home/draw/away | float, 必填 | 官方三项赔率 |
| home_form / away_form | 0-10, 默认 5.0 | 近期状态分 |
| home_home_goals_avg 等 4 项 | float, 可选 | 场均进/失球(主场/客场各自口径) |
| home_key_missing / away_key_missing | int, 默认 0 | 缺席主力人数 |
| home_h2h_win_rate | 0-1, 默认 0.33 | 交手胜率 |
| xg_home / xg_away | float, 可选 | xG(传入则替代形态法估球) |
| rest_days_home/away | int, 可选 | 休息天数(赛程拥挤因子) |
| current_round | int, 可选 | analyze_match 参数,开季偏差检查用 |
| open_odds | dict, 可选 | analyze_match 参数,初盘(触发热钱因子) |
| neutral_venue / leg / aggregate_lead | - | 中立场 / 两回合制 |
📖 去哪找什么
| 想找 | 位置 |
|------|------|
| 常见问题(参数怎么传/星级为何降/结果怎么解读) | references/FAQ.md |
| 完整案例(输入→比分矩阵→输出→逐步解读) | references/case_study.md |
| 全部函数签名速查表 | references/quick_reference.md |
| 35 联赛基线参数 | references/league_baselines.md |
| 能力边界(能做什么/不能做什么) | 下文「能力边界一览」 |
| 历次版本改了什么 | 文末「版本历史」 |
📁 文件地图(不知道去哪找时看这里)
| 文件 | 里面有什么 | 什么时候打开 |
|------|-----------|-------------|
| SKILL.md(本文件) | 使用说明、操作流程、能力边界一览(开头,唯一权威)、问题解答 | 想知道「怎么用 / 能不能做」 |
| references/quick_reference.md | 所有数据表 + 函数速查 + 常量 + 阈值 + 代码示例 | 想知道「数据是多少 / 函数怎么调」 |
| references/league_baselines.md | 基线详细来源、赛季快照、转会明细、杯赛/小联赛背景 | 想深挖某个数字的出处 |
| football_calc.py | 计算引擎(可执行代码) | 要跑计算 / 二次开发 |
一句话导航:查数据查函数 →
references/quick_reference.md;查流程查能力 → 本文件。
🚦 能力边界一览(唯一权威清单 · 30 秒看懂)
一句话版:能做「方向 + 风险 + 数据可靠性」;不能做「精确比分 / 半全场 / 临场首发 / 杯赛与国家队的精确判断」;小联赛数据可能不全,杯赛与国家队不覆盖。
「能不能做」只在本节定义(A–F 六张表)。其它章节不再重复,也不需要来回拼凑;机制细节见「十三、能力边界机制说明」。
A. 能做到 ✅
| 能做什么 | 说明 | |---------|------| | 识别输入并解读 | 赔率截图/文字 → 识别场次、联赛、对阵 | | 七维基本面分析 | 实力 / 状态 / 伤停 / 主客 / H2H / 战意 / 赛程 | | 35 联赛基线校准 | 内置场均进球、主客胜率、赛季分期、xG 基线 | | 三项强制风险检查 | 极端赔率 / 市场大热(看好度 >75%)/ 赛季初期 | | 实力差距方向分析 | 给方向与星级;比分只给参考区间 | | 输入错误主动提示 | 联赛名、赔率数字有疑点先提示再继续 | | 数据来源标注 | 每条关键数据标 A/B/C/D 可靠性等级 | | 离线兜底 | 无网络时用内置基线,精度约 80%(推导见十三) | | 赛后核验 | 检索结果 → 逐场比对 → 失败维度归因 → 回填基线 |
B. 有条件做到 ⚠️(有前提;不满足就降级或停下)
| 能力 | 前提条件 | 不满足时 | |------|---------|---------| | 联赛识别 | 联赛名可辨识,或能从对阵推断 | ⛔ 停下,请你确认 | | 赔率解读 | 赔率填写正确(>1.0、结构合理) | ⛔ 停下,请你核对 | | 35 联赛内分析 | 属于内置基线联赛 | 按最接近联赛估算,误差 ±15–20%,星级 −1 | | 小联赛 / 次级联赛 | 你补充关键信息(排名 / 伤停 / 近况) | 只给方向,星级 ≤ ⭐,不出比分 | | 极端低赔解读 | 你确认是「0 档」还是「实力差距档」 | 给风险提示后继续 | | 情报检索 | 国内源可访问 | 自动重试 3 次 → 离线基线兜底 → 熔断跳过 |
C. 做不到 ❌(明确的能力边界)
| 做不到 | 原因 | 替代做法 | |--------|------|---------| | 精确比分 | 低概率事件,对比率 ≈ 0% | 只取方向 + 最可能比分区间 | | 半全场精确预测 | 历史对比率 30–40% | 仅作娱乐参考 | | 临场首发阵容 | 赛前 2–4 小时的信息无法反映 | 官方首发公布后你补充,再重算 | | 赛季初期强队 / 新援队的精确判断 | 磨合期,基线失效 | 降星级,只看方向 | | 杯赛淘汰赛的精确判断 | 战意分化、轮换、两回合规则 | 说明假设,或建议不做该场 | | 实时赔率变动追踪 | 只分析你截图那一刻 | 赛前 30 分钟重新截图 | | 保证数据最新 | 离线 / 检索失败时不保证时效 | 关键数据自行核实 | | 内幕与突发伤病第一手消息 | 只依赖公开信息 | — |
D. 覆盖范围(联赛 / 赛事类型)
| 范围 | 状态 | 说明 |
|------|------|------|
| 五大联赛(德/英/西/意/法) | ✅ 完整 | 基线与情报最齐 |
| 其他主流与次级联赛(v1.4.0 起内置 35 赛事) | ✅ 基本够用 | 含荷甲/丹超/墨超/苏超/比甲/土超/西乙/英甲/英乙/法乙/意乙/苏冠/韩K2/日乙/巴乙/阿甲;个别赛季数据可能滞后 |
| 小联赛 / 低级别联赛(各国第三级别及未收录赛事) | ⚠️ 数据可能不全 | 降级协议:按最接近联赛估算,误差 ±15–20%,星级 −1,仅给方向 |
| 杯赛 / 淘汰赛(含两回合、加时、点球) | ⚠️ 联赛模型不适用,但提供修正 | v1.4.0 起支持两回合制与中立场修正;战意/轮换仍主导,需你补充首回合比分 |
| 国家队赛事 | ❌ 不覆盖 | 无基线,征召/磨合差异大 |
| 青年队 / 预备队 | ❌ 不覆盖 | 阵容与主客模型均不可靠 |
| 赛会制 / 中立场 | ⚠️ 部分支持 | neutral_venue_factor 可削减主场优势;其余仍不可靠 |
三档口径:✅ 直接可用 ⚠️ 可用但降级(会明确告诉你) ❌ 不适用(会说明原因)。 「小联赛数据不全」具体指:无内置基线、伤停与近况检索命中率低、赛季样本少——请务必补充你手上的信息。
E. 特殊场景清单(遇到先查这里)
| 场景 | 状态 | 处理方式 |
|------|------|---------|
| 换帅(上任 <5 场) | ✅ 已覆盖 | manager_bounce_factor 加成;样本少时降级 |
| 保级 / 夺冠 / 欧战资格的极端战意 | ✅ 已覆盖 | MOTIVATION_FACTORS 调整 |
| 密集赛程 / 轮换 | ✅ 已覆盖 | rest_days_factor 扣减 |
| 核心球员停赛 / 累计黄牌 | ✅ 已覆盖 | 计入伤停维度 |
| 升班马 / 首次交手(无 H2H) | ✅ 已覆盖 | H2H 权重归零,改用联赛基线 |
| 极端天气(雨雪 / 高温 / 大风) | ✅ 已量化 | weather_venue_factor:大雨 −8%、降雪 −12%、强风 −7%、酷热 −5% |
| 场地因素(人工草皮 / 高原主场) | ✅ 已量化 | weather_venue_factor:人工草皮 +4%、高原 +5% 且放大主队体能优势 |
| 空场 / 无观众 | ⚠️ 部分覆盖 | 可用 neutral_venue_factor 部分削减主场优势 |
| 门将伤缺 / 临时门将 | ⚠️ 部分覆盖 | 计入伤停,提示失球风险上浮 |
| 转会窗未关 / 注册问题(新援上不了) | ⚠️ 部分覆盖 | 需你确认出场资格 |
| 超长补时 / VAR 频密 | ⚠️ 部分覆盖 | 提示总进球可能高于基线 |
| 国家队比赛日回归(FIFA 病毒) | ⚠️ 部分覆盖 | 提示疲劳与长途飞行影响 |
| 提前夺冠 / 提前降级后的战意真空 | ⚠️ 部分覆盖 | 显著降星级 |
| 德比 / 心理战等软因素 | ❌ 不量化 | 仅文字提示 |
| 两回合制的次回合(需算总比分) | ✅ 已量化 | tie_context_factor:首回合降进球;次回合按主队总比分领先/落后调整 |
| 赛会制 / 中立场 | ✅ 已量化 | neutral_venue_factor:主场优势减半、平局略升 |
| 罢赛 / 延期 / 场地临时变更 | ❌ 暂不处理 | 信息确认后再分析 |
| 假球 / 数据造假风险(低级别联赛) | ❌ 不判断 | 提醒风险,建议回避 |
F. 什么时候会直接停下?(只有 2 种)
| 情况 | 系统行为 | |------|---------| | 联赛名完全无法识别 | ⛔ 阻断,先问你 | | 赔率 ≤1.0 或明显填错 | ⛔ 阻断,先问你 |
其余情况一律「先继续跑 + 明确告知降级点」。完整的阻断/重试/熔断机制、置信度分级、离线精度推导见「十三、能力边界机制说明」。
一、执行操作指南
第一次使用?请从这里开始。
我能做这两件事
| 任务 | 怎么触发 | 多久出结果 | |------|---------|-----------| | 赛前数据分析 | 上传赛事对阵信息(赔率/阵容/伤停等),或说"帮我分析今天的比赛" | 5-15 分钟 | | 赛后核验 | 说"复盘昨天的比赛" | 3-5 分钟 |
使用流程图
你提供赛事信息 / 说一句话
↓
★ Step 0.1 输入校验(v2.9.2 新增)
← 联赛名/赔率有疑点?→ 先提示你确认,不直接分析
↓
自动识别联赛和场次
↓
┌─ 赛前数据分析 ──────────────┐
│ Step 0: 查基线库定进球档 │
│ Step 1: 情报搜集 │ ← 某场查不到?→ 国内源优先→离线基线
│ Step 1.5: 三清单检查 │ ← 极端赔率/市场预期/赛季初期
│ Step 2: 七维分析 │ ← 遇到错误?→ 见「问题解答区」
│ Step 3: 三维自洽校验 │
│ Step 4: 汇总表 + 置信度 + 数据来源标注 │
└─ ┘
↓
输出 football_predictions_YYYY-MM-DD.md
快速上手三步
第一步:把赛事对阵信息发给我(赔率截图/球队/伤停等)
第二步(可选):告诉我你关注哪几场
第三步:等 5-15 分钟,我会输出:
- 每场的结果方向推荐 + 置信度
- 实力差距分析 + 风险提示
- 关键数据的来源与可靠性标注
- 自洽校验结果
- ⚠️ 标红的场次 = 置信度低,需要你判断
如果结果不如预期
- 某场"数据待定"→ 见「问题解答区」
- 某场置信度只有 ⭐ → 说明基本面和市场预期分歧大
- 想深入了解某场 → 直接问"这场为什么给⭐?"
二、快速开始
你可以这样问
| 你说什么 | 我会做什么 | |---------|-----------| | "帮我分析今天的足球比赛" | 收集今日赛程 → 逐场分析 → 产出分析文件 | | "上传了赔率截图,帮我看看" | 读取截图 → 识别场次 → 七维分析 → 汇总表 | | "复盘昨天的比赛" | 搜索最终结果 → 逐场核验方向/比分对比率 → 输出教训 | | "皇马最近状态如何" | 查皇马近期表现、伤停、联赛排名、下一场情报 | | "德甲场均进球多少" | 查基线库德甲场均3.24球 → 回答大球特征 | | "某队赔率只有1.10,能打吗" | 先提示你核对赔率是否填错,再分析极端赔率的含义 |
你会得到什么
- 汇总表:场次/对阵/结果方向/进球预期/比分/置信度
- 置信度标注:⭐⭐⭐双重支撑 → ⭐⭐单方支撑 → ⭐谨慎参考
- 风险提示:极端赔率陷阱、市场预期反向、赛季初期主队强势
- 数据来源标注:每条关键数据标注 A/B/C/D 可靠性等级
- 三维自洽校验:方向/半全场/总分匹配
三、输入校验与异常提示(v2.9.2 新增)
解决旧问题:写错数据(比如填错联赛名)时系统自己想办法补救,但不告诉你哪里错了。
分析前必做:三步校验
每次分析开始前,先跑 validate_user_input(),校验三项:
| 校验项 | 检测什么 | 触发后的动作 | |--------|---------|-------------| | 联赛名 | 是否在基线库 / 是否可识别 | 提醒你确认,用暂定联赛继续或让你重填 | | 赔率结构 | 是否 ≤1.0 / 隐含概率和是否异常 / 是否极端低赔 | 疑似填错时阻止分析,等你确认 | | 数据缺失 | 赔率缺项、必填字段为空 | 列出缺什么,请补齐 |
三种典型提示
① 联赛名写错 / 用了别名
你输入:德国甲级联赛
系统:ℹ️ 联赛名「德国甲级联赛」已识别为「德甲」,按德甲基线分析。
若完全无法识别:
你输入:威尔士超级联赛
系统:⚠️ 联赛名「威尔士超级联赛」无法识别(基线库收录 35 个赛事)。
请确认名称,或按「联赛名, 场均进球, 主胜率, 客胜率」直接提供参数。
记住:不会再静默替换后继续。识别不到就一定告诉你。
② 赔率疑似填错(含极端低赔)
你问:某队赔率只有 1.10,能打吗?
系统:⚠️ 检测到主胜赔率仅 1.10(异常低)。请先确认三点:
1) 是否看错实力差距设定 —— 这是「0盘(无差距)」还是「实力差距档」?
2) 是否填错数字 —— 例如 1.10 是否误填(本意 1.01 / 11.0 / 10.0)?
3) 若确认无误 —— 属「极端赔率陷阱」区域,历史打出概率低于赔率隐含,需降权处理。
若赔率不可能(≤1.0):
系统:❌ 赔率输入有误:
- 主胜赔率 0.95 不可能(赔率必须 > 1.0,疑似填错)
请核对后重新提供;在此修正前不做分析。
③ 隐含概率和异常
系统:⚠️ 赔率结构异常:
- 隐含概率和 1.72 偏高(正常约 1.05-1.35,疑似赔率填错)
⚠️ "阻止"机制说明
当校验判定为硬错误(赔率≤1.0、联赛名完全无法识别)时,系统进入 blocking=True 状态:
- 不输出分析结果,先展示上面的提示
- 等你确认或修正后,才继续分析
当校验判定为软疑点(联赛名模糊、极端低赔)时:
- 提示你,但继续分析(结论会带上降权说明)
- 你若发现确实填错,回复更正即可重算
你怎么回应
| 情况 | 你回复 | |------|--------| | 联赛名识别错了 | "不对,是XX联赛" | | 赔率确实填错了 | 直接给正确赔率 | | 赔率没错 | "确认无误" → 系统按极端赔率逻辑继续 |
四、完整分析案例
案例:德甲 拜仁 vs 沙尔克(第 2 轮,2026-08)
Step 0:查基线库 → 德甲,大球档(3.24球),开季+10%
Step 0.1:输入校验 → 联赛名「德甲」识别 ✓;赔率 1.05/11.0/21.0 → 触发极端低赔提示(主胜1.05)
Step 1:情报搜集
- 拜仁:首轮5-1大胜,新援赛巴里/布朗到队<2周(磨合风险)
- 沙尔克:首轮0-0,前一季附加赛保级,客场弱
- 赔率:客胜1.05 → 极端低赔
Step 1.5:三清单检查
- ⚠️ 检查1触发(赔率1.05 ≤ 1.15)
- ⚠️ 检查3触发(德甲第2轮)
- 共2项触发 → 置信度降2级
Step 2:七维分析 → 拜仁近期状态+++, H2H主场全胜+++, 但新援磨合风险(-2分)
Step 3:自洽校验 → 方向主胜✓,但三清单触发 + 新援磨合 = 降低置信度
Step 4:输出 → 主胜3-0,⭐(⭐⭐→⭐,因2项清单触发),比分仅参考
⚠️ 实际结果:拜仁 0-0 沙尔克(极端赔率陷阱经典案例)
赛后核验完整案例(新增)
场景:用户想核验 2026-09-06 的 30 场分析输出,对比方向/比分/进球。
Step 1:收集最终结果(国内源优先)
你说:帮我复盘昨天的比赛,预测文件是 football_predictions_2026-09-06.md
系统:正在核实各场最终结果(懂球帝/直播吧/中国体彩网)...
→ 核实完成:26/30 场
Step 2:逐场核验 | 场次 | 分析方向 | 最终结果 | 方向对比 | 预测比分 | 比分对比 | 预测进球 | 进球对比 | |------|---------|---------|---------|---------|---------|---------|---------| | 001 英超 | 主胜 | 曼城1-0考文垂 | ✅ | 2-0 | ❌ | 2 | ✅ | | 002 法甲 | 主胜 | 里昂3-1蒙彼利埃 | ✅ | 2-1 | ❌ | 3 | ✅ | | 011 葡超 | 客胜 | 马里迪莫0-3本菲卡 | ✅ | 0-3 | ✅ | 3 | ✅ | | 012 欧冠 | 主胜 | 拜仁0-0沙尔克 | ❌ | 3-0 | ❌ | 3 | ❌ | | 020 西甲 | 客胜 | 毕尔巴鄂3-0马竞 | ❌ 方向全反 | 0-1 | ❌ | 1 | ❌ | | 027 意甲 | 主胜 | 罗马2-1亚特兰大 | ✅ | 2-1 | ✅ | 3 | ❌ | | ... | ... | ... | ... | ... | ... | ... | ... |
Step 3:失败维度归因
012 拜仁 0-0 沙尔克:
→ 三清单检查 1(赔率 1.05)+ 检查 3(德甲第 2 轮)触发
→ 降权修正后仍预测 3-0 → 失误
→ 教训:极端赔率 ≤1.15 的场次,实际打出概率低于隐含概率约 40%
020 毕尔巴鄂 3-0 马竞:
→ 市场看好度 77% 指向马竞客胜 → 三清单检查 2 触发
→ 降权后仍判定客胜 → 教训:看好度 >75% 是反向指标
方向参考:约 35%(参考基准约 52%)
比分参考:约 11%
进球参考:约 27%
Step 4:回填基线库
系统:检测到德甲开季进球均值高于基线 3.24,将基线临时上调至 3.40。
检测到葡超本菲卡客战超预期,将葡超客胜率从 0.31 微调至 0.33。
Step 5:输出复盘文件
→ football_review_2026-09-06.md:含汇总表 + 教训总结 + 基线修正记录
五、核心框架
权重:基本面 70% + 市场赔率结构 30%
七维基本面(70%)
| 维度 | 权重 | 关注点 | |------|------|--------| | 近期状态 | 25% | 近5-10场胜负平、进球/失球模式 | | 主客场表现 | 15% | 主场龙 vs 客场虫 | | 伤停与阵容 | 20% | 核心球员缺阵、首发阵容质量 | | 交锋往绩 | 15% | 历史对战胜平负、打法克制 | | 战术对位 | 10% | 阵型相克、风格冲突 | | 战意与赛程 | 5% | 杯赛轮换、保级 vs 争冠 | | 市场赔率结构 | 30% | 极端赔率、市场预期反向 |
联赛基线校准
| 进球档 | 联赛 | 默认思路 | |------|------|----------| | 大球档(≥3.0) | 芬超 3.29、德甲 3.24、挪超 3.18、沙特联 3.01、美职 3.00 | 默认大球 | | 中球档(2.7-2.9) | 德乙 2.93、瑞超 2.83、法甲 2.82、英超 2.75、英冠 2.74、西甲 2.69、葡超 2.68 | 2-3 球为主 | | 小球档(≤2.6) | 意甲 2.56、K1 2.53、巴甲 2.52、J1 2.40 | 1-0/2-1/1-1 为主 |
赛季分期与状态修正
| 阶段 | 进球修正 | 特点 | |------|---------|------| | 开季(8-10月) | +5%~15% | 阵容磨合,大球与冷门并存 | | 中期(11-2月) | -10%~15% | 寒冷疲劳,小球增多 | | 末段(3-5月) | +5% | 保级队拼命 | | 末轮 | +17% | 进球激增 | | 保级区末5轮 | +8~12% | 弱队反而进球多 |
Option B:4 项新维度
xG 数据集成(最关键)
输入:
xg_home: 主队 xG/场(国内源优先检索,FBref/Understat 兜底)xg_away: 客队 xG/场- 联赛基线:
LEAGUE_XG_BASELINE已为 35 联赛预设(英超主 1.50/客 1.15 等)
作用:
- 若提供 xG,预测期望进球用 xG 估算,否则用赛季基线
- 若 |xG 优势| > 0.5,触发警告「实力差距明显」
战意类型
| 类型 | 加成 | 触发场景 |
|------|------|---------|
| title | +15% | 争冠(前三且差5分以内) |
| top4 | +8% | 争 4/欧战席位 |
| mid | 0% | 中游无欲无求 |
| relegation | -8% | 保级死战 |
| cup | -10% | 杯赛轮换 |
| dead_rubber | -15% | 末轮无意义 |
换帅效应
| 比赛数 | 加成 | 说明 | |--------|------|------| | 第1场 | +8% | 换帅最大反弹 | | 第2场 | +6% | 反弹仍在 | | 第3场 | +4% | 递减中 | | 第4-6场 | +1-2% | 趋于正常 | | ≥7场 | 0% | 回归常态 |
赛程密度
| 休息天数 | 加成 | 场景 | |---------|------|------| | ≥7天 | +5% | 充分休整(国家队后/杯赛后) | | 4-6天 | 0% | 正常节奏 | | 3天 | -3% | 轻微疲劳 | | ≤2天 | -8% | 赛程密集(欧冠/联赛连转) |
联赛专属权重矩阵(已嵌入 football_calc.py)
| 联赛 | form | HA | inj | h2h | tac | mot | xg | 特点 | |------|------|------|------|------|------|------|------|------| | 英超 | 20 | 15 | 20 | 10 | 15 | 5 | 15 | 均衡型 | | 意甲 | 20 | 10 | 20 | 20 | 10 | 5 | 15 | H2H 权重最高 | | 德甲 | 25 | 20 | 15 | 5 | 10 | 5 | 20 | 主场龙极强 | | 西甲 | 20 | 15 | 20 | 10 | 15 | 5 | 15 | 战术权重较高 | | 法甲 | 25 | 20 | 15 | 5 | 10 | 5 | 20 | 与德甲类似 | | 挪超 | 15 | 30 | 15 | 5 | 10 | 5 | 20 | 主场优势最强 | | 葡超 | 20 | 20 | 20 | 5 | 10 | 5 | 20 | 主场权重最高 | | 沙特联 | 20 | 15 | 15 | 5 | 10 | 15 | 20 | 战意权重最高 | | 欧冠 | 15 | 10 | 25 | 15 | 15 | 5 | 15 | 伤停权重最高 | | 其他 | 默认值 | | | | | | | 自动 fallback |
使用方式:调用 calc_1X2_probabilities(league="意甲", ...) 时自动应用对应联赛权重。
参数速查表:普通人怎么填(新增)
xG、战意类型、换帅场次、休息天数这四个参数听起来专业,但你只需要知道球队的基本情况就能填,不用懂足球术语。
| 参数 | 通俗问法 | 普通人怎么判断 | 填什么 | 示例 |
|------|---------|--------------|--------|------|
| xg_home / xG | "这支球队最近创造机会的能力怎么样?" | 近 5 场平均进了多少球? | 小数,如 1.5 | 曼城近 5 场进 8 球 → xG ≈ 1.6 |
| 战意类型 | "这场比赛对球队有多重要?" | 排名靠前/靠后?还剩几场? | 6 种之一 | 巴萨差皇马 5 分 → title(争冠) |
| | | | | 中游无欲无求 → mid |
| | | | | 倒数第 3 名 → relegation(保级) |
| 换帅场次 | "这支球队最近换教练了吗?" | 新教练带队了几场? | 整数 1-10 | 上周换帅,本场是新帅第 1 场 → 1 |
| 休息天数 | "这支球队上一场是什么时候?" | 今天日期 − 上场日期 | 整数 | 周三分析周二到今天 → 1 天 |
| | | | | 周二分析周二到今天 → 0 天 |
| | | | | 国际比赛周后首战 → 7-14 天 |
不会填怎么办?
- 不填 → 系统用联赛默认值,不影响分析流程
- 填错 → Step 0.1 输入校验会提示你核对
- 拿不准 → 直接说"我不知道 xG,你按默认算",系统自动跳过该维度
六种战意类型的通俗判断:
争冠(title) → 联赛前3名,差领头羊 ≤5分,下半场冲刺阶段
争四(top4) → 联赛第4-6名,差欧冠区 ≤5分
中游(mid) → 无欲无求,剩5场以上还差10分以上
保级(relegation)→ 倒数4名内,差安全区 ≤5分
杯赛轮换(cup) → 联赛无欲无求 + 杯赛在打 + 可能上替补
末轮无意义(dead_rubber)→ 联赛最后一轮双方都无欲无求
休息天数的快速判断:
上一场是 3 天前 → 填 3(正常节奏,无加成)
上一场是 2 天前 → 填 2(赛程密集,-8%)
上一场是 7 天前 → 填 7(国际比赛周后,+5%)
今天 vs 上场 = 同一周 → 填 0-1(极度疲劳,-8%)
六、问题解答区(遇到问题先查这里)
旧问题:风险提示有,但遇到问题不知道去哪找答案。现在按症状对号入座。
快速导航
| 你遇到的症状 | 对应条目 | |-------------|---------| | 提示"联赛名无法识别/已识别为XX" | A1 | | 赔率看起来不对 / 某队只有 1.10 | A2 | | 输错了数据想改 | A3 | | 结果里出现"数据待定" | B1 | | 查不到某队/某球员信息 | B2 | | 国外网站打不开、很慢、显示不全 | B3 | | 转会消息不确定真假 | B4 | | 结果置信度只有 ⭐ | C1 | | 比分预测不准 | C2 | | 想改某场结论 / 重新分析 | C3 | | 想离线用、不想联网 | D1 | | 想知道模型什么时候最准 | D2 | | 报错、卡住、没有输出 | D3 |
A. 输入类问题
A1|联赛名无法识别怎么办?
见「三、输入校验」。系统会给出最接近的候选并要求你确认;若确实没有该联赛,可手动提供参数:「联赛名, 场均进球, 主胜率, 客胜率」。
A2|赔率看起来不对(如 1.10)怎么办? 系统会自动检测并提示你核对三点(赔率/数字/是否确认)。你只需回复"确认无误"或给出正确赔率。
A3|输错了数据想改? 直接重发正确信息即可,例如:"上一场主队赔率写错了,应该是 1.85"。系统会重算该场。
B. 数据类问题
B1|"数据待定"是什么意思? = 该场关键情报检索失败,已用离线基线兜底,结论可靠性下降。处理:补充该场关键信息(伤停/排名)可提升精度。
B2|查不到某队信息?
- 核对球队名拼写(尤其从外文音译);2) 直接告诉我你知道的信息;3) 系统会用默认值继续,但该场会降级。
B3|国外网站慢/打不开? v2.9.2 已改为国内源优先(详见「十、数据源与可靠性」)。若仍失败,系统会切换到离线基线并标注。
B4|转会信息不确定真假? 系统对转会/阵容等关键信息会标注来源等级并尝试双源交叉验证;只找到单一弱来源的,会标「待核实」,不作为决策依据。
C. 结果类问题
C1|置信度只有 ⭐ 说明什么? 基本面与市场预期分歧大,或某维度数据缺失。⭐ = 仅作方向参考,别当绝对结论。
C2|比分预测为什么不准? 比分是低概率事件,历史对比率≈0%。比分仅作娱乐,重点看方向和实力差距。
C3|想改某场结论? 告诉我哪场 + 你的新信息,系统重跑该场。
D. 使用类问题
D1|能离线用吗? 可以。内置 35 个联赛离线基线;无网时自动启用,精度约 80%,但不保证最新(阵容/伤停可能过时)。
D2|什么时候最准? 基本面和市场预期方向一致且情报完整时最准(⭐⭐⭐)。赛季前 2-3 轮、新援磨合期、杯赛淘汰赛最不准。
D3|报错/卡住怎么办? 见「十二、错误诊断与操作引导」;若单场卡住,系统有熔断机制会自动跳过该场,不影响其余场次。
常见错误反模式(对应"别这么做")
| # | 错误类型 | 案例 | 正确做法 | |---|---------|------|---------| | 1 | 极端赔率陷阱 | 拜仁1.05→0-0沙尔克 | ≤1.15降权,深差距仅参考 | | 2 | 市场预期反向 | 77%看好客胜→3-0主胜 | >75%视为反向信号 | | 3 | 赛季初期强队慢热 | 德甲初期集体爆冷 | 开季6-8轮降预期 | | 4 | 比分过于自信 | 对比率≈0% | 比分仅参考 | | 5 | 实力差距交叉缺失 | 方向对但深差距输 | 置信度低时以差距为主 | | 6 | OCR错误未校验 | "阿贾克斯斯" | 对阵双方交叉验证 | | 7 | 赔率权重过高 | 过度依赖赔率连错 | 上限30% | | 8 | 脱离联赛基线 | 用一般规律套所有 | 先查基线库 | | 9 | 凭记忆生成阵容 | 3次被抓包 | 必须真实检索 | | 10 | 联赛特性忽视 | 挪超频繁预测平 | 按特性调整 | | 11 | 数据不标来源 | 转会消息当既定事实 | 标注A/B/C/D并交叉验证 | | 12 | 输入错误不提示 | 填错联赛名静默替换 | 走输入校验,主动告知 |
七、赛前数据分析流程
Step 0:联赛基线 → 自动回退
- 查基线库
- 联赛不在库 → 真实检索获取场均进球/主客胜率
- 检索失败 → 使用内置 35 联赛离线基线
Step 0.1:输入校验(v2.9.2 新增,强制)
调用 validate_user_input(league, odds_home, odds_draw, odds_away):
- 联赛名无法识别 / 赔率≤1.0 →
blocking=True,先提示用户、等确认 - 联赛名模糊 / 极端低赔 / 隐含概率和异常 → 提示但继续(带降权)
Step 0.5:赛前必查三清单(强制检查,不可跳过)
【检查1/3】极端赔率检查 — 针对:赔率 ≤ 1.15
| 赔率特征 | 风险 | 修正动作 | |---------|------|---------| | 主胜 ≤ 1.15 | 表面主队极强,实为市场诱导 | 降权;深差距如-2/-3仅参考;关注反方向+1 | | 客胜 ≤ 1.15 | 同上 | 降权;关注主队+1 | | 平局 ≤ 1.15 | 极罕见 | 降权为⭐,比分偏保守 |
参考案例:拜仁客胜 1.05 → 实际 0-0 沙尔克
【检查2/3】市场预期反向检查 — 针对:某方看好度 > 75%(或赔率极端暗示)
| 看好度/赔率特征 | 风险 | 修正动作 | |----------------|------|---------| | 某方看好度 > 75% | 市场赔率被压低,打出概率低于隐含 | 预期方向降权;优先考虑反方向 | | 赔率差 > 1.5(一方 < 1.50 另一方 > 2.50) | 推断大热方向 | 大热方降⭐;反方向值得重视 |
参考案例:毕尔巴鄂 vs 马竞,77% 指向马竞客胜 → 实际 3-0 主胜
【检查3/3】联赛赛季初期偏差 — 针对:德甲/法甲/英超/西甲赛季前6轮
| 联赛 | 主场修正 | 风险特点 | |------|---------|---------| | 德甲 | 主胜 +8% | 开季主场龙极强,弱队主场超预期 | | 法甲 | 主胜 +6% | 巴黎独大但客场不稳 | | 英超 | 主胜 +5% | 升班马和强队开季均不稳定 | | 西甲 | 主胜 +4% | 夏窗调整大,主力磨合期 |
额外进球修正:赛季前6轮进球数平均高约 +10%。
三清单结果汇总:
| 触发检查数 | 置信度修正 | |-----------|----------| | 0 项 | 不修正 | | 1 项 | 降1级(⭐⭐⭐→⭐⭐) | | 2 项 | 降2级(⭐⭐⭐→⭐) | | 3 项 | 直接⭐,仅参考方向 |
Step 1:情报搜集(容错机制)
- 每场 真实检索(国内源优先 → 国外源兜底)
- 必检索项:阵容、伤停、主帅近况、近期表现
- Option B 必检索项:
- xG 数据(
{球队} xG expected goals {赛季}) - 上一场比赛日期(计算休息天数)
- 联赛排名/争冠形式(判断战意类型)
- 主帅履历(是否新上任,新帅在任几场)
- xG 数据(
- 失败 → 换措辞重试(≤2次) → 换数据源 → 离线基线
- 关键数据(转会/阵容)必须标注来源等级,双源交叉验证
Step 1.5:三清单复查
完成情报搜集后,再跑一次三清单。
Step 2:七维分析 + 基线校准 + 三清单修正
按七维分析,结合进球档与分期修正因子;三清单结果在此处叠加。
⚠️ 三清单的叠加是「数值」的,不是「脑内估算」: 必须把 Step 0.5/1.5 得到的
chk作为checklist_result=chk传入calc_1X2_probabilities(),降权与星级降级由函数内部完成。 只把chk打印出来看、不传参 = 三清单对最终概率零影响。
Option B 额外步骤:
- 若提供了 xG 数据 → 调用
calc_xg_expected_goals()覆盖默认期望进球 - 调用
calc_xg_advantage()计算 xG 优势(>0.5 触发警告) - 应用
MOTIVATION_FACTORS[战意类型]加成 - 应用
manager_bounce_factor(在任场次)加成 - 应用
rest_days_factor(休息天数)加成 - 联赛权重按
LEAGUE_WEIGHTS[联赛]自动切换
Step 3:三维自洽校验
- 方向 = 比分方向
- 半全场末位 + 全场末位 = 总进球末位
- 实力差距方向与总分匹配
Step 4:汇总表
| 场次 | 对阵 | 方向 | 总进球 | 半全场 | 比分 | 差距 | 置信度 | 数据来源 | |------|------|------|--------|--------|------|------|--------|---------|
⭐⭐⭐基本面+市场双重支撑 | ⭐⭐单方支撑 | ⭐谨慎参考
八、赛后核验流程
Step 1:检索最终结果(国内源优先)
Step 2:逐场核验分析准确度
Step 3:失败维度归因
Step 4:回填基线库新赛季实测数据
九、七维量化计算模块
函数完整签名 / 参数 / 返回值 → 见
references/quick_reference.md第 4 节;可直接运行的代码示例 → 见第 8 节。
快速使用
python "C:\Users\EDY\.qclaw\skills\football-analysis\football_calc.py"
python "C:\Users\EDY\.qclaw\skills\football-analysis\football_calc.py" --test
python "C:\Users\EDY\.qclaw\skills\football-analysis\football_calc.py" --json
函数清单
| 函数 | 说明 |
|------|------|
| get_baseline(league) | 查 35 联赛离线基线 |
| normalize_score(value, direction) | 归一化到 [0,1] |
| calc_season_goals(league, phase, ...) | 含分期系数的预期进球 |
| calc_handicap_prob(line) | 实力差距覆盖概率 |
| calc_1X2_probabilities(...) | ★ 主函数:输出概率+置信度+警告 |
| check_extreme_odds_trap(...) | 检查1:极端赔率 |
| check_public_favorite_reverse(...) | 检查2:市场预期反向 |
| check_early_season_league_bias(...) | 检查3:赛季初期偏差 |
| run_prematch_checklist(...) | 三清单主入口(结果须回传 calc_1X2_probabilities(checklist_result=chk)) |
| calc_xg_advantage(xg_h, xg_a, ...) | xG 优势计算 |
| calc_xg_expected_goals(...) | xG 估算期望进球 |
| manager_bounce_factor(games) | 换帅反弹加成 |
| rest_days_factor(days) | 休息天数加成 |
| 🆕 resolve_league(raw) | 联赛名智能解析(精确/别名/包含/模糊) |
| 🆕 check_odds_sanity(h,d,a) | 赔率合理性检查(识别填错/极端低赔) |
| 🆕 validate_user_input(...) | 输入校验统一入口(联赛名+赔率) |
| 🆕 get_data_sources(region) | 数据源优先级(国内优先) |
| 🆕 rate_data_reliability(source) | 数据源可靠性分级 A/B/C/D |
| 🆕 verify_transfer_claim(claim, sources) | 转会/阵容信息交叉验证 |
| diagnose_error(ex, key, ctx) | 错误分类诊断 |
| handle_error(ex, key, ctx) | 错误处理主入口(含熔断) |
常量:
LEAGUE_XG_BASELINE:35 联赛 xG 基线LEAGUE_WEIGHTS:35 联赛专属权重矩阵MOTIVATION_FACTORS:6 种战意加成表- 🆕
LEAGUE_ALIASES:联赛别名表(用于纠正输错的联赛名) - 🆕
DATA_SOURCE_PRIORITY:国内外数据源优先级 - 🆕
DATA_RELIABILITY:数据可靠性 A/B/C/D 分级
代码示例(可直接运行)
先把技能目录加入
sys.path;完整 9 组示例(含数据源、可靠性、错误处理、一次完整分析的调用顺序)见references/quick_reference.md第 8 节。
例 1:单场完整分析(含 Option B 四维)
import sys
sys.path.insert(0, r"C:\Users\EDY\.qclaw\skills\football-analysis")
from football_calc import calc_1X2_probabilities
r = calc_1X2_probabilities(
league="英超", odds_home=2.10, odds_draw=3.50, odds_away=3.20,
home_form=7.0, away_form=8.0,
xg_home=1.85, xg_away=1.65, # 主队略占 xG 优势
motivation_type_home="top4", motivation_type_away="title",
rest_days_home=5, rest_days_away=3, # 客队赛程更密
)
print(f"主胜 {r['home_win']:.1%} / 平 {r['draw']:.1%} / 客胜 {r['away_win']:.1%}")
print("预期总进球", r["expected_goals"], "| 星级", r["star"], "| 差距建议", r["rec_handicap"])
例 2:赛前必查三清单(必须回传给主计算函数)
⚠️
chk不传给calc_1X2_probabilities(..., checklist_result=chk),三清单的降权/降级完全不生效。 v5.8.1 曾因文档只 print 不回传,导致 P0-4 的数值接线「存在但不可达」。
from football_calc import run_prematch_checklist, calc_1X2_probabilities
chk = run_prematch_checklist(
odds_home=1.05, odds_draw=11.0, odds_away=21.0,
league="德甲", current_round=2,
)
print("触发", chk["traps_count"], "项;星级修正", chk["star_modifier"])
print(chk["combined_action"])
print("降权量:", chk["final_odds_adjustment"]) # 被降权方 = 热门方本身
# ✅ 关键一步:回传 chk
r = calc_1X2_probabilities(
league="德甲", odds_home=1.05, odds_draw=11.0, odds_away=21.0,
home_form=8.0, away_form=4.0,
checklist_result=chk, # ← 漏掉 = 风控白跑
)
# 实测(拜仁 1.05/11/21):不传 → 主60.1% 星***;传 → 主28.6% 星*
例 3:输入校验(阻断式)
from football_calc import validate_user_input
v = validate_user_input(league="英格兰超级联赛",
odds_home=1.08, odds_draw=9.0, odds_away=19.0)
if v["blocking"]:
print(v["user_message"]) # 把这段话发给用户,等确认后再分析
print("解析后的联赛:", v["resolved_league"])
例 4:命令行自检 / 演示
chcp 65001
python "C:\Users\EDY\.qclaw\skills\football-analysis\football_calc.py" --test # 单元自检
python "C:\Users\EDY\.qclaw\skills\football-analysis\football_calc.py" --json # JSON 输出
十、数据源与可靠性(v2.9.2 新增)
解决:国外站国内加载慢/不完整;转会等信息不可靠。
数据源优先级(国内优先)
| 优先级 | 站点 | 用途 | 可靠性 | |--------|------|------|--------| | 1 | 中国体彩网 lottery.gov.cn | 官方赛程/赔率 | A | | 2 | 懂球帝 dongqiudi.com | 阵容/伤停/战报 | B | | 3 | 直播吧 zhibo8.com | 赛程/阵容/新闻 | B | | 4 | 新浪体育 sports.sina.com.cn | 综合报道 | B | | 5 | 网易体育 sports.163.com | 综合报道 | B | | 6 | 500彩票网 500.com | 赔率/数据 | B | | 7 | 虎扑 hupu.com | 论坛线索 | C | | 8 | 兜底(慢)| Transfermarkt / FBref / Understat / FotMob | A/B |
策略:先查 1-6(国内快),拿不到再去兜底站;全部失败 → 离线基线 + 标注。
数据可靠性分级
| 等级 | 标签 | 来源 | 处理 | |------|------|------|------| | A | 官方/权威 | 体彩官网、联赛官网、Transfermarkt/FBref/Understat | 可直接采用 | | B | 主流媒体 | 懂球帝、直播吧、新浪/网易体育、FotMob | 采用;关键项交叉验证 | | C | 自媒体/聚合 | 虎扑贴、彩客、内容农场 | 仅作线索,必须验证 | | D | 待核实 | 单一来源、转载、无出处 | 标「待核实」,不作决策依据 |
关键数据核实规则
对转会、阵容、伤停这类会直接影响结论的数据:
- 至少 2 个不同的 A/B 级来源印证 → 才算可信
- 只有 1 个可信来源 → 标「待核实」
- 只有 C/D 级来源 → 不采用(仅内部参考)
调用 verify_transfer_claim("某球员转会X队", sources=["懂球帝","直播吧"]):
- 2 个 B 级源 →
verified=True→ ✅ 可信 - 仅 1 个 C 级源 →
verified=False→ ⚠️ 待核实
输出中每条关键数据都会带来源标注,例如:
主力中卫伤缺(来源:懂球帝 B;直播吧 B)。
十一、输出规范与环境约束
输出文件
- 情报文件:
intelligence_YYYY-MM-DD.md - 预测文件:
football_predictions_YYYY-MM-DD.md - 复盘文件:
football_review_YYYY-MM-DD.md
输出文件头应包含
- 数据来源与采集时间
- 框架版本(v5.8.1)
- 数据可靠性声明
- 风险声明(非分析参考)
环境约束
- Python bundled 可能间歇性被封 → 校验用人工自检
- browser 不可用 → 用 web_search / web_fetch(国内源优先)
- 超长截图 → Python PIL 切割为 8 片再识别
- Windows PowerShell 中文/emoji → 先
chcp 65001或重定向 UTF-8 文件
十二、错误诊断与操作引导
当分析过程中出现问题时,先在这里找对应类型。
错误类型速查表
| 提示文字 | 错误类型 | 根因 | 修正方案 |
|---------|---------|------|---------|
| ❌ 图片模糊 | 图片质量 | 分辨率低/字体过小/截图角度倾斜 | 重新截图;或分两张上传 |
| ❌ 网络检索失败 | 网络问题 | 检索引擎临时不可用/防火墙阻断 | 等待30秒后重试;系统自动切国内源 |
| ❌ 联赛不在基线库 | 联赛缺失 | 冷门联赛/小联赛未收录 | 自动检索补充;若失败用离线基线 |
| ⚠️ 数据待定 | 综合 | 以上多种情况 | 按对应类型处理 |
| ⚠️ 赔率结构异常 | 输入错误 | 赔率≤1.0 / 隐含概率和异常 | 核对后重新提供 |
| ⚠️ 极端低赔 | 输入/风险 | 赔率≤1.15 | 确认赔率/数字;确认无误则降权处理 |
熔断机制
- 单场检索连续失败 3 次 → 跳过该场(用离线基线),不影响其余场次
- 全局连续跳过 5 场 → 暂停并提示网络异常
自动重试与容错流程图(新增)
你会看到的提示 vs 底层实际发生了什么——让你对系统的兜底能力有感知。
你上传赔率截图
↓
系统开始逐场分析
↓
┌─ 每场比赛 ────────────────────────────────┐
│ 第1次检索(国内源优先) │
│ 你看到:正在查询 ... │
│ 实际:懂球帝 → 直播吧 → 新浪体育 │
│ 成功 → 继续下一维度 │
│ 失败 → │
│ ↓ │
│ 第2次检索(换措辞 / 换数据源) │
│ 你看到:重新尝试 ... │
│ 成功 → 继续 │
│ 失败 → │
│ ↓ │
│ 第3次检索(换备用站) │
│ 你看到:加载稍慢 ... │
│ 成功 → 继续 │
│ 失败 → │
│ ↓ │
│ 触发熔断 → 跳过该场,切换离线基线 │
│ 你看到:⚠️ 数据待定(该场用离线基线分析) │
│ 结论:该场星级降 1-2 级,但不阻塞其余场次 │
└───────────────────────────────────────────┘
↓
若全局连续 5 场都触发熔断
你看到:⚠️ 网络异常,部分场次数据缺失,建议稍后重试
系统:暂停,跳过这批,等待你重新上传截图
↓
若部分场次用离线基线(有 35 联赛内置数据)
你看到:⭐⭐ → ⭐(因数据不完整降级)
结论:方向仍然可信,但比分和进球预期精度下降
你感知到的 vs 实际情况对照:
| 你看到什么 | 底层发生了什么 | 你需要做什么 | |-----------|--------------|------------| | "正在查询..." | 最多尝试 3 个数据源 | 等待 | | "数据待定" | 已用离线基线兜底,星级自动降 | 可补充该场信息后重算 | | "某场置信度只有 ⭐" | 缺数据/基本面分歧大 | 参考方向,不参考比分 | | "网络异常,建议稍后重试" | 5 场连续失败触发全局熔断 | 稍后重新上传截图 | | 全部正常输出 | 全部 3 个数据源成功 | 直接使用结果 |
十三、能力边界机制说明
完整的能力/限制清单在开头「🚦 能力边界一览」(A 能做到 / B 有条件做到 / C 做不到 / D 覆盖范围 / E 特殊场景 / F 阻断条件)。 本节只补充机制细节,不再重复清单。
什么时候会「停下来」?(阻断与兜底一览)
分三档:⛔ 先停下问 / ⚠️ 降级继续 / ⏭️ 跳过。
| 情况 | 系统行为 | 你会看到 | 你该怎么做 | |------|---------|---------|-----------| | 联赛名完全无法识别 | ⛔ 阻断,不出分析 | 「联赛名「XX」无法识别…请确认名称」 | 重新给出准确联赛名 | | 赔率 ≤1.0 或明显填错 | ⛔ 阻断,不出分析 | 「赔率输入有误:…请核对」 | 核对截图/数字后重新提供 | | 联赛名写法模糊(如「德甲联赛」) | ⚠️ 降级继续 | 「已识别为「德甲」…如不对请指出」 | 确认即可,或纠正 | | 赔率极端低(≤1.15) | ⚠️ 降级继续 | 「检测到极端低赔…请先确认三点」 | 确认是「0档」还是「实力差距档」 | | 某场情报查不到(网络/检索失败) | 🔁 自动重试,最多 3 次 | 「该场数据暂不可用,已用离线基线」 | 可补充关键信息 | | 同一场连续失败 3 次 | ⏭️ 跳过该场(熔断) | 「该场已跳过」 | 稍后重试或手动补充 | | 连续 5 场都失败 | ⏸️ 暂停整批 | 「网络似乎异常,已暂停」 | 检查网络后重发 | | 联赛不在基线库(35 个之外) | ⚠️ 降级继续 | 「已按最接近联赛估算,误差 ±15–20%」 | 可补充该联赛参数 | | 完全离线 | ⚠️ 降级继续 | 「离线模式,精度约 80%」 | 关键数据自行核实 |
一句话:⛔ 只在「联赛名认不出」和「赔率明显错」两种情况下停下;其余都会先继续跑,并明确告诉你哪里降级了。
置信度分级
| 评级 | 触发条件 | 预测可信度 | 使用建议 | |------|---------|-----------|---------| | ⭐⭐⭐ | 基本面和市场方向一致,且有情报支撑 | 较高 | 可参考 | | ⭐⭐ | 基本面和市场有一方支撑 | 中等 | 谨慎参考 | | ⭐ | 双方分歧大,或某维度数据缺失 | 低 | 仅作方向参考 | | ⚠️ 已跳过 | 数据检索全部失败 | 极低 | 完全不参考 |
能做到 / 做不到(已合并到开头,这里不再重复)
为避免「同一件事要在几处拼凑」,原「我能做到的 / 我做不到的」两份清单已合并并统一到开头「🚦 能力边界一览」:
- A. 能做到 ✅(含说明)
- B. 有条件做到 ⚠️(含前提条件与不满足时的降级方式)
- C. 做不到 ❌(含原因与替代做法)
- D. 覆盖范围(35 赛事基线内 ✅ / 未收录次级与小联赛 ⚠️ / 国家队、青年队 ❌;杯赛可做两回合与中立场修正)
- E. 特殊场景清单(18 类边缘场景的覆盖状态与处理方式)
- F. 阻断触发条件(只有 2 种)
离线精度 80% 是怎么算的(新增)
文档说「离线模式下精度约 80%」,这个数字不是拍脑袋来的,是双层推导。
第一层:数据维度覆盖率
分析一场比赛依赖 7 个数据维度。联网时 7 个全有;离线时,基线库提供其中 3 个(联赛进球档 / 主客胜率 / 赛季分期规律),缺失 4 个维度(伤停 / 实时状态 / 阵容 / 赔率实时变化)。
数据维度覆盖率 = 3/7 ≈ 43%
第二层:各维度历史准确率
| 数据维度 | 联网时准确率 | 离线时用基线代替的准确率 | |---------|-----------|----------------------| | 联赛进球档(场均X球) | ~85% | ~80%(基线来自历史均值) | | 主客胜率分布 | ~80% | ~75%(主客场随赛季微调) | | 赛季分期规律(开季/中期/末段) | ~75% | ~70%(规律相对稳定) | | 伤停信息 | ~90% | 无法提供(用均值代替,~50%) | | 实时状态(近5场) | ~80% | 无法提供(用均值代替,~50%) | | 阵容质量 | ~85% | 无法提供(用均值代替,~50%) | | 赔率实时变化 | ~75% | 无法提供(用截图赔率,~90%) |
第三层:综合计算
离线模式的整体准确率,用加权平均估算:
联网模式准确率 = 各维度加权平均 ≈ 82%(历史验证基准)
离线模式准确率 =
联网基准 82%
× (联网时维度覆盖率 100% → 离线维度覆盖率 43% 的比例修正)
≈ 82% × (43% + 57% × 约 82% 精度回退)
≈ 82% × 0.89
≈ 73%
取整后保守估计为 80%。
精度下降的主要来源:
- ❌ 伤停信息缺失(缺失时用无伤代替,高估实力)
- ❌ 实时状态缺失(强队连败时用均值代替,高估)
- ❌ 阵容信息缺失(新手首发时用主力代替,高估)
你看到什么:离线时 ⭐⭐⭐ 会变成 ⭐⭐,比分预测误差增大。
一句话总结
方向看置信度 ⭐⭐⭐/⭐⭐,比分当娱乐,半全场忽略;输入有疑点会主动提示,赔率≤1.15 和看好度>75% 时特别小心,关键数据看来源标注;遇到数据缺失系统自动重试兜底,离线时精度约 80% 有两层推导依据。
版本历史(v5.8.0 → v5.9.4)
v5.9.4 升级(P5 数据扩充:五届 334 场库 + 负结果确认 + 覆盖 69 队):
- 2018 世界杯 + 2021 欧洲杯 115 场入库(含 8 场点球大战 90 分钟口径还原、4 场加时备注解析),杯赛库扩至 五届 334 场 / 69 队(中位 8 场/队)
- 队伍级修正无样本外增益经 5 折留一交叉验证确认:收缩 MAP(τ=3~50)在每一折都劣于纯 FIFA 先验(如 2026 折 0.1713 vs 0.1501);γ 上调(四届定标 ~1.15)LOO 亦无增益(0.1831 vs 0.1826)——负结果从单折升级为 5+1 组对照的确定性结论
- 模型参数维持不变(纯先验 + γ=1.039),
FIFA_RANK_CUP补 7 队(埃及/尼日利亚/俄罗斯/秘鲁/芬兰/北马其顿/冰岛),2018/2021 届次队伍可预测;守卫 G37 回归通过- 下次翻案条件:库扩到 400+ 场(约再补两届)或接入近期状态/伤停数据
v5.9.3 升级(P5 杯赛模块:FIFA 排名先验统计基准):
- 数据底座:杯赛三届合并入库(2022世界杯 64 + 2024欧洲杯 51 + 2026世界杯 104 = 219 场,90 分钟口径 + 半场 100% 覆盖存 115 场)。
predict_cup_match(home, away):FIFA 排名(2026-09 榜,v5.9.4 扩至 69 队)→ 攻防强度先验 → 泊松 1X2;γ=1.039 为历史水平定标(样本外干净)。守卫 G37(强弱方向+归一+未知队抛错+λ上限)。- 关键实测结论:2026 世界杯 104 场样本外,纯先验+水平定标 RPS=0.1497;115 场训练数据的收缩 MAP(Gamma-Poisson, τ∈[3,50])全线劣于纯先验,τ=0 纯数据过拟合至 0.3079——当前样本量下排名先验即最优统计基准,队伍级修正待 400+ 场历史数据再启用。
- 定位明示:统计基准层(vs 市场去水基准 ≈0.129),未含近期状态/伤停。
v5.9.2 升级(一站式入口 + 参数速查):
analyze_match()推荐入口:自动跑赛前三清单并接线主计算(根治"清单结果忘记回传"易错坑——手动流程忘传时主胜可虚高 19pp,G36 守卫量化验证),价值投注层(EV/Kelly/信号分级/热钱)同样自动接线;**kwargs原样透传主函数。守卫 G36(与手动两步逐位等价 + 清单确生效 + 价值层齐全)。- SKILL.md 快速开始重构:①推荐一站式 → ②手动两步(明示回传坑)→ ③高频参数速查表(12 参数)。
- FAQ 新增 Q13(回传坑)/ Q14(找参数路径)。
v5.9.1 升级(热钱流向因子 + isotonic 校准层):
hot_money_factor():国内竞彩特有的热钱信号——对比初盘/即时盘赔率变动反推资金流向(±10% 映射 heat ±1),高人气队(popularity≥65)大幅降赔(≥5%)且模型概率低于去水隐含时触发诱盘警示;输出热钱方向与模型是否背离。守卫 G34。apply_isotonic_calibration():PAVA isotonic 校准器(knots 来自三季实测 B2 泊松 train 22-23+23-24)。诚实结论:test(24-25, 7764场) 全量校准 RPS +0.00109 恶化、最优收缩 λ=0.25 改善仅 0.0002,均未超噪声阈 ±0.0017 → 默认lam=0透传不启用。有价值副产物:B2 泊松系统性低估平局 +2.3pp,印证 Dixon-Coles ρ 架构方向。守卫 G35。- 训练/验证细节见
baseline_audit/fit_isotonic.py与fit_isotonic_report.txt(工作区)。v5.9.0 升级(价值投注决策层 + 文档重构):
- P4 统计基准回测(train 22-23+23-24 → test 24-25,7,764 场 / 21 联赛,与
rps_score同口径): B0 联赛频率 RPS=0.2268 / B2 队伍级泊松 0.2214 / 市场去水 0.1285 —— 市场领先纯统计约 0.09 RPS, 模型定位修正为「寻找模型与市场的分歧点」,而非独立定价。- 新增价值投注层四函数:
league_signal_tier()(联赛统计信号 A/B/C 分级,P4 实测支撑: 意甲/西甲/德甲/英超=A 档可做分歧分析;意乙/苏冠/英甲/韩K2 等 C 档统计信号为负,必须以赔率为锚)、value_bet_ev()(每方向 EV + 市场去水概率分歧度 deviation)、fractional_kelly()(分数 Kelly 仓位,默认 1/4 Kelly、单向上限 5%、负 EV 归零)、parlay_ev()(N 串 1 EV,不建议超 2 串 1)。- 文档重构(7 项评审反馈落地):快速开始(3 段可运行示例)前置到标题下;10 个版本块 移至文末版本历史并按降序重排;新增
references/FAQ.md与references/case_study.md; 文档-代码 API 对照审计通过(62 函数全核对,快速开始三段示例 smoke 验证)。- 守卫扩容 30→33:G31 分级一致性 / G32 EV 方向与零点 / G33 Kelly 公式+负EV归零+上限。
v5.8.9 升级(P4 统计基准回测 + 三项遗留清理):
- P4 naive 基线 RPS 参照系(train 22-23+23-24 → test 24-25,7,764 场 / 21 联赛, 与模型
rps_score同口径):B0 联赛频率 0.2268 / B1 联赛基线泊松 0.2272(与 B0 持平——联赛均值不含单场信息)/ B2 队伍级泊松 0.2214(真样本外)。市场去水基准 0.1285 领先纯统计约 0.09 RPS → 模型以赔率为锚的架构正确。队伍级泊松增益集中 在五大联赛(意甲 0.1895 / 英超 0.2104),低级别联赛(苏冠/英甲/意乙)反劣于 B0。- P1-8b
tie_context_factor单调性:开放度按 |总比分差| 分级——|lead|=1 悬念最大 (goal_mod 1.12 / draw −0.04)、|lead|=2 次之(1.08 / −0.02)、|lead|≥3 大局已定回归 基线(1.00 / +0.02);原版 lead=1 与 lead=5 同分待遇,领先/落后不对称修正为对称。- P2-17
CIRCUIT_MAX全局熔断接线:原常量仅在 get_status 展示从未生效——现 handle_error 中 CURRENT_STREAK ≥ CIRCUIT_MAX 时置global_circuit_open并提示 整轮转全离线;新增record_success(key)成功复位(否则熔断触发后永不复位)。- P2-16
LEAGUE_WEIGHTS注释澄清:fund 七项之和=100,odds 固定 30 另行叠加。- 回归:G1–G30 全 PASS;
--backtest逐位一致(RPS=0.1285)。回测工件:baseline_audit/backtest_naive.py+backtest_naive_report.txt/backtest_naive_full.csv。
v5.8.8 升级(P2+P3:ρ 实测拟合 + 主场份额斜率重标定):
- P2 ρ 实测校准(21 联赛):IPF 块坐标上升拟合攻防强度(α=每队总进球边际、 β=每队总失球边际、γ=主场优势因子;21/21 全收敛,边际误差 ~1e-9,γ 全落 1.09~1.58)→ 固定强度后 ρ 一维 MLE(网格 [-0.25, 0.05] + 三分细化,逐格 τ>0 约束)。
- 先验被实测打破:「进球档位 ↔ ρ 强弱」分层不成立——德甲 ρ=-0.123(原 -0.05)、 荷甲 -0.113(原 -0.05)远强于先验;英超 -0.004、西甲 +0.027、法乙 +0.024、 日乙 +0.007 趋 0 甚至转正(与低四格观测自洽:英超 0-0 观测 4.4% < 泊松 5.3%)。
- DIXON_COLES_RHO 表扩容 21→31 联赛:拟合联赛全部上表(西乙/巴乙/英乙/英甲/法乙/ 苏超/墨超/意乙/丹超/土超 10 个原吃 default 的联赛首次有专值);无逐场数据的 芬超/挪超/沙特联/美职联/英冠/德乙/葡超/K1/J1/巴甲 保留理论值;default −0.08 不变。
- 守卫 G14 语义更新:原「J1 ρ < 德甲 ρ」先验被实测打破(J1 无逐场数据),改为 实测有序对「德甲 ρ < 英超 ρ」。
- P3 主场份额斜率:0.30 → 0.35(23 联赛池化 OLS share~hwr,t=+3.14 显著同向; WLS t=+2.56 稳健;锚点 0.55@0.44 偏差 +0.008 在容忍内;公式输出最大变化 0.003)。
- 回归验证:G1–G30 全 PASS(G14/G26 新语义);
--backtest市场基准线逐位一致 (RPS=0.1285,与 ρ/斜率解耦,符合预期)。- 拟合工件:
baseline_audit/fit_rho.py(v3 块坐标上升)+fit_rho_report.txt/fit_rho_full.csv;fit_share.py+fit_share_report.txt。
v5.8.7 升级(P1-13:基线三季实测修订):
- 数据底座:2022-23 / 2023-24 / 2024-25 三赛季逐场比分 23,559 场(23 赛事全覆盖, 零空值/零重复/零冲突;欧冠/欧联杯统一正赛口径,剔除资格赛/附加赛 480 场)。
- 修订 36 项(16 联赛):判定规则
|3季池化 − 现值| > 0.15 球(avg_goals) / 0.04(比率)且 ≥2/3 季同向偏离。重点:英超 avg_goals 2.75→3.02(三季 2.85/3.28/2.93)、 西乙 2.62→2.24、法乙主胜 0.380→0.440、意乙主胜 0.450→0.395、 欧冠 over25 0.66→0.582(原值疑含资格赛口径)。- 口径变更:欧冠/欧联杯的 over25 / away / avg_goals 改为正赛口径; 未修订项保持 2025-26 单季实测口径(
league_baselines.md第九章)。- 主场份额验证:v5.8.5 常数 0.55 三季实测 0.556(区间 0.521~0.613)→ 验证通过; 公式斜率 0.30 偏保守(P3 重标定,暂不动)。
- 回归验证:G1–G30 全部 PASS;
--backtest市场基准线数字不变 (RPS=0.1285,市场基准不依赖 LEAGUE_BASELINES,符合预期)。- 修订明细:
baseline_revision_proposal.md(工作区 baseline_audit/), 逐场数据merged_matches_3seasons.csv供 P2(ρ 拟合)复用。
v5.8.6 升级(P1-12 Tier-1/Tier-2:盘口微结构):
- Tier-1 盘口移动:新增
check_line_movement()——用「初盘 → 终盘」的赔率变动 推算资金流向(赔率下降 = 资金流入 = 市场更看好该侧),对概率做小幅加权(封顶 4.5%)。- Tier-2 凯利指数:新增
kelly_index()/check_kelly_divergence()——比较模型概率与 盘口隐含概率,找出价值侧。只报告不改概率(凯利对概率误差极度敏感, 直接用于调整会把估计误差放大)。- 完全可选:新增 6 个可选参数(
open_odds_home/draw/away、live_odds_home/draw/away)。 不传时输出与 v5.8.5 逐位一致(守卫 G27 锁定),不需要任何新数据源。- 优先级设计:盘口移动置于 checklist 风控之后且幅度受限 —— 风控(理性压制过热热门)优先于跟随市场,避免资金流把风控修正拉回去。
- 新增输出字段
line_movement/kelly_divergence。- 回归守卫扩充到 G1–G30(新增 G27 缺省无副作用 / G28 主队降赔→主胜升 / G29 客队降赔→客胜升 / G30 概率守恒)。
⚠️ 数据来源说明(Tier-3 已放弃):必发(Betfair)指数在中国大陆无法访问、 需付费 API 与海外身份,且其博彩交易所属性与国内固定赔率竞彩是两套独立市场, 资金流无法映射。故 Tier-3 不实现。Tier-1 数据可人工从竞彩官网 / 500.com / 澳客网抄录初盘与终盘两组赔率。
v5.8.5 升级(P1-11 + P1-9:λ 拆分结构重写):
- P1-11
expected_goals形态敏感度:系数 0.030 → 0.070(form 0↔10 攻击力差 ±35%)。- P1-9
concede维度接入:home_home_concede_avg/away_away_concede_avg此前在签名里存在 但从未参与计算(改它们输出 0 变化);现正式接入,作为「防守漏勺系数」抬高对手 λ。- 核心结构重写:旧版把总进球当成"谁强谁弱"的函数 → 出现符号反转 (主强客弱 2.362 < 主弱客强 2.563)。新结构拆成两个正交因子: · 总进球 由「开放性因子」决定 = 双方攻击力的几何平均 × (1 + 0.5·同向度) × 漏勺均值 → 对攻 3.68 / 均势 2.42 / 对守 1.50(2.18 球跨度,此前仅 0.06 球) → form 9.5/1.0 与 1.0/9.5 总进球完全相等(差 0.000) · λ 拆分比例 由「攻防实力比 45% + 主场基准 55%」决定
- ⚠️ 语义陷阱修正:
baseline["home"]是主胜率(~0.40-0.49),不是主场进球份额(~0.55)。 曾误用主胜率拆 λ,导致主场优势被反转成客场优势。现固定用 HGA 常数 0.55 + 主胜率微调。- 新增
calc_lambda_split():直接返回 (λ_H, λ_A) 而非总进球,供比分矩阵使用。 主函数不再用固定 0.55/0.45 硬拆(那等于把攻防分离的信息丢掉)。- 回归守卫扩充到 G1–G26(新增 G21 形态对称 / G22 λ方向 / G23 concede生效 / G24 对攻>均势>对守 / G25 主场优势 / G26 主胜率污染守卫)。
v5.8.4 升级(P1-7 校准评估:让"精度"可验证):
- 新增评分三件套:
rps_score()(行业标准,0 完美/1 最差)、brier_score()、log_loss()。- 新增回测口径:
backtest_odds_baseline()对内置 10 场已完赛样本跑市场基准线, 输出 RPS / Brier / LogLoss / 命中率 + 校准曲线(按最高概率分桶,暴露系统性高估/低估)。- 新增去水工具:
implied_probs_from_odds()赔率→概率(作为模型必须不劣于的对照线)。- 新增矩阵自评:
expected_rps_from_matrix()无需模拟,直接算 Dixon-Coles 分布下的期望 RPS。- 新增 CLI:
--backtest(跑校准报告)、--score <p_h,d,a> <比分>(单场打分)。- 样本口径(2026-09 快照):市场基准 RPS=0.1285 / Brier=0.4672 / LogLoss=0.7944 / 命中率 60%。 模型只有在同口径下 RPS 不显著高于此值,才算「未劣于市场」。
math提升为顶层导入(原先局部导入导致新函数NameError)。- 回归守卫扩充到 G1–G20。
v5.8.3 升级(Dixon-Coles 比分联合分布):
- P1-6 比分矩阵:新增
dixon_coles_tau()/calc_score_matrix()/DIXON_COLES_RHO(ρ 按联赛进球档标定,−0.05 ~ −0.11)。- P1-7 下游重构:让球盘 / 大小球 / BTTS / 半全场 / 精确比分全部由比分矩阵边缘化推导, 废弃
calc_handicap_prob查表(其abs()会抹掉符号,-1与+1返回相同值 —— 语义错误)。- 主函数新增输出:
score_matrix/totals_2_5/btts/top_scorelines/htft。- 新增矩阵-赔率交叉校验:两者主胜偏差 > 12pp 时自动告警。
- 回归守卫扩充到 G1–G14。
v5.8.2 修复(针对 v5.8.1 自身缺陷):
- P0-4 方向反转:
opposite_side曾被设为「冷门方」,导致极端赔率陷阱砍冷门、放热门(与风控语义完全相反)。现改为降权热门方本身。- P0-4b 文档可达性:
SKILL.md/quick_reference.md的示例全部补上checklist_result=chk回传,修复不再「不可发现」。- P0-4c 检查3接线:
check_early_season_league_bias补modifier/opposite_side,赛季初期修正首次真正进入概率链路。- P0-4d 平局实力差修正:
strength_boost分母 0.15 → 0.40(旧值使该机制对 >95% 真实比赛恒为 0)。- P0-3b 星级分布:阈值改为相对优势
edge = max(p) − 1/3(0.15 / 0.10),修掉「真实盘口 ⭐⭐⭐ 命中率 0%」。- P2-14 Windows 入口:
sys.stdout包装加守卫,恢复--test/--json。
v5.8.1 升级点:核心概率引擎修复(诊断报告驱动)
基于桌面诊断报告对 v5.8.0 的 12 项问题逐项核实(全部复现),修复 P0/P1 关键缺陷:
- P0-1 平局概率:不再硬编码
baseline*0.5,改为 50% 联赛基线 + 50% 市场隐含平局 + 实力差修正(响应 odds_draw)。- P0-2 赔率→概率映射:改用逆赔率归一化(去水),市场权重 30%→55%,主客胜区分度从 ~9pp 提升到 ~16pp。
- P0-3 星级系统:阈值从固定 gap 改为
max(p)绝对概率(0.55/0.45),三档 ⭐/⭐⭐/⭐⭐⭐ 可达。- P0-4 三清单接入主函数:
run_prematch_checklist()的final_odds_adjustment与star_modifier现在数值生效(降权 + 降级)。 ⚠️ 必须在调用时传checklist_result=chk才生效(见第九节例 2)。- P1-5 权重归一化:仅对 7 项基本面键归一化(排除
odds键),权重和=100。- P1-8a
get_baseline未命中抛LeagueNotFoundError(不再静默回退英超)。- P1-8c
rest_days_factor(3)对齐文档为 -0.02。- P1-8d / P1-9
home_momentum/away_momentum与expected_goals现在响应基本面(主客分别作用于各自攻击端,不再对称抵消)。
v5.8.0 升级点:三项覆盖度补强(联赛扩充 + 两回合制/中立场 + 天气场地量化)
- 联赛基线 19 → 35 个:新增荷甲/丹超/墨超/苏超/比甲/土超/西乙/英甲/英乙/法乙/意乙/苏冠/韩K2/日乙/巴乙/阿甲(2025-26 全季实测,多源交叉)。
- 两回合制 / 中立场支持:
tie_context_factor(首回合降进球;次回合按总比分差调整)+neutral_venue_factor(中立场主场优势减半)。- 天气与场地量化:
weather_venue_factor——雨雪/高温/大风下调总进球,人工草皮/高原上调,高原放大主队体能优势。- 版本沿革:延续 v5.7.0(能力边界一页化 + 覆盖范围矩阵 + 特殊场景清单)。
Scan to join WeChat group