Введение
Мой прошлый пост вызвал некоторый ажиотаж. Было достаточно много комментариев. Некоторые адекватные, некоторые — нет. Часто люди упоминали странный расчет вероятности победы одной команды над другой.
Для начала скажу пару слов о том, как это надо было сделать. Необходимо было рассмотреть множество факторов: личные встречи, все матчи обеих команд, уровень противников в этих матчах, стабильность ростера, уровень турнира и т.д. Далее необходимо вычислить коэффициенты корреляции между этими факторами и итоговыми результатами, провести ретроспективный анализ прошедших турниров, выбрать наиболее значимые параметры и в итоге вывести регрессионную формулу для вероятности победы. Это то, что сегодня называют «машинным обучением» и Big Data. Это много работы и, скажу честно, не очень интересно для меня.
Я хочу поговорить только об одном параметре — личные встречи двух команд. Если хотите, это можно назвать Low Data. Благо математика в этой сфере хорошо проработана и изучается в хороших вузах. Этот пост будет, наверное, слишком задротским, но в конце я снова оценю шансы различных команд на победу в воображаемом турнире.
Математическая база
Итак, рассмотрим матч двух команд — А и Б. Предположим, что мы знаем вероятность победы команды А, которая равна p (пусть для примера будет 0,6=60%). Какова вероятность, что из N матчей команда А выиграет ровно K? Ответ на этот вопрос известен и называется он биномиальным распределением.
Рассмотрим для начала два матча и две победы. Тут все очевидно — это значит, что команда А должна победить в первом матче (с вероятностью p) и во втором (тоже p). То есть, Bin(N=2,K=2;p=0,6)=p^2=36% (Bin соответствует БИНомиальному распределению). Пусть теперь K=1. Тогда команда А должна выиграть один матч (p), а команда Б — выиграть другой (1-p). То есть, p*(1-p). Но ведь нам пофигу, какой конкретно матч выиграла команда А, то есть у нас есть два варианта — первый или второй. Получаем Bin(N=2,K=1;p=0.36)=2*p^1*(1-p)^(2-1)=48%. Если расширить эту логику на любое число матчей, получится формула:
где N!=1*2*...*N — факториал.
Само распределение выглядит так:
Окей, с этим разобрались. Теперь рассмотрим обратную задачу: мы знаем, что команда А выиграла K матчей из N в матчах с командой Б. Какова вероятность того, что команда А выиграет следующий матч против Б? Казалось бы, очевидный ответ p=K/N. Но нет! На самом деле, мы можем лишь сказать, что эта вероятность с определенной точностью находится в некоторых пределах или найти среднюю вероятность такого события. То есть у нас пошел уже второй уровень вероятностей — мы можем сказать только вероятность вероятности нашего события.
Рассмотрим биномиальное распределение немного в другом контексте. Ранее числа N и K были переменными, а число p — параметром. Теперь все будет наоборот — N и K будут нашими заданными параметрами, а p — переменной. Поскольку в первом члене нет зависимости от нашей переменной p, то опустим этот член и получим:
Здесь Norm — это нормировочный множитель, и он равен:
Поверьте, он нужен. Казалось бы, какая разница, но она есть. До этого N и K были дискретными переменными, а теперь переменная p — непрерывная. То есть функции Bin и f определены на разных множествах — первое только для натуральных чисел, второе — на множестве всех действительных чисел от 0 до 1.
Посмотрим на полученные распределения вероятностей:
Здесь на всех трех графиках команда А выиграла половину игр, но в первом случае (синяя линия) — это 1 из 2, во втором (оранжевая) — 5 из 10, в третьем (серая) — 25 из 50. Во всех трех случаях средняя вероятность победы 50%, но отличаются погрешности. В первом это 22%, во втором — 14%, а в третьем — 7%. Чем больше игр в выборке, тем меньше наша погрешность. Погрешность измерения 10% начинается только после примерно 20 личных встреч. Значит, комментаторы могут спокойно говорить «не статистика», если в выборке меньше 20 матчей (то есть почти всегда).
Моделирование турнира
Для моделирования турнира использовался метод Монте-Карло, который описан ранее. Здесь я опишу лишь принципиальные отличия. Теперь вероятность победы одной команды над другой — не какое-то определенное число, а случайная величина, распределенная согласно известному распределению.
Рассмотрим на примере VP против Liquid. Эти команды сыграли 18 карт друг с другом после TI7. 8 раз выиграли VP, 10 — Liquid. Построим плотность распределения нашей случайной величины для этой пары:
Это означает, что если VP и Liquid сыграют друг с другом 100 матчей, то в 24 случаях вероятность победы VP будет 40%, в 32 матчах — 50%, в 23 — 60% и т.д.
Допилив такой случайный алгоритм в свой модуль, я провел 10 000 турниров среди команд топ-8 по DPC. Сетка турнира, как и раньше, была double-elimination, жеребьевка была случайной. Вот результаты:
На этот раз фаворитами являются Team Liquid. По итогам двух постов можно сделать следующие выводы:
- Основные три фаворита надвигающегося The International — это Virtus.pro, Team Liquid и PSG.LGD. Шансы остальных команд существенно ниже.
- VP более стабильны и лучше выступают против команд ниже рангом, чем их непосредственные конкуренты. Liquid и LGD лучше настраиваются в матчах против сильных противников, но чаще «закидывают» карты против менее сильных коллективов.
- Многое зависит от жеребьевки. Чтобы максимизировать свои шансы на победу, VP должны всеми силами оказаться максимально далеко (по сетке) от Liquid и LGD. А вот европейцам и китайцам в принципе пофиг.
- Если команды сыграли друг с другом меньше 20 матчей (на самом деле, это число немного варьируется в зависимости от K — числа побед одной из команд), то погрешность в вероятности победы больше 10%, что много.
Какие-то еще выводы как минимум спорны.
P.S.: Если кто-нибудь сделает работу, описанную во введении, это будет дико круто.
P.P.S.: Не думаю, что будут еще посты — на мой взгляд, тема мною «облизана» достаточно подробно, и желания делать что-то еще по подобному моделированию у меня нет.
P.P.P.S.: Моделировалось все в НЕВЕРОЯТНОЙ программе Microsoft Excel с использованием VBA.
P.P.P.P.S.: Как и обещал в начале, пост очень задротский. Если кто-то узнал что-то новое из области математики, то я рад.
Спасибо, что дочитали!
С уважением,
Костя