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

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

Итак, пайплайн проекта был:

  • Получите данные по прошлым сезонам игроков НФЛ (по крайней мере, 2018–2022 гг.).
  • Обработайте эти данные, чтобы создать соответствующие функции для каждой позиции.
  • Создайте модель ML для каждой позиции (QB, RB, WR и TE).
  • Рассчитайте вероятность того, что игрок будет выбран в каждом раунде, и оцените, будет ли это хороший выбор, основываясь на его прогнозируемых очках.

Весь код проекта находится в GitHub Repo, если вы хотите подробно следить за реализацией.

Получение и обработка данных

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

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

Поскольку они предоставили данные ADP с сезона 2018 года до последнего, 2022 года, я использовал их в качестве сезонов для обучения модели.

После получения данных следующим шагом будет их обработка. Моя идея заключалась в том, чтобы использовать в качестве целевого значения количество очков за игру (PPG), поэтому я взвесил все столбцы по играм, сыгранным в сезоне для каждого игрока. При этом я создал для каждого сезона, с 2018 по 2022 год, следующие функции:

  • Простое скользящее среднее (SMA) каждой статистики за последние 3 сезона.
  • Экспоненциальное скользящее среднее (EMA) каждой статистики за последние 3 сезона.
  • YDS/ATT, TD/ATT для быстрой статистики.
  • YDS/REC, YDS/TGT, REC/TGT и TD/TGT для получения статистики.
  • ADP и сколько лет карьеры.
  • SMA и EMA очков Fantasy для каждого игрока.

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

Модель

На этапе моделирования я провел стандартизированный анализ, основанный на выявлении корреляции между созданными мной базовыми функциями и целевыми показателями, а также корреляции между взвешенной версией базовых функций по ADP, EMA Fantasy Points и SMA Fantasy Points. Могу подвести итоги:

  • Функции взвешивания по прошлым Fantasy Points были эффективны для всех позиций.
  • Взвешивание характеристик по сезонам ADP было эффективным только для позиции WR.

Идея взвесить функции пришла мне в голову, потому что статистика ADP и SMA/EMA прошлых Fantasy Points значительно коррелировала с целью, а чистая статистика игрока — нет. После взвешивания я увидел явное улучшение значимости функций для статистики. Ниже приведена разница в некоторых статистических данных WR.

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

И, чтобы оценить работу модели, я сравнил результаты сезона 2022 года с прогнозами FantasyPros. Результат позиции РБ можно увидеть ниже:

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

Единственным оставшимся шагом для прогнозирования результатов игроков в сезоне 2023 года была работа с новичками. Поскольку они впервые играют в лиге, мы не можем рассчитать для них EMA и SMA. Итак, моя идея заключалась в том, чтобы заменить их прошлые результаты средними показателями игроков, наиболее близких к их ADP за последние 5 сезонов. Например, ADP Биджана Робинсона составляет 8,7, поэтому я усреднил статистику ближайшего к 8,7 RB за последние 5 сезонов, чтобы получить оценку его игры. Нет единого мнения о том, как обращаться с новичками, и это одна из самых больших проблем в прогнозах НФЛ.

После этого я спрогнозировал ожидаемое количество очков за игру на сезон 2023 года и создал доску с прогнозом для каждого игрока. Результат описан на изображении ниже.

Столбец AVG — это средний ADP, который игрок имеет в данный момент, а столбец STD — это стандартное отклонение ADP, которое имеет игрок. Оба предоставлены FantasyPros и используются для расчета вероятности того, что игрок будет выбран в каждом раунде.

Проект анализа

Чтобы получить оптимальный проект, нам нужно сбалансировать две вещи:

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

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

Чтобы удовлетворить эти потребности, я буду работать с двумя статистическими данными: VOR и Вероятность следующего раунда.

Что такое VOR? Вероятно, в настоящее время это наиболее используемый статистический показатель для оценки игроков американских лиг. Понять это довольно просто: на каждую позицию, в данном случае QB, TE, RB и WR, у нас будет игрок под названием «игрок на замену», которого можно выбрать разными способами. Я выберу игроков на замену, используя логику порога ADP. То есть я определяю порог ADP, и игрок, ближайший к нему выше этого порога по каждой позиции, будет назначен игроком на замену. После выбора игрока на замену расчет VOR становится очень простым. В этом разница между прогнозируемыми очками игрока и прогнозируемыми очками запасного игрока. Я использовал в качестве порога ADP 100, и это прогнозируемые очки запасных игроков:

Положительным моментом в VOR является то, что он помогает уловить ценность каждой позиции. Средний ожидаемый PPG у QB, очевидно, выше, чем у RB, но, например, ожидаемый PPG для его замены также выше. Вот почему в фэнтези-драфтах чаще получают RB, а не QB.

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

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

Потеря VOR — это, по сути, сколько VOR я потеряю, если не выберу игрока в этом раунде. Он рассчитывает средний VOR трех лучших игроков на этой позиции с вероятностью более 50% быть доступными в следующем раунде. Чем выше VOR Loss игрока в данном раунде, тем выше его ценность в этом раунде. Итак, наш последний шаг — создать структуру для моделирования проекта, которая будет рассчитывать потери VOR раунд за раундом и отслеживать, как мы это делаем.

Логика заключается в том, чтобы получить в качестве входных данных позицию драфта, вычислить потери VOR и отобразить две таблицы: первая содержит игроков с вероятностью более 30% быть доступными в текущем раунде, а вторая - игрока с ADP внутри этого раунда. Ниже я показываю пример этих двух таблиц, используя позицию №5 в качестве входных данных.

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

Заключение

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

С помощью парсера FantasyPros я могу очень легко отслеживать все изменения в логике проекта, а также использовать статистику в качестве основы для моего проекта Framework. Кроме того, я доволен созданной мной моделью ML. Я не привык работать с задачами регрессии, поэтому это был очень хороший проект для обучения.

В качестве улучшений, я думаю, мы могли бы выделить три вещи, которые окажут положительное влияние, но значительно усложнят проект: автоматизировать Draft Framework с использованием актуальной информации с вашего чернового веб-сайта, улучшить модель ML с помощью более глубокой статистики, и создайте прогноз производительности новичков в НФЛ на основе их драфта и статистики колледжа. Это изменения, которые требуют много времени, но значительно упростят проект.

Наконец, если вы хотите подробно рассмотреть код проекта, это GitHub Repo. Если вы хотите связаться со мной, это мой LinkedIn. Спасибо!

Сообщение от AI Mind

Спасибо, что являетесь частью нашего сообщества! Перед тем, как ты уйдешь: