3 мин.

Вероятностная таблица РФПЛ или как превратить xG в xPoints

<!--?xml version="1.0" encoding="UTF-8" standalone="no"?-->

Последние пару недель я участвовал и был свидетелем нескольких мини-дискуссий на тему "Сколько xG стоит один гол?" и "Как составлять таблицу лиги исходя из xG?" Вопрос этот, на самом деле, не такой сложный, как может показаться на первый взгляд, ведь за ответом далеко ходить не надо, он находится прямо в самой модели xG.

Детально знать, как Кэйли получал свои формулы, мы не можем, однако их внешний вид позволяет предположить, что получил он их с помощью так называемой логистической регрессии. Модель эта классическая и широко применяющаяся в анализе данных, и если душа у вас лежит к математике, то в деталях её описание можно почитать на Википедии. Одно из свойств чисел, возвращаемых моделью (в нашем случае ожидаемых голов xG), то, что они ни что иное как вероятности положительного исхода, т.е. сказать, что удар стоил 0.3 xG, это то же самое, что и сказать "вероятность забить после данного удара равна 0.3".

Если к этому рассуждению применить ещё один математический закон, закон больших чисел (его некоторые ещё называют регрессией к среднему), получим, что количество забитых мячей в большой выборке ударов примерно равно сумме xG, а значит одному голу соответствует примерно 1 xG. Вы, конечно, можете сказать, что рассуждения рассуждениями, но вон забивает же Ростов постоянно, хотя зарабатывает не больше 0,5 xG за матч. Однако модель обязана давать правильные результаты не на 10 матчах, а хотя бы на паре сотен, а с этим она наверняка справится на отлично: так если взять все удары в этом сезоне РФПЛ, то 1 гол приходится в среднем на 0,85 xG, что уже довольно близко к искомым 1 гол = 1 xG и я считаю это серьёзным аргументом в пользу продолжения изучения xG.

В общем, о том, что xG - это просто вероятность забить гол, мы вроде договорились, теперь надо решить, как составлять таблицу чемпионата исходя из xG. Несколько подходов к этому вопросу были уже многократно описаны, и текущий вариант, когда победа присуждается за перевес в 0.6 xG, выглядит неплохим компромиссом. Но, всё же, я бы хотел предложить ещё один вариант подсчёта результатов матча, который не требует разных допущений об xG. Раз у нас есть вероятности того, что каждый удар станет голом, довольно нетрудно посчитать вероятности того, что команда забьёт определённое количество голов, а исходя из этого посчитать вероятности разных исходов матча. Вот, например, вероятности победы хозяев, ничьи и победы гостей в последнем туре РФПЛ (матч Томь - Урал whoscored так и не починил):

 

9 тур вероятности

ссылка

Это математическое описание фразы о том, если Локомотив сыграет 10 матчей против Арсенала, то 9 он выиграет, а ещё один сыграет вничью (хотя от нынешнего Локомотива можно ожидать разбазаривания своих шансов и в других 9 матчах). Конечно, эти вероятности не берут в расчёт текущую форму команд, исполнителей и прочее, однако на большом количестве матчей они будут близки к истинным частотам побед тех или иных команд. Сразу оговорюсь, что для вычисления вероятностей мне было необходимо всем ударам начислить xG, поэтому всем пенальти я присвоил 0.7 xG, а автоголам 0.3 xG. Дальше, чтобы составить таблицу лиги, договоримся давать за 0.23 победы 23% полагающихся за это очков, т.е. 3*0.23 и точно также за 0.49 ничьи будем давать 0.49*1 очков, за поражение же не будем давать ничего (т.е. вычислим матожидание набранных очков). В итоге получаем вот такую таблицу РФПЛ:  

 

таблица xPoints после 9 туров

ссылка

 

или более подробно

 

xPoints после 9 туров

ссылка

Выводы по этой таблице каждый может сделать сам, но в глаза бросаются несколько счастливчиков, сумевших набрать сильно больше очков, чем они наиграли (в первую это Анжи-я-отобью-ваши-пенальти-Махачкала и Ростов), а также команды, которым явно не хватает людей, способных нанести хороший удар (Локомотив и Оренбург).