Время на прочтение
Для начала определим для кого эта статья? Моя цель заинтересовать не только обыкновенных зрителей, но и тех, кто уже занимается футбольной аналитикой. В статье я постараюсь показать интересные исследования об Xg.
Многие из тех, кто смотрит футбол и читает новости когда-нибудь видел метрику xg. Что она вообще означает? Простыми словами Xg это количество ожидаемых голов. Т.е. каждый нанесённый удар по воротам имеет вероятность конвертироваться в забитый мяч, но с каждой позиции эта вероятность разная (если углубляться, то станет очевидным, что xg зависит от нескольких параметров, а не от одной позиции). К примеру, самая высокая вероятность забить мяч при исполнении пенальти. Чаще всего с пенальти дают 0.79 xg. Необходимо учитывать, что единой формулы расчёта xg нет, каждый провайдер рассчитывает её по-своему. Так например, для написания этой статьи я использовал данные с сайта https://understat.com/, но, если мы посмотрим другие источники, цифры будут отличаться.
Моя задача узнать, насколько точно Xg предсказывает количество голов в матче. Исследование будем проводить для АПЛ сезона 2022/2023. В данном исследовании мы ограничимся простыми методами анализа. Я составил таблицу из 380 матчей АПЛ. Пример таблицы с первыми 10 матчами АПЛ.
Таблица матчей АПЛ
| Order | Week | Team1 | Xg1 | Goal1 | Goal2 | Xg2 | Team2 |
|-------|------|----------|-----|-------|-------|-----|-------|
| 1 | 1 | Arsenal | 2.3 | 1 | 0 | 0.9 | Chelsea |
| 2 | 1 | Liverpool| 2.5 | 2 | 1 | 1.2 | Man City |
| 3 | 2 | Man Utd | 1.8 | 1 | 0 | 0.7 | Spurs |
| | | | | | | | |
| | | | | | | | |
- Order – отвечает в таблице за количество матчей от 1 до 380
- Week – в каком туре был сыгран матч, в Англии туры называют неделями.
- Team1 – команда хозяин
- Xg1 – показатель xg домашней команды
- Goal1 – сколько голов забила домашняя команда
- Goal2 – сколько голов забила гостевая команда
- Xg2 – показатель xg гостевой команды
- Team2 – команда гость
Изначальная таблица построена, далее будем считать разницу между забитыми мячами и xg у каждой из команд (diff1 и diff2), а потом напишем yes если разница меньше или равна 0.5, и, если разница строго больше 0.5 пишем no (Res1 и Res2).
Таблица разницы между забитыми голами и Xg
| Order | Week | Team1 | Xg1 | Goal1 | Goal2 | Xg2 | Team2 | diff1 | diff2 | Res1 | Res2 |
|-------|------|----------|-----|-------|-------|-----|-------|-------|-------|------|------|
| 1 | 1 | Arsenal | 2.3 | 1 | 0 | 0.9 | Chelsea | 1.3 | 0.9 | yes | no |
| 2 | 1 | Liverpool| 2.5 | 2 | 1 | 1.2 | Man City | 0.5 | 0.8 | yes | no |
| 3 | 2 | Man Utd | 1.8 | 1 | 0 | 0.7 | Spurs | 0.8 | 0.7 | no | no |
| | | | | | | | | | | | |
| | | | | | | | | | | | |
Далее проведём два анализа строгий и нестрогий. В строгом анализе будем выводить yes если в Res1 и Res2 указано yes, в нестрогом анализе если хотя бы в одном из столбцов имеется значение yes.
Строгий анализ
| Order | Week | Team1 | Team2 | Prediction |
|-------|------|----------|-------|------------|
| 1 | 1 | Arsenal | Chelsea | no |
| 2 | 1 | Liverpool| Man City | no |
| 3 | 2 | Man Utd | Spurs | no |
Всего успешно предсказанных матчей получается 65, неуспешных соответственно 315.
Нестрогий анализ
| Order | Week | Team1 | Team2 | Prediction |
|-------|------|----------|-------|------------|
| 1 | 1 | Arsenal | Chelsea | yes |
| 2 | 1 | Liverpool| Man City | yes |
| 3 | 2 | Man Utd | Spurs | no |
Теперь рассмотрим нестрогий анализ.
Анализ точности прогнозов Xg в футбольных матчах
Введение
Проведен анализ успешно и неуспешно предсказанных матчей, в сумме 241 успешный и 139 неуспешных.
Суммарные данные
- Суммарный Xg: 1136.54
- Суммарное количество забитых голов: 1084
- Разница: 52.54
Оценка средних значений
Общие данные
- Средний Xg: 1,48
- Среднее количество голов: 1,43
Для команд хозяев
- Средний Xg: 1,67
- Среднее количество голов: 1,63
Для команд гостей
- Средний Xg: 1,3
- Среднее количество голов: 1,2
Оценка точности показателей Xg
Проведена оценка точности показателей Xg в зависимости от количества забитых мячей:
- Матчей с 4 забитыми мячами: 28, Xg ≥ 3,5 – 4 матча, точность ~ 14,3%
- Матчей с 3 забитыми мячами: 43, Xg ≥ 2,5 – 19 матчей, точность ~ 44,2%
- Матчей с 2 забитыми мячами: 90, Xg ≥ 1,5 – 53 матча, точность ~ 58,9%
- Матчей с 1 забитым мячом: 124, Xg ≥ 0,5 – 112 матчей, точность ~ 90,3%
Заключение
Проведен анализ точности прогнозов Xg в футбольных матчах. Интересные данные, полученные в результате анализа, позволяют сделать вывод о более чем удовлетворительной точности данной метрики.
Анализ XG в матчах по числу забитых мячей
Гости
- Матчей с 4 забитыми мячами – 15, xg ≥ 3,5 – 2 матча, точность ~ 13,3%
- Матчей с 3 забитыми мячами – 35, xg ≥ 2,5 – 7 матчей, точность ~ 20%
- Матчей с 2 забитыми мячами – 76, xg ≥ 1,5 – 44 матча, точность ~ 57,9%
- Матчей с 1 забитым мячом – 125, xg ≥ 0,5 – 112 матчей, точность ~ 89,6%
library(ggplot2)
plot(Table_XG$week, Table_XG$Goal1, type = o, pch = 16,
main = Xg in match,
xlab = week,
ylab = xg and goal,
col = green3,
lwd = 2)
xlines = seq(min(Table_XG$week), max(Table_XG$week), 1)
ylines = seq(min(Table_XG$Goal1), max(Table_XG$Goal1), 1)
abline(h = ylines, v = xlines, col = lightgray)
lines(Table_XG$week, Table_XG$Xg1, type = o, pch = 19, col = red, lwd = 2)
legend(topleft,
legend = c(Goals, Xg),
col = c(green3, red),
lty = 7,
pch = 19)
Хозяева
library(ggplot2)
plot(Table_XG$week, Table_XG$Goal2, type = o, pch = 16,
main = Xg in match,
xlab = week,
ylab = xg and goal,
col = green3,
lwd = 2)
xlines = seq(min(Table_XG$week), max(Table_XG$week), 1)
ylines = seq(min(Table_XG$Goal2), max(Table_XG$Goal2), 1)
abline(h = ylines, v = xlines, col = lightgray)
lines(Table_XG$week, Table_XG$Xg2, type = o, pch = 19, col = red, lwd = 2)
legend(topleft,
legend = c(Goals, Xg),
col = c(green3, red),
lty = 7,
pch = 19)
Анализ точности xG в прогнозировании результатов матчей
Исходя из проведённого анализа можно сделать вывод, что xG показывает высокую точность предсказания результатов матчей на дистанции, а не в одном отдельном взятом матче.
При строгом анализе предсказано около 17,1% матчей, а при нестрогом – около 63,4% матчей. Хотя это хороший показатель, его можно считать недостаточным, учитывая, что матч считается успешным, если хотя бы у одной из команд предсказано значение.
Также стоит отметить недостаток xG – потерю точности при забитых мячах больше 2. В целом, xG является хорошей и полезной метрикой, но не является единственной главной.
Значение для аналитиков и зрителей
Для опытных аналитиков статья может представлять интересную информацию, а для обычных зрителей это может стать мотивацией для изучения футбольной статистики более глубоко.
Редкая ситуация в топ-3 РПЛ без московских команд
Статистика после 9-го тура
После 9 туров РПЛ сложилась интересная ситуация – в топ-3 отсутствует ни одна московская команда! Спартак, Динамо, Локомотив и ЦСКА вынуждены смотреть на соперников из Краснодара, Самары и Санкт-Петербурга.
Архивные данные
В 2019/2020 году аналогичная ситуация уже наблюдалась. Шедший к своему второму золоту Зенит находился в топ-3 после старта с 3 побед и ничьей с Краснодаром. Петербургская команда имела 20 очков и наименьшее количество пропущенных мячей в этот период.
Тем не менее «Зенит» не был лидером! Как и сейчас, на первое место залез «Краснодар». Тогда команда успешно стартовала под руководством Мурада Мусаева. Правда, в 1-м туре «быки» уступили «Ахмату» (0:1), но потом выдали серию успешных результатов: победы над «Уфой» (3:2) и «Сочи» (3:0), ничья с «Зенитом» (1:1) в Санкт-Петербурге. Вслед за этим «Краснодар» выдал новую удачную серию в матчах с «Рубином» (1:0), «Тамбовом» (2:0), «Уралом» (4:2) и «Крыльями Советов» (4:2), а разбавила её ничья с «Локомотивом» (1:1). Южане также набрали 20 очков, однако опережали сине-бело-голубых по дополнительным показателям. Команда Мусаева лидировала в РПЛ по количеству забитых мячей.
Разница заключалась только в том, что вместо «Крыльев Советов» в тройку сильнейших залез «Ростов». На старте чемпионата команда Валерия Карпина чередовала победы с ничьими – 2:1 с «Оренбургом», 2:2 со «Спартаком», 3:2 с «Арсеналом», 2:2 с «Уралом». Затем ростовчане выиграли у «Крыльев Советов» (2:1) и проиграли на выезде «Уфе» (0:2). Но после этого одержали три подряд победы с одинаковым счётом 2:1 над «Рубином», «Локомотивом» и «Ахматом». «Ростов» по набранным очкам делил первое место с «Краснодаром» и «Зенитом».
В общем, было бы неправильно утверждать, что только в нынешнем сезоне есть настоящая интрига в РПЛ после фактически трети дистанции. Таблица сезона-2019/2020 доказывает: карусель борьбы и тогда завертелась как надо.
Топ-6 команд после 9-го тура сезона-2019/2020:
ЦСКА и «Локомотив» в том сезоне держались рядом с лидерами. Армейцы в первых девяти турах потерпели два поражения — от «Крыльев Советов» (0:2) и «Спартака» (1:2) в дерби – отставали всего на одно очко. Сейчас же ЦСКА имеет «-4» даже от идущего третьим «Зенита», а «Краснодар» улетел от команды Владимира Федотова уже на восемь баллов.
Железнодорожники тоже проиграли в сезоне-2019/2020 дважды в девяти турах – ЦСКА (0:1) и «Ростову» (1:2). Три очка отставания от лидеров не казались форой, которую невозможно отыграть. «Локомотив» четырёхлетней давности набрал больше сегодняшнего.
А вот у «Спартака» было три поражения при четырёх победах. Причём два из них в 8-9-м турах. В первых семи матчах красно-белые уступили только «Тамбову» (0:2), а потом были биты «Зенитом» (0:1) и «Уралом» (1:2). «Спартак» отпустил конкурентов на шесть очков. В нынешнем сезоне ситуация получше.
Как команда Абаскаля победила «Динамо» в 9-м туре РПЛ:
На фоне неудач «Спартака» СМИ, как обычно, поднимали тему увольнения тренера красно-белых. Тогда им был Олег Кононов. Он продержался ещё два тура, а в тот момент не собирался подавать в отставку.
«Что отвечу людям, требующим отставки тренера? Каждый проигрыш в «Спартаке» – это одно и то же. Мой ответ будет победами, вот и всё».
«Динамо» же и вовсе находилось за пределами восьмёрки, набрав лишь девять очков. К тому моменту бело-голубые потерпели поражения от «Рубина» (0:1), «Зенита» (0:2) и «Локомотива» (0:1). У Марцела Лички старт гораздо успешнее.
Впрочем, ещё никогда такого не было, чтобы в тройку призёров по итогам чемпионата не попадал хотя бы один московский клуб. Вот и до конца сезона-2019/2020 тройка не сохранилась в этом виде. Когда участники РПЛ уходили на зимний перерыв, «Зенит» уже лидировал с большим отрывом, а «Краснодар» с «Ростовом» ещё цеплялись за второе-третье места. Ближе к концу чемпионата южные команды стали уступать свои позиции «Локомотиву» и ЦСКА. Тем не менее «Краснодар» дотянулся до бронзы, отстав на 20 очков от «Зенита» и на пять — от «Локомотива». Ростовчане же финишировали пятыми.
Сезон-2019/2020 напоминает нам о том, что в таблице всё ещё может много раз поменяться.