Прогнозирование чемпионата мира по крикету ICC 2019 с использованием машинного обучения

Делать крутые вещи с данными

Застряли за платным доступом? Нажмите здесь, чтобы прочитать всю историю с помощью моего Friend Link!

Чемпионат мира по крикету среди мужчин 2019 года готов начаться в четверг (30 мая). Этот 12-й чемпионат мира по крикету продлится почти полтора месяца в Англии и Уэльсе. В турнире примут участие 10 команд, которые будут играть в одной круговой группе, при этом четыре лучших в конце группового этапа выйдут в полуфинал.

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

Приложения

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

Данные

Данные реального мира грязные. Мы не можем ожидать красиво отформатированных и чистых данных, предоставляемых Kaggle. Поэтому предварительная обработка данных настолько важна, что я не могу не подчеркнуть, насколько она важна. Это самый важный этап, так как он может занимать 40% -70% всего рабочего процесса, просто для очистки данных, которые будут загружены в ваши модели.

Я скопировал с веб-сайта Crickbuzz три сценария, в которых представлены рейтинги команд по состоянию на май 2019 года, подробности матчей чемпионата мира 2019 года и подробности истории каждой команды в предыдущих чемпионатах мира. Я сохранил приведенный выше фрагмент данных в трех отдельных файлах csv. Для четвертого файла я взял набор данных odi для матчей, сыгранных между 1975 и 2017 годами, из Kaggle в другом файле csv. В этом файле я удалил все данные с 1975 по 2010 год. Это было сделано, поскольку результаты последних нескольких лет должны иметь значение только для наших прогнозов. Поскольку я не получил данных за 2018 и 2019 годы, эта модель может быть не такой точной, но все же я считаю, что это дает довольно хорошее представление. Затем я вручную очистил данные в соответствии с моими потребностями, чтобы сделать из них модель машинного обучения.

Окружающая среда и инструменты

  1. Блокнот Jupyter
  2. Numpy
  3. Панды
  4. Сиборн
  5. Матплотлиб
  6. Scikit-Learn

Я пошагово следовал общему рабочему процессу машинного обучения:

  1. Очистка и форматирование данных.
  2. Исследовательский анализ данных.
  3. Разработка и отбор функций.
  4. Сравните несколько моделей машинного обучения по метрике производительности.
  5. Выполните настройку гиперпараметров на лучшей модели.
  6. Оцените лучшую модель на тестовой выборке.
  7. Интерпретируйте результаты модели.
  8. Делайте выводы и документируйте работу.

Где код?

Без лишних слов, давайте начнем с кода. Полный проект на github можно найти здесь.

Я начал с импорта всех библиотек и зависимостей.

Затем я загрузил CSV-файл, содержащий подробную информацию об истории каждой команды на предыдущих чемпионатах мира. Я также загрузил файл csv, содержащий результаты матчей, сыгранных между 2010 и 2017 годами.

1. Очистка и форматирование данных

Затем давайте отобразим детали матчей, сыгранных Индией.

Я продолжил, создав столбец для отображения деталей матчей, сыгранных в 2010 году, и взял его за основу для будущей работы.

2. Исследовательский анализ данных

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

Я удалил такие столбцы, как дата матча, поле победы и поле, на котором был сыгран матч. Эти особенности не выглядят важными для нашего прогноза.

3. Разработка и выбор функций

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

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

Преимущества функциональной инженерии

· Уменьшает переоснащение: меньше избыточных данных означает меньше возможностей для принятия решений на основе шума.

· Повышает точность. Чем меньше вводящих в заблуждение данных, тем выше точность моделирования.

· Сокращает время обучения: меньшее количество точек данных снижает сложность алгоритма, и алгоритмы обучаются быстрее.

Итак, продолжая работу, я создал модель. Если команда 1 выиграла матч, я присвоил ей метку 1, в противном случае, если команда 2 выиграла, я присвоил ей метку 2.

Затем я преобразовал команды team-1 и team-2 из категориальных переменных в непрерывные входные данные, используя функцию pandas pd.get_dummies. У этой переменной есть только два варианта ответа: команда 1 и команда 2. Она создает новый фрейм данных, состоящий из нулей и единиц. В этом случае фрейм данных будет иметь один, зависящий от команды конкретной игры.

Кроме того, я разделил обучающие и тестовые наборы на 70% и 30% соответственно на обучающие и проверочные наборы.

4. Сравните несколько моделей машинного обучения по метрике производительности

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

Random Forest превзошел все другие алгоритмы с точностью обучения 70% и точностью теста 67,5%.

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

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

5. Выполните настройку гиперпараметров на лучшей модели

Training set accuracy:  0.700
Test set accuracy:  0.675

Популярность модели случайного леса объясняется ее различными преимуществами:

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

6. Оцените лучшую модель из набора для тестирования

Давай продолжим. Я добавил рейтинг ICC команд, отдающих приоритет команде с более высоким рейтингом, чтобы выиграть в этом году.

Затем я добавил новые столбцы с рейтингом для каждой команды и разрезал набор данных для первых 45 игр, поскольку всего 45 игр этапа лиги.

Затем я добавил команды в новый набор данных прогнозов, основываясь на рейтинге каждой команды.

После этого я добавил сценарии для получения фиктивных переменных и добавил недостающие столбцы по сравнению с набором данных для обучения модели.

7. Интерпретируйте результаты модели

Наконец, приведенный ниже код предназначен для получения результатов для каждого матча этапа лиги.

За результатами обращайтесь к соответствующему блокноту jupyter. Итак, четыре команды, которые отправятся в полуфинал, - это Новая Зеландия, Индия, Англия и Южная Африка.

А затем я создал функцию, чтобы повторить описанную выше работу. Это последняя функция для прогнозирования победителя Чемпионата мира по крикету ICC 2019.

Я запустил функцию предсказания полуфиналов.

Новая Зеландия и Индия
Победитель: Индия

ЮАР и Англия
Победитель: Англия

Таким образом, два финалиста - Индия и Англия, что совершенно очевидно, поскольку они считаются фаворитами на победу в этом году. Кроме того, они занимают первое и второе места в рейтинге ICC.

8. Делайте выводы и документируйте работу

Наконец, о запуске основной функции.

Индия и Англия

Победитель: Англия

Согласно этой модели, Англия, скорее всего, выиграет этот чемпионат мира.

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

Направления дальнейшего совершенствования

  1. Набор данных - чтобы улучшить набор данных, вы можете принять во внимание 2018 и 2019 годы, скопировав их с веб-сайта ESPN, а также, возможно, использовать данные игроков для оценки качества каждого командного игрока.
  2. Пробуем более сложные алгоритмы машинного обучения, такие как Xgboost, и настраиваем гиперпараметры.
  3. Матрица путаницы была бы полезна для анализа, в каких играх модель ошибалась.
  4. Мы могли бы объединить, то есть мы могли бы попытаться сложить больше моделей вместе, чтобы повысить точность.
  5. Пойдем еще дальше и создадим модель на основе статистики игроков.

Ссылки / Дополнительная литература







Прежде чем ты уйдешь

Соответствующий проект на github можно найти здесь.



15/7/2019 Обновление 1 - Англия действительно выиграла чемпионат мира.

Контакты

Если вы хотите быть в курсе моих последних статей и проектов, подписывайтесь на меня на Medium. Вот некоторые из моих контактных данных:

Приятного чтения, удачного обучения и удачного кодирования!