Наука о данных в реальном мире

Использование машинного обучения для победы над NBA 2k в прогнозировании плей-офф NBA 2016

Мой первый опубликованный проект ML

Во-первых, я хотел бы представиться в своей первой статье на Medium.

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

Вопрос:

Используя рейтинги 2k с 2014 по 2016 год, чтобы помочь модели машинного обучения создавать свои собственные рейтинги игроков, можем ли мы конкурировать друг с другом и более точно предсказывать плей-офф НБА 2016 года, чем просто используя рейтинги 2k?

Первый шаг: использование BeautifulSoup для парсинга данных NBA 2k.

Хороший чистый файл размером 2к практически не существует. Итак, я сделал свой собственный.

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

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

Потребовалась лишь небольшая очистка, чтобы игроки с 2014 по 2016 год соответствовали данным 2k, которые я только что собрал, из которых я добавил пустые столбцы для размещения значений 2k. Следующим шагом было самое интересное — построение модели. Моя цель для модели состояла в том, чтобы разделить на тестовый и обучающий наборы в соответствии с обычной практикой, но я не пытался предсказать значения точности. Это означает, что мои предсказанные значения игроков на 2016 год не были целью, чтобы они соответствовали значениям игроков NBA 2k16.

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

Заполнение пропущенных значений с помощью Simple Imputer

С помощью простого вменителя я заполнил пропущенные значения из столбцов средним числовым значением этих столбцов. Я просто создал новый фрейм данных со всеми исходными значениями, а также отсутствующими значениями, которые теперь заполняются, и установил существующий фрейм данных равным новому. Поскольку рейтинг 2k16 отсутствовал во фрейме данных, по которому я делал прогнозы, я использовал логистическую регрессию для вычисления новых «значений 2016 года» — тех, которые я буду конкурировать со значениями 2k16.

Прогнозы:

После создания DF из обоих наборов прогнозов и их объединения я создал словарь всех команд как для рейтингов 2k, так и для машинных прогнозов. Оттуда, используя тот же расчет общей ценности команды, которая представляла собой просто сумму значений 10 лучших игроков для учета ротаций, я вручную вычислил значение для каждой команды.

Модель NBA 2k: правильно предсказано 11/16 команд.

Сплит: 7/8 команд Западной конференции 4/8 команд Восточной конференции

Моя модель: 12/16 команд угадали правильно.

Разделение: 6/8 для команд Западной и Восточной конференций.

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

Электронная почта: [email protected]

Ссылка на гитхаб:

https://github.com/UVAnog/NBAMachineLearningProj