23 декабря 2016 в 17:38

Распределение Пуассона и футбольные ставки




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


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


Смертность от удара лошади Согласно формуле Пуассона Наблюдения
0 108.67 109
1 66.29 65
2 20.22 22
3 4.11 3
4 0.63 1
5 0.08 0
6 0.01 0

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


Формула Пуассона


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





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


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

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


Футбольная статистика


Оказывается, количество забитых мячей в футбольном матче очень хорошо вписывается в Пуассоново распределение. Так, на диаграмме слева мы видим число голов, забитых каждой командой в каждом из 380 матчей чемпионата Испании 2008–2009 годов. На диаграмме справа подсчитаны теоретические данные модели.





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


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


Англия — Премьер-лига 1 x 2
Манчестер Юнайтед — Сандерленд 1,25 6,80 15,00
Челси — Борнмут 1,39 5,10 10,50
Халл — Манчестер Сити 10,50 5,80 1,35

1 — победа первой команды
x — ничья
2 — победа другой команды.


Достаточно мельком взглянуть на турнирную таблицу и станет понятно, почему так высоки ставки и возможный выигрыш в случае победы Сандерленда над Манчестер Юнайтед. За каждый рубль в этом случае можно заработать 15 рублей, в случае же победы команды Манчестер Юнайтед выигрыш будет всего 1.25 рублей.


Попробуем теперь сами рассчитать ставки на игру Манчестер Юнайтед против Манчестер Сити, которая должна состояться 26-го февраля 2017 г. Несмотря на то, что у двух клубов названия похожи, МС играет на своем поле, а МЮ — в гостях.


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


µMU — Ожидаемое количество забитых мячей для Манчестер Юнайтед
µMC — Ожидаемое количество забитых мячей для Манчестер Сити


Тогда


  • µMU = нападение МЮ ✕ оборона МС ✕ среднее количество забитых на выездных матчах.
  • µMC = нападение МС ✕ оборона МЮ ✕ среднее количество забитых голов на своем поле.

За весь сезон 2015/2016 было 380 футбольных игр, в которых команды у себя дома забили 567 мяча (1.49 за игру), а в гостях — 459 (1.20 за игру).


(5:563)$ echo 'scale=5;567/380;459/380' | bc -q
1.49210
1.20789

Далее, считаем коэффициенты нападения МЮ, нападения МC, оборона МЮ и обороны МС.





На выездных матчах Манчестер Юнайтед забивал в среднем 1.15 мячей за игру, а пропускал — 1.36.


(5:552)$ echo 'scale=5;22/19;26/19' | bc -q
1.15789
1.36842

У себя дома Манчестер Сити забивал в среднем 2.47 мячей за игру, а пропускал — 1.10.


(5:553)$ echo 'scale=5;47/19;21/19' | bc -q
2.47368
1.10526

Теперь те же самые значения мы взвешиваем относительно общих средних значений. Относительное среднее нападения МЮ на чужом поле равно 0.958, а относительное среднее обороны МС на своем поле — 0.915.


(5:554)$ echo 'scale=5;22/19/1.20789;21/19/1.20789' | bc -q
.95860
.91503

Относительное среднее обороны МЮ на чужом поле равно 0.917, а относительное среднее нападения МС на своем поле — 1.657.


(5:555)$ echo 'scale=5;26/19/1.49210;47/19/1.49210' | bc -q
.91711
1.65785

И наконец, перемножая все промежуточные средние значения, находим µ.


µMU = 1.06
µMC = 2.27


(5:556)$ echo 'scale=5;.95860*.91503*1.20789;1.65785*.91711*1.49210' |bc -q
1.05948
2.26863

Голы по Пуассону


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


> dpois(x=(0:5), lambda=2.26863)
[1] 0.10345381 0.23469843 0.26622195 0.20131970 0.11417998 0.05180642
> dpois(x=(0:5), lambda=1.05948)
[1] 0.346636014 0.367253924 0.194549094 0.068706958 0.018198412 0.003856171

Итак, вероятности распределены следующим образом.


Голы 0 1 2 3 4 5
МЮ 34.663% 36.725% 19.454% 6.870% 1.819% 0.385%
МС 10.345% 23.469% 26.622% 20.131% 11.417% 5.180%

Вероятность того, что Манчестер Юнайтед не забьет ни одного гола составляет 34.663%, то же самое для Манчестер Сити — 10.345%, вероятность нулевого исхода встречи равна их произведению и составляет 3.586%. Матрица всех результатов от 0:0 до 5:5.


> a=dpois(x=(0:5), lambda=1.05948)
> b=dpois(x=(0:5), lambda=2.26863)
> A=a%*%t(b)
> A
             [,1]         [,2]        [,3]         [,4]         [,5]         [,6]
[1,] 0.0358608180 0.0813549276 0.092282115 0.0697846579 0.0395788921 0.0179579724
[2,] 0.0379938195 0.0861939186 0.097771055 0.0739354494 0.0419330446 0.0190261126
[3,] 0.0201268459 0.0456603665 0.051793239 0.0391665649 0.0222136111 0.0100788929
[4,] 0.0071079969 0.0161254150 0.018291300 0.0138320641 0.0078449589 0.0035594618
[5,] 0.0018826951 0.0042711387 0.004844817 0.0036636988 0.0020778943 0.0009427947
[6,] 0.0003989356 0.0009050372 0.001026597 0.0007763231 0.0004402975 0.0001997744

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


> sum(diag(A))
[1] 0.1899577
> 1/sum(diag(A))
[1] 5.26433

Шансы победы МС равны сумме всевозможных 1:0, 2:0, … 5:0, 2:1, 3:1, … и т. д. до 5:4. Ставка равна 1.619.


sum(A[1,2:6])+sum(A[2,3:6])+sum(A[3,4:6])+sum(A[4,5:6])+A[5,6]
[1] 0.6174305
1/(sum(A[1,2:6])+sum(A[2,3:6])+sum(A[3,4:6])+sum(A[4,5:6])+A[5,6])
1.619615

Шансы победы МЮ поменьше, соответственно побольше будет ставка и денежный выигрыш — 1 к 5.191.


> 1 - (sum(A[1,2:6])+sum(A[2,3:6])+sum(A[3,4:6])+sum(A[4,5:6])+A[5,6] + sum(diag(A)))
[1] 0.1926118
> 1/(1 - (sum(A[1,2:6])+sum(A[2,3:6])+sum(A[3,4:6])+sum(A[4,5:6])+A[5,6] + sum(diag(A))))
[1] 5.19179

Ставки сделаны!


Ставки на игру 1 x 2
Манчестер Сити — Манчестер Юнайтед 1.620 5.264 5.192

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


Использованные материалы


Микаел Григорян @temujin
карма
155,7
рейтинг 22,4
Эксперт систем мониторинга вычислительных сетей
Самое читаемое Разработка

Комментарии (36)

  • 0
    А в чем смысл брать матч команд из одного города, который пройдет через два месяца? Благо, команды хоть на разных стадионах играют и термины «хозяин» — «гость» более-менее уместны… Разумнее было бы на примере ближайших матчей показать, какие коэффициенты должны быть правильными, а потом сравнить, чьи лучше — пуассоновские или букмекерские.
    Кто через два месяца вспомнит о том, какие ставки предлагались?
    • 0
      Если берем матч Интер-Милан, то термины «хозяин» — «гость» подразумевают как один стадион.)
      • +1
        с эпичным полуфиналом (наиболее поздней стадией турнира, где такое может иметь место) ЛЧ 2003: 0-0 первый матч, 1-1 второй матч на том же стадионе, но в финал идет «Милан», поскольку он забил в матче, где считался гостем.
        https://en.wikipedia.org/wiki/2002%E2%80%9303_UEFA_Champions_League#Semi-finals
    • 0

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

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

      Если выигрыш команды А в три раза вероятнее выигрыша команды Б, но люди склонны ставить на А и на Б примерно одинаковое количество денег, то букмекер поставит на матч равные коэффициенты 0.95/0.95. И получит свои 5 процентов при любом исходе. Конечно, такие большие перекосы бывают редко.
  • +3
    Поучаствуйте вашим ботом в конкурсах спортивных прогнозов на рутрекере. Там на футбол: английскую премьер-лигу и российскую премьер-лигу многие люди дают прогнозы. Там интересная система подсчета — насколько близко ваш прогноз был к факту. Очень сбалансированная и проверенная годами система.
    • 0

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

  • 0
    Спасибо за статью, интересно. Подскажите, откуда получились цифры 1.20789 и 1.49210 при расчёте относительного среднего?
    • 0
      За весь сезон 2015/2016 было 380 футбольных игр, в которых команды у себя дома забили 567 мяча (1.49 за игру), а в гостях — 459 (1.20 за игру).

      Делим голы забитые дома 567 на количество встреч 380. Аналогично — голы в гостях 459 на 380. Расчет


      (5:563)$ echo 'scale=5;567/380;459/380' | bc -q
      • 0
        Не самая лучшая идея оценивать команду в текущем сезоне, судя по прошлому. Во время летнего трансферного периода команда могла поменять половину состава, у неё мог смениться тренер и тактический рисунок игры. И эта команда уже не будет являться той, что была в прошлом сезоне.
        Как мне кажется разумнее накапливать статистику первую половину сезона и, если у команды сохранился тренер, остались те же игроки и рисунок игры, то можно попробовать прогнозировать вторую половину.
  • 0
    Отличная статья, спасибо!

    Есть несколько вопросов:

    1. Есть ли статистика показывающая как вероятность прогнозируемых исходов коррелирует с реальными результатами матчей, на протяжении продолжительного периода времени (например одного чемпионата)?
    2. Удалось ли по данному методу получить перевес над букмекером, например мы получили коэффициент 1.6 на победу MC, а букмекер нам дает к примеру 1.4, что на продолжительном временном участке приведет к потере поставленных денег. Есть ли статистика по матчам где букмекер дал более высокий коэффициент и корреляция этих данных с реальным исходом?
    • 0

      Собрать и находить статистику оказалось гораздо сложнее чем я думал. Множество сайтов блокируются Роскомнадзором, другие прячут весь контент только для платных пользователей. Даже такую простую вещь как статистика забитых за весь сезон мячей и разбивку дома / в гостях, надо было искать и искать. Так что скорее всего то, что Вы спрашиваете — это платный контент для тех, кто делает ставки онлайн.

      • +1
        Жаль, интересно было бы посмотреть на эффективность метода на продолжительном участке времени.

        Пару лет назад я написал программу, которая рассчитывает рейтинг ЭЛО для каждой команды после игр друг с другом, по рейтингу рассчитывается вероятность каждого исхода для встречи двух команд, в последствии при прошествии нескольких туров вероятности уточнялись по формуле Байеса. Такой подход в среднем дал 44% угаданных результатов для Английской Премьер Лиги, но когда я стал сравнивать полученные вероятности с коэффициентами букмекера, выяснилось, что букмекер практически всегда дает коэффициент ниже минимально необходимого, как итог вероятность заработка на ставках стремится к 0.
    • 0

      Вы упускаете из виду маржу букмекера, поэтому коэффициент всегда ниже реального.
      Самым простым примером для иллюстрации понятия маржи будет встреча равных по силе соперников. Вероятность победы первой и второй команды разделится поровну, т.е. 50% на 50%. Для удобства в расчётах переведём её в безразмерную величину (обозначим вероятность буквой Р):
      Вероятность победы и первой и второй команды будет равна 0.5. Считаем коэффициент. Математически он равен:


      По логике вещей, БК на данное событие должна была выставить коэффициент 2. Что же делает букмекерская контора? Она вводит так называемую маржу, допустим, 10 %. Это довольно высокая маржа, но она наглядно покажет нам, насколько понизится коэффициент с учётом такой высокой маржи.
      Маржа распределится на два плеча по 5 %, и вероятность исходов уже будет составлять в процентах не 50%, а 55% или, соответственно, не 0.5, а 0.55 в безразмерных единицах. Коэффициент с учётом маржи будет составлять:


      По расчётам получается так:


      • ставку с вероятностью исхода 50%, Вы должны покупать с коэффициентом 2;
      • ставку с вероятностью исхода 55%, Вы должны покупать с коэффициентом 1.82.

      Но в реальности Вы делаете ставку, вероятность исхода которой составляет 50%, на пониженный коэффициент 1.82, в котором букмекерская контора уже учла маржу, в нашем случае 10%.


      Величина маржи в разных букмекерских конторах лежит в пределах от 2% до 20%. Чем выше маржа, тем ниже коэффициенты – это закономерность.

      • +1
        Ещё любопытно то, что все букмекерские конторы используют 2 знака после запятой. Однако, при расчёте мат. ожиданий, вероятностей и банально критерия Келли, значимых знаков больше 2. На одной только погрешности возможно делать деньги, когда через компанию проходят тысячи ставок. Но это уже больше похоже на то, что делают банки.
        • 0
          1xbet месяца 3 — 4 назад сделал 4 знака после запятой, но видать что-то пошло не так, и через месяц они опять вернули 2 знака :)
        • 0
          Всю жизнь в пинке трехзначные кефы, кажется в бет365 рассчитывали порой при 2 значном кефе, как с тремя. имхо, малозначимо, никакой профи не выдаст точности в 2 сотых.
  • 0
    1. Вы просчитываете силу нападения и защиты для матча 26 тура (из 38) текущего сезона только по прошлому сезону. Полностью игнорируете данные по матчам текущего сезона, которые лучше отражают реально положение дел.

    2. Можно ли как-то просчитать вероятности, если одна из команд только вышла в этот дивизион, например. Т.е. данных по прошлому году по ней просто нет.
    • +1
      Думаю, что автор не преследовал цели заработать решая эту задачу, а лишь хотел продемонстрировать возможности метода.

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

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

      Если неправ, поправьте.
      • 0
        Определенно могу сказать, что учитывать статистику клуба по играм в более слабом дивизионе и равноценно переносить ее на игры в премьер-лиге — в корне неправильно.

        Небольшой пример:
        «Бернли» по итогам Чемпионшипа 15/16 занял первое место и попал в Премьер-лигу на следующий сезон.
        Чемпионшип (в среднем за 46 игр)

        голы дома 1.65 пропущенные дома 0.61
        голы на выезде 1.48 пропущенные на выезде 0.91

        Премьер-лига (в среднем за 17 игр, турнир продолжается)

        голы дома 1.56 пропущенные дома 1.11
        голы на выезде 0.25 пропущенные на выезде 2.25

        Все показатели ухудшились. Одно дело играть с Редингом и Брентфордом, совсем другое с Челси и Ливерпулем.

        Та же история с международными матчами, если ПСЖ за прошлый сезон в Лиге 1 забил 102 гола (в среднем 2.68 за игру), это не говорит о том, что можно рассчитывать на подобную результативность во встрече с условным Манчестер Сити, который в среднем пропускал больше одного гола за матч. По причине того, что чемпионат Англии по классу превосходит уровень чемпионата Франции. Соответственно голы будут иметь разную ценность.
        • 0
          Со всем согласен, но остается вопрос, как сравнить силу двух чемпионатов. Вы можете предложить модель?
  • +1
    Интересная статья, спасибо!
    Хотелось бы вам предложить заглянуть на страничку датасета футбольной статистики на kaggle: https://www.kaggle.com/prajitdatta/ultimate-25k-matches-football-database-european
    Мне кажется вы найдёте там много интересного для подобных исследований :)
  • 0
    Диаграммы очень похожи, следовательно модель Пуассона хорошо объясняет соотношение мячей, забитых командой в течение матча.
    Очень сильное утверждение.
    • 0

      Действительно, фраза неудачно составлена. Надо поменять.

  • 0
    Спасибо за статью, интересно!
    А откуда брали статистику по матчам?
    • 0

      По крупицам, тут есть, но навигация и UI адовое просто — http://www.soccerstats.com/.

  • 0
    Отличная статья, спасибо.

    Как в действительности букмейкерские конторы ставки рассчитывают по миллионам событий?
    • 0
      Покупают коэффициенты у аналитических контор, добавляют к ним свою маржу.
      Аналитические конторы держат прогнозистов, мат. модели, подбрасывают монеты и управляют рисками.
  • 0
    Если понизить коэфициент мячей за игру (не 1,20, а 0,12), тогда µ(MU) будет в 10 раз больше (10,6). Согласно http://www.matburo.ru/tvbook_sub.php?p=par19, такие значения эта формула не посчитает.
  • 0
    Букмекеры всегда занижают коэффициенты и с этого живут. Реальные ставки можно узнать на бирже betfair.com. Именно по ним букмекеры и вычисляют ставки там, где статистики не достаточно, либо она не вписывается в существующую модель вычислений. то есть практически всегда :) Тупо обрезается 20-30% от бетфэйрского кэфа, и будьте любезны!
  • 0
    Хорошая статья, про миллионы, то это обороты, так как при 2% с оборота и ограничениях по размерам ставок, нужно проставляться только ботом.
    Я делал статистику по >300000 событий еще лет 6 назад и проставлялся, все гораздо хуже, чем в рекламе.
    Наиболее перспективен лайв футбола, но прокрутить банк неимоверно сложно.
  • 0
    Если кому интересно, то написал такой тотализатор на Python 2.7.
  • +1
    В книге «Soccermatics» (http://www.bloomsbury.com/uk/soccermatics-9781472924124/) убедительно доказано, почему заработать на ставках нельзя. Предложена модель Пуассона, которая помогла автору удвоить вложенный капитал за сезон.

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

    Например, если вероятность события 0.7, коэффициент, который предложит идеальный букмекер, должен быть равен 1.428… (1/0.7), однако на практике он будет к примеру 1.35 (если маржа букмекера 5%).
    • 0
      Ошибаетесь, заработать можно. Например, в пиннакле, линия в разные моменты времени до трети событий создает вилку с собой. Т.е. очевидно, что ставя на «правильный» конец мы будем выигрывать в бесконечной игре.
      У буков задача делить поток ставок, а не точные кефы. И почти всегда можно найти выгодный кеф у одного из конкурентов. Есть даже специальные сервисы.
    • 0

      Я так понимаю, эта книга только в бумажном виде существует?

  • 0
    Почему при расчёте шансов победы МЮ добавляется сумма элементов на главной диагонали?
    1/(1 — (sum(A[1,2:6])+sum(A[2,3:6])+sum(A[3,4:6])+sum(A[4,5:6])+A[5,6] + sum(diag(A))))

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