Использование статистики из данных чемпионата Бразилии
Абстрактный
В этой статье оценивается прогнозирование результатов футбола (победа, ничья, поражение) в чемпионате Бразилии по футболу с использованием различных моделей машинного обучения, основанных на реальных данных реальных матчей. Модели тестировались рекурсивно и сравнивались средние результаты прогнозов. Результаты показали, что машина логистической регрессии и опорных векторов дала наилучшие результаты, демонстрируя превосходные средние показатели точности по сравнению с другими классификаторами (KNN и Random Forest) с точностью 49,77% (логистическая регрессия), что почти на 17% лучше, чем случайное решение ( Benchmark), вероятность успеха которого составляет 33%. Кроме того, был составлен рейтинг относительной важности функций для ориентации использования данных.
Обзор проекта
Футбол / футбол - это вид спорта, который присутствует в жизни людей, люди используют его, чтобы смотреть, играть, а также делать ставки. Думая о ставках, мы ясно видим, что футбол - очень непредсказуемый вид спорта, и для подтверждения этого не требуется серьезных исследований. В сезоне премьер-лиги 2015/2016 у нас был очень неожиданный чемпион, и их вероятность завоевать титул в начале сезона была от одной до пяти тысяч.
Итак, первоочередной задачей этого проекта является создание алгоритма машинного обучения с учителем, который прогнозирует результаты футбольных матчей на основе их статистики. Таким образом можно будет оценить уровень сложности предсказания.
Постановка задачи
Этот проект направлен на:
- Робот для сбора мусора, собирающий всю информацию о матчах
- Автоматизируйте процесс удаления веб-страниц на все сезонные матчи
- Создайте модель машинного обучения с учителем, чтобы предсказать исход матчей.
- Оцените модели
Метрики
В задачах классификации обычно используют точность в качестве метрики оценки. Поскольку наше прогнозирование результатов - это проблема нескольких классов, нет необходимости использовать другие показатели.
Где TP - истинные положительные результаты, FP - ложные срабатывания, TN - истинные отрицательные результаты, а FN - ложные отрицательные результаты.
ETL и исследование данных
Веб-скрапинг
Однако, прежде чем исследовать собранные данные, важно понять, как эта информация была собрана. Итак, эта часть будет достигнута с тех пор, как был разработан веб-робот для окончательного анализа всей обрабатываемой базы данных. Первое и второе изображения ниже показывают, как отображается страница, на которой были собраны данные. Итак, шаг номер один - это веб-очистка главной страницы, выбор футбольных данных и создание фрейма данных со всей информацией вместе.
Теперь, когда у нас есть код, готовый для сбора данных из совпадений, необходимо создать другой код для сбора всех URL-адресов сезонных совпадений, так что это будет автоматизированный робот для выполнения этой задачи.
Все коды будут прикреплены к репозиторию Git.
Прежде чем данные были очищены и готовы к использованию для анализа, были выполнены следующие шаги:
- Выбрать столбцы: выбранные столбцы, в которых не было большого количества нулевых значений.
- Проблемы: Сбор данных сопровождался некоторыми «проблемами», такими как общая статистика всех игроков команды, поэтому было необходимо, чтобы эти строки были исключены из данных.
- Группировка по матчу и команде: поскольку собирались данные об игроках матча, необходимо было сгруппировать всю статистику команды игрока по матчам и командам.
- Добавить результат: поскольку собранные данные были из таблицы игрока, они не принесли результата матча, поэтому было необходимо создать код, который добавляет этот результат во фрейм данных.
- Место: необходимо было создать код, который показывает, какая команда играла дома и на выезде.
Данные
Пришло время оценить собранные данные, чтобы можно было создать модель прогнозирования результатов. Это были столбцы, в которых были очищенные данные:
Значение всех переменных:
- Confronto: Match
- Время: Команда
- Данные: Дата матча
- Глс: количество голов в матче
- Ast: Ассисты
- ПК: Выполненные штрафные удары
- PKatt: попытка штрафных ударов
- Sh: Всего выстрелов
- SoT: Удары в створ
- CrdY: Желтые карточки
- CrdR: Красные карточки
- Crs: Кресты
- Флс: совершены фолы
- TklW: Отборы выигранные
- Интеллект: перехваты
- Поле: зафиксировано фолов
- OG: Автоголы
- Off: Офсайды
- Resultado: Результат матча (победа, поражение, ничья)
- Место: Дома / В гостях
- Торцида: Толпа
Наблюдение: в каждом матче должны были быть линии одна для хозяев поля, а другая - для команды гостей.
Хорошо бы проверить, как эти переменные соотносятся друг с другом, чтобы создать подходы: Атака и Защита. В коде также была предусмотрена функция, которая выполняет этот подход по команде и местам игры (Дома / В гостях).
Для атакующего подхода было выбрано 4 переменных: «SoT», «Sh», «Gls», «Torcida». Глядя на данные, можно понять, насколько сложно решить эту проблему, потому что мы не можем найти закономерности, глядя на них. Но можно было бы выдвинуть некоторые гипотезы, отличные от обычных, например:
- Высокая Torcida (футбольная аудитория) может не иметь отношения к более значительному количеству голов.
- Низкая Torcida (футбольная толпа) может быть связана с большим количеством SoT (выстрел в цель).
С помощью этих графиков можно увидеть, как связаны наши данные, как столбцы связаны друг с другом, таким образом, глядя на 3 переменные одновременно, можно увидеть уровень сложности разделения этих данных. Для защитного подхода было выбрано 4 переменных: «TklW», «Fls», «CrdY», «Torcida». Как и при анализе атак, в данных защиты также не удалось найти никаких закономерностей.
Однако, глядя на рисунок Columns Info, доступно больше переменных, чем показано на графиках. И ясно, что по крайней мере 17 собранных переменных могут повлиять на исход матча, а значит, и на эффективность прогноза. Но поскольку футбол намного сложнее, потребовалось больше переменных, чтобы точно предсказать исход матча, поэтому в следующей части будут сгенерированы некоторые другие переменные.
Методология
Предварительная обработка данных
Поскольку невозможно получить статистику игр до результата матча, необходимо создать некоторые новые переменные, которые будут доступны перед играми. Таким образом, чтобы решить эту дилемму, необходимо сгенерировать среднее значение для всех переменных, это средство будет содержать все игры до соответствующей игры, таким образом, когда команда играет 18 сентября, код предоставит среднее значение все переменные, доступные для всех игр до этой игры.
Будет создано несколько переменных, которые попытаются показать компьютеру последовательность очков для каждой команды в последних 5 играх, 3 играх, а также за последнюю игру. За каждую победу команда с кодом суммировала 3 очка, за ничью - 1 очко, за поражение - 0 очков. Таким образом можно было бы увидеть, исходит ли команда из побед, ничьих и поражений.
Поскольку эти обработки проводились, был найден способ сообщить машине «место» матча. Из-за этой переменной (место) и поскольку в чемпионате 2 хода, первый ход может быть в доме команды, и если первая игра первого хода чемпионата была у них дома, то во второй обязательно должен быть выезд. , или, другими словами, не ему их стадион. А в футбольных матчах это очень важная переменная. Таким образом, эта переменная учитывалась следующим образом: брали все данные со всеми переменными, созданными для домашних команд (Место = Дом) для каждого матча, а затем вычитали по тому же набору данных (те же переменные), но из посещающих команд (Место = В гостях). Таким образом можно было бы создать базу данных, в которой в основном говорилось бы:
- Если переменные = отрицательные значения: команда гостей показала лучшие результаты по этой переменной в прошлых играх, чем посетитель / противник. Это возможно, потому что, например: выбор переменной «Среднее количество бросков», если команда хозяев имеет значение P, то команда гостей имеет X, если P больше, чем X, выходное значение вычитания обоих ( HOME - AWAY) будет положительным, в противном случае, если P меньше X, значение будет отрицательным, показывая, что у команды не было лучших результатов по этой переменной в прошлых сыгранных играх.
Резюме:
- Проблема: переменные были доступны только после совпадения, и для работы нашей модели необходимо, чтобы все данные о характеристиках данных были перед соответствующим совпадением, чтобы было создано среднее значение за сезон для каждой переменной сезона и более того, некоторые скользящие средние для каждой переменной набора данных.
- Проблема: вставьте переменные последовательности: эта проблема была решена путем суммирования всех очков, которые команда имела в последних 3, 5 играх, а также в последней игре. За каждую победу команда суммировала 3 очка, за ничью 1 очко и за поражение 0 очков.
- Проблема: Покажите машине, кто играет дома, а кто в гостях. Чтобы решить эту проблему, мы вычитали результаты переменных домашней команды на результаты переменных посетителей для каждого матча. Таким образом показано, превосходит или уступает ли домашняя команда команду посетителей.
Окончательная база данных имела 41 столбец и 380 строк и выглядела так:
На этом этапе наша база данных наконец-то обработана, и теперь можно запустить некоторые модели и проверить их работоспособность.
Реализация
Для запуска мы удалили первые четыре переменные, и переменная Gls также использовалась MinMaxScalar для всех переменных функций. Как видно из Sklearn, этот оценщик масштабирует и транслирует каждую функцию индивидуально так, чтобы она находилась в заданном диапазоне обучающего набора, например от нуля до единицы. Причем были использованы все эти 4 модели:
- Машина опорных векторов - это модель обучения с учителем, которая всегда направлена на увеличение расстояния между точками, чтобы можно было классифицировать классы, поэтому SVM разделяет данные, увеличивая разницу между классами.
- Случайный лес: Как следует из названия, случайный лес создает несколько деревьев решений и группирует их в один «Лес» деревьев, беря выборку размером m, начальную загрузку столбцов, которые представляют независимые переменные при разделении дерево в каждом его узле. Голосование за окончательное решение будет дано большинством голосов за задачи классификации (и среднее значение в задаче регрессии).
- KNN: - это простая модель, которая выполняет классификацию на основе класса ее k ближайших точек на основе метрики расстояния.
- Логистическая регрессия. По сути, логистическая регрессия - это множественная линейная регрессия, результат которой «сжимается» в интервале [0, 1] с помощью сигмоидной функции.
Чтобы запустить все эти модели, мы произвольно разбиваем базу данных, используя библиотеку «train test split» из scikit-learn. Для теста было использовано 30% данных. Более того, алгоритм был воспроизведен случайным образом 1000 раз, для всех четырех моделей. Таким образом можно было проверить стандартное отклонение и точность всех моделей. Все модели использовались со значениями по умолчанию, не исследуя параметры каждой конкретной модели.
Полученные результаты
Оценка и проверка модели
Как видно из таблицы ниже, результаты оказались не слишком выразительными. Алгоритм достиг почти 50% точности, но, учитывая, что вероятность успеха случайного предсказания составляет 33% (победа / ничья / поражение), это хороший сигнал, показывающий, что алгоритм все-таки смог идентифицировать некоторые закономерности.
После всех 1000 раз логистическая регрессия дала наилучшие результаты с одним из самых низких показателей стандартного отклонения и наивысшей точностью между всеми четырьмя моделями. SVM работает лучше, чем другие, но имеет самое высокое стандартное отклонение, что, возможно, показывает, что модель имеет тенденцию отличаться больше, чем другие модели. Также был создан рейтинг характеристик с использованием важности характеристик случайного леса. Как видно из рисунка ниже, количество зрителей футбольных матчей из последних 3 матчей, номера желтых карточек, а также количество зрителей, прошедших футбольный матч за весь сезон, больше влияли на результат прогноза.
Обоснование
Странно видеть, что логистическая регрессия работает намного лучше, чем другие модели, в основном потому, что, как было видно, данные явно не имели шаблонов, и это была сложная проблема, и, что удивительно, очень сложная проблема была решена с помощью «линейного» подхода. может быть, самый простой здесь. Одна из причин этого может быть связана с параметрами каждой модели, которые не были исследованы в этом подходе. Поскольку в SVM много ядер, попытка использования разных ядер может быть решением для достижения лучшей производительности для этой модели. Еще один странный момент заключается в том, что «последовательность точек» была одной из последних переменных, мешающих прогнозу. Насколько я понимаю, эту переменную нельзя игнорировать, и, возможно, есть другие способы показать эти шаблоны машине.
Заключение
Отражение
Эта статья доказывает, что прогнозирование футбола по-прежнему является очень сложной задачей, и для прогнозирования результатов требуется больше переменных. Однако из этой статьи мы видим, что алгоритмы машинного обучения уже могут «думать» о том, какая команда делает ставку, и по-прежнему могут быть более точными, чем люди, которые не знают об играх, имеющих почти 17% преимущества в прогнозе по сравнению с вероятность случайного предсказания.
Улучшение
На будущее я предлагаю изучить и найти больше переменных, которые могут быть полезны, например, травмы или более подробную информацию об игроках каждой команды, возможно, данные игр FIFA или Pro Evolution могут помочь получить больше информации на базе. Еще одна вещь, которую можно было бы сделать в будущем, - это прогнозирование количества голов для каждой команды, это более сложно, потому что это зависит от прогнозируемых результатов, и они должны согласовывать с этим, например, не может быть двух целей для команда хозяев и два гола в пользу команды, если результат прогнозируется как победа команды хозяев. Так что, возможно, эта статья может стать источником вдохновения для создания более совершенных и сложных моделей в будущем.