Прогнозирование карьеры игроков НБА с помощью повторяющейся линейной регрессии

Есть что-то в том, чтобы быть спортивным фанатом, какой-то ненасытный зуд, который заставляет нас постоянно делать смелые прогнозы на будущее. Чтобы избавиться от этого зуда, возникли огромные индустрии, сразу приходят в голову фэнтези-спорт и азартные игры. Кроме того, когда у нас заканчивается что-то для предсказания в пределах игрового поля, наши предсказания выходят за рамки линий. С самым последним Суперкубком можно было не только делать ставки на MVP игры, но и делать ставки на MVP Puppy Bowl. Ясно, что мы просто ничего не можем с собой поделать. Что касается прогнозов, я ничем не отличаюсь от остальных.

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

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

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

Концепция проекта

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

Рекуррентные модели

То, что я только что описал, является повторяющейся моделью. Рекуррентные нейронные сети - самые популярные рекуррентные модели в наши дни из-за их способности изучать сложные функции. Однако можно сделать регрессионную модель любого типа повторяющейся, передав выходные данные обратно через модель в качестве входных данных. Это можно сделать с помощью линейной регрессии, случайной регрессии лесов или регрессии с градиентным усилением, и это лишь некоторые из них. Поскольку траектория карьеры в НБА относительно проста, оказывается, что менее сложные повторяющиеся модели, например линейные регрессии, на самом деле дают лучшие результаты. Более сложные модели, такие как рекуррентные нейронные сети, как правило, решают эту проблему, что приводит к очень странным прогнозам при прогнозировании нескольких сезонов в будущем.

Нециклический временной ряд

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

Цели прогнозирования и выбор функций

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

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

Подготовка данных

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

Получение данных

Данные для этого проекта были собраны из Sports Reference API, который ранее обсуждался в этой связанной статье. В статье рассказывается, как использовать API для создания исчерпывающего набора данных статистики игроков NBA. Это тот же набор данных, который использовался в качестве отправной точки для этого проекта. Набор данных содержит различные традиционные и расширенные статистические данные по каждому сезону каждого игрока, игравшего в НБА за последние 20 лет.

Очистка данных

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

Другой необходимый шаг очистки заключался в том, чтобы учесть случаи съемки с малым размером выборки. Например, знаете ли вы, что Энес Кантер пробил 100% из 3 для Utah Jazz в сезоне 2013 года (1 к 1). Подобные точки данных, если их не учитывать, приводят к довольно нелепым предсказаниям в отношении съемки с 3 точками. В наборе данных также было около 700 сезонов, когда игрок не забил ни одной тройки, и им нужно было назначить конечный процент. Реализованное решение заключалось в том, чтобы ограничить процент съемки определенным диапазоном при небольшом размере выборки.

Функциональная инженерия

Первым этапом разработки функции было преобразование количества сыгранных минут в количество сыгранных минут из всех возможных минут. Для этого шага было сделано предположение, что реалистичное максимальное возможное количество минут составляет 40 минут на игру. Используя это предположение, долю сыгранных минут можно легко рассчитать следующим образом: (пропорция минут) = (сыгранные минуты) / ((сыгранные игры) * 40). Это помогает учитывать сокращение сезонов из-за травм или локаута.

Второй применявшийся трюк при проектировании функций заключался в умножении 3-х процентных процентов на 1,8. В сочетании с этапом, описанным ниже, это эффективно ограничило выход модели на 3 процентных пункта на уровне 55,5%, помогая предотвратить завышение прогноза модели на 3 процентных пункта.

После применения описанных выше шагов по проектированию функции все процентные характеристики, интервалы стрельбы и доля сыгранных минут были преобразованы в логарифмические коэффициенты с использованием функции logit. По сути, это преобразует любую последующую линейную регрессию в логистическую регрессию и ограничивает прогнозы характеристик диапазоном (0,1). Более подробно эта техника описана в моей предыдущей статье Превосходя шансы. Преобразование из логарифмических коэффициентов обратно в проценты легко выполняется с помощью функции сигмоида.

Наконец, были введены нелинейные функции age² и age³. Эти функции позволили модели рекуррентной линейной регрессии изучить полиномиальные функции более высокого порядка по отношению к возрасту, что значительно повысило производительность.

Тренировка тестового сплит

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

Построение модели

Упрощенное тестирование

Первым шагом к построению рекуррентной модели было тестирование различных типов регрессии при прогнозировании одного признака. Это должно было дать некоторое представление о типе модели, которая будет хорошо работать для построения полной модели. Для этого упрощенного теста scikit-learn LinearRegression, RandomForestRegressor и GradientBoostedRegressor, а также регрессор нейронной сети, созданный в tensorflow, использовались для прогнозирования двухточечных попыток игрока на основе их возраста и ограниченного набора сильно коррелированных прошлых функций. Модель простой линейной регрессии смогла получить наилучшую точность на тестовом наборе для этой задачи, прогнозируя две попытки за 36 минут со средней абсолютной ошибкой 1,2 попытки. Путем создания некоторых синтетических данных были выявлены корректировки модели к двухочковым попыткам по возрасту для игрока со средним статистическим уровнем.

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

Мультимодельный контейнер

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

Оценка модели

Оценка одного сезона

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

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

Эта таблица показывает, что, хотя модель смогла предсказать два процентных пункта в пределах MAE, равного 3%, Z-оценка предполагает, что модель испытывала наибольшие трудности при прогнозировании этой категории. Чтобы получить единый показатель общей производительности модели, эти Z-баллы были суммированы по всем категориям. Это дало общий балл 4,91 для обучающей выборки и 4,93 для тестовой выборки. Здесь стоит отметить, что производительность между обучающим и тестовым наборами была очень похожей, что является отличным признаком того, что модель не слишком подходит для обучающей выборки.

Полная оценка карьеры

Прогнозировать производительность на один сезон в будущем - это хорошо, но весь смысл построения повторяющейся модели заключался в том, чтобы иметь возможность делать более долгосрочные прогнозы; прогнозы производительности на 3, 5 или даже 10 лет вперед. Чтобы оценить эффективность долгосрочных прогнозов, в повторяющуюся модель засевали сезон новичка каждого игрока и периодически использовали для прогнозирования каждого последующего сезона карьеры этого игрока. Средняя продолжительность карьеры игроков как в тренировочной, так и в контрольной группах составляла 9,8 сезона, поэтому в среднем модель использовалась для прогнозирования 8,8 сезона в будущем. Результаты были собраны с использованием тех же методов, которые описаны для прогнозов на один сезон, и показаны ниже.

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

Ухудшение прогноза

Кроме того, было также интересно определить, как прогнозы модели ухудшались с течением времени. Это было достигнуто путем агрегирования ошибок прогноза на основе того, насколько далеко за пределами сезона новичка игрока был сделан прогноз. Те же методы, описанные выше, были применены для генерации MAE, деления на стандартное отклонение категорий и суммирования Z-баллов для каждой категории. Результаты показаны ниже.

Прогнозирование минут игры

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

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

Затем результаты модели минут оценивались для отдельных сезонов игроков. В этом случае модель была загружена, и фактическая производительность игрока и модель предсказали долю доступных минут, которые сыграл игрок. В этих условиях MAE составляла около 8,5% как для тренировочной, так и для тестовой выборки, что эквивалентно MAE в 3 минуты и 25 секунд за игру.

После этого модель минут была затем оценена для всей карьеры игрока почти так же, как и модель производительности. Это было сделано путем подачи в протокол модели фактических результатов сезона новичков, а затем прогнозов результатов этих игроков на все последующие сезоны. Прогнозы сыгранных минут для каждого сезона затем сравнивались с фактическими сыгранными минутами. В этих условиях MAE составляла около 10,5% как для тренировочной, так и для тестовой выборки, что эквивалентно MAE в 4 минуты и 25 секунд за игру. Этот MAE был преобразован в Z-оценку 0,52 для набора тестов, что свидетельствует о том, что модель могла предсказывать минуты примерно так же, как и другие категории.

Отказ от ответственности в отношении прогнозов на период после 2020 года

Прежде чем двигаться дальше, стоит рассмотреть некоторые из предубеждений этой модели. Хотя описанные выше оценки определяют разумную основу для точности прогнозов на период после 2020 года, следует также учитывать, что НБА постоянно развивается с точки зрения командных стратегий, правил и судейства. Сегодняшняя игра в НБА отличается от той, в которую играли 20 лет назад. Например, защитные схемы, используемые сегодня многими командами, были бы незаконными в 2000 году, прежде чем изменения правил в 2001 году устранили ограничения на зонную защиту. Дело в том, что эта модель была обучена и оценена на карьерах игроков самых последних эпох в баскетболе НБА. Будущие эпохи могут быть совершенно разными, и поэтому долгосрочные прогнозы, сделанные сегодня, будут хуже, чем предполагают текущие оценки.

Собираем все вместе

Убрав этот короткий отказ от ответственности, давайте немного повеселимся и сделаем несколько смелых прогнозов на будущее. Наборы для обучения и тестирования были объединены, и модели были подогнаны к объединенному набору данных. Затем, взяв за основу сезон 2020 года, можно было прогнозировать результативность игроков в будущем. Без лишних слов, ваши статистические лидеры НБА 2023 года:

Очки за игру

  1. Лука Дончич: 33,2
  2. Трей Янг: 31,2
  3. Яннис Антетокунмпо: 29,9

Подборов за игру

  1. Яннис Антетокунмпо: 13,7
  2. Андре Драммонд: 12,7
  3. Хасан Уайтсайд: 11,9

Голевые передачи за игру

  1. Трэй Янг: 8,8
  2. Лука Дончич: 8,7
  3. Джа Морант: 7,8

И награда MVP 2023 года достается…

После впечатляющих результатов в среднем 33,2 очка, 8,8 подборов и 8,7 передач за 38,2 минуты за ночь, а также результативных бросков 49/41/83, вашим самым ценным игроком НБА 2023 года станет Лука Дончич!