Завтра финал Чемпионата мира по футболу. Самое время для рассказа о футбольных прогнозах.

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

Такой день наступил и в моей жизни. И пусть я больше интересуюсь спортивным "Что? Где? Когда?", футбол - это классно. И это классно и с точки зрения прогнозов - и много данных, и много интересующихся, кому можно показать результаты. Давайте попробуем!

И раз за дело взялись зануды, будет много теорий, ещё больше таблиц и графиков.

Готовы? Вперёд!

Постановка задачи

Построить такую модель, которая на основании данных прошлых игр способна предсказывать результаты (победа-ничья-поражение) футбольных матчей. Ещё неплохо, если можно будет при получении новых данных (в футбол играют каждую неделю) оперативно обновлять прогноз. Чем предсказания точнее, тем лучше.

Как считать, какая модель хорошая, а какая - плохая?

Мы “скармливаем” модели большую часть исторических данных, но часть “оставляем себе”. Для модели - это будущее, которое нужно предсказать. Для нас - такое же прошлое. Появляется очень конкретный инструмент для сравнения: какая модель себя лучше покажет, та и молодец.

Далее в этом тексте мы говорим модели, что на дворе 1 октября 2022 года и просим предсказать результаты всего октября. Чемпионат мира мы не трогаем, а так, получается, самый свежий месяц клубного футбола.

Оценивать будем по трём метрикам.

Первая, очевидная, метрика - это точность прогноза (accuracy). Допустим, мы сделали прогноз на 100 матчей, в 80 наш прогноз сбылся, в 20 - нет. Это значит, что точность прогноза 80% (и это была бы очень крутая точность).

К сожалению, эта метрика не всегда показывает настоящую картину. Например, в игре Реала и Ман сити в этом году можно всегда “предсказывать" победу. Точность будет достаточно высокая (под 90%). Но никакой информации о том, когда и на ком гранды потеряют очки мы таким прогнозом не получим.

Этот недостаток устраняет продвинутая метрика под названием f1, на неё мы будет усиленно ориентироваться. Как она работает и почему, расскажу чуть ниже на примере.

Строгая формула под спойлером
F1 = 2 * (precision * recall) / (precision + recall)

где

precision = tp / (tp + fp)recall = tp / (tp + fn)

А ещё хочется добавить деньги. Ни для кого не секрет, в футболе ставки на исход матчей популярны, так что умельцев (или "умельцев") предсказывать результаты игр достаточно. Неплохо иметь параметр, который позволит как и с ними сравнить. Мы будем использовать метрику ROI (Return Of Investment). Допустим, я поставил по рублю на 100 матчей. В 80 матчей я угадал со средним коэффициентом 1.8, а в 20 - не угадал. Тогда мой доход - это

80 (успешных прогнозов) * 1 (рубль) * 1.8 (коэффициент) + 20 (неуспешных прогнозов) * 1 (рубль) * 0 (я же не угадал) = 144 рубля,

а

ROI = (144 (рубля, доход) - 100 (рублей первоначальных вложений) ) / 100 (рублей первоначальных вложений) = 44%.

Это значит, что а) я “в плюсе”, т.е. заработал больше, чем вложил, б) заработал на 44% больше, чем вложил.

Далее по тексту будем брать ставки известой букмекерской конторы William Hill.

Что дальше?

Я буду последовательно усложнять модель и на каждом этапе смотреть, как она себя показывает по этим трём метрикам.

По идее, с каждым новым этапом должно становиться всё лучше и лучше, но, как вы увидите, в жизни не всё так гладко.

Где брать данные?

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


Что будет в нашем распоржяении?
Данные о примерно 43 тысячах футбольных игр из топ-5 европейских лиг (Англия, Испания, Италия, Германия, Франция) высшего и первого дивизионов, а также еврокубки (Лига Чемпионов, Лига Европы и Лига Конфедераций) с 2012 года по сентябрь 2022.
С помощью этого добра попробуем предсказать результаты 1264 футбольных матчей октября.
Данные по ставкам за текущий сезон 2022/2023 брал вот с этого сайта.

Поехали!

Модель №0. Его Величество случай
Да-да, начинаем с генератора случайных чисел: просто в каждом матче случайно выдаём результат, победа, ничья или поражение. Считаем метрики и смотрим.
Здравый смысл подсказывает, что ничего хорошего из этого не выйдет. Кто-то может зло пошутить, что это будет совпадать со средним результатом “диванных экспертов”. Но я бы на другом заострил внимание. Этот прогноз - простой. Это всегда плюс. И этому прогнозу не требуются вообще никаких данных. Это значит, что любой прогноз на данных должен быть лучше, иначе все сложности просто не имеют смысла. Получается, это не просто нормальный прогноз, а лакмусовая бумажка, которая отделяет какую-то мысль от полностью бесполезного шума.
Итак, что же мы видим?

Таблица результатов нулевой модели
Таблица результатов нулевой модели

Точность 25%, т.е. угадали мы исход только четверти игр. Чуть-чуть не повезло. Метрика f1 на уровне 13% (пока просто запомним). Ну и по деньгам мы в большом минусе. Логично, букмекерам надо как-то зарабатывать.
В зависимости от лиги точность генератора случайных варьируется в диапазоне 21%-28%, а ROI можно увидеть в интервале от -37% до -43%. Если вы на своих ставках проигрываете больше - остановитесь.

Модель №1. Хозяева начинают и выигрывают
Ну что, пришло время включить наши данные. Кстати, как вообще они выглядят? Ну такая какая-то таблица

В таком виде приходит история игр
В таком виде приходит история игр

Их можно для начала немного покрутить. Наверное, у вас тоже давно мучают какие-то вопросы?
Например, какой самый популярный счёт?

Итоговый счёт матчей и число игр, в которых он встретился
Итоговый счёт матчей и число игр, в которых он встретился

1-1! Кто бы мог подумать? А вы на 0-0 ставили, небось, а он только на четвёртом месте.

Какая топ-лига самая забивная?

Среднее число голов, забитых хозяевами и гостями за матч в разбивке по турнирам за 2012-2022
Среднее число голов, забитых хозяевами и гостями за матч в разбивке по турнирам за 2012-2022

Бундеслига, почти 1.7 забитых за матч! И забивают и пропускают больше. Возможно, АПЛ - самая зрелищная потому, что там разрыв между забитыми и пропущенными небольшой?
Насколько важен фактор своего поля?

Результат хозяев поля и доля от общего числа матчей
Результат хозяев поля и доля от общего числа матчей

То есть 44% всех игр заканчиваются победой хозяев. С учётом того, что почти везде дома и на выезде играется одинаковое количество матчей, фактор своего поля - это что-то серьёзное. А давайт с него и начнём?

Нам надо бахнуть какую-то очень простую модель. Как насчёт модели "всегда предсказываем победу хозяев"? А почему бы и нет.

Посмотрели на данные, обобщили. Всё, теперь просто. Узнаем, кто играет "дома" - ему и победу вручаем.

Что из этого выйдет? Давайте посмотрим на обе модели рядом:

Таблица с результатами моделей. Чем ниже, тем более новая модель
Таблица с результатами моделей. Чем ниже, тем более новая модель

А это рабочая история! Результат лучше случайного на целых 12%! По деньгам, конечно, в минусе. Обращу внимание, что продвинутая метрика выросла не так сильно. Очевидно, этот прогноз немного "хитрый". И дальше его особо никуда не улучшишь.
Ну что, для начала неплохо. Двигаемся дальше.

Модель №2. ЭЛО-рейтинг команд
Рейтинг ЭЛО - достаточно популярная система расчёта рейтинга спортивных результатов. Её любят в шахматах, но и в футболе она активно применяется.

Суть её простая. Если ты играешь лучше, чем ожидалось, твой рейтинг растёт, если хуже - падает. И чем более неожиданный результат, тем масштабнее изменение твоего рейтинга. Например, если Реал проиграет Барселоне, то потеряет максимум 1-2 пункта. А вот если проиграет Мурсии, то расстанется с доброй двадцаткой баллов. Для того, что его рассчитать, нужны только результаты матчей. Отлично!

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

Но этот рейтинг и сам по себе интересен.

Вот топ-10 команд на данный момент (декабрь 2022):

Лучшие команды по рейтингу ЭЛО на 1 ноября 2022
Лучшие команды по рейтингу ЭЛО на 1 ноября 2022

У меня возражения вызывает только нахождение в топе ПСЖ. И даже понятно, почему так происходит: команда достаточно сильно выступает в своём чемпионате. И "Барсы" не хватает, но тут система рейтинга не при чём. Давайте посмотрим, что там у Барселоны и сравним её движение с набравшей хороший ход в этом сезоне "Наполи"

Изменения рейтинга команды Барселона (синий) и Наполи (кирпичный) в зависимости от числа игр
Изменения рейтинга команды Барселона (синий) и Наполи (кирпичный) в зависимости от числа игр

Разошлись буквально в начале текущего сезона.

Кстати, рейтинг, который я расчитал, не совсем “чистый”. В идеальном мире все команды должны начать играть в начале времён с одинаковым рейтингом. А там дальше, кто проиграет, кто выиграет, время всё расставит по местам. В реальной жизни у этого много минусов. Самый главный из которых в том, что рейтинг будет отражать реальную картину мира далеко не сразу.

Поэтому начальный рейтинг зависит от лиги, в которой начинает команда. Английская команда начинает с одного рейтинга, а французская - с рейтинга пониже. И команды низших дивизионов (Сегунда, Чемпионшип и т.п.) тоже получают “штраф” на старте. Чем лучше результаты страны в еврокубках, тем выше начальный рейтинг каждой команды. Команды низших лиг слабее старших ровно на 200 пунктов - примерно столько теряет за сезон аутсайдер высших лиг.

Вот так выглядит динамика рейтинга испанских команд в первом сезоне расчёта рейтинга:

Изменения рейтинг команд высшей (Ла лига) и первой (Сегунда) дивизионов испанского футбола
Изменения рейтинг команд высшей (Ла лига) и первой (Сегунда) дивизионов испанского футбола

Сначала между дивизионами пропасть. Но потом лучшие Сегунды и худшие Примеры начинают стремительно сближаться и к концу сезона они вполне органично меняются местами.

Выглядит логично.

Давайте теперь посмотрим, как этот рейтинг предсказывает будущее. Снова посмотрим на все модели вместе.

Таблица с результатами моделей. Чем ниже, тем более новая модель
Таблица с результатами моделей. Чем ниже, тем более новая модель

Стало лучше! Выросла и точность и "продвинутая метрика". Это значит, что у этой модели есть какое-то подобие прогнозной силы. И даже по деньгам вышли "в плюс". Безусловно, это не значит, что на этом можно зарабатывать какие-то деньги. Это просто инструмент сравнения с футбольными аналитиками.

Интересно, что лучше всего точность на низших дивизионах, а в высших по деньгам в минусе. Скорее всего это объясняется большей разницей в классе.

Вот такая диаграммка должна помочь понять, как работает прогноз.

По вертикальной оси - какой результат был на самом деле, по горизонтальной - что показала модель. Чем цвет ячейки ближе к красному, тем ниже точность.
По вертикальной оси - какой результат был на самом деле, по горизонтальной - что показала модель. Чем цвет ячейки ближе к красному, тем ниже точность.

Тут хорошо видно, что сложнее всего по текущей модели верно предсказывать ничьи. Надо подумать, что с этим делать.

Модель №3. Рейтинг ЭЛО как компонент более сложной модели

На самом деле, рейтинг ЭЛО - это тупиковый вариант.

По очень простой причине: его никак не получится органично улучшить. Добавить фактор своего поля, погоды или настроения капитана команды. Любые попытки это сделать на уровне формулы ЭЛО приводят к тому, что она разваливается.

Как же быть?

Ну вообще существует очень много алгоритмов, которые пытаются искать закономерности в данных. И умеют работать с разными параметрами.

Попробуем настроить известную модель под названием случайный лес (Random Forest). Она может принять десятки тысяч параметров, но мы ей дадим только прогноз на основе формулы ЭЛО (по сути, предыдущую модель). В идеальном мире, она должна выдать ровно такой же результат. Но на практике будет хорошо, если станет хотя бы не хуже.

Что же мы видим?

Таблица с результатами моделей. Чем ниже, тем более новая модель
Таблица с результатами моделей. Чем ниже, тем более новая модель

Точность выросла, по финансам тоже получше вышло. Но продвинутый показатель стал хуже. Кажется, мы снова начинаем хитрить? Увы, алгоритмы машинного обучения часто этим страдают. Ничего страшного, стало не так уж плохо. Зато у нас появилось пространство для улучшений.

Модель №4. Алгоритм, ЭЛО и простые параметры

Давайте попробуем добавить, кроме самого прогноза ЭЛО то, что просто получить и может быть важно с точки зрения результата.

После некоторого числа экспериментов я остановился на таких вещах:

  • общее число побед,

  • общее число поражений,

  • фактор своего поля (дома или на выезде играем),

  • в высшем дивизионе играет или нет

Что же выдал алгоритм в этот раз?

Таблица с результатами моделей. Чем ниже, тем более новая модель
Таблица с результатами моделей. Чем ниже, тем более новая модель

Стало, конечно, лучше. Но не такого мы ждали. Правда это "чуть-чуть" пришло равномерно по всем разрезам.

Ещё алгоритмы машинного обучения хороши тем, что они говорят, какой параметр модели какое влияние на итоговый результат оказал. На первом месте с большим отрывом идёт рейтинг.

Модель №5. Подбираем хорошие параметры алгоритма

В двух предыдущих моделях я взял хорошие данные, выбрал логичные признаки, взял нормальный алгоритм, но использовал “какие-то” параметры этого алгоритма. А Random forest вообще гибкая штука. Можно попытаться “выжать” из модели чуть больше, если попотеть.

Обычно это даёт 1-2% улучшений, но здорово грузит систему. Как будет в этот раз?

Таблица с результатами моделей. Чем ниже, тем более новая модель
Таблица с результатами моделей. Чем ниже, тем более новая модель

Совсем чуть-чуть потеряли по точности, зато f1 сейчас лучший, чем когда-либо был у нас. Просто замечательно.

Интересно, прогноз каких игр изменился?

Случайная выборка матчей, в которых прогнозы моделей "чистый ЭЛО" и "ЭЛО+дополнительные данные" разошлись
Случайная выборка матчей, в которых прогнозы моделей "чистый ЭЛО" и "ЭЛО+дополнительные данные" разошлись

Судя по всему, встреча противоположных тенденций и поведение на границе понятности.

Модель №6. Личные встречи

Попробуем обогатить данные какими-то нашими представлениями о спорте или футболе, которые помогут повысить точность прогноза.

Нанчём с гипотезы “неудобного противника”. Это когда есть какой-то гранд, который выигрывает всех, но есть у него один враг, с которым ему всегда традиционно сложно.

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

Вот так выглядят таблицы личных встреч в топ-лигах:
Испания
Испания
Франция
Франция
Англия
Англия
Италия
Италия

Чем зеленее, тем более приятный результат для команд, названия, которых расположены на вертикальной оси.

Тут мы видим, что, например, самым неудобным соперником для мадридскогго Реала является… Барселона. Кто бы мог подумать? Но это мы и из рейтинга увидим. А вот то, что у Реала нулевая история личных встреч с командой Кадис (19-е место в текущем чемпионате) - это как раз оно, андалузцы - неудобный соперник Галактикос. Пока.

ПСЖ не имеет конкурентов в своей лиге, но лучше всего статистика у Осера, всего лишь -1.

Ну что, давайте добавим этот параметр в модель и посмотрим, что выйдет?

Добавили, покрутили параметры модели. Итог - честно заработанное улучшение в 2% на экспертизе. Так оно, чаще всего и работает. А вы любите как в кино, чтобы фейерверки и крутые открытия?

А Манчестер Сити имеет просто неприличную статистику личных встреч с Ливерпулем. Кажется, Клопп что-то знает.

Наполи идёт хорошо, но с фаворитами играть будет сложно: отрицательня история как с Юве, так и с Интером. А Торино по каким-то причинам неудобный соперник для Аталанты.

Ну что, давайте добавим этот параметр в модель и посмотрим, что выйдет? Сначала посмотрим пару матчей:

Андалузское дерби - что-то печальное. Бетис сильнее с другими противниками, зато Севилья в 18 последних играх имеет результат +10 с принципиальным соперником. Ничего себе!

Ювентус растерял рейтинга, это понятно, но с Миланом долго ещё будет иметь комофртный плюс.

Кардиф - Форест - рекорд по разнице. Рейтинг уверенно ставит на англичан, а история личных встреч - на валлийцев.

А теперь всей выборке:

Таблица с результатами моделей. Чем ниже, тем более новая модель
Таблица с результатами моделей. Чем ниже, тем более новая модель

Точность стала хуже, зато бьём рекорды по продвинутой метрике. Это обнадёживает. Кстати, эта модель считает, что личные встречи даже важнее, чем рейтинг. Ну что же.

Самое главное, что "проблему ничьих" так и не решили

Модель №7. Статистика матча

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

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

Так что прежде чем грузить модель, посмотрим на данные. Как в топ лигах распределены значения ключевых показателей статистики?

Как часто бьют по воротам. Между лигами нет разницы: если ваша команда пробила меньше 10 раз, это уже хуже типичного
Как часто бьют по воротам. Между лигами нет разницы: если ваша команда пробила меньше 10 раз, это уже хуже типичного
С фолами разница чуть больше, но суть та же: если вы роняете соперников 15 и больше раз - у вас проблемы в лиге
С фолами разница чуть больше, но суть та же: если вы роняете соперников 15 и больше раз - у вас проблемы в лиге
Общее количество пасов за игру практически не отличается от лиги к лиге.
Общее количество пасов за игру практически не отличается от лиги к лиге.

И, самое главное, как они связаны между собой и числом забитых и пропущенных мячей?

По горизонтальной оси - сколько команда бьёт по воротам за матч. По вертиклаьной - сколько забивает в том же матче.
По горизонтальной оси - сколько команда бьёт по воротам за матч. По вертиклаьной - сколько забивает в том же матче.

Никак.

Зависимость называется "крайне редко голов больше, чем ударов по воротам". Всё.

Увы, все эти параметры - достаточно слабый сигнал.

Но есть более серьёзная проблема. В отличие от истории личных встреч или рейтинга, нам неизвестно ДО игры, сколько раз Бензема залезет в офсайд, а сколько - пробьёт в створ ворот.

Тем не менее попробуем обогатить модель этими данным. Вдруг полпроцента выжмем? Модели будем показывать среднее значение показателей за последние 8 матчей (достаточно, чтобы встреча с нетипичной командой не исказило статистику, но и сезон ждать изменения в стиле игры тоже не нужно).

Что же получилось?

Таблица с результатами моделей. Чем ниже, тем более новая модель
Таблица с результатами моделей. Чем ниже, тем более новая модель

Стало хуже. Модель начала искать закономрености там, где их нет, переобучилась и на неизвестных себе данныхз дала худшие прогнозы. Так бывает. Отбрасываем, двигаемся дальше.

Модель №9. Персональные показатели

Кроме командной статистики есть ещё и индивидуальная. Её много, разной, вполне себе можно достать. Но надо как-то понять, как свести её в формат, который будет не так шуметь.

И тут можно использовать футбольных экспертов. Они выставляют игрокам оценки после игры на основе ТТД игроков. Кажется, именно эта оценка - отличное обобщение, которое нам ценнее, чем показатели сами по себе.

Снова посмотрим, как выглядит распредление оценок и как оно связано с результатом игры?

Частота встречаемости оценок
Частота встречаемости оценок

Вот такие оценки ставят. Чем выше столбик, тем чаще оценка встречается. Можно обобщить, что те игроки, которым матч "зашёл" получают что-то около 6,5, а тем, кто "не зашёл" - около 4,6.

И, похоже, результат команды влияет на оценки специалистов. Или наоборот? Хорошие оценки приводят к хорошим результатам?

Связь оценок игроков и итога игры команды
Связь оценок игроков и итога игры команды

Короче, норм тема, надо пробовать. Логика та же - подаём модели среднее значение за 8 последних игр.
Что же выйдет?

Таблица с результатами моделей. Чем ниже, тем более новая модель
Таблица с результатами моделей. Чем ниже, тем более новая модель

Это лучше статистики матча. Но всё равно хуже, чем без новой информации. Грустно. Ничьи, правда, чуть лучше описывает. Не очень понятно почему. Держим в уме, но двигаемся дальше.

Модель №10. Ожидаемое поведение по статистике

Давайте пробовать бить по слабой точки прогноза: модели очень сложно разобраться с ничьей.

Попробуем такую гипотезу.

Представим себе, что матч закончился 0-0. Но одна команда много держала мяч, создавала моменты, била по воротам. Другая - пыталась отбиться. Результат - счёт на табло, вопросов нет. Но скажите мне: какова вероятность, что эти команды наберут очки в следующем матче? Кажется, что та команда, которая много и хорошо играла, но "недодавила" в этом матче, вполне может додавить в следующем.

Можно было бы просто добавить xG в модель. Но нормальные данные по этой характеристике получить на данный момент сложно. Поэтому мы сконструируем свой примитивный показатель: к счёту на табло будет добавлять ещё один мяч одной из команд. Та, которая чаще бьёт в створ, чаще просто бьёт или чаще владеет мячом. Если все эти показатели равны, шут с вами, не добавляем ничего. На полученных результатах строим ещё один рейтинг. И вот его передаём модели в качестве прогноза. Какого, а?
Получили новые данные - посмотрим на них.

Сравнение динамики "классического" (синия линия) и "видоизменённого" (кирпичная линия) рейтинга для команды  Рома
Сравнение динамики "классического" (синия линия) и "видоизменённого" (кирпичная линия) рейтинга для команды Рома

И аналогичная картина для мадридского Реала.

Сравнение динамики "классического" (синия линия) и "видоизменённого" (кирпичная линия) рейтинга для команды  Реал (Мадрид)
Сравнение динамики "классического" (синия линия) и "видоизменённого" (кирпичная линия) рейтинга для команды Реал (Мадрид)

Ну что, смотрим что выйдет на данных?

Таблица с результатами моделей. Чем ниже, тем более новая модель
Таблица с результатами моделей. Чем ниже, тем более новая модель

Итог: новая модель практически не испортила лучшую.

Да, ожидался немного не такой вариант.

А насколько это вообще всё плохо?

Сложно сказать.

Вот есть такой лидерборд. Там люди, конечно, азартные. Есть, например, человек, у которого точность 39% и ROI +9%). Но, в целом, ROI 20% выглядит вполне достойным топ-20.

А вот как раз экспертный рейтинг за октябрь-2022. Судя по числам, тут люди что-то понимают. Но всё равно для топ-20 достаточно просто быть в плюсе. А лучшая модель вполне уверенно борется за топ-5.

Модель № N+1

На этом стоит пока остановится. Хотя обидно не получить 50% точности, кажется, что это вполне возможно.

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

Пока что в шорт-листе следующие гипотезы.

  • Индивидуальный рейтинг игроков и корректировки на состав. Если суперзвезда не вышла на поле, прогноз команды понижается. Тут должен быть какой-то фактор сыгранности. И не иметь возможность делать прогноз до тех пор, пока составы не станут доступы - неприятное ограничение.

  • Сброс рейтинга при изменении стиля игры. Новые игроки, новый тренер, команда просто начала играть по-другому. По-хорошему, это уже другая команда, рейтинг прошлой инкарнации использовать нехорошо. Но как определять этот момент? И насколько сильно, простите, обнулять?

  • Определение стиля игры команды. И определения того, как команды разных стилей играют между собой. Условно, команда со ставкой на владением мячом, хорошо вскрывает "автобус", но проигрывает команде, специализирующейся на контратаках.

  • Использовать другие алгоритмы машинного обучения. В том числе менее требовательные к числу параметров, чтобы можно было попробовать найти какие-то закономерности на большом количестве параметров.

Весь код доступен. Буду рад новым гипотезам и предложениям.

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

Комментарии (21)


  1. laatoo
    17.12.2022 21:04
    +3

    подбросить монетку: accuracy 50%
    статистика, модель, анализ: 44%

    одинаково что для расчета срока выполнения задачи, что для прогнозирования исхода футбольного матча.

    вы не знаете будущего, точка

    тем не менее, почитать любопытно, спасибо)


    1. tsaregorodtsev Автор
      17.12.2022 21:28
      +4

      В данном случае бросание монетки (модель №0) даёт 33%


      1. laatoo
        17.12.2022 21:36
        +1

        ответ а) между 33% точности и 44% точности практической разницы нет.

        ответ б) потому что исхода 3.

        сократите до "команда N не проиграет", останется 2.
        стройте модели, кидайте монетку, спрашивайте экспертов - всё одно.


  1. INSTE
    17.12.2022 21:14

    А как же описание расширенной метрики?


    1. tsaregorodtsev Автор
      17.12.2022 21:28

      Под спойлером


      1. INSTE
        17.12.2022 22:01
        +1

        Это для понимающих, а для людей с улицы типа меня?


        1. tsaregorodtsev Автор
          17.12.2022 23:21
          +3

          Есть такая вещь, как ошибка первого рода. Это "оправдать убийцу". Чувствительность её считается как метрика precision, т.е. доля таких ошибок.

          Есть такая вещь, как ошибка второго рода. Это "посадить невиновного". Чувствительность считается как метрика recall, т.е. сколько среди косяков "совсем плохих косяков".

          Метрика F1 что-то типа среднего этих двух метрик. Она может быть хорошей только тогда, когда ты не просто угадываешь, но и делаешь это без роста ошибок как первого, так и второго рода


  1. INSTE
    17.12.2022 21:17
    +1

    И, вообще, очень странно выглядит, что все добавления к best_params_elo немного повышают точность и f1, но драматически понижают roi. Разве не к максимизации roi стоит стремиться во всех практических аспектах?


    1. tsaregorodtsev Автор
      17.12.2022 21:30
      +1

      Правильный вопрос, спасибо.

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

      Прааметр фитировался по f1, поэтому, конечно, с ROI может пройти что угодно.


  1. gchebanov
    18.12.2022 00:27

    C учетом важности фичи "играть дома", нужно считать f1 на классах: победила команда дома, ничья, на выезде, ожидаю резкое падение метрики.

    Сам поигрался на данных отсюда. Для сравнения со статьёй чекнул арбитраж между коэффициентами (ставка на каждый исход 1/np.nanmax(bet_ij) если выгодно). Максимум на одной игре roi=0.0788, сумма 13.75. А если действовать по сложному проценту то заоблачные 839778.15
    В среднем на игру 0.06%


  1. kbaa
    18.12.2022 01:20
    +4

    Специально залогинился чтобы поддержать идеи из шор-листа. Та же Аргентина с Месси и без - большая разница. Но решают не только звезды, в теории неплохо бы анализировать весь состав, от этого зависит стиль игры на каждый конкретный матч.

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

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

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


    1. tommyangelo27
      18.12.2022 15:20
      +1

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

      Команде-аутсайдеру зачастую достаточно хоть тушкой, хоть чучелом закатить первую банку, а потом вдесятером окопаться в своей штрафной.

      Именно поэтому сейчас популярны разные продвинутые метрики, вроде xG.


      1. tsaregorodtsev Автор
        19.12.2022 10:47

        Казалось бы, объём данных решает этот вопрос?

        Да, xG и прочие продвинутые метрики - это круто. К сожалению, нормально с ними работать сейчас простому смертному как минимум сложно


        1. tommyangelo27
          19.12.2022 11:29

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

          Но это не особо поможет угадать исход конкретного матча, в этом проблема.


          1. tsaregorodtsev Автор
            19.12.2022 15:06

            А то, что команд много. Кому-то не повезло, кто-то заколашматил, но в среднем при таких действиях - такой исход?

            Конкретный исход так не предсказать, но 50%+ исходов на 100 играх, кажется, вполне.


            1. tommyangelo27
              19.12.2022 16:16

              Можно попробовать взять данные по суммарным зарплатам, расставить команды по порядку и всегда ставить на фаворита (у которого суммарная зарплата больше). И вы уже получите неплохую точность. Вот например за 2019 год — sport24.ru/news/football/2019-11-19-opublikovan-reyting-srednikh-zarplat-vsekh-klubov-apl


    1. tsaregorodtsev Автор
      19.12.2022 10:52

      Берёшь статистику фолов-желётых-красных-пенальти по арбитру? Думаю, тут можно окно и пошире брать, не 8 матчей. Но до VAR и после вар - это же разные судьи, считай?

      Но, честно говоря, не верю, что вот прям фича. И если какая-то лига не передаёт арбитра до начала игры, то всё, исключать из прогноза?

      Так-то можно и погоду во время матча учитывать. Наверняка полпроцента и там лежит


  1. Dark_Furia
    18.12.2022 13:12

    У Тальмы Лобель в книге "Горячая чашка в холодный день" отдельный раздел посвящен результатам связанным с цветовым восприятием. В том числе в одной из упоминаемых работ показали, что красный цвет формы коррелирует с более высокой вероятностью победы. Так что можно попробовать добавить цвета формы как один из факторов. Еще было бы интересно посмотреть на влияние результата в прошлом матче и в прошлом матче с этой командой.


    1. tsaregorodtsev Автор
      19.12.2022 10:49

      Я слышал про это исследование. Такие данные и сложно собирать, и сложно формализовать? Красный цвет формы - это что? Португальсий цвет "считается" красным или он красно-коричневый? Сколько должно быть красного на форме? 100%, включая гетры? Достаточно одной полоски? 51%? Сложно


  1. savostin
    18.12.2022 21:54

    Ну как прогнозы, сошлись? ;)


    1. tsaregorodtsev Автор
      19.12.2022 10:49

      Букмекеры маржу вряд ли раскроют, но вряд ли они жалуются))