Я знаю, что название этого блога звучит немного абсурдно, но на самом деле это так. Сегодня я буду делать проект End to End ML, в котором мы будем прогнозировать вероятность победы в процентах для обеих команд, играющих.

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

Весь код, написанный в этом блоге, находится в моем github- https://github.com/HarshMishra2002/ipl-win-predictor

ссылка на используемый набор данных - https://www.kaggle.com/ramjidoolla/ipl-data-set

Начнем с постановки проблемы:

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

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

Начнем с наборов данных, которые у нас есть изначально. Итак, у нас есть два набора данных: первый - match.csv, второй - deliveryies.csv.

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

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

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

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

Теперь мы объединим этот фрейм данных total_score_df с фреймом данных match, используя функцию слияния.

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

Также мы не будем рассматривать матчи, на которые повлиял дождь, я имею в виду, где был применен метод Дакворта-Льюиса.

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

Теперь давайте объединим этот набор данных match_df с набором данных «доставка», что даст нам единый большой набор данных, в котором будет происходить дальнейший процесс извлечения функций.

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

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

Точно так же нам нужно найти общее количество оставшихся шаров.

Теперь, чтобы получить столбец калиток, нам нужно сначала предварительно обработать столбец player_dismissed. Давайте сначала посмотрим на столбец

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

Теперь мы рассчитаем текущую скорость выполнения и требуемую скорость выполнения.

Теперь мы подошли к последней колонке «результат». Логика для этого столбца состоит в том, что если отбивающая команда (второй иннингов) успешно преследовала цель, мы добавим 1 в столбец результатов, иначе 0 будет считаться заявлением о победе поклонившейся команды.

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

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

Здесь наша целевая функция - это столбец результатов, так что это будет y, а остальные столбцы будут в переменной X.

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

Как видите, мы успешно обучили наши данные в конвейере. Теперь сделаем прогноз и посмотрим оценку точности.

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

Это показывает, что вероятность победы индейцев Мумбаи в этой игре составляет 98%, а вероятность победы RCB составляет около 2%, что действительно имеет смысл в данном сценарии.

Надеюсь, вы, ребята, узнали что-то новое, и вам понравился этот блог. Если тебе это нравится, поделись с друзьями. Заботиться. продолжай учиться.

Вы также можете связаться со мной через мою учетную запись Linkedin - https://www.linkedin.com/in/harsh-mishra-4b79031b3/