Как предсказать результаты игры в крикет [Excel + машинное обучение]

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

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

Да, много бессонных ночей в Веллингтоне.

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

Я подумал: хм, может быть, я должен сделать один из них в Excel?

Я так и сделал. Я создал модель машинного обучения в Excel, чтобы прогнозировать счет в крикете. Звучит интересно? Читай дальше.

Крикет. Что теперь?

Если вы думаете, что «единственный сверчок, который не дает мне уснуть всю ночь, это чертов щебечущий в моем подвале», тогда не волнуйтесь. Вам нужно очень мало знаний о крикете, чтобы понять эту технику. Узнав эти идеи, вы сможете применить их ко многим другим проблемам реальной жизни, таким как прогнозирование продаж в следующем году, отсутствие студентов в следующем семестре или использование электроэнергии на новом заводе.

Определение проблемы - прогноз счета в крикете

Небольшая заметка, если вы не знакомы с крикетом. В типичном однодневном матче соревнуются две стороны. Игра начинается с того, что одна из команд бьет первой и забивает несколько ударов в 50 оверов. Следующая команда затем пытается побить цель, установленную первой командой, за 50 оверов.

Начнем с определения проблемы. Мы хотим создать предсказатель счета в крикете, который принимает входные данные:

  • Кантри-игра - C
  • Забитые раны в матче - R s
  • Калитки, оставшиеся в матче - W R
  • Осталось больше - O R

Наш предсказатель должен сказать нам, каким может быть окончательный счет после 50 оверов.

Например,мы могли бы спросить: «Австралия совершила 52 рана в 10 оверах, потеряв 1 калитку. Какой будет окончательный счет? » и наш предсказатель может дать предположение - скажем, 305 прогонов .

Что мы игнорируем:

Окончательный результат команды в крикетном матче зависит от многих факторов, в том числе:

  • Игровая команда и их игроки с битой
  • Команда соперника и их боулеры, полевые игроки
  • Земля и поле, на котором они играют
  • Погода и историческая погода
  • Толпа, пришедшая на игру, и насколько они аплодируют
  • Что у судей на обед
  • и т.п.

Если мы попытаемся учесть каждую мелочь, которая имеет значение, мы никогда не сможем построить нашу модель прогнозирования. Так что давайте проигнорируем все, кроме тех 4 параметров (C, Rs, Wr, Or), перечисленных выше.

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

Скажем, Rp обозначает наши прогнозируемые прогоны. Мы можем определить Rp как

Rp = p (C, Rs, Wr или)

  • C = Страна
  • Rs = забеги уже засчитаны
  • Wr = оставшиеся калитки
  • Или = Осталось больше
  • p - это функция прогнозирования, которая творит чудеса для вычисления Rp

Но мы знаем, что Rp = Rs +что-то

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

Если мы сможем что-то найти, наша проблема будет решена. Но как?

Представляем скорость выполнения

Коэффициент пробежки - это соотношение между набранными пробежками и выполненными оверами. Таким образом, если Индия набирает 342 пробега за 50 оверов, их скорость пробега составляет 6,84. Поскольку наша модель прогноза рассчитана на 50 оверов, если мы знаем частоту бега, мы будем знать окончательный счет.

Определим еще несколько переменных.

  • Ос (пока больше) = 50 - Или
  • RR (текущая скорость выполнения) = Rs / (50 или)
  • RRr (частота бега для оставшихся оверов) - это следует прогнозировать

Учитывая эти переменные, мы можем переписать Rp (Прогноз числа прогонов) как

  • Rp (прогнозируемое количество забегов) = Rs + или * RRr

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

Мы можем утверждать, что частота повторений в оставшихся оверах будет функцией (страна, частота повторений на данный момент, количество оставшихся оверов, оставшиеся калитки)

RRr = f (C, RRs, Wr, или)

Создание функций прогнозирования для конкретной страны

Мы также можем утверждать, что у каждой страны есть свои сильные стороны и способности, когда дело доходит до игры. Итак, если мы определим набор функций, f1 (), f2 ()…, fn (), где fn -

RRr для страны n = fn (RRs, Wr, или)

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

Так что же это за волшебная функция предсказания?

Конечно, регресс. Есть много сложных алгоритмов машинного обучения. Но для чего-то прямого, например, Run Rate (оставшиеся лишние), мы можем создать простую модель множественной регрессии.

Скажем, RRr можно записать как

RRr = m1 * RRs + m2 * Wr + m3 * Or + const

Учитывая набор обучающих данных с RR, Wr, Or и RRr, мы можем использовать функцию ЛИНЕЙН () в Excel для вычисления что соответствует выборке данных. Когда у нас есть множители и постоянное значение для каждой страны, мы можем предсказать результат для любой ситуации. Это так просто.

Почему только одно уравнение на страну? Почему не больше?

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

Как говорят консультанты по управлению,

«Если вы не знаете, что сказать, просто запустите опрос и расскажите, что они сказали».

Если это звучит как куча bs, не волнуйтесь. Это настоящая техника машинного обучения, известная как ансамблевое моделирование.

Ансамблевое моделирование

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

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

Таким образом, мы можем создать больше вариантов входных сценариев и создать надежную модель.

Для простоты предположим, что мы хотим построить 10 регрессионных моделей для каждой страны.

Как агрегировать результаты ансамблевой модели?

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

Тогда приступим к строительству.

Машинное обучение 101

Сначала учись, потом предсказывай.

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

Самый простой из них - это регрессионная модель. Это тот самый, который мы будем использовать.

Где данные?

Есть много хороших веб-сайтов для поиска текущего счета или недавних результатов матчей. Но для того, чтобы обучить нашу модель, нам нужен набор исторических данных совпадений по каждому из них. Это общеизвестно сложно. К счастью, есть крикет. У них есть исторические данные о матчах за один день на уровне мячей для более 1400 матчей в формате CSV. (вот страница загрузок)

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

Как видите, эти данные находятся на слишком подробном уровне, чем то, что нам нужно.

Итак, я использовал Power Query, чтобы объединить 1400 файлов, преобразовать данные, чтобы получить больше очков, а затем подсчитать общий счет, оверсы и калитки через каждые 5 интервалов до конца игры. Затем я взял только последние 300 игр, так как очень старые выступления мало влияют на текущие модели подсчета очков.

Приносим извинения за то, что не объяснили шаги формулы Power Query или Excel. Это было бы слишком техническим, и этот пост никогда не закончится.

После изменения формы мои данные выглядят так:

Затем мы можем получить дополнительные столбцы,

  1. Последний овер игры: = MAXIFS ([Over], [Source.Name], [@ [Source.Name]], [Country], [@Country])
  2. RRs -Скорость бега на данный момент: = [@ [Cum Runs]] / [@ Over]
  3. Или -Осталось больше: = [@ [Максимум больше?]] - [@ Больше]
  4. Wr -Остаток калиток: = 10 - [@ [Cum Wickets]]
  5. Оценка в конце: = формула СУММЕСЛИМН
  6. RRr- Скорость выполнения (оставшиеся оверсы)

    = ([@ [Оценка в конце]] - [@ [Cum Runs]]) / [@ [Осталось оверов]]

Используя 2, 3, 4 и 6, мы можем создавать наши регрессионные модели.

Но прежде чем мы туда перейдем, давайте разделим данные на наборы данных для обучения и тестирования. В этом примере я выбрал последние 50 игр в качестве набора тестовых данных и все более старые игры в качестве данных обучения. Вместо того, чтобы создавать две отдельные таблицы, я просто добавил столбец в конце, чтобы посмотреть на [Match ID], чтобы узнать, является ли что-то тестовым или обучающим.

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

Я добавил идентификатор точки данных в качестве столбца в эту таблицу, чтобы я мог однозначно идентифицировать все точки данных при выборке данных обучения. Это [номер точки данных]

Упаковка и бутстреппинг

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

Бутстрапирование относится к случайной выборке данных.

Наш бутстрап-подход довольно прост и наивен.

  • Для каждой страны нам нужно 10 пакетов - 10 наборов данных.
  • Для каждого набора данных нам нужна случайная выборка из 50 точек данных.
  • Затем мы создаем модель множественной регрессии, чтобы соответствовать

    RRr = m1 * RRs + m2 * Wr + m3 * Or + const.
  • При прогнозировании результатов мы усредняем результаты всех 10 моделей.

Замечание о const:когда я строил свои модели прогнозирования счета в крикете, я понял, что установка const = 0 дает мне лучший R2 (т.е. модель хорошо согласуется с данными обучения). Поэтому я 3 - й параметр ЛИНЕЙНА () в FALSE (т.е. нет необходимости в сопзЬ ). Вы можете оставить его включенным для других типов моделей.

Согласно моим тренировочным данным из таблицы, у нас есть 16 стран. Это означает, что нам нужно 16 * 10 * 50 = 8000 точек данных для построения моделей.

Используя набор RANDBETWEEN, INDEX + MATCH и COUNTIFS, я смог построить эту сетку.

Построение моделей множественной регрессии

Когда сетка данных готова, мы можем создать набор формул ЛИНЕЙН (), чтобы сообщить нам множители (m1, m2, m3) для каждой модели. Это можно сделать 160 раз (в каждой из 16 стран нужно по 10 моделей). Но я очень ленив. Поэтому я использовал формулу ИНДЕКС () для получения массивов из 50 ячеек, чтобы результаты ЛИНЕЙН можно было красиво табулировать. Вот как выглядит наша модель множественной регрессии:

Как видите, наша модель имеет очень высокие значения R 2 . Это многообещающе.

Обратите внимание на F

Хотя высокие значения R 2 - это хорошо, не стоит слепо доверять модели. Вы также должны проверить, является ли взаимосвязь между выходом (скорость выполнения в оставшихся оверах) и входом (RRs, Or, Wr) случайной. Это можно сделать, посмотрев на статистику F и вероятность F. Я не беспокоился об этом шаге для всех данных, но я проверил несколько образцов, чтобы увидеть, является ли вероятность F низкой (низкая означает, что связь не случайна).

Расчет окончательного прогноза

Как видите, каждая модель предсказывает скорость выполнения (в оставшихся количествах). Но нам нужно спрогнозировать счет. Учитывая входы:

  • C = Страна
  • Rs = забеги уже засчитаны
  • Wr = Калитки потеряны до сих пор
  • Или = Осталось больше

Мы можем рассчитать прогнозируемые пробеги (Rp) как

  • RRr = среднее значениевсех 10 прогнозов для конкретной страны (RRs, Wr, или)
  • Rp = Rs + RRr * Или

Говоря простыми словами, наш окончательный прогноз - это количество уже набранных запусков + среднее значение 10 прогнозируемых темпов выполнения, умноженное на оставшееся количество повторений.

Тестирование нашей ансамблевой модели на некоторых из недавних матчей

Теперь, когда у нас есть блестящие ансамблевые модели, давайте протестируем их. Я извлек данные о счете из последних 50 игр по иннингам. Затем я отфильтровал все игры с менее чем 50 сыгранными оверами (отмененные из-за дождя, погоня перед последним мячом и т. Д.)

Вот что у нас есть.

Для прогнозирования нам также необходимо знать, какие забеги были забиты и сколько калиток у них было в наличии на определенном этапе. Я начал с создания полосы прокрутки, чтобы выбрать верх (любое кратное 5 от 5 до 40). Затем мы извлекаем соответствующие входные данные из тестовых данных и запускаем модель по ним для расчета прогнозируемой оценки. Затем я сравнил это с фактическим результатом, чтобы увидеть, какие ошибки и точность дает наша модель.

Это включало использование некоторых безумных, но забавных функций MMULT и INDEX (конечно, TRANSPOSE тоже). Сейчас 2:19, когда я это печатаю. Это означает, что, к сожалению, слишком поздно объяснять здесь логику формулы, поэтому я оставлю это вашему воображению.

Вот как наша модель сравнивается с реальными результатами при 15 оверах.

И вот как это работает после 25, 35 и 40 оверов. Как видите, точность тем выше, чем позже в игре вы запрашиваете прогноз.

  • Фактическое против прогноза - 25 оверов
  • при 35 чел.
  • при 40 повторениях

Прогнозирование счета Индии против Бангладеш - 2 июля 2019 г.

Прямо сейчас, когда я печатаю это, Индия играет против Бангладеш. Индия набрала 314 баллов за 50 оверов. Я хотел посмотреть, как наша модель предсказывает счет в разные моменты игры. Как видите, он становится немного оптимистичным (поскольку Индия не теряла калитку до 30-го места), но прогноз становится ближе после 35-го.

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

Если вы хотите проверить расчеты, спрогнозировать свои собственные оценки или просто посмотреть, как все это сделано, вот файл.

В загрузке:

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

Не стесняйтесь комбинировать данные, чтобы создать свой собственный инструмент прогнозирования.

Как я построил предсказатель очков - видео

Я сделал короткое (да ладно, 37 минут) видео, объясняющее процесс, концепции машинного обучения и реализацию Excel. Посмотрите его ниже или посмотрите на YouTube-канале Chandoo.org.

Ссылки - по машинному обучению, Excel и статистике

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

  • Ансамблевое моделирование:
  • ЛИНЕЙН () и множественная регрессия:
  • Статистика F:
  • Возможности Excel:
  • Также см:

Как вам предсказатель очков?

Мне было так весело создавать это. У меня было несколько неудачных попыток и я сделал модели с неправильными уравнениями, но в конце концов придумал что-то, что дает разумные прогнозы. Я доволен тем, как получилось. Хотя я не мог объяснить каждую мелочь о модели в этом посте, я надеюсь, что вы сможете заполнить эти пробелы.

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