Эта статья больше посвящена базовой реализации нейронной сети, чем результатам использования ИИ для выбора победителей. Как вы вскоре увидите, выборы были плохими, и еще до начала турнира было ясно, что выбор также был в лучшем случае сомнительным. Турнир начался 17.03.22 и закончился 4.04.2022.
Кроме того, это был мой первый опыт создания нейронной сети, и это было очень весело! Я ни в коем случае не эксперт, но мне нравится использовать математику в спорте.
Выбор
В этом году у модели был Оберн, обыгравший Кентукки, чтобы выиграть все это. Кентукки встретился с Дьюком, а Оберн встретился с Хьюстоном в финале четырех. Это звучит разумно, но, чтобы добраться до этого момента, было предсказано много разочарований (включая победу штата Норфолк над Бэйлором), и было предсказано, что семена 13/14 выиграют намного больше, чем они исторически. Я расскажу о некоторых причинах/проблемах после того, как расскажу о реализации. Смотрите фотографии ниже, чтобы увидеть все варианты и их результаты. На картинках правильный выбор отмечен зеленым цветом, а неправильный — красным или серым. В скобках указаны фактические команды, которые в итоге сыграли, а названия небольших команд вверху или внизу — это первоначальные выборы для этой игры.
Инструменты
Создание моделей машинного обучения — это действительно возможность объединить некоторые инструменты программирования для сбора данных, а затем применить программное обеспечение к данным. Ниже приведен список инструментов, на которые я сильно полагался.
Все свои данные я получил из баскетбольного справочника. Я вытащил список всех студенческих команд, с которыми нужно играть (их 485, если быть точным), вывел итоги каждой игры на конец года с 2010 по настоящее время, а затем вывел счет побед и поражений для каждой игры с 2010 года. представлять.
Я сделал это, используя python (который включает в себя sqlite), прекрасный суп для очистки веб-страниц и tensorflow для машинного обучения.
Я использовал vscode для написания своего кода и браузер этой базы данных для просмотра/редактирования моих данных.
Идея
Для создания нейронной сети требуются входные переменные, называемые признаками, и выходные переменные, называемые метками. Нейронная сеть возникает, когда мы выполняем математическое моделирование, чтобы использовать эти функции для получения меток. Нейронная сеть становится лучше по мере того, как у нее появляется больше данных для моделирования и когда она обрабатывает данные снова и снова. В случае с моей моделью функции представляли собой статистику по играм за данный год для обеих команд, играющих в игру, а лейблом было то, кто выиграл игру. Как правило, вы тренируетесь, используя около 80% данных, а затем используете последние 20% для проверки результатов обучения. После обучения модели вы можете использовать ее для прогнозирования будущих результатов.
Это очень-очень высокоуровневое представление о создании нейронной сети. Я предлагаю прочитать все руководство машинное обучение — это весело.
Особенности модели
Домашняя команда (за игру):
- 2 указателя
- 2 попытки указателя
- 3 указателя
- 3 попытки
- штрафные броски
- попытки штрафных бросков
- подборы в атаке
- подборы в защите
- помогает
- блоки
- ворует
- обороты
- персональные фолы
Статистика выездной команды (за игру):
- 2 указателя
- 2 попытки указателя
- 3 указателя
- 3 попытки
- штрафные броски
- попытки штрафных бросков
- подборы в атаке
- подборы в защите
- помогает
- блоки
- ворует
- обороты
- персональные фолы
Этикетки моделей
Если команда хозяев выиграла, 1. Если они проиграли, 0.
Процесс
Я пытаюсь оседлать линию предоставления информации, сохраняя при этом общий и технический свет. В этом свете процесс был довольно коротким. После получения данных и организации их для использования в TensorFlow я использовал модель последовательной нейронной сети, в основном следуя этому руководству.
Обсуждение
Очевидно, модель сделала несколько очень плохих выборов, и я хотел потратить здесь некоторое время, комментируя возможные причины и способы улучшения модели.
- Отсутствовал показатель силы конференции. Это была самая большая проблема модели: команды из небольших конференций с великолепной статистикой не играли с командами того же калибра. Поскольку модель была основана на статистике конца сезона, это искажало статистические предпочтения. Способом свести на нет это может быть добавление в модель новой переменной, называемой процентом выигрыша, и это будет значение от 0 до 1, указывающее исторический процент выигрыша. (Это может стать фанковым из-за матчей внутри конференции.)
- Реальная модель выдает значение от 0 до 1, например 0,455 или 0,545. В этих примерах первый результат будет 0 (проигрыш), а второй результат будет 1 (выигрыш). Это было суждением с моей стороны, и я до сих пор не уверен, как лучше всего справиться с неопределенностью при принятии окончательного решения.
- Неопределенность в общем. Продолжение пункта 2, не зря его называют Мартовским безумием, использование метода Монте-Карло для случайного выбора победителей может смягчить некоторые проблемы.
- Выбирая точки данных, которые имеют смысл, я случайным образом выбрал свои функции и метки. На самом деле не имеет смысла сравнивать две команды, сыгравшие свою первую игру в сезоне, основываясь на их будущей статистике на конец сезона. Кроме того, многие статистические данные могут быть очень тесно связаны между собой и добавлять ненужную сложность модели. Пример, который приходит на ум, это подборы в атаке и сделанные удары. Чтобы улучшить это, я бы выдвинул пару гипотез и создал разные модели для их проверки.
- Модели всегда могут использовать больше данных, у меня было 70 тысяч личных записей, но лучшие модели могут использовать гораздо больше записей. Я также мог бы использовать другие источники данных (еще одна возможность решить проблему силы конференции).
Это подводит итог моим выводам о создании нейронной сети, чтобы победить Мартовское безумие. Я люблю получать комментарии и рад поделиться любой информацией, которую я могу. Возможно, в следующем году я внесу некоторые свои изменения и у меня будет улучшенная модель (и даю себе более 3 дней на ее реализацию).