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

Давайте начнем этот блог с важного вопроса: зачем использовать машинное обучение для классификации игроков НБА по позициям? Случайный фанат баскетбола, вероятно, посмотрел бы достаточно баскетбола, чтобы определить, какой игрок играет на какой позиции. Даже человек, не знакомый с игрой, может найти на YouTube клипы о великих игроках всех времен, чтобы понять, что делает каждая позиция. Итак, какая дополнительная информация может предложить нам алгоритм машинного обучения, чтобы оправдать его использование?

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

Давайте также рассмотрим другое использование этих позиционных вероятностей. Ежегодно группа спортивных обозревателей и телеведущих голосует за различные награды, такие как Самый ценный игрок, Лучший защитник года и Все команды НБА. Согласно статье на hoopsrumors.com, игроки имеют право на сверхмакс контракт (30% от потолка зарплаты команды), если они соответствуют следующим критериям:

  • Составьте команду All-NBA в предыдущем сезоне или в 2 из 3 предыдущих сезонов.
  • Быть названным защитником года в предыдущем сезоне или в 2 из 3 предыдущих сезонов.
  • Быть названным самым ценным игроком хотя бы в одном из трех предыдущих сезонов.

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

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

Сбор данных

Чтобы создать модель, которая может производить показанные выше вероятности, мы сначала должны собрать данные для каждого из игроков. Статистика на 100 владений и расширенная статистика были собраны с сайта Basketball-reference.com. Данные отслеживания игроков были собраны с сайта stats.nba.com через nba_stats_tracking библиотеку для Python. Документацию к этой библиотеке можно найти здесь. Использовались только данные игроков за сезон с 2015–16 по 2018–19 годы. Я решил не использовать данные об игроках за 2019–20 годы из-за внезапной приостановки, вызванной COVID-19, и непоследовательного общего количества сыгранных игр регулярного сезона. Данные отслеживания игроков с веб-сайта НБА доступны только за сезон 2013–2014 годов. Как мы скоро увидим, в НБА произошла небольшая эволюция, когда дело доходит до выбора бросков. Значительно увеличилось количество попыток использования трех указателей всеми командами НБА. Используя данные за 4 сезона, которые явно попадают в эру 3-х баллов, моей целью было не допустить, чтобы модель делала неверные предположения об игроке из-за статистических различий из года в год. Использовались только данные регулярного сезона. Различные источники были объединены в единый фрейм данных Pandas с использованием имени игрока и сезона. Каждый игрок рассматривался как отдельное наблюдение (например, Леброн Джеймс 2015–2016 годов отличается от Леброна Джеймса 2017–18). Я решил рассматривать каждого игрока как отдельное наблюдение по трем причинам:

  1. Чтобы было достаточно данных для обучения и тестирования модели
  2. Составы из года в год очень редко бывают одинаковыми. Введение нового игрока, будь то драфта, обмен или свободное агентство, может привести к тому, что тренеру придется корректировать расстановки, а сами игроки могут изменить свою игру для улучшения успеха команды.
  3. Как и все, игроки НБА стареют с каждым годом. Будь то возраст или травма, время влияет на то, как игроки играют. Взрывной разыгрывающий, получивший серьезную травму, может больше полагаться на стрельбу в прыжке после выздоровления и лучше подходить в качестве атакующего защитника, позволяя другому игроку управлять атакой.

Исследование данных

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

Я кратко упомянул, что трехочковая стрельба становится все более важным навыком в современной НБА. Давайте посмотрим на трехочковые броски за 4 сезона по позициям:

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

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

Давайте также посмотрим на метрику отслеживания игроков, например время владения мячом.

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

Выбор модели

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

Логистическая регрессия

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

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

K Ближайшие соседи

Почему это не подходит: оценка точности была в лучшем случае посредственной.

Начиная с трех соседей, точность модели составила всего 64,5%. Повторение процесса с большим количеством соседей только привело к постепенному увеличению точности. 11 соседей дали точность модели 68,8%. Хотя мы могли бы продолжать увеличивать количество соседей в надежде, что точность будет улучшаться, это может оказаться рискованным.

Почему это рискованно? Давайте вспомним, как работает алгоритм ближайшего соседа с использованием двух игроков НБА.

Представьте, что мы пытаемся классифицировать игроков только по количеству передач за игру и подборов за игру. Если бы мы построили график каждого игрока (передачи по оси X и подборы по оси Y), игроки с высокими числами передач и отскоков были бы сгруппированы вместе, а игроки с низкими числами передач и отскоков были бы сгруппированы вместе. Леброн Джеймс за свою карьеру делал в среднем 7,4 передачи за игру (APG) и 7,4 подбора за игру (RPG), Рассел Уэстбрук делал в среднем 8,3 передачи и 7,1 подбора за игру, а Джейсон Кидд набирал в среднем 8,7 APG и 6,3 подбора за игру. Рассел Уэстбрук и Джейсон Кидд - разыгрывающие, а Леброн Джеймс (по крайней мере, большую часть своей карьеры) - небольшой форвард. В этом случае алгоритм ближайшего соседа выберет классифицировать Леброна как разыгрывающего. Очевидно, мы можем привести доводы в пользу того, что Леброн является разыгрывающим (или, еще лучше, нападающим), но это немного другое обсуждение.

Случайные леса

Почему это не подходит: серьезные проблемы с переобучением.

Используя как случайные леса, так и XGBoost, я смог получить точность обучения 78,2% и 83,8% соответственно. К сожалению, точность модели на тестовой выборке составила всего 68,6% и 69,5% соответственно. Очевидно, разница в точности делает алгоритм случайного леса неприменимым для этой проблемы. Когда мы думаем о том, как работают случайные леса, мы можем интуитивно понять, почему этот алгоритм может не работать для этих данных. По сути, случайный лес - это просто группа деревьев решений, и каждое из этих деревьев решений устанавливает порог для разделения наших данных на группы. Если бы одно из деревьев решений в случайном лесу создавало некоторый порог, при котором все игроки со средними показателями не менее 5 очков за игру, 5 очков за игру и 5 очков за игру были маленькими нападающими, мы быстро увидели бы, что это дерево решений, в частности, будет очень часто ошибаться. Определенно есть несколько игроков на всех позициях, которые достигли или превысили эти средние показатели. Если у нас есть случайный лес с деревьями решений, подобными описанному выше, применяемым к невидимому набору тестов, эти пороговые значения могут быть неприменимы.

Так какая модель работала?

Лучшей моделью для этих данных была машина опорных векторов. Мне удалось получить кросс-подтвержденную точность обучения 74% и точность тестирования 73%. Эти два показателя точности достаточно близки, чтобы мы могли сделать вывод, что у нас есть обобщенная модель, которая может классифицировать игроков НБА по позициям. Для справки ниже приведены оптимальные параметры для этой модели, найденные с помощью GridSearchCV:

{'svc__C': 1,
 'svc_gamma': 'scale',
 'svc_kernel': 'linear',
 'svc_proability: True}

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

Глядя на приведенную выше матрицу путаницы, 24% сильных нападающих были классифицированы как центровые, 22% малых форвардов были классифицированы как атакующие защитники, а 20% атакующих защитников были классифицированы как маленькие нападающие. Принимая во внимание, что эти позиции могут быть взаимозаменяемыми в зависимости от игрока (и команды), нам нужно будет посмотреть на конкретные неправильные классификации игроков, чтобы понять, будут ли они приемлемыми.

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

Краткое воспоминание о финале НБА 2016 года

Чтобы увидеть позиционные вероятности для игрока, я создал Player класс с методом под названием .position_breakdown() , который позволяет нам легко визуализировать, как модель видит каждого игрока. Удобно, что на Basketball-reference.com есть похожая функция, которая оценивает процент минут, проведенных игроком на определенной позиции. Эти оценки могут служить ориентиром для позиционных вероятностей, которые прогнозирует модель.

Мы бы создали экземпляр объекта игрока и вызывали метод .position_breakdown() следующим образом, чтобы получить диаграмму круговой диаграммы, показанную ранее:

LeBron = Player('LeBron', 'James', '15-16')
LeBron.position_breakdown()

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

Во-первых, Cleveland Cavaliers 2015–2016 гг .:

2015–2016 Golden State Warriors:

За исключением Эндрю Богута, разумно предположить, что стартовые игроки финала НБА 2016 года способны играть более чем на одной позиции. В сочетании с игровым фильмом и отчетами о разведке тренерский штаб Кливленда мог бы использовать эти позиционные вероятности, чтобы воспользоваться преимуществом Эндрю Богута в нападении, возможно, заставив его переключиться на более мелкого, более мобильного игрока и воспользовавшись этим несоответствием. Тренерский штаб может также выбрать замену нападающего на Тристана Томпсона, чтобы Кевин Лав сместился в центр, а Леброн сместился в положение сильного нападающего. Способность Кевина Лава стрелять из 3-х очков может вывести Богута из игры и позволить кавалерам разыграть такие игры, в которых у Леброна более четкая дорога для попадания в корзину.

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

Пища для размышлений: изменения из года в год

Вот еще несколько разбивок по позициям игроков, которые мне показались интересными! Баскетбол - это командная игра, и ваша роль / положение на площадке будет зависеть от того, кто еще находится на площадке с вами.

Вот как выглядит Кевин Дюрант из Oklahoma City Thunder в 2015–16 годах против Кевина Дюранта из Golden State Warriors в 2016–17:

А вот как позиционные вероятности выглядят для Рассела Уэстбрука в те же годы:

Дальнейшие действия и рекомендации на будущее

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

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

Создание классификатора позиций в НБА поднимает еще один важный вопрос. Достаточно ли традиционных 5 позиций для описания различных стилей игры с моделью с точностью 73%? Мы увидели, что по трем из 5 позиций по крайней мере 25% этих игроков были классифицированы неправильно. Я бы сказал, что некоторые из этих игроков вовсе не были ошибочно классифицированы, а скорее обладают достаточно универсальным набором навыков, чтобы не вписаться ни в одну из пяти традиционных позиций. Возможно, вы слышали такие термины, как комбо-гвардия, 3 и D, растяжка 4 или указание вперед. Хотя это не новые термины и есть свидетельства того, что такие игроки восходят к более ранним эпохам баскетбола НБА, они стали более частыми терминами в лексиконе НБА. К счастью, уже были проведены исследования и анализ с точки зрения попыток лучше описать различные роли игроков в составе НБА (обязательно прочтите эту статью, если что-то из вышеперечисленного было вам интересно).

Если вы зашли так далеко, большое спасибо за чтение! Это было немного долго, но я хотел написать блог, который был бы полезен как фанатам баскетбола, так и исследователям данных. Как всегда, любые отзывы приветствуются. Полностью мой проект вы можете найти на моем Github.

Не стесняйтесь обращаться к LinkedIn или Twitter, если вы хотите обсудить больше о науке о данных или баскетбольной аналитике!