Может ли машинное обучение предсказать результаты чемпионата мира по футболу?
Создание системы прогнозирования футбольных матчей на основе машинного обучения в R.
Делиться
Введение
В преддверии старта чемпионата мира по футболу FIFA, который состоится в четверг, 11 июня 2026 года, на стадионе в Мехико, было бы интересно создать максимально эффективную модель машинного обучения для прогнозирования результатов матчей. Для этого я объединил несколько баз данных — 49 000 матчей — с данными о рейтингах Эло, результатах матчей и местах проведения кубков. От FIFA до Кубка Балтии, с матчами с 1872 по 2026 год, мы будем использовать вероятностный подход к этому виду спорта.
Мы сравним производительность нескольких моделей машинного обучения, включая
- многомерная регрессия
- многомерная гребневая/эластичная сетевая модель
- LightGBM
Мы также будем работать над пониманием сильных и слабых сторон наших моделей, чтобы создать хорошо откалиброванную модель, которая будет предсказывать победы домашних команд в 86% случаев. Оценивая производительность модели, калибровку и сложность, мы найдем наилучшую модель для наших данных.
Футбол в цифрах

Многие говорят, что футбол усыпляет. Как футбольный болельщик, я с этим не согласен, но, справедливости ради, это не без оснований. Большинство матчей заканчиваются с менее чем 5 голами, а всё, что больше 20, — это аномалия, если не невозможность. В то же время, в матчах НБА нередко бывает, что один игрок набирает более 50 очков. Но, несмотря на такой темп, пабы от Англии до ботеко в Рио остаются полными.
Критики не понимают, что низкий счет может сделать игру интереснее, поскольку это затрудняет командам получение существенного преимущества, держа болельщиков в напряжении до самого конца. К сожалению, это также означает, что матчи заканчиваются ничьей почти в 22% случаев, что тоже может раздражать. Тем не менее, этот вид спорта остается таким же популярным, как и прежде.

Тот факт, что так много матчей заканчивается ничьей, на самом деле становится проблемой моделирования позже, но прежде чем мы перейдем к этому, давайте рассмотрим, как мы собирали эти данные.
Объединение данных
Зачастую лучший способ улучшить модель — это просто получить больше данных. Мы будем работать с файлами international_results.csv , international_team_ratings.csv и international_goalscorers.csv
Нам нужно сопоставить international_results.csv и international_team_ratings.csv , чтобы использовать рейтинги Эло. Это может быть просто, но, как вы, возможно, догадались, названия команд не совпадают идеально, поэтому нам нужно использовать текстовую обработку, если мы не хотим проверять 336 команд по отдельности. Также нам нужно быть предельно осторожными с тем, когда обновлялся рейтинг Эло. Мы могли бы использовать рейтинг Эло в тот же день, когда проходит матч, но это стало бы источником утечки данных, поскольку рейтинги Эло обновляются только после матча. Использование этого в качестве функции заманчиво, но проблематично.
Мы должны использовать самый последний рейтинг Эло, и в качестве дополнительной инженерной функции мы отслеживаем время, прошедшее с момента последнего обновления рейтинга Эло, предполагая, что более ранние рейтинги будут более информативными, чем старые. Код для объединения этих таблиц и всего проекта доступен в Приложении.

international_results.csv
| Тип поля | Примеры |
|---|---|
| Идентификатор соответствия | source_match_id , date , season , competition |
| Команды | home_team , away_team |
| Окончательный результат | home_score , away_score , match_result , result_class |
| Контекст | neutral , tournament , city , country |
international_team_ratings.csv
| Особенность | Значение |
|---|---|
home_rating_pre_match |
Домашняя команда Эло перед началом матча |
away_rating_pre_match |
Гостевая команда Эло перед началом матча |
rating_diff |
Домашний Эло минус выездной Эло |
rating_age_days_home |
Насколько устарел рейтинг домашней команды? |
rating_age_days_away |
Насколько устарел рейтинг гостевой команды? |
international_goalscorers.csv
| Идея для функционала | Значение |
|---|---|
| Уникальные бомбардиры в последних матчах | Зависит ли успех команды от одного бомбардира или от многих? |
| Голы лучшего бомбардира | Концентрация баллов |
| Последние результаты | Атакующий потенциал перед этим матчем |

Поскольку мы проводим прогнозирование временного ряда, нам необходимо убедиться, что наше разделение учитывает временной порядок. Мы оценим нашу модель на всех играх, начиная с 2018 года, что составит примерно 8000 матчей.
| Эффективное разделение | Логика приблизительной даты |
|---|---|
| модель поезда | более ранняя часть данных до 2018 года |
| валидация | последние ~20% от общего числа участников тренировок до 2018 года |
| тест | С 2018 года и далее |
Технические характеристики

Мы хотим перейти от базовых прогнозов на уровне матча к более подробным предматчевым анализам, учитывающим: силу команды, качество атаки и защиты, влияние домашней/гостевой игры, баланс матчей, силу вратарей, исторические тенденции результативности.
1. Функции моделирования с помощью чертежей
Наиболее очевидным недостатком нашей базовой модели многомерной логистической регрессии была ее слабая способность классифицировать ничьи. Хотя модель могла рассчитать вероятность ничьи, поскольку мы определили целевую переменную как match_result ∈ {H, D, A} (Победа хозяев, Ничья, Победа гостей), ничья никогда не являлась наиболее вероятным исходом. Это видно по отсутствующему столбцу для ничьих в матрице ошибок.

Низкая вероятность ничьей не характерна только для одного семейства моделей. Если рассматривать ошибки с высокой степенью уверенности — случаи, когда предсказанный моделью класс был неверным, а максимальная предсказанная вероятность составляла не менее 0,60, — то во всех моделях наблюдается одна и та же закономерность: они систематически чрезмерно уверены в победе хозяев. Многим матчам, которые фактически закончились ничьей, был присвоен уверенный прогноз победы хозяев, что говорит о том, что модели лучше отражают направление силы команд, чем неопределенность на уровне матча или вероятность ничьей.

Чтобы устранить эту «слепоту» к варианту жеребьевки, мы можем разработать такие характеристики, как abs_rating_diff, home_draw_rate_last_5, form_draw_rate_mean_last_5, а также бинарные контекстные характеристики, такие как neutral, flag_is_world_cup и flag_is_friendly, указывающие, проходит ли матч на нейтральной территории или на чемпионате мира.
| Группа функций | Значение | Примеры |
|---|---|---|
| Близость Эло | Показывает, насколько равны силы команд. Небольшие различия в рейтинге особенно важны для вероятности ничьей. | abs_rating_diff |
| Тенденция к ничьим в последнее время | Измеряет, как часто предыдущие матчи каждой команды заканчивались ничьей. | home_draw_rate_last_5 , away_draw_rate_last_10 |
| Совокупная тенденция к ничьей | Показывает, были ли у обеих команд в последнее время случаи ничьих. | form_draw_rate_mean_last_5 , form_draw_rate_mean_last_10 |
| Соответствие контексту | Факторы, связанные с турниром и местом его проведения, которые могут повлиять на частоту жеребьевки. | neutral , flag_is_world_cup , flag_is_friendly |

Благодаря этим функциям наша модель теперь лучше различает победы и ничьи домашних/гостевых команд, о чем свидетельствует увеличение числа истинно положительных прогнозов ничьей на 3,3%. Это все еще низкий показатель, учитывая, что около 20% матчей заканчиваются ничьей. Таким образом, наши функции помогают, но не сильно. Это говорит о том, что, возможно, стоит создать модель, специально предназначенную для моделирования ничьих, с целевой переменной match_result ∈ {D, ¬D}, но пока нам нужно разработать больше функций.
¬D означает, что не D, то есть наша целевая переменная — это матч, завершившийся ничьей (1), или матч, не завершившийся ничьей (0).

2. Функции Elo
Средний рейтинг команды по системе Эло немного выше 1500; это близко к показателям Саудовской Аравии, Исландии и Гаити в FIFA 2026. При построении графика распределения побед, ничьих и побед гостей видно, что по мере уменьшения разницы вероятность ничьих возрастает. Распределения также немного смещены влево, что указывает на небольшое преимущество домашней команды, как и ожидалось.


Мы бы упустили очки LogLoss, если бы полагались исключительно на предматчевый рейтинг Эло как на единственный критерий оценки. Чтобы извлечь максимальную пользу из данных, мы также
| Особенность | Значение |
|---|---|
home_rating_pre_match |
Рейтинг Эло домашней команды перед началом матча. |
away_rating_pre_match |
Рейтинг команды гостей по системе Эло перед началом матча. |
rating_diff |
Разница между коэффициентами Эло домашней команды и гостевой команды перед началом матча. Положительные значения благоприятствуют домашней команде. |
rating_age_days_home |
Количество дней с момента последнего обновления рейтинга Эло домашней команды. |
rating_age_days_away |
Количество дней с момента последнего обновления рейтинга Эло гостевой команды. |

3. Функции скользящего окна с данными о прошлых результатах.
Критик может возразить, что использование показателей прошлых лет и рейтинга Elo — не лучшая идея, поскольку оба показателя моделируют силу команды, что добавит в модель избыточные или сильно коррелированные характеристики.
Анализ прошлых результатов действительно отражает силу команды, но он предназначен специально для моделирования командного импульса. Победные серии — это вполне реальное явление в спорте. Фактически, в настоящее время суперкомпьютеры отдают предпочтение Испании. Одна из причин, по которой их прогнозируют на первом месте, — это их историческая беспроигрышная серия из 31 матча перед FIFA 2026.
| Группа функций | Значение | Примеры |
|---|---|---|
| Последние очки за матч | Среднее количество очков, набранных каждой командой за предыдущие 5 или 10 матчей. | home_points_per_match_last_5 , away_points_per_match_last_10 |
| Разница забитых и пропущенных мячей за последнее время | Среднее количество забитых голов за вычетом пропущенных голов в предыдущих матчах. | home_goal_diff_per_match_last_5 , away_goal_diff_per_match_last_10 |
| Последний процент ничьих | Доля предыдущих матчей, завершившихся ничьей. | home_draw_rate_last_5 , away_draw_rate_last_10 |
| различия между домашней и выездной формой | Разница между домашними и гостевыми командами по одному и тому же скользящему показателю. | form_points_diff_last_5 , form_goal_diff_diff_last_10 |
| Предыдущие матчи учитываются | Количество предыдущих матчей, доступных перед игрой. | home_prior_matches , away_prior_matches |
4. Особенности форм атаки и защиты
Хотя наша модель пыталась отразить сильные стороны атакующей и оборонительной команд по очкам, именно здесь она уступает подходам суперкомпьютеров. Современные подходы часто также используют данные об игроках, которые бесценны при вычислении сильных сторон команды. Поскольку мы работаем только с данными на уровне игры, наше моделирование атакующих и оборонительных характеристик основано на результатах предыдущих матчей, таких как процент забитых и пропущенных голов, разница в проценте забитых и пропущенных голов.
| Группа функций | Значение | Примеры |
|---|---|---|
| Последние результаты | Среднее количество голов, забитых за матч за предыдущие 5 или 10 игр. | home_goals_for_per_match_last_5 , away_goals_for_per_match_last_10 |
| Последний процент пропущенных мячей | Среднее количество пропущенных голов за матч за предыдущие 5 или 10 игр. | home_goals_against_per_match_last_5 , away_goals_against_per_match_last_10 |
| Разница в проценте набранных очков | Разница между процентом забитых мячей домашней командой и процентом забитых мячей гостевой команды за последнее время. | form_goals_for_diff_last_5 , form_goals_for_diff_last_10 |
| Разница в проценте пропущенных мячей | Разница между процентом пропущенных шайб домашней командой и процентом пропущенных шайб гостевой командой. Более низкие значения указывают на преимущество домашней команды в обороне. | form_goals_against_diff_last_5 , form_goals_against_diff_last_10 |

Поиск по сетке
Поскольку большие поисковые сетки могут приводить к переобучению при перекрестной проверке, а масштабирование поиска по сетке носит мультипликативный характер, параметры ищутся логарифмически (1e-5, 1e-4, 1e-3, 1e-2). За исключением таких параметров, как альфа, которые должны находиться в диапазоне от нуля до единицы.
-
glmnet_alphaуправляет смешением методов гребневой и лассо-регрессии, где ноль соответствует чистой гребневой регрессии, а единица — чистой лассо-регрессии.
- Параметр
multinomial_decayсильнее наказывает за большие коэффициенты. Это может уменьшить переобучение, но чрезмерное затухание может привести к недообучению.
Поиск по сетке O(n) = количество протестированных конфигураций × время обучения одной модели
| Образцовая семья | Показаны сетки/конфигурации | Что было настроено |
|---|---|---|
| Базовые показатели | majority_baseline , frequency_baseline , rating_diff_multinom |
В основном не настроены; сравнительные базовые показатели. |
| глмнет | alpha = 0, .25, .5, .75, 1 |
Параметр смешивания упругой сети |
| многоном | decay = 0, 1e-5, 1e-4, 1e-3, 1e-2 |
Снижение веса L2 / уменьшение коэффициента |
| LightGBM | less_regular , deeper , more_regular , current_final , l2_regularized , shallower , l1_l2_regularized , compact_robust , faster_small , slower_small |
Именованные пакеты параметров глубины дерева, скорости обучения, раунда бустинга и регуляризации. |
В сравнении моделей LightGBM оказалась самой сложной. В отличие от базовых моделей, которые использовали мало или совсем не использовали параметры настройки, LightGBM требовала выбора сложности дерева, скорости обучения, количества итераций бустинга и регуляризации. Это делало её более гибкой, но также увеличивало риск переобучения, если параметры не были тщательно настроены. Кроме того, необходимо избегать использования модели, которая сложнее, чем требуется для наших данных, поскольку это может ухудшить интерпретируемость.
Параметры GBM были настроены путем сравнения компактной сетки конфигураций LightGBM. Эти конфигурации варьировали сложность дерева, скорость обучения, количество итераций бустинга и силу регуляризации, сохраняя лучшую модель по показателю логарифмической функции потерь. Ниже приведен список параметров LightGBM.
| Параметр | Значение |
|---|---|
learning_rate |
Насколько каждое новое дерево может изменять модель. Более низкие значения показывают, что обучение происходит медленнее, но модель лучше обобщается. |
num_iterations / nrounds |
Количество раундов ускорения, то есть, сколько деревьев добавлено. Большее количество деревьев может улучшить производительность, но также может привести к переобучению. |
num_leaves |
Регулирует сложность каждого дерева. Большее количество листьев позволяет создавать более детальные узоры, но увеличивает риск переобучения. |
max_depth |
Максимальная глубина каждого дерева. Более глубокие деревья отражают более сложные взаимодействия. Более мелкие деревья проще и безопаснее. |
min_data_in_leaf |
Минимальное количество наблюдений, необходимое для каждого листа. Более высокие значения делают модель менее чувствительной к небольшим шумовым паттернам. |
lambda_l1 |
L1-регуляризация. Сводит к нулю некоторые эффекты, упрощая модель. |
lambda_l2 |
L2-регуляризация. Уменьшает сильные эффекты и снижает чрезмерную самоуверенность. |
feature_fraction |
Доля признаков, используемых для каждого дерева. Использование меньшего количества признаков может уменьшить переобучение. |
bagging_fraction |
Доля строк, используемых для каждого дерева. Использование меньшего количества строк также может уменьшить переобучение. |
bagging_freq |
Частота применения субдискретизации строк. Если установлено значение 0 , бэггинг обычно отключен. |


Финальная модель
В качестве официально выбранной модели была использована LightGBM с набором функций safe_plus_form_compact , включающим 20 предматчевых признаков, полученных из рейтингов Эло, контекста турнира и сводных данных по командам с задержкой. Она была выбрана на основе наименьшего значения многоклассовой логарифмической ошибки на валидационном наборе данных, а тестовый набор данных был зарезервирован для окончательного отчета.
Выбранная модель LightGBM показала логарифмическую ошибку 0,893 при валидации и логарифмическую ошибку при тестировании. 0,873. Результат валидации оказался лучшим в сравнении моделей, но преимущество над регрессией было небольшим: многомерная регрессия отставала всего на 0,002 пункта логарифмической функции потерь при валидации. На отложенном тестовом наборе многомерная регрессия немного превзошла LightGBM как по логарифмической функции потерь, так и по макро-F1.

Это означает, что результаты следует интерпретировать с осторожностью. LightGBM является официально выбранной прогностической моделью, но имеющиеся данные не показывают, что градиентный бустинг явно превосходит более простые регрессионные модели для данных. Регрессионные модели остаются невероятно важными, поскольку их проще интерпретировать, и они показывают почти такие же результаты, а по некоторым тестовым показателям даже немного лучшие, чем другие методы.

Инженерная обработка признаков также дала скромные результаты. Компактные признаки с задержкой улучшили логарифмическую ошибку на этапе валидации по сравнению с базовым вариантом, но улучшение на тестовом этапе было незначительным. Признаки, определяющие целевую аудиторию, не оказали существенного влияния на логарифмическую ошибку в сравнении моделей.

Наиболее очевидным ограничением было предсказание ничьей. Выбранная модель почти никогда не предсказывала ничью как наивысший класс: на тестовом наборе она правильно предсказала только 2 ничьи из 1784 фактических ничьих, что составляет показатель полноты предсказания ничьей 0,11%. Это говорит о том, что оценки вероятности модели все еще могут содержать полезную информацию, но классификация argmax по-прежнему сильно смещена в сторону побед хозяев и гостей, что делает создание отдельной модели для моделирования ничьих разумным следующим шагом. Рейтинг Эло и компактная предматчевая форма обеспечивают полезный набор сигналов, но преимущества по сравнению с сильными базовыми моделями являются лишь незначительными.
На тестовом наборе данных модель гораздо лучше предсказывает победы хозяев, чем победы гостей:
- Она правильно определяет примерно 87% реальных побед домашних команд.
- Она правильно определяет примерно 63% реальных побед гостей.
Модель также способна выдавать распределение вероятностей побед домашней команды, ничьих и гостевых матчей, что зачастую полезнее, чем просто один точный прогноз.
Калибровка

Базовые модели в целом хорошо откалиброваны на тестовом наборе данных. Это означает, что прогнозируемая степень уверенности соответствует наблюдаемой точности, то есть, когда модели обладают умеренной степенью уверенности, они верны примерно с соответствующей частотой, а когда степень уверенности возрастает, наблюдаемая точность также возрастает. Отклонения от идеальной калибровочной линии незначительны, что говорит о том, что оценки вероятности, полученные с помощью моделей, в целом пригодны для использования, а не просто представляют собой ранжирование результатов.
Приведенный ниже график измеряет калибровку наиболее прогнозируемого класса — уверенность модели в любом выбранном ею исходе, — а не калибровку отдельно для побед хозяев, ничьих и побед гостей. Таким образом, модель может выглядеть хорошо откалиброванной в целом, но при этом неправильно оценивать один класс, особенно ничьи. Совокупный график калибровки подтверждает утверждение о том, что оценки уверенности моделей в целом заслуживают доверия, но сам по себе он не доказывает, что вероятности ничьих хорошо откалиброваны.

Графики калибровки для каждого класса показывают, где общая картина сохраняется, а где она усложняется. Вероятности победы домашней и гостевой команд точно следуют идеальной калибровочной линии в большинстве интервалов: по мере того, как модель присваивает более высокую вероятность любому из исходов, наблюдаемая частота возрастает примерно с одинаковой скоростью. На практике вероятности домашней и гостевой команд, рассчитанные моделью, ведут себя как осмысленные вероятности, а не просто как результаты матчей.

С ничьими ситуация иная. Вероятности ничьей, рассчитанные моделью, достаточно точно откалиброваны в пределах заданного диапазона, но этот диапазон узок. Модель редко присваивает вероятности ничьей значительно выше низкого или среднего уровня, даже когда матч относительно сбалансирован.
В этом и заключается главное отличие: модель не игнорирует ничьи; она обычно рассматривает их как факторы риска, а не как вероятные исходы. Вероятности ничьих все еще могут быть полезны для оценки риска ничьей, но ничьи редко становятся лучшим прогнозом модели, что отчасти объясняет сохраняющуюся слабость в точности прогнозов ничьих.

Анализ различий в рейтингах
Анализ разницы рейтингов показывает, почему ничьи представляют собой сложную задачу для модели с точки зрения структуры. Наблюдаемые показатели ничьих наиболее высоки, когда команды примерно равны по силам, и снижаются по мере увеличения абсолютного разрыва в рейтинге Эло. Все три семейства моделей усваивают эту общую закономерность: прогнозируемые ими вероятности ничьих также падают по мере того, как матчи становятся более односторонними.
Ошибка носит не направленный, а скалярный характер. В наиболее равных по силе матчах наблюдаемая вероятность ничьей составляет примерно одну треть, в то время как модели присваивают вероятности ничьих, близкие к одной четверти. Они правильно определяют сбалансированные матчи как более склонные к ничьей, но не повышают вероятность ничьей в достаточной мере. В результате модель может распознавать риск ничьей, не выбирая ничью часто в качестве наиболее вероятного исхода. Это улаживает кажущееся противоречие между разумной калибровкой ничьей и слабой точностью прогнозирования ничьих: вероятности движутся в правильном направлении, но обычно недостаточно далеко, чтобы выиграть в решении argmax, то есть выбрать класс с наибольшей прогнозируемой вероятностью.

Важность функции
Как и следовало ожидать, наиболее важной характеристикой для нашей модели является разница в рейтингах, за которой следует то, было ли совпадение на основе нейронных данных — на втором месте с большим отрывом. Проверяя важность характеристик, мы можем увидеть, какие из разработанных нами характеристик дали значимый сигнал.


Заключение
Думаю, сейчас самое время обсудить размер набора данных и выбор модели. Как правило, чем больше и сложнее набор данных, тем больше оснований для выбора более сложной модели. Как мы видели в этом примере, выигрыш от перехода от регрессии к LightGBM был очень незначительным; это хороший знак того, что попытка использовать более сложную модель на этих данных не приведет к улучшению прогнозов. Прогнозирование футбольных матчей меньше связано с поиском волшебного алгоритма и больше с созданием признаков, устойчивых к утечкам, сравнением интерпретируемых базовых моделей и оценкой того, оправдана ли уверенность модели.
На данный момент ясно одно: нам потребуется больше данных, чтобы сделать более точный прогноз. В частности, данные по отдельным игрокам — очень важно знать, будет ли Неймар пропускать матч. Детализация данных также важна, если мы хотим корректировать наш прогноз по ходу игры.
Приложение
Полный код проекта можно найти на моём GitHub.
Данные распространяются под лицензией Creative Commons CC0-1.0.
make_team_clean <- function(team_name) { team_name |> as.character() |> stringr::str_squish() |> # Removes extra spaces. stringi::stri_trans_general("Latin-ASCII") |> # Converts accented Latin characters to plain ASCII characters. stringr::str_to_lower() |> stringr::str_replace_all("[^a-z0-9]+", "") |> stringr::str_replace_all("^|_$", "") }
- stringr::str_squish()
- удаляет лишние пробелы
- stringi::stri_trans_general(“Latin-ASCII”)
- Преобразует латинские символы с диакритическими знаками в обычные символы ASCII.
- str_to_lower()
- все строчными буквами
- stringr::str_replace_all(“[^a-z0-9]+”, “_”)
- Эта функция заменяет все символы, кроме строчных букв и цифр, на нижнее подчеркивание.
Вебсайт | LinkedIn | GitHub

Марко Хенинг Талларико Посмотреть все от Марко Хенинг Талларико
Источник: towardsdatascience.com
Похожие записи
Оцените материал:
Похожие записи
Работники, выполняющие разовые заказы и обучающие …
12.04.2026
Остеоартрит: насколько полезны физические нагрузки? Выяснили ученые
15.03.2026
Цифровые двойники на основе искусственного интеллекта помогают людям контролировать диабет и ожирение.
17.02.2026Присоединяйтесь и подпишитесь на рассылку самых свежих новостей по Email
Получайте свежие новости и идеи на почту. Без спама — только самое интересное.
Нажимая «Подписаться», вы соглашаетесь с политикой конфиденциальности.
