Вступление

Очень люблю футбол и иногда делаю ставки на матчи. В настоящее время букмекерские конторы предлагают множество рынков, в основном, вы можете делать ставки практически на все, от «Кто будет следующим президентом США?» До «Какая страна выиграет следующее Евровидение. песенный конкурс? 'Но спортивные мероприятия, наверное, по-прежнему самые популярные, особенно футбол.

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

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

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

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

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

Предпосылки - Понимание того, как работают ставки и как быть прибыльными в долгосрочной перспективе.

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

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

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

Мы можем преобразовать эти шансы в вероятности, используя следующую формулу:

В этом случае коэффициент на сайте ставок отражает следующие вероятности победы Ливерпуля:

Поэтому, если вы считаете, что у Ливерпуля шансы на победу выше, чем 62,1%, вам следует делать ставку на такой исход. Однако, если вы думаете, что шансы ниже, вы легко увидите, что вам следует делать ставки против этого.

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

Рынок (торги) победителя английской премьер-лиги 2020/21

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

На сегодняшний день (2021.01.04.) Турнирная таблица выглядит следующим образом:

А на Betfair шансы на победителя PL следующие:

Хотелось бы знать, есть ли шансы в нашу пользу или нет. Или, другими словами, мы должны делать ставки на Ливерпуль, Манчестер Юнайтед, Манчестер Сити или любую другую команду?

Если вам интересно, на Betfair есть и другие рынки, на которые вы, возможно, захотите посмотреть. (например: 2-е место, 3-е место и т. д.)

Хорошо, но что такое метод Монте-Карло (MCM)?

Я не математик, так что простите меня, если я использую неправильные термины, но вот как я могу вкратце сказать, что такое MCM:

Допустим, вы хотели бы знать, какова вероятность выпадения ровно 12, бросив 5 кубиков. Это можно было бы вычислить, используя математические формулы, но, честно говоря, это может быть сложно. Но другой подход - смоделировать 1 миллион 5 бросков кубиков и проверить, сколько из них будет ровно 12. Таким образом, вы можете приблизительно оценить шанс, посчитав благоприятные исходы и разделив его на 1 миллион. Чем больше вы моделируете, тем ближе вы подходите к реальной вероятности. В этом случае она будет очень близка к реальной, поскольку 1 миллион бросков - это много. Это пример того, как вы можете использовать метод Монте-Карло.

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

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

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

Приступим к программированию

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

Я использовал R, так как это наиболее удобный для меня язык.

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

Шаг 1. Загрузите пакеты

Для этого достаточно использовать всего 3–4 дополнительных библиотеки.

Шаг 2. Считайте данные

Вы можете найти файл CSV, который я использовал, по следующей ссылке в моем репозитории Github. Я рекомендую вам скачать CSV и изменить путь.

Файл .CSV включает все матчи Премьер-лиги. Даже те, в которые еще не играл. Те, в которые еще не играли, отмечены знаком «x» в столбце «notyetplayed», а шансы результатов каждого матча записаны в «home_chance», «draw_chance» и «away_chance». ' столбец.

Я вручную рассчитал эти шансы / вероятности, основываясь на том, что я думаю. К сожалению, он не основан на какой-либо модели, это просто то, что я думаю о каждом матче. Грубая оценка. Поэтому, если вы не думаете, что они верны, вы можете изменить или оценить эти вероятности самостоятельно. (Если вы знаете какой-либо способ сделать это, дайте мне знать)

Здесь важно упомянуть, что моделирование методом Монте-Карло использует эти вероятности для расчета окончательных шансов на выживание, поэтому в основном все зависит от этих вмененных значений. Так что, если они очень далеки от реальных шансов, то окончательный результат также может быть далек от реальности.

Шаг 3: Некоторая чистка - извлечение результата

Нам нужно определить победившую команду на основе результата в столбце «Результат», поэтому я извлекаю числа из строки.

Создайте индикатор ничьей (d), дома (h) и на выезде (a)

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

Шаг 4. Получите названия команд и инициализируйте таблицу лиг.

Это 20 команд в лиге.

"Fulham"         "Burnley"        "Man City"       "Crystal Palace" "Liverpool"      "West Ham"       "West Brom" "Spurs" "Sheffield Utd"  "Brighton"       "Everton"        "Leeds"          "Man Utd"        "Arsenal" "Southampton"    "Newcastle"      "Chelsea"        "Leicester"      "Aston Villa"    "Wolves"

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

Нам нужно написать функцию, которая подсчитывает очки для каждого из раундов. (Будьте осторожны, эта функция подсчитывает очки только за те матчи, которые уже сыграны. Поскольку она использует столбец «hda».)

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

Эта функция вернет таблицу с Simulation_id, количеством матчей, сыгранных каждой командой в данной точке, и имеющимися у них очками.

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

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

Часть моделирования

Мы будем использовать ранее созданную функцию в части моделирования.

Шаг 7. Запишите вероятности там, где ее нет

Нам нужно присвоить 100 (%) для тех матчей, которые уже сыграны для соответствующих ячеек.

Небольшой обход - Пример функции

Примерная функция - одна из ключевых функций, которые мы используем. С помощью этой функции мы можем установить вероятности исходов дома (h), ничьей (d), далеко (a). Таким образом, если мы установим размер выборки равным 10000 с приведенными ниже аргументами, мы ожидаем около 6000 домашних побед, 2000 ничьих и 2000 выездных побед.

   a    d    h 
2017 1984 5999

Так ли это? Это просто случайность играет в этом роль.

Шаг 8: Написание функции моделирования

Следующая задача - создать функцию моделирования.

С помощью этой функции мы записываем результаты (h / d / a), используя вероятности, которые мы рассчитали для каждого совпадения. Мы делаем это несколько раз, поэтому создадим множество возможных результатов. Мы можем установить, сколько раз мы хотели бы моделировать, используя аргумент времени. Я рекомендую использовать минимум 100, но если у вас есть время, вы даже можете установить его на большее число, тогда ваши прогнозы будут более точными. (Для меня бег занимает пару минут, так что наберитесь терпения)

Результатом является таблица, в которой у меня есть столбец sumulaton_id, который помогает мне идентифицировать различные симуляции. И, конечно же, вы можете увидеть смоделированный результат в столбце «hda».

Шаг 9: Подсчитайте турнирную таблицу

Теперь единственное, что нам нужно сделать, - это рассчитать турнирную таблицу для каждого из симуляций с помощью функции «calculate_points».

Результаты, достижения

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

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

В английской премьер-лиге 20 команд, поэтому это число равно 38. Это сумма всех матчей, которые сыграла одна команда в лиге.

Шаг 11. Получите результаты только в последнем туре.

Боковое примечание: я не принимаю во внимание, что происходит, когда есть равные точки. Официальное правило гласит, что если какие-либо клубы заканчивают с одинаковым количеством очков, их позиция в таблице Премьер-лиги определяется разницей мячей. Сейчас я этим не занимаюсь.

Подсчитайте вхождения

Показать вхождения в процентах

Преобразуйте проценты в шансы

Заключение и Вывод

Вы помните вопрос, который я задал в начале?

Вы бы сделали ставку на «Ливерпуль» или «Манчестер Сити»?

Исходя из имитационной модели, следует делать ставку на Ливерпуль.

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

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

Разное

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

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

Но вы можете поиграть с данными и смоделировать различные консервативные и не очень консервативные сценарии, запустив моделирование методом Монте-Карло.

Само моделирование Монте-Карло будет правильным, но основные шансы могут быть неверными, поэтому используйте результаты на свой страх и риск и получайте удовольствие!

Обновлять

Цифры выше больше не отражают текущие вероятности. В тот день, когда я опубликовал статью, «Ливерпуль» проиграл «Саутгемптону», и это полностью изменило их мировоззрение.

Я повторно запустил модель сегодня (2020.01.05.) С обновленными результатами, и вот что я получил:

Ресурс

Скрипты и CSV:

Https://github.com/krinya/pl_simulation