Прогнозирование финалов НБА и другой статистики матчей с использованием машинного обучения

Задний план

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

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

Статистика игрового уровня, как упоминалось ранее, сообщается в абсолютном выражении (например, 90 очков, 10 блоков и т. д.). Некоторая мера дисперсии важна для того, чтобы по-настоящему понять природу статистики. Усреднение конкретной статистики по количеству игр за сезон и извлечение среднего значения и дисперсии дает достаточно информации о статистике. Статистика дисперсии, например, является результатом нелинейной операции, которая дает больше информации о присущей команде способности производить конкретную статистику. Будь то путем извлечения нелинейных параметров распределений или построения новой нелинейной статистики, линейным моделям требуется больше информации, чтобы работать лучше, чем стандартный набор статистических данных.

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

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

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

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

Изучая эту тему, мы столкнулись с несколькими другими хорошими базовыми версиями, которые исследовали проблемы, подобные той, которую мы пытались решить. Первая большая статья, которую мы нашли включала использование кластеризации k-средних и принципа максимальной энтропии для достижения точности 74,4% в предсказании победителя серии плей-офф. mИх исходные данные логистической регрессии, случайного леса и нейронных сетей достигли максимальной точности 70,6% для данного плей-офф. Эти исходные данные вдохновили нас на выбор архитектуры. Одна вещь, которую мы заметили, заключалась в том, что, хотя максимальная точность для модели максимальной энтропии была выше, в целом точность была довольно близкой по сравнению с ней. Для второй статьи они использовали другой подход с нейронными сетями для прогнозирования побед аутсайдеров в матчах НБА в целом, что было важно, поскольку он изолировал выбросы от стандартного прогноза — когда команда аутсайдеров выходит победителем. Наконец, последняя статья установила наши истинные целевые цифры в 80%, а также показала с помощью метрик вероятности, что сложные модели не обязательно будут работать лучше в случае плей-офф НБА, поскольку структура плей-офф наивно позволяла прогнозировать 74%. что было нашей конечной целью побить.

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

Чтобы пропустить наши данные через модели, нам пришлось сгенерировать векторы признаков для входных данных. Сами входные данные были собраны со страницы статистики NBA через NBA API и путем извлечения из Basketball Reference. Чтение API и скрейпинг из Basketball Reference было очень утомительным, и у нас есть большая часть кода и наших входных данных, доступных на нашем GitHub для общего пользования. Они довольно большие, но содержат все данные, необходимые для улучшения нашей работы. В качестве входных данных использовались агрегированные данные команд по регулярному сезону, нормализованные относительно среднего значения за сезон. Мы взяли разные виды данных, базовые и расширенные, и сравнили результаты между ними. Весь наш код был написан на Python, а Sklearn, Pandas и Numpy использовались для обработки наших архитектур машинного обучения и наших данных.

Результаты

Для первой итерации прогнозов мы пытаемся абстрагироваться от всего плей-офф и предсказать победителя только на основе статистики регулярного сезона. Мы получили максимальную точность 98,4%, используя небольшой NN. Однако это было ошибочно. Как вы можете видеть на рисунке ниже, у нас было гораздо больше ложных данных, чем истинных данных для прогнозирования чемпиона и чемпиона финала конференции. Таким образом, даже несмотря на то, что наша точность была действительно выше, простое предсказание того, что никто не вышел в финал, дало бы нам точность около 95%. Помня об этом недостатке, мы попытались изменить нашу схему предсказания таким образом, чтобы мы предсказывали победителя одной серии и победителя одной игры. Обратите внимание, что это два разных подхода: один для выбора победителя серии плей-офф, а другой — для выбора победителя любой игры.

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

Ряд:

Игра:

Сначала мы использовали базовые данные, такие как очки за игру, передачи за игру и т. д., в наших входных векторах. Наряду с простыми абстрактными выводами это было достаточно легко получить с помощью NBA API. Для серии нам пришлось использовать веб-скрапинг Basketball Reference, чтобы получить выходные данные серии плей-офф, а затем отформатировать с помощью Pandas, чтобы получить результаты маржи нашей серии. Для игры мы также использовали NBA API, так как для вывода нам нужны были только игры регулярного сезона.

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

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

Еще одна особенность предсказания игр заключалась в том, что для данной игры мы не знали, сколько предыдущих игр использовать для предсказания результатов следующей игры. В конце концов мы остановились на использовании агрегированной статистики из предыдущих 10 игр, но наш код может использовать последние n игр сезона или статистику предыдущего сезона. Для этого нам пришлось использовать расширенную статистику для каждой игры через NBA API и агрегировать их (и нормализовать) с помощью Pandas, чтобы получить наши входные векторы.

Для прогноза серии мы достигли максимальной точности 79%, используя логистическую регрессию, которая превзошла все предыдущие базовые показатели. Для предсказания разброса игровых очков со средней абсолютной ошибкой и среднеквадратичной ошибкой в ​​качестве наших показателей обе дадут нам погрешность в среднем около 10 очков. Мы попытались переключиться на потери Хубера, которые начинаются как MSE и становятся MAE после пороговой точки, чтобы избежать пересчета выбросов. Наша лучшая потеря Хубера с достигнутой разницей в пороговом прогнозировании, равной 20, составила 81 с линейной регрессией, что примерно коррелирует со средней ошибкой в ​​9 баллов при прогнозировании результатов. Некоторые примеры прогнозов показаны ниже.

Ряд:

Игра — Б/У:

Игра — Распределение очков:

Заключение и будущее

В конце концов, мы превзошли наши базовые показатели для прогнозирования серий плей-офф и обнаружили, что с правильными данными мы можем использовать что-то столь же простое, как логистическая и линейная регрессия, для прогнозирования результатов отдельных игр и перевеса побед в сериях плей-офф. Больше всего на свете мы показали, что получение правильных данных (и получение их в достаточном количестве) является ключом к хорошей производительности прогнозов игр и серий в НБА. В ближайшие несколько десятилетий будет доступно все больше и больше данных для обработки как базовой, так и расширенной статистики. Всего у нас было около 1000 точек данных для прогнозирования серии, около 250 из которых использовались для проверки. Таким образом, с большим количеством сезонов мы можем накапливать больше данных для лучшей обработки, что также позволит архитектуре машинного обучения с большим объемом данных, таким как нейронная сеть, работать лучше.

В будущем мы хотели бы учитывать статистику на основе контекста, чтобы лучше предсказывать серию на основе того, как команды реагируют в ситуациях сцепления или когда на полосе горячих или холодных результатов. Это также придаст вес очкам, набранным в разных ситуациях (например, сцепление против увеличения на 20). Подобно DVOA НФЛ, это поможет нам лучше оценить способность команд работать в условиях стресса и даст нам более качественные данные для ввода в наши сети. Кроме того, отладка включения статистики игрока за игроком в наши сводки по сезонам даст нам более качественные данные, описывающие дисперсию и распределение рабочей нагрузки в команде НБА.