Pull to refresh

Вероятность выигрыша матча при известной вероятности выигрыша очка

Reading time 4 min
Views 7.3K
Надеюсь, среди читателей есть любители спорта. Если Вы играете в бадминтон или настольный теннис, то Вы возможно задавались вопросом: какова вероятность выиграть игру при известной вероятности выиграть очко? Допустим Вы проигрываете своему сопернику со счетом около 11:7. Казалось бы всего 4 очка разницы, но при этом никак не удается выиграть партию. Не везет? Предлагаю решить эту задачу и получить ответ на этот вопрос.

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

Для начала я поручил решить такую задачу численными методами своему 15-летнему сыну, который немного занимается программированием на Python (ключевое слово «немного»). Я предложил ему попробовать метод бинарного дерева (в финансовой риск аналитике обычно называется binomial method или lattice) и Монте Карло. Сын на удивление быстро справился с Монте Карло, написав довольно компактный код. Если кто не знает, идея Монте Карло состоит в том, чтобы сделать большое количество случайных вбросов смоделировав задачу и найдя ответ. Допустим Вы – первый игрок. В данном случае мы имеем вероятность выигрыша очка (7/(11+7)) ~=0.39. Начинаем партию, генерируя случайное число X в диапазоне [0.,1.]. Если X < 0.39, значит очко выигрываете Вы. Доводим партию до конца и отмечаем кто победил. Для достижения приемлемой точности проделываем такую процедуру большое количество раз. В финансах обычно используется диапазон от 100К до 1М, это обеспечивает точность 8-ми значащих цифр. Мой сын считал до 10К, это было мгновенно и однозначно обеспечивало достаточную точность. За которой, впрочем мы не гнались, так как для простоты решили проигнорировать козлиный бой. То есть счет 11:10 считали победой. Пол страницы кода легко хватает для решения такой задачи. Попробуйте и вам понравится.

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

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



Начинаем со счета 0:0, вероятность которого 100%. Каждый переход вправо имеет свою вероятность. Обозначим вероятность выигрыша очка первым игроком — р1, а вторым – р2. Естественно, сумма р1 + р2 = 1. Идем по дереву от начала к концу и подсчитываем вероятность попадания в данную клетку. Для самых верхних и нижних клеток переход возможен только из одной клетки предыдущего уровня. Например, счет 3:0 возможен только после 2:0. Попадание в остальные клетки происходит из двух соседних слева. Например счет 1:1 возможен после 1:0 при последующем выигрыше очка вторым игроком, или при 0:1 при выигрыше первым игроком.



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

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



Дальше остается идти двойным циклом слево направо и сверху вниз подсчитывая верояности ячеек и принимая во внимание граничные условия. Они отливаются в if/if/else. Ну и остается просуммировать вероятности выигрышных ячеек для одного из игроков (можно и для второго чтобы проверить что их сумма равна 1).

Ну и наконец третий метод. Любой финальный счет партии (например 11:7) подразумевает определенное количество вариантов. Статистика говорит что это есть количество сочетаний из 7 по 17. Значение есть 17!/((17-7)!7!). 17 есть общее количество очков, набранное при данном счете минус один, так как последнее очко всегда выигрышное для победителя, то есть 7 проигранных не могут находиться на этом месте. Возможные варианты выигрышных счетов таковы (игнорирую козлиный бой) – 11:0, 11:1,…,11:10.

То есть можно перебрать все исходы выигрышного счета для игрока, просуммировав количество вариантов в каждом из них, умноженное на вероятность данного исхода. В таблице собраны результаты расчетов для вероятности выигрыша очка 39%. power1 – это степень, в которую возводится вероятность выигрыша очка победителем, power2 – проигравшим.



Все приведенные методы надежно работают и дают одинаковые результаты.
В заключении приведу график зависимости вероятности выигрыша матча в настольный теннис (до 11) и в бадминтон (до 21) в зависимости от средней вероятности выигрыша очка.



Синяя линия представляет настольный теннис, оранжевая — бадминтон. Как видно из графика, чтобы иметь хоть какие-то шансы (~3%) выиграть игру в настольный теннис, требуется выигрывать хотя бы 30% очков. Уже при 25% шансы уходят ниже 1%.
В бадминтоне требования еще жестче. Там потребуется более 35% чтобы надеяться на выигрыш игры с вероятностью около 3%.

Естественным образом вероятность выигрыша матча (из нескольких игр) падает еще сильнее если Вы набираете менее 50% по каждому очку.

Ценный совет напрашивается сам собой — чтобы выигрывать матчи, надо работать над выигрышем каждого очка.
Tags:
Hubs:
+11
Comments 13
Comments Comments 13

Articles