Интервью с русским математиком из Франции, который взялся анализировать футбол
BetonMobile пообщался с Андреем Кривоноговым — русским математиком из Франции, который одним из первых взялся анализировать продвинутую футбольную статистику для рунета.
xG — это модель подсчета ожидаемых голов на основе опасности нанесенных ударов. С помощью этих данных можно высчитывать ожидаемое количество очков (xP) команды при показываемом качестве игры. xG- и xP-таблицы Андрея Кривоногова для ведущих европейских чемпионатов можно найти в паблике «Блокнот».
Андрей, как ты пришел к анализу футбольной статистики?
Это было довольно логично. Я всегда интересовался футболом и старался много его смотреть, мне интересно, но при этом в тактике я не особо разбираюсь. По образованию я математик, и в принципе занимаюсь статистикой и околостатистистическими вещами. Соединив два своих интереса, собственно, и занялся изучением футбольной статистики.
Твоя основная профессия связана со спортивной статистикой?
Нет. Как это сейчас модно называть, я Data Scientist, статистик-программист. Работаю в небольшой компании, которая занимается анализом данных и построением предиктивных моделей для онлайн-маркетинга. Я поддерживаю качество предиктивных моделей, пытаюсь понять, каким образом их конструировать, и в том числе их программирую.
Когда пришла мысль взяться за xG-модели?
Не то чтобы до этого я подробно изучал статистику — это было на уровне просмотра количества ударов и подобных вещей. Я балуюсь фэнтези-спортом, и немного смотрел в эту сторону. Относительно xG я захотел применить существующие модели машинного обучения для футбола. Видел, что по этой теме много литературы и много обсуждений в блогах Вадима Лукомского и Никиты Васюхина. Подумал: почему бы это все не оптимизировать, а, возможно, в будущем и как-то улучшить?
Это было в районе прошлой весны?
Вся механическая часть, которая обсчитывает таблички xG для разных чемпионатов, была написана где-то в конце лета.
Вы работаете над моделью вместе с Никитой Васюхиным. Как вы познакомились?
Я написал Никите, когда у меня уже был более-менее работающий прототип, способный выдать адекватные цифры по матчу. Мы стали этим более активно заниматься, больше обсуждать и улучшать. До этого мы не были знакомы.
xG-карта матча «Ростов» — «Рубин»
На какие формулы расчета xG ты ориентировался изначально? Майкла Кэйли, 11tegen11 или кого-то еще?
Теген не раскрывает свои формулы в подробном виде, а у нас своей модели пока нет, поэтому мы пользуемся исключительно наработками Кэйли. У него в блоге все достаточно подробно расписано вплоть до коэффициентов, и это нетрудно программируется и автоматизируется.
До собственных доработок модели вы пока не дошли?
Надо понимать, что есть качественно функционирующая модель, которой человек долго занимается. У меня была идея попробовать самому немного подергать коэффициенты, но эта затея неправильная с идеологической точки зрения. Модель Кэйли в прошлые сезоны позволяла иметь соотношение xG к голам близкое 1 к 1.
Если подкручивать коэффициенты руками, у тебя не будет контроля над этим соотношением, и ты не сможешь угадать, как подстроить цифры, чтобы в среднем все осталось так же. Если разрабатывать свою модель, надо начинать почти с нуля, работать с более начального уровня, а не просто подкручивать коэффициенты Кэйли.
Пока таких мыслей у вас нет?
Мысли есть, но своей модели нет.
Если есть мысли, значит вы уже видите какие-то нюансы, которые Кэйли не учитывает, но которые способны учитывать вы.
Не хочу вдаваться в детали, тем более пока все очень сыро. Периодически думаю об этом и вижу моменты, которые можно попробовать сделать лучше, чем Кэйли, но этих моментов немного, и я не знаю, насколько высока их ценность, и насколько результаты будут отличаться от того, что есть у Кэйли. Возможно, эта улучшенная модель будет просто не нужна.
В общих чертах, в каком направлении эти мысли?
Основная проблема у Кэйли, которую надо решать, — это количество людей между игроком и воротами в момент удара. Нужно добавить метрику давления на игрока. Команды, которые зачастую недооценены по xG, как правило неплохи по этой метрике. Есть удары, которые в среднем оценены правильно, но в конкретной ситуации при большом давлении на игрока они получают неправильную оценку. Такие моменты надо отлавливать и понимать, когда они происходят.
Но при имеющейся в свободном доступе статистике (на том же WhoScored, откуда вы берете данные) такой возможности нет. Это мысли в более далеком будущем?
Сомневаюсь, что это займет много времени. Не знаю, как скоро это появится именно в открытом доступе, но уже сейчас компании собирают много позиционных данных. Наверняка та же Opta близка к тому, чтобы полностью это описывать, и в ближайшие пару лет эти данные появятся в том или ином виде. Подобная статистика — активно развивающаяся область. Та же Opta работает над своими моделями, и от них стоит ждать увеличения списка предоставляемых данных.
Задумывался ли ты о применении xG-моделей для ставок?
Модель, хоть и предиктивная, но работает на уже состоявшихся ударах, поэтому применять ее для предсказания будущих событий не выйдет. Как не выйдет и оценить валуйность той или иной ставки.
Хотя как дополнительный показатель, с помощью которого можно подчеркнуть команды, имеющие отличный от качества игры результат, xG может пригодиться. Делать ставки, основываясь исключительно на xG, я бы не стал, но как один из параметров для оценки текущей формы и потенциала команды метрика вполне подходит.
В общем, сам ты не ставишь?
Пытался лудоманить некоторое время назад, но без выстроенной стратегии играть в стабильный плюс не получится. А чтобы ее выстроить, нужно много свободного времени, которого у меня почти никогда нет.
У вас в таблицах я заметил расхождения по явным голевым моментам с данными от Opta, причем достаточно серьезные. Например, возьмем “Саутгемптон”. По вашим таблицам у “Сотона” за сезон создано 40 Big Chance, а по таблицам Opta — 24.
Если расхождения так велики, то надо разбираться. Мы же ничего не изобретаем — если на WhoScored момент отмечен как Big Chance, то мы его учитываем как Big Chance. Никакой магии здесь нет.
У вас есть структурированные данные по xG и xA каждого игрока?
Так или иначе эта информация у нас есть, но чтобы прям структурировано по каждому игроку — нет. Никита проводит некоторый анализ, который основывается на xG отдельных игроков, но это довольно сырая тема, поэтому пока мы ее особо не выкладываем. Хотя это может быть кому-то интересно в специфических ситуациях, в том же фэнтези-спорте.
Если считать, что xG-модель приближена к реальности на длинной дистанции, то есть смысл полагать, что xG игроков тоже близко к реальности отражает их вклад в игру.
С такими выводами нужно быть очень аккуратным, ведь дистанция — понятие очень тонкое. Что такое дистанция? У тебя есть некоторое среднее значение, и на дистанции ты более-менее гарантируешь, что показатель придет к этому значению — количество голов придет к xG. Но эта дистанция может быть очень длинная, а значит, и расхождение с этим средним может быть очень большое в рамках даже одного сезона одной команды. А по одному игроку — это я вообще не знаю. Даже несколько сотен ударов у топового нападающего — это не очень много.
Я говорю не о том, чтобы выводить точную цифру ожидаемых голов конкретного игрока под матч или сезон, а о том, чтобы оценивать количество моментов, которые есть у нападающего. Ведь уровень игры форварда оценивается не тем, сколько он забил, а тем, сколько моментов смог найти. Думаю, это была бы достаточно интересная статистика, но пока она выкладывается только какими-то совсем уж мелкими кусками.
Не спорю, это может быть интересно, но любую предлагаемую информацию мы пытаемся сопровождать хотя бы каким-то минимальным анализом, а не просто кидать сырые цифры. Посмотрим в следующем сезоне, как будет развиваться этот вопрос. Возможно, мы будем выкладывать и эти данные.
xP-таблица РФПЛ после 28 туров
Перейдем к анализу самих таблиц. Какие колонки вы считаете наиболее значимыми?
Еще раз уточню, что эти таблицы — очень ранняя версия. В какой-то момент я решил добавить некоторые колонки, которые уберут статистический шум, например, матчи, где команда сильно переигрывает оппонента по xG. В них мы ей засчитываем не целиком победу, а чуть-чуть недопобеду — это следует из математики, ведь ты не можешь быть уверен, что кто-то выиграет, даже если перебьет соперника по ударам 30:1, все равно есть минимальный процент вероятности, что победы не будет.
Выкидывая это, мы добавили колонку True diff. Она интересна в первую очередь разницей с результатами колонки xP — P. У некоторых команд отличия существенные, у некоторых — нет, т.е. есть команды, которые никогда сильно не проигрывают и никогда сильно не выигрывают — в основном проводят средние матчи. Это интересная метрика, но все еще сырая.
Мы еще не сильно исследовали статистическую сторону этих вещей и не поняли насколько хватает выборки, чтобы говорить о том, что полученные цифры отражают реальную разницу между фактических набранными очками и ожидаемыми очками по модели. В перспективе эти данные могут отражать уровень удачи команд и мне они кажутся значимыми, а при должном уровне анализа станут очень значимыми.
Колонка True diff — самое интересное значение, к которому вы пришли в таблицах?
Что касается xP-таблиц с расчетами по ожидаемым очкам — да, а в xG-таблице — это отношение количества голов к количеству созданных моментов. У нас с Никитой разная сфера ответственности в этом плане. Он изначально был больше по xG-таблицам, а я по xP-таблицам.
Колонка True Diff по Англии подтверждает мои ощущения от сезона: “Ман Сити” и в особенности “Саутгемптон”, как по мне, явно недобрали очков. И вот у них True diff даже увеличивается, по сравнению с xP-P.
Это нормальная ситуация, что вверху таблицы эта разница увеличивается, внизу — уменьшается, а в середине — примерно на одном уровне. В колонке True diff результаты сглаживаются и больше приближены к реальности. Если взглянуть на тот же “Челси”, то 15 очков перебора выглядят странно, а 7 очков — уже лучше. Это немало, но по большому счету всего 2 матча, т.е. всего 2 победы там, где их не должно было быть. На расстоянии сезона это не такой уж большой перебор.
В xG-таблице Никита выделяет самыми важными колонки NPG/xG, NPGa/xGa, ведь по ним можно выделить фактор удачи и реализации?
Опять же вопрос в значимости — насколько эти цифры отличаются от единицы. Голы — это же случайные события, и мы наблюдаем некий исход случайных событий и не можем точно сказать, что на самом деле отношение равно 1,3. Все могло пойти чуть по-другому и все отношения бы изменились. Но вообще да, изначально эти колонки призваны, чтобы мерить удачу и понимать, насколько сильно команда перебирает или недобирает голов, меньше или больше пропускает — с этой точки зрения они, конечно, наиболее интересны.
xG-таблица РФПЛ после 28 туров
Несколько месяцев назад ты выложил код расчетов в открытый доступ.
Это далеко не весь код, это та часть, которая переписывает формулы Кэйли в удобоваримый вид и позволяет за один вызов функции посчитать xG какого-то удара. Всю работу с данными я не выкладывал и не хочу выкладывать, да в этом и смысла большого нет: там муторный процесс, который специфичен и вряд ли будет полезен. Сама функция, которая позволяет высчитать xG по параметрам удара, гораздо интереснее.
Сколько времени ушло на создание модели?
Сложно сказать. Много времени ушло на постепенные улучшения и отлов проблем, которые возникали по ходу дела. Самую первую версию я написал меньше чем за неделю. Если сразу писать хорошо и быть очень умным, не наступая на кучу граблей, то за неделю можно написать толковую программу.
Промежуточный массив данных для построения таблиц
В теории ты предполагаешь, что эти расчеты и твой код могут кого-то заинтересовать? И предполагаешь ли ты коммерческое использование всего этого?
Коммерческое использование меня не сильно интересует.
Например, в условный “Оренбург” приходит прогрессивный тренер, он знает, что вы делаете что-то интересное для анализа матчей, понимает, что это будет далеко не у всех соперников по РФПЛ, и предлагает вам сотрудничать.
Это можно рассмотреть, но коммерческое использование — вещь тонкая, ведь мы берем данные с WhoScored. Пока мы перерабатываем и используем данные для себя — это одно, а перепродавать их тому же “Оренбургу” мы не можем. Если нам будут предоставлять свои статистические данные для анализа и мы сможем с ними что-то полезное сделать, то возможно. Все зависит от конкретной ситуации, но вообще я сомневаюсь, что условный “Оренбург” к нам придет.
Точки ударов матча «Оренбург» — «Уфа» от WhoScored
Пока никаких предложений вам не поступало? Не только от футбольных клубов, а вообще от кого-то, кого заинтересовала xG-модель?
Ко мне никто не обращался, да я пока и не рассматриваю это как коммерческое приложение. Сейчас это просто занятная вещь, которая многим интересна. Эффект от того, что больше народу будет ей интересоваться и работать над ее улучшением, гораздо больше, чем какое-то коммерческое использование здесь и сейчас. Для себя я выгоду особо не ищу.
Есть ли мысли сделать модель более дружественной пользователю. Создать приложение, которое будет выдавать xG по каждому матчу и автоматически обновлять таблицы по прошествии туров? В ближайшее время такое стоит ожидать?
Программист я только условно. Я пишу скрипты, а не программы, поэтому от меня такого ждать не стоит. Когда-нибудь может появиться сайт, на котором будет удобно все это смотреть, но пока сложно сказать когда.
Таких планов пока нет?
Об этом лучше говорить с Никитой. У него были подобные идеи. Мне это не то чтобы сильно интересно. Я вряд ли буду активно заниматься разработкой сайта или чем-то еще в этом направлении.
Для тебя это было просто интересное начинание, связанное с твоими любимыми статистикой и футболом и не более того?
Да-да, 100% так.
Ты сам упомянул про фэнтези, поэтому затронем и эту тему. Надо признать, я был сильно удивлен, когда увидел тебя в своем телеграм-чате. У нас ведь все еще достаточно узкое фэнтези-комьюнити, особенно русскоязычное. Насколько серьезно ты интересуешься этим вопросом?
Я интересуюсь, но пока играю в фэнтези только на sports.ru, да и то достаточно средне. В дэйли фэнтези я пробовал играть, но на него нужно регулярно тратить много времени. В сезонных турнирах на “Спортсе” можно сделать замены в пятницу вечером по всем чемпионатам сразу и не особо копать. А когда играешь на деньги, неглубоко копать — это проигрывать эти самые деньги, поэтому из-за недостатка времени дэйли фэнтези пока не трогаю, хотя пробовал играть на минимальные суммы.
Ты сейчас живешь во Франции. Расскажи напоследок, как ты вообще туда попал?
Я учился в университете в Новосибирске, и у нас была такая замечательная программа двойных дипломов с французскими вузами, в рамках которой мы могли попробовать сдать экзамены в высшие французские школы. Во Франции немного другая система образования. Там вузы сами по себе не очень сильны, особенно в технических науках, я бы даже сказал, что они слабы в этом плане. Зато есть система высших школ, которая компенсирует это. Не сказать, что они элитарны, но в них очень трудно поступить, и во Франции в них очень большой конкурс.
Мне повезло учиться в Новосибирске в университете с программой сотрудничества с этими высшими школами. Мне удалось поступить в одну из таких школ, где я отучился 4 года уже после окончания бакалавриата в России. Так я и попал во Францию. Школа была хорошая, поэтому остаться было несложно.
Ты быстро нашел работу в статистической сфере?
Да, сразу нашел место по специальности. К тому же в рамках школы нас учили французскому языку, поэтому и в этом плане никаких проблем не было.
Обучение велось на французском?
Да, но когда ехал во Францию, ни слова не знал. Уже там первые полгода у нас был очень жесткий интенсив — мы усиленно учили язык, и это принесло плоды.
«За 2016 год я заработал больше 2,5 млн». Интервью с крутым русским беттором
Читать также:
Нашли ошибку? Сообщите нам
Комментарии (2)
Stan
… Ибо серьёзному главному тренеру не нужна никакая аналитика, она у него перед глазами. И не уровня «сколько было игроков перед кем-то, когда он бил по воротам». А аналитика уровня «что улучшить в команде имеющихся игроков + как им это донести, чтобы выигрывать матчи. Всё.
(А вот чтобы выигрывать матчи, надо не гатить по воротам как можно больше (тупой подход), надо обмануть соперников. И в то же время не дать соперникам обмануть себя. Ну и заставить игроков бороться, всегда. (Ибо если 2 минуты матча перестать бороться — можно успеть пропустить 3 мяча).
А так, если новый игрок 2 раза подряд подобрал себе под правую ногу и ударил в сторону ворот — его можно уже садить на лавку. Потому что это простак, соперники прочитали и поняли его, что он будет дальше делать на поле и как. И конечно, ему не дадут ничего путнего сделать.
А если и тренер попадается такой, что тупо на статистику работает (чтобы положить руководству на стол количество навесов слева и справа (при отсутствии результата) — то на месте руководства избавляться надо от такого тренерского штаба, как можно быстрее! пока сезон не провален полностью, а у лучших игроков не уничтожен в ноль боевой дух таким тренерством….
Stan
«»Например, в условный “Оренбург” приходит прогрессивный тренер, он знает, что вы делаете что-то интересное для анализа матчей, понимает, что это будет далеко не у всех соперников по РФПЛ, и предлагает вам сотрудничать.»» (с)
_______________
… в этом месте мне стало особенно смешно! )
Ибо тренер такой команды как Оренбург, никогда добровольно не пойдёт ни на какое «сотрудничество» с программистами, далёкими от понимания футбола (или с поверхностным пониманием, со статистами «в общем и целом по планете Земля в прошлом году».
Либо это будет вообще не тренер, не то что «перспективный»…
(Может, руководство и пойдёт, во время длительных спортивных неудач и наличия лишних денег (для содержания штата нахлебников-аналитиков, вместо улучшения контрактов игрокам)