Интервью с русским математиком из Франции, который взялся анализировать футбол

BetonMobile пообщался с Андреем Кривоноговым — русским математиком из Франции, который одним из первых взялся анализировать продвинутую футбольную статистику для рунета.

xG — это модель подсчета ожидаемых голов на основе опасности нанесенных ударов. С помощью этих данных можно высчитывать ожидаемое количество очков (xP) команды при показываемом качестве игры. xG- и xP-таблицы Андрея Кривоногова для ведущих европейских чемпионатов можно найти в паблике «Блокнот».

Андрей, как ты пришел к анализу футбольной статистики?

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

Твоя основная профессия связана со спортивной статистикой?

Нет. Как это сейчас модно называть, я Data Scientist, статистик-программист. Работаю в небольшой компании, которая занимается анализом данных и построением предиктивных моделей для онлайн-маркетинга. Я поддерживаю качество предиктивных моделей, пытаюсь понять, каким образом их конструировать, и в том числе их программирую.

Когда пришла мысль взяться за xG-модели?

Не то чтобы до этого я подробно изучал статистику — это было на уровне просмотра количества ударов и подобных вещей. Я балуюсь фэнтези-спортом, и немного смотрел в эту сторону. Относительно 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 туров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 победы там, где их не должно было быть. На расстоянии сезона это не такой уж большой перебор.

xP-таблица АПЛ

В xG-таблице Никита выделяет самыми важными колонки NPG/xG, NPGa/xGa, ведь по ним можно выделить фактор удачи и реализации?

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

xG-таблица чемпионата России

xG-таблица РФПЛ после 28 туров

Несколько месяцев назад ты выложил код расчетов в открытый доступ.

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

Сколько времени ушло на создание модели?

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

Данные для xG-моделиПромежуточный массив данных для построения таблиц

В теории ты предполагаешь, что эти расчеты и твой код могут кого-то заинтересовать? И предполагаешь ли ты коммерческое использование всего этого?

Коммерческое использование меня не сильно интересует.

Например, в условный “Оренбург” приходит прогрессивный тренер, он знает, что вы делаете что-то интересное для анализа матчей, понимает, что это будет далеко не у всех соперников по РФПЛ, и предлагает вам сотрудничать.

Это можно рассмотреть, но коммерческое использование — вещь тонкая, ведь мы берем данные с WhoScored. Пока мы перерабатываем и используем данные для себя — это одно, а перепродавать их тому же “Оренбургу” мы не можем. Если нам будут предоставлять свои статистические данные для анализа и мы сможем с ними что-то полезное сделать, то возможно. Все зависит от конкретной ситуации, но вообще я сомневаюсь, что условный “Оренбург” к нам придет.

Удары матча Оренбург - УфаТочки ударов матча «Оренбург» — «Уфа» от WhoScored

Пока никаких предложений вам не поступало? Не только от футбольных клубов, а вообще от кого-то, кого заинтересовала xG-модель?

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

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

Программист я только условно. Я пишу скрипты, а не программы, поэтому от меня такого ждать не стоит. Когда-нибудь может появиться сайт, на котором будет удобно все это смотреть, но пока сложно сказать когда.

Таких планов пока нет?

Об этом лучше говорить с Никитой. У него были подобные идеи. Мне это не то чтобы сильно интересно. Я вряд ли буду активно заниматься разработкой сайта или чем-то еще в этом направлении.

Для тебя это было просто интересное начинание, связанное с твоими любимыми статистикой и футболом и не более того?

Да-да, 100% так.

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

Я интересуюсь, но пока играю в фэнтези только на sports.ru, да и то достаточно средне. В дэйли фэнтези я пробовал играть, но на него нужно регулярно тратить много времени. В сезонных турнирах на “Спортсе” можно сделать замены в пятницу вечером по всем чемпионатам сразу и не особо копать. А когда играешь на деньги, неглубоко копать — это проигрывать эти самые деньги, поэтому из-за недостатка времени дэйли фэнтези пока не трогаю, хотя пробовал играть на минимальные суммы.

Андрей Кривоногов во Франции

Ты сейчас живешь во Франции. Расскажи напоследок, как ты вообще туда попал?

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

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

Ты быстро нашел работу в статистической сфере?

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

Обучение велось на французском?

Да, но когда ехал во Францию, ни слова не знал. Уже там первые полгода у нас был очень жесткий интенсив — мы усиленно учили язык, и это принесло плоды.

«За 2016 год я заработал больше 2,5 млн». Интервью с крутым русским беттором