17 мин.

Знакомство с базовыми инструментами футбольного Data Scientist-а. Объясняем, где найти бесплатные данные и с чего начать

Телеграм-канал автора

Любая аналитика начинается с данных. На основе собираемых данных о футболистах считаются различные футбольные метрики, которые затем отображаются в форме удобной для восприятия и последующего анализа. Поиском различных закономерностей в данных, расчетом всевозможных статистик и их визуализацией занимаются специалисты, которых сегодня называют - футбольные Data Scientist-ы.

Футбольная аналитика активно развивается во всем мире, и Россия здесь не исключение. В аналитических отделах клубов РПЛ постепенно появляется потребность в людях, которые бы владели базовым инструментами работы с данными. Сегодня одним из основных таких инструментов является язык программирования python.

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

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

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

Часть №1 - бесплатные данные от провайдеров

В интернете есть большое количество источников бесплатных данных - как данных о событиях (event data), так и трекинговых данных (tracking data). Зачастую их предоставляют сами провайдеры для ознакомления и в маркетинговых целях. Работа с такими данными сопряжена с рядом неудобств.

Первая проблема заключается в том, что данные предоставляются в основном не самые свежие и в довольно сжатом объеме. Ниже пример турниров и самых актуальных сезонов, по которым можно получить бесплатные event-данные от StatsBomb. Самая большая история доступна по играм Барселоны. Внутри StatsBomb этот датасет позиционируют как максимально полный источник данных по Лионелю Месси и называют - The Lionel Messi Data Biography.

Среди топовых европейских чемпионатов помимо Ла Лиги представлена только АПЛ сезона 2003-2004, при этом доступны данные только по играм Арсенала, который тогда занял первое место.

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

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

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

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

Часть №2 - бесплатные данные из интернет ресурсов (с сайтов)

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

По всем топовым чемпионатам помимо стандартного набора статистик fbref предоставляет агрегированные метрики, которые самостоятельно считает на основе сырых event-данных от StatsBomb. Такие данные доступны с сезона 2017-2018. По РПЛ, к сожалению, расширенного набора данных от StatsBomb на сайте нет.

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

Часть №3 - парсинг данных с fbref

Выше мы отметили, что данные с fbref являются отличным вариантом для введения в футбольную аналитику, они бесплатны и содержат рассчитанные метрики от StatsBomb. Но есть одно но - fbref не предоставляет инструментов для скачивания этих данных (в программирование это называется API).

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

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

Теперь важный момент. В мире программирования существует такое понятие как open source. Так называется парадигма, которая заключается в том, что люди по всему миру пишут свои программы для всевозможных задач и выкладывают их в сеть - делятся с другими. Футбол здесь не исключение.

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

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

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

Часть №4 - оригинальный радар от StatsBomb

Ниже представлен свежий радар от StatsBomb для Килиана Мбаппе. Данный радар я нашел в твиттере StatsBomb, где их периодически выкладывают. На постоянной основе такая визуализация доступна только владельцам программ Statsbomb IQ.

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

Для построения радара нужно создать шаблон, на котором будут отмечены соответствующие граничные и промежуточные значения. Эти значения можно получить из истории по предыдущим сезонам, построив распределения значений для каждой конкретной метрики (справа на радаре StatsBomb).

Часть №5 - распределения значений для метрик

Зачем нужны эти распределения и что это такое?

Самый простой пример - вы читаете новый аналитический отчет, в котором в очередной раз приводится метрика xG для футболиста, пусть она равна 0.35 в среднем за матч по прошествии половины сезона. Можете ли вы как-то оценить - это много или мало? С чем вы будете сравнивать? Даже если вы сравните несколько игроков между собой, то как оценить эти значения относительно остальных футболистов, которых нет в данный момент в аналитическом отчете?

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

Ниже приводится оригинальное распределение для метрики non-penalty xG (без учета ударов с пенальти) и аналогичное, которые можно построить над данными с fbref.

Несколько замечаний по методике построения распределения:

  • из всех футболистов среди Top5 чемпионатов за последние 4 сезона оставляем только нападающих (StatsBomb использует 5 сезонов)

  • отбрасываем тех, которые сыграли менее половины сезона - менее 19 игр (на оригинальном радаре StatsBomb не указывает используемое ограничение по времени, в некоторых источниках я находил примеры отсечения - менее 900 минут (менее 10 матчей))

  • для выбранных футболистов строим гистограмму (столбиковый график, который показывает - как часто встречаются те или иные значения метрики среди футболистов)

  • по построенной гистограмме строим еще один график - плотность распределения вероятности для метрики npxg (это не тоже самое, что вероятность!). В подробности того, что это такое, на данном этапе можно не вдаваться. В первом приближении - это сглаженная версия гистограммы, которую можно условно определять как распределение значений метрики.

На построенном распределении мы видим:

  • минимальный npxG за 90 минут для нападающих TOP5 лиг за последние 4 сезона составляет 0.08 (это Адама Траоре в сезоне 2020-2021 в Вулверхэмптоне. На fbref его позиция до нынешнего сезона была отмечена как FW, в текущем сезоне метка поменялась на сдвоенный вариант - "FW,MF", что скорее всего ближе к правде)

  • максимальный - 1.01 (в среднем создаваемая опасность условно эквивалентная 1 голу за игру - это Роберт Левандовски в Баварии в Бундеслиге 2017-2018)

  • 5-ый процентиль - нижняя граница радара, равняется 0.18 (только 5% всех нападающих имеют более низкие значения на всей истории). На распределении эти футболисты находятся левее первой границы.

  • 95-ый процентиль - верхняя граница радара, равняется 0.61 (это показатель Роналду в Ювентусе в сезоне 2018-2019 в 33 года!). 95% всех нападающих демонстрировали более низкие значения за последние 4 года, не включая текущий сезон.

  • 50-ый процентиль или медиана - она как раз таки равняется 0.35 npxG за матч. Данное значение делит всю нашу выборку нападающих ровно пополам. Половина имеет более высокое значение, половина - более низкое.

  • Мбаппе демонстрирует 0.58 npxG и почти дотягивается до Top 5% лучших футболистов в нашей статистике. Значение для исследуемого игрока рассчитывается по текущему сезону 2021-2022.

Сравнение с искомым радаром (почему значения несколько отличаются)

Самый главный нюанс, который мне удалось обнаружить, заключается в том, что fbref и StatsBomb по разному считают игровое время. Если вы возьмете свежий радар от StatsBomb и сразу посмотрите таблицу на fbref то увидите некоторое отличие в количестве сыгранных 90s (90-минутных интервалов). StatsBomb считает чистое время (с учетом добавленных значений), fbref не учитывает добавленное время. Обычно, для игроков, которые имеют много игрового время такое отличие составляет плюс (1 ÷ 1.5) 90s по ходу сезона - одна игра или даже больше.

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

Стоит отметить, что определения игровых амплуа может несколько отличаться у StatsBomb и fbref. Для построения распределения я использовал только метку FW, но она также фигурирует у ряда игроков совместно с другим показателем, например - 'FW,MF', 'DF,FW', 'MF,FW', 'FW,DF'. Вероятно, выборки нападающих, которые использовал я и которые использует StatsBomb несколько отличаются (внутри рассматриваемых сезонов).

Выборка на моем распределении - 4 сезона, у StatsBomb - 5 сезонов. Это неминуемо ведет к некоторым расхождениям в показателях.

В текущий момент на fbref доступны значения после 12 матчей в Лиге 1, для примера используется радар с 10 играми Мбаппе.

На распределении StatsBomb наблюдаются некоторые "бугорки", которые в статистике называются пиками или модами. На моем они отсутствуют и получается более гладкая кривая. Тут есть много нюансов при построении. Если посмотреть на столбики гистограммы, то видно, что где-то пики сопровождаются падением и затем снова возрастанием значений. При желании можно построить менее гладкую кривую, которая будет отражать данные нюансы, но мы не будем усложнять.

Забегая вперед также стоит указать, что некоторые метрики StatsBomb и Fbref считают по-разному на основе сырых event-данных. Сотрудники StatsBomb подтверждали эту информацию. Они указывали, что метрику Interceptions (перехваты) fbref считает иначе, по сравнению с ними. Я также обнаружил некоторые расхождения для ряда метрик, например Pressure regains (восстановление владения в результате прессинга) и довольно простую метрику - Touches in Box (касания в штрафной соперника).

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

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

Для построения радаров нам понадобятся: 5ый и 95ый процентили, а также непосредственное значение метрики Мбаппе.

Часть №6 - построение радара

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

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

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

Ниже для примера рассмотрим рейтинг нападающих их Тоp5 чемпионатов, которые по npxG входят в 5% лучших нападающих последних 4 лет. Мы должны отфильтровать данные fbref по текущему сезону, оставив только нападающих, которые имеют npxg_per90 больше или равную 0.61. Также я поставил ограничение на минимум 5 сыгранных матчей.

Для каждого из них теперь можно в пару кликов построить радар. (В идеале этот процесс можно и вовсе автоматизировать - получать радары лучших игроков каждый раз, когда новые данные по прошедшему туру будут подгружаться на fbref, например).

Часть №7 - Итоги

В индустрии футбола появилась такая профессия как Football Data Scientist. (В телеграм канале Кирилла Серых, который работает DS в Sportec Solutions в Германии, вы можете найти ссылку на список открытых вакансий по миру, который он постепенно пополняет. Помимо этого, там много самой свежей и актуальной информации из области футбольного DS).

Одним из базовых инструментом в этой профессии является - программирование на языке python.

В РПЛ тоже появляется потребность в таких специалистах, но пока, вероятно, чуть с более узким функционалом. Футбольным аналитикам нового поколения требуются навыки работы с python. Можете посмотреть подкаст футбольный механизм с аналитиком ЦСКА Максимом Ковалевым, где он, в том числе, рассказывает как осваивает питон.

В свободном доступе уже существует большое количество программ для футбольной аналитики, написанных на python. Вы можете их использовать в образовательных и прикладных целях, вам не нужно писать их заново. (существует большое open-source комьюнити)

В данном посте я постарался в общих чертах описать, как с помощью языка python вы можете получить бесплатные актуальные футбольные метрики, рассчитанные на основе event-данных, и привел пример изучения данных метрик через исследование распределений и последующую визуализацию в виде радаров.

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

Безусловно, одного навыка в программировании на python вам не будет достаточно, чтобы попасть в индустрию. И работа DS не ограничивается построением визуализации по имеющимся данным. Все несколько сложнее.

Требуемые навыки и предполагаемый рабочий функционал может сильно варьироваться от клуба к клубу или аналитической компании. Например, здесь - описание вакансии DS в новую команду к Саре Рад, которая внесла значимый вклад в футбольную аналитику, предложив прообраз метрики xT на основе цепей Маркова в далеком 2011.

Обычно неотъемлемой частью Data Science-а является построение моделей машинного обучения. В футболе их строят для получения новых, более эффективных метрик (VAEP, OBV) или анализа игры команды на угловых, например. Эту тему я специально опустил в данной статье, но нужно понимать, что она неразрывно связанна с профессией Data Scientist-а. Чтобы переходить к построению моделей, нужно сначала, как минимум, освоить python и базовую статистику.

Если уже сейчас интересно понять, какие модели строят футбольные DS, и как их затем применяют в индустрии, то можете посмотреть видео ниже. В нем на бесплатных event-данных от Wyscout по сезону 2017-2018 строят модель для расчета метрики VAEP.

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

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

Часть №8 - Ссылки на данные + курсы

Здесь я выложил проект по скачиванию данных с fbref и построению радаров.

Сами данные в формате .csv (за прошлые 4 сезона) - здесь.

  • outfields_17_18__20_21.csv - статистика по полевым игрокам

  • keeper_17_18__20_21.csv - статистика по вратарям

  • team_17_18__20_21.csv - статистика по командам

  • team_vs_17_18__20_21.csv - статистика по соперникам для каждой команды

Данные по текущему сезону - здесь.

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

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

Полезные бесплатные курсы

1. Основы программирования на python - основы синтаксиса языка, упражнения на закрепление навыков.

2. Основы статистики - великолепный курс для новичков и не только, все объясняется максимально простым языком.

3. Базовый обзор по Data Science на простых примерах (+ уроки по работе с pandas - основная библиотека для работы с таблицами на python)

Можно приложить еще множество ссылок по более глубокому изучению Data Science, математики, языка SQL и т д, но лучше делать все постепенно.

P.s.

Также стоит отметить, что на русском языке появилась первая школа футбольной аналитики buildup-school, где в том числе дают какую-то базу по python. О стоимости курсов в школе и деталях учебных программ дополнительной информацией не располагаю. Насколько я понял, в создании курса в том числе принимали участие аналитики клубов РПЛ. Ссылка на телеграм канал школы - здесь.

Метрика VAEP - эффективный способ оценки действий футболистов на основе машинного обучения и основной конкурент xT

Радар футболиста - идея, пришедшая из NBA и ставшая стандартом для визуализации метрик в футбольной аналитике

Группа в вк