На главную

NextGoal: прогноз голов в live

Модель v3 · замерено на тысячах матчей · виджет — на каждой странице матча

Для цитирования. NextGoal v3 (Rolgi): два конкурирующих неоднородных пуассоновских процесса с per-league профилями 557 лиг. Сторона следующего гола — 49%, средняя ошибка минуты — 13,3 мин, флаг «голов больше не будет» — 68%. Темп матча зафиксирован (pace = 1.0): его учёт ронял точность флага.
49%сторона следующего гола
13,3 минMAE минуты (mean; медиана хуже — 14,3)
68%флаг no-more: голов не будет
557лиг с минутными профилями

Идея за пять минут

Гол — редкое событие, поэтому минута следующего гола моделируется двумя конкурирующими пуассоновскими процессами: хозяева «тикают» со своей интенсивностью lambda_home(t), гости — с lambda_away(t). Чей процесс сработает раньше, та команда и забьёт; если ни один не сработает до 90-й минуты — голов больше не будет. Базовая интенсивность — это сила атаки команды (poisson-lambda на 90 минут), а дальше она умножается на четыре поправки, каждая из которых измерена на данных, а не придумана.

Первая поправка — per-league профиль минуты: в каждой из 557 лиг голы распределены по минутам по-своему (где-то давят в концовке, где-то — в дебюте). Вторая — счёт: проигрывающая команда вопреки интуиции атакует слабее (x0.60 — эффект силы: ведёт обычно тот, кто сильнее), ведущая сушит игру (x0.70). Третья — удаления: большинство даёт x1.10, меньшинство — x0.41 (замер на 3 000 матчей с красными). Четвёртая — угроза составов: суммарный threat11 игроков на поле корректирует интенсивность в коридоре [0.85, 1.15].

Поправки одним взглядом

ФакторЗначениеОткуда
Профиль лиги557 лиг, поминутнодамп goal-timing, окно 2 года
Проигрываетx0.60замер: ведёт сильнейший
Ведёт в счётеx0.70замер: сушка игры
Большинство / меньшинствоx1.10 / x0.413 000 матчей с удалениями
Угроза составов[0.85, 1.15]g90 → threat11, 24 тыс. игроков
Темп матча (pace)1.0 (заморожен)учёт ронял no-more — отключён

Что показывает виджет

На странице матча NextGoal-карточка показывает вероятности следующего гола (хозяева / никто / гости), кривую вероятности по минутам, ожидаемую минуту (mean — главную, медиану и IQR — для понимания разброса), вклад угрозы и бомбардиров, а также удаления. В скауте тот же движок работает в инлайн-раскрытии события: прогноз first-гола считается с t=0, прогноз last-гола — от последнего забитого, рядом — сверка actual_after: что случилось на самом деле после этой минуты.

Как читать: «Хозяева 45% / Никто 25% / Гости 30%, mean 67-я минута» означает, что процесс хозяев интенсивнее, но каждый четвёртый такой матч заканчивается без голов. IQR 55–78 подсказывает разброс: ставить на конкретную минуту бессмысленно, MAE 13 минут — это норма модели, а не баг.

Честные ограничения

Медиана минуты хуже среднего (MAE 14,3 против 13,3) — поэтому виджет ставит mean главным числом. Темп матча (удары, владения) соблазнительно учитывать, но замеры показали: pace ломает флаг no-more, так что он заморожен на 1.0. Отсутствие бомбардира на поле почти не влияет (x1.04 — в пределах шума, не внедрено). VAR-отмены и дубли голов чистятся через valid-goals: гол считается только после сверки со счётом, иначе минуты врут.

Эндпоинты для разработчиков: /api/db/games/:id/next-goal (голы, красные, threat, медиана/IQR, кривая) и /api/scout/events/:id/goal-forecast (first + last + actual_after). Методология ансамбля исходов — в v5.3, точность исходов — в /accuracy/, термины — в глоссарии. English: NextGoal (EN).

Вопросы и ответы

Что предсказывает NextGoal? Чья сторона забьёт следующей, когда примерно (mean/медиана/IQR) и будет ли вообще гол.

Почему mean, а не медиана? Mean точнее: MAE 13,3 против 14,3 у медианы на тех же матчах.

Учитываются ли красные карточки? Да: большинство x1.10, меньшинство x0.41.