Goalence

方法论

Goalence 上的每个数字都可复现。本页记录了产生网站上每个预测和球员影响数字的模型、阈值和数据过滤器。

Goalence 运行单模型流水线:一个 Pi-Ratings 引擎并行产生比赛结果、大/小球和双方进球预测,每个输出都可追溯到相同的 lambda 值。我们不为不同市场运行单独的模型,不在看到结果后调整预测,也不隐藏我们预测错误的比赛。前瞻跟踪结果每天发布在 /app/stats 上。

1. Pi-Ratings 比赛模型

每支球队携带四个评分:主场进攻、主场防守、客场进攻、客场防守。每场比赛后我们从进球差和当前评分差距中迭代更新它们。模型大约在 8 个联赛周收敛;我们在每个赛季的前 2 周冷启动,并结转上赛季数据。一场比赛的 lambda(预期进球数)从主场进攻 vs 客场防守和客场进攻 vs 主场防守对中得出,然后通过泊松分布转换为比赛结果、大/小球和双方进球概率。单一连贯模型 = 1X2 选择和大/小球选择之间没有矛盾。

2. 级别阈值

每个预测按置信度分为三个级别之一:精英 ≥ 60%、安全 ≥ 45%、普通 < 45%。级别在模型中权重不同 — 它们存在是为了帮助用户衡量预期准确性。我们的前瞻跟踪页面按级别报告命中率,因此置信度与现实之间的关系可被公开审计。

3. 严格在场进球指标 (v3)

传统的胜/平/负列将任何出场的球员(即使只 1 分钟)算作结果的一部分。我们的在场指标隔离球员实际在场的分钟数,仅计算这些精确分钟内打入/丢入的进球。在 3-0 获胜中踢了 30 分钟(所有进球都在下半场)的球员记录 0 goals_for_on_pitch — 因为进球发生在他下场之后。v3 流水线以分钟粒度运行,使用每分钟状态数组(领先/平手/落后),产生驱动球员影响表格的领先分钟率。

4. 复合 (player_id, team_id) 键

当球员在赛季中期转会时,他们在我们的球员影响数据集中显示为两个单独的行 — 每个 (player_id, team_id) 对一行。他们转会前的分钟数仍归属旧俱乐部,转会后的分钟数计入新俱乐部。这是诚实比较球员在两家俱乐部影响的唯一方法,没有重复计算或任意归属。每行 MIN_MATCHES = 5,因此短暂逗留的行被过滤掉。

5. 覆盖范围

26 项联赛:5 个欧洲顶级联赛(英超、西甲、意甲、德甲、法甲)、5 个次级联赛(英冠、西乙、意乙、德乙、法乙)、荷甲、葡超、土超、苏超、比甲、沙特职业联赛、MLS、巴西甲、阿根廷职业联赛,加上洲际杯赛(欧冠、欧联、欧会杯)和锦标赛窗口(2026 世界杯、2024 欧洲杯历史、美洲杯、非洲杯、亚洲杯、热身赛)。国家队赛事过滤掉 U17/U18/U19/U20/U21/U23/女队/奥运队伍;仅计算成年男队赛事。

6. 数据新鲜度

每日构建在 UTC 06:00 通过 GitHub Actions 运行:从 API-Football 获取新赛事,对已完成结果运行 Pi-Ratings,计算即将到来窗口的预测(联赛 30 天、世界杯预选赛 + 欧国联 60 天、世界杯 2026 / 欧洲杯 2024 / 美洲杯等锦标赛中心 90 天),重新生成静态页面,并部署到 Cloudflare Pages。前瞻跟踪账本附加结果 — 我们从不在事后默默覆盖预测。

7. 我们不做的事

我们不做回测声明(仅前瞻跟踪)。我们不接受任何预测级别的付费投放。我们不运行第三方商业运营商的推荐链接。我们不向预测即产品行业推销我们的内容——材料仅供分析兴趣。我们不在请求时使用 LLM 生成比赛评论;每个比赛页面上的编辑句子是基于真实模型输出的模板。我们不隐藏失败的星期——每个已发布的预测在结果已知后仍保留在其比赛页面上。

8. 开放标准与引用

网站数据采用 JSON/JSON-LD 格式,带有完整的 schema.org 标记(SportsEvent、NewsArticle、BreadcrumbList、FAQPage、Dataset)。hreflang 替代品在 5 种语言(en/tr/ar/es/zh)中链接每个页面。我们的 /llms.txt 为 AI 代理声明规范内容索引。严格在场进球指标用简单英语描述,因此该算法可被任何能访问逐分钟换人 + 进球流的人复现。