Рейтинг европейских лиг. Часть 2. Добавили вторые лиги
В предыдущей статье мы составили рейтинги первых европейских лиг. Сейчас попробуем усложнить задачу и оценить рейтинги некоторых вторых лиг, а именно вторых лиг Англии, Испании, Германии, Италии, Франции, России и Португалии.
В предыдущих сериях
В прошлых статьях мы использовали рейтинг-систему Glicko-2. Суть модели следующая: команды начинают сезон с определенного рейтинга. Рейтинг - это положительное число. После каждого матча рейтинги меняются: у победителя рейтинг увеличивается, у проигравшей команды уменьшается. Если матч закончился вничью, то более слабая команда получает очки рейтинга, а фаворит теряет очки рейтинга. В ходе сезона рейтинги меняются все меньше и меньше, так как модель накапливает знания о командах.
Были введены параметры преимущества домашнего поля, а также склонности команд играть вничью, чтобы сделать модель более подходящей для футбола. Также был введен параметр рейтинга лиги для более точного прогнозирования матчей еврокубков. Модель позволяет делать прогноз на матч, а именно вычислять вероятности победы домашней команды, ничьи и победы гостевой команды.
Идея
Модель строится на истории результатов матчей. Соответственно, чтобы адекватно сопоставить рейтинги команд, нам нужно иметь историю встреч между командами из разных лиг. В прошлой статье мы использовали матчи еврокубков для решения этой проблемы. В нашем случае не получится так сделать, так как представители вторых лиг крайне редко участвуют в еврокубках.
Есть несколько способов решения проблемы.
1. Взять историю матчей из национальных кубков. Здесь нужно будет учесть, что клубы высшей лиги часто выставляют вторые составы против слабых команд.
2. Примем во внимание, что некоторые команды поднимаются в высшую лигу или вылетают во вторую. Нужно сравнить, как эти команды играют в разных лигах. Здесь тоже есть проблема. Команды, перешедшие в высшую лигу, часто проводят активную трансферную компанию для усиления. Команды, вылетевшие из высшего дивизиона наоборот расстаются с игроками.
3. Переходные матчи. Здесь проблема в том, что таких матчей мало, а в некоторых странах вообще нет.
Данные
Обучать модель будем на результатах матчей последних пяти сезонов 30 национальных чемпионатов и кубков, ЛЧ и ЛЕ, семи вторых лиг, а также переходных матчах чемпионатов Германии, Франции, России и Португалии.
Реализация
Будем продолжать использовать параметры преимущества домашнего поля и склонности играть вничью из старой модели.
В предыдущей статье мы ввели (и подобрали исходя из результатов матчей) параметр рейтинг лиги. Перед каждым сезоном мы инициализировали рейтинги команд рейтингом лиги. В текущей задаче такой подход неэффективен, так как он не позволяет нам учесть изменения рейтинга команды при переходе из одной лиги в другую. Будем инициализировать рейтинги только перед самым ранним сезоном. Рейтинги, полученные по итогам сезона, будем передавать в следующий.
Однако тут не все так просто, мы должны учесть то, что в межсезонье составы команд могут сильно поменяться. В этом нам поможет параметр rating deviation из самой модели Glicko-2. Rating deviation - это мера "доверия" к рейтингу. В начале турнира рейтинги меняются сильно, так как модель плохо знакома с командами, но по мере накопления истории матчей рейтинги меняются все меньше и меньше. Мы будем обновлять этот параметр перед каждым сезоном.
Также введем параметр "склонности усиливаться/ослабляться при переходе в другую лигу". Подберем его для каждой лиги отдельно. Командам, поднявшимся в высшую лигу или опустившимся во вторую, немного изменим рейтинг. Это позволит нам хоть немного уловить тенденцию в разных странах проводить активную трансферную компанию при переходе из одной лиги в другую .
Склонность команд выставлять второй состав на матчи кубков будем моделировать следующим образом. Командам, пробившимся в еврокубки, в матче национального кубка против команды из второй лиги будем занижать рейтинг на некоторое число. Здесь мы предполагаем, что команды, которые играют в еврокубках, из-за напряженного календаря будут выставлять вторые составы против команд из второй лиги.
Инициализация рейтинга для новых команд. Командам из Англии, Испании, Германии, Италии, Франции, России и Португалии, пробившимся во вторую лигу из третьей, и командам из других стран, пробившимся в первую лигу из второй будем присваивать особенный рейтинг в начале сезона. Введенный выше параметр рейтинг лиги характеризует средний рейтинг лиги. Будет неправильно этим значением инициализировать рейтинги новых команд. Очевидно, что средний рейтинг новых команд будет скорее всего ниже среднего рейтинга старых.
Здесь есть и другая проблема. Такой подход приведет к инфляции рейтингов в лиге. Напомним суть модели. Команды начинают сезон с определенным рейтингом. После каждого матча рейтинги меняются: у победителя рейтинг увеличивается, у проигравшей команды - уменьшается. Соответственно, в каждой лиге сумма рейтинговых очков примерно постоянна, и по итогам сезона она просто перераспределится. С приходом новых команд сумма очков возрастет. Новые команды раздадут свои рейтинги более сильным соперникам. Так как часть из них будет возвращаться в более слабую лигу, то средний рейтинг команд в чемпионате с каждым сезоном будет расти. (На самом деле, сумма рейтингов команд в лиге в начале и конце сезона может немного отличаться, так как у команд разные параметры rating deviation, но сути это не меняет.)
Мера качества модели
Подберем параметры таким образом, чтобы точность прогноза была максимальной. Точность будем оценивать метрикой log loss. Особенность этой функции ошибки состоит в том, что она учитывает не сам факт исхода (предсказывали победу, а команда не выиграла), а вероятность. "Модель посчитала 70%, что команда выиграет, а она не выиграла" хуже, чем "модель посчитала 40%, что команда выиграет, а она не выиграла".
Однако мы немного поправим функцию ошибки. Умножим ее значение на 5 для последнего сезона, на 4 для предпоследнего и так далее, что позволит нам сделать параметры более актуальными. Это особенно важно для последнего сезона, в котором многие матчи проходили без зрителей, что повлияло на параметр преимущества домашнего поля.
Результаты
В первой таблице представлены средние по командам рейтинги лиг. Поскольку количество команд в разных лигах отличается, также посчитаем средние рейтинги по лучшим десяти и пяти командам (вторая и третья таблицы).
Средний рейтинг команд в лигах
Средний рейтинг лучших десяти команд в лигах
Средний рейтинг лучших пяти команд в лигах
Рейтинги топ-20 клубов Европы
Проверка модели
Мы построили достаточно сложную модель с множеством параметров. Их действительно много, так как для каждой лиги нужно подобрать свой набор параметров. С одной стороны, это хорошо, так как алгоритм стал улавливать достаточно сложные зависимости в данных. С другой стороны, есть риск, что мы переобучились, то есть чересчур сильно подогнались под данные. В итоге модель будет плохо работать на новых данных. Обычно в таких случаях используют техники вроде кросс-валидации. Но это скучно.
Давайте попробуем предсказать результаты будущих матчей и сравним их с прогнозами букмекера. Если они окажутся похожими, то наша модель не такая и плохая.
ПСЖ - "Бавария". Прогноз модели (победа / ничья / поражение): 22.6% / 26.1% / 51.4%. Прогноз букмекера (победа / ничья / поражение): 30.4% / 23.5% / 46.2%.
"Севилья" - "Интер". Модель: 35.6% / 30.2% / 34.3%. Букмекер: 28.6% / 28.5% / 42.9% .
"Химки" - "Ахмат". Модель: 29.4% / 30.5% / 40.0%. Букмекер: 30.1% / 30.4% / 39.5%.
"Ротор" - "Сочи". Модель: 29.5% / 30.6% / 40.0%. Букмекер: 27.6% / 29.1% / 43.3%.
"Урал" - "Краснодар". Модель: 21.1% / 27.9% / 51.0%. Букмекер: 15.4% / 23.4% / 61.2%.
"Спартак" - "Локомотив". Модель: 26.8% / 30.0% / 43.2%. Букмекер: 35.4% / 30.2% / 34.4%.
"Ливерпуль" - "Лидс". Модель: 81.8% / 11.4% / 6.8%. Букмекер: 76.3% / 15.5% / 8.2%.
"Кристал Пэлас" - "Саутгемптон". Модель: 32.2% / 27.0% / 40.8%. Букмекер: 32.0% / 29.9% / 38.0%.
"Айнтрахт Ф" - "Арминия". Модель: 63.7% / 20.4% / 16.0%. Букмекер: 58.7% / 22.9% / 18.4%.
"РБ Лейпциг" - "Майнц". Модель: 69.7% / 17.7% / 12.6%. Букмекер: 69.5% / 18.1% / 12.4%.
"Лорьян" - "Страсбур". Модель: 23.9% / 28.6% / 47.5%. Букмекер: 36.8% / 30.3% / 32.9%.
"Лилль" - "Ренн". Модель: 48.5% / 28.4% / 23.1%. Букмекер: 42.2% / 29.9% / 27.9%.
В целом, модель показывает неплохие результаты. Но в некоторых матчах мы видим полное несоответствие между нашим прогнозом и прогнозом букмекера. Значит, нам есть над чем поработать.
Испанская Сегунда и английский Чемпионшип
Несколько смущают высокие рейтинги вторых лиг Испании и Англии. Представители Сегунды, Чемпионшипа не участвовали в еврокубках в последнее время, поэтому сила этих лиг считается только на основе матчей с представителями высших лиг Испании и Англии. А поскольку АПЛ и Примера впереди планеты всей, то и вторые лиги к ним подтянулись.
Правда, подтянулись не сильно: разница в 222 балла между испанскими лигами означает, что средний представитель Примеры будет иметь 67.7% шансов на победу, 19.7% шансов на ничью и 12.6% на поражение в матче на нейтральном поле против средней команды из Сегунды.
Да и чему удивляться, если "Гранада" и "Шеффилд Юнайтед" после попадания в высшие лиги без серьезных трат на трансферы занимают седьмое и девятое место. А двадцатая команда Примеры (считай, команда Сегунды) "Эспаньол" проходит три раунда квалификации ЛЕ и занимает первое место в группе.
РПЛ и ФНЛ
Ниже представлены рейтинги команд РПЛ и ФНЛ (матчи текущего сезона не учитывались).
Рейтинги клубов: https://github.com/andreyshelopugin/GlickoSoccer/blob/master/results/ratings.csv
Однако по одной игре не нужно делать выводы. Модель много чего не учитывает, поэтому вряд ли обыграет букмекера. Тут скорее наоборот. Букмекер является экспертом в области прогнозирования спортивных событий, поэтому если наши прогнозы значительно отличаются, то нужно призадуматься.
Единственное смутило что для разных лиг, вы разный набор параметров взяли. Действительно, риск переобучения тут может быть.