На Sports.ru своя модель xG. Как она работает?
Объяснение, которое поможет правильнее воспринимать данные.
Перед стартом чемпионатов мы анонсировали обновление приложения, в котором добавили xG в матч-центр. На прошлой неделе в нескольких телеграм-каналах заметили, что наши данные по xG в матче «Фиорентина» – «Милан» отличаются от других поставщиков. Особенно ярок был Игорь Порошин.
«Так называемое xG нужно упразднять, как упразднил 19 век парики. Чем дальше, тем эта мода выглядит смехотворнее. «Футбол в цифрах» обсчитал вчерашний праздник «Фиорентины» в 1,11. Understat – в 1,98. А то, что публикует Sports.ru – в 3+. Это не статистика, а нумерологические авторские колонки. Пускай религиозное преклонение человека перед цифрами находит себя в чем-то другом. Мы же теперь на эту белиберду ни в каком виде ссылаться не будем».
По мнению Порошина, такая разбежка ставит под сомнение точность модели. Что ж, кажется, пора рассказать, как этот показатель вычисляется на Sports.ru и почему не у всех он одинаковый.
Четыре абзаца про математику, потому что важно проговорить систему подсчета. Если не поймете сразу, не страшно, переходите к следующей главе
Напомним, что xG – это вероятность гола при ударе. Показатель вычисляется на основе исторических данных. Грубо говоря, мы оцениваем, как часто забивали голы при определенном типе удара (о параметрах чуть ниже).
Рассчитывая xG, мы решаем довольно простую задачу из математической статистики – предсказываем будет гол или нет. Получается, что модель xG – задача бинарной классификации, где у нас есть зависимая переменная «гол» и набор независимых переменных, которые могут на нее повлиять. Представим, что независимых переменных всего две, тогда их довольно просто показать на графике:
Вспомним школьное уравнение прямой x2 = ax1+b (где a – коэффициент угла наклона, а b – коэффициент сдвига по оси x2), и тогда задача сводится к тому, что нужно подобрать такие значения коэффициентов, чтобы разделить плоскость при помощи этой прямой таким образом, чтобы максимальное число точек было в зоне того же цвета. Наша модель отличается от примера на графике только тем, что пространство независимых переменных – многомерное, и наглядно изобразить его не получится.
В математические нюансы расчета и оптимизации обучения типа градиентного бустинга над деревьями решений углубляться не будем, но там тоже есть интересные моменты: например, разбалансировка классов. Это значит, что в нашем случае нужно учитывать, что голов на порядок меньше, чем остальных ударов.
Важно отметить, что идеальных моделей классификации не существует: чем сложнее контекст решаемой проблемы, тем больше факторов может влиять на ее результат. Очень хорошо это заметно на примере из графика: часть точек синего цвета лежит на области оранжевого, и наоборот – в математической статистике это называется ошибками первого (False Positive) и второго рода (False Negative). Если перенести контекст на футбол, в первом случае – это недавний гол Бираги с центра поля (xG 0,04), во втором – промах по пустым воротам с метра.
По каким данным высчитывается xG?
Большинство спортивных медиа используют сырые данные StatsPerform или StatsBomb, где каждое событие матча – отдельная строка, всего за игру таким образом собирается порядка двух тысяч ивентов, среди которых есть все действия с мячом: удары, пасы, борьба, отборы и так далее. В нашем случае есть данные по топ-5 лигам + РПЛ с сезона-18/19, соответственно, и модель можем обучить только на них. То есть база исторических данных – более 5 сезонов в 6 чемпионатах.
Что мы используем для расчета xG? Для базовой модели достаточно только координат удара, но, очевидно, точность у нее будет маленькой. Ведь то, что событие происходит в одной точке, не значит, что игровые ситуации одинаковые. Например, Understat на основе исторических данных по ударам из центра штрафной оценил момент, когда Габриэль Мартинелли бил в пустые ворота «Астон Виллы» в xG 0,63. И это довольно низкая точность прогноза. Как решить эту проблему?
Мы стараемся добавить как можно больше известных данных, чтобы увеличить качество модели, но при этом избежать переобучения или аномального влияния некоторых переменных. Например, мы сознательно отказались от маркеров big chance (явный момент) и one-on-one (выход один на один), потому что вероятность гола при них настолько высока относительно других ударов, что влияние остальных переменных оставалось незамеченным. Если оставить эти факторы, модели достаточно смотреть только на два этих поля: если один из них равен единице, значит «был» гол, остальные параметры будут игнорироваться, соответственно, и xG будет в большинстве случаев будет близок либо к единице, либо к нулю – нас это не устраивает.
В статье Вадима Лукомского об xG отдельно упоминается один из недостатков базовой модели – она ничего не знает о бьющем игроке, считая всех одинаковыми. Но мы обогащаем события физическими характеристиками (рост/вес), позицией и рабочей ногой игрока. Это может добавить качества при кроссах (например, высокий нападающий лучше ударит головой, чем маленький центральный полузащитник) или выходах один-на-один.
Мы учитываем не только событие удара, но и два предыдущих действия, чтобы лучше понимать контекст. Эти дополнительные данные позволяют узнать скорость атаки, характер передачи или заметить, например, перехват нападающим мяча при пасе между центральными защитниками.
В итоге для каждого удара у нас есть 76 независимых переменных и одна зависимая.
Среди общих: тип действия (пас / удар / и так далее), часть тела (левая нога, правая нога / голова / остальное), координаты (отдельно x и y), расстояние до ворот, угол до центра ворот, тайм, время с начала матча и тайма, разница во времени с предыдущим событием, позиция, рост, вес и рабочая нога (или обе) игрока, количество забитых голов каждой из команд и разница в счете, хозяева или гости атакуют.
Для удара: несколько типов зон, например caley zone matrix, где финальная треть разбивается на 7 разных областей таким образом, что чем ближе к штрафной, тем зона меньше.
Для предыдущих событий: движение мяча по координатам (x, y и общий вектор), маркер удачного действия, скорость движения мяча, конечные координаты события.
Иными словами, все эти параметры помогают нам точнее нарисовать цифровой портрет удара.
Первая обученная нами модель имела метрику эффективности классификации (их много, мы используем log loss) около 99,95%, финальная – около 90%. Почему так? Зачем вообще разделять разделять переменные для ударов и предшествующих моментов? Чем больше метрика, тем лучше работает классификатор, но эти параметры добавляют нам знания, которых в момент удара быть не должно. Конечные координаты и остальные их производные позволяют понять, был удар в створ или нет, из-за чего модель переобучается и отдает этим параметрам большую значимость, и возникает та же ситуация, что с big chance и one-on-one.
В результате мы построили модель, которая может предсказывать вероятность гола (тот самый xG) по набору параметров. Возможно, в первой версии учли не все, если есть идеи, как ее улучшить – пишите в комментариях.
Так зачем вообще нужен xG, если с ним столько сложностей?
Очевидно, что xG не дает всей картины, лишь помогает бегло оценить атаку/оборону команды или остроту футболиста в отдельном матче или на дистанции, а также понять, насколько случаен результат. Ровно как необычные обороты речи и едва уловимые отсылки удерживают нас в книгах и подкастах, расширенная статистика помогает понимать футбол тем, кто хочет замечать чуть больше обычного. Если их исключить, вряд ли пострадает смысл сказанного или изменится счет в матче, но моментов, когда захочется узнать что-то новое, станет существенно меньше.
В Sports.ru мы работаем и над другими моделями, которые пока доступны только для внутреннего тестирования. Следите за обновлениями – и обязательно увидите другие интерпретации статистики не только в наших текстах, но и внутри продукта.
Фото: REUTERS/Ian Walton, John Sibley, Jennifer Lorenzini
- Оскорбление
- Мат
- Спам
- Расизм
- Провокации
- Угрозы
- Систематический оффтоп
- Мульти-аккаунтинг
- Прочее
- Спам
- Оскорбления
- Расизм
- Мат
- Угрозы
- Прочее
- Мультиаккаунтинг
- Систематический оффтоп
- Провокации
- Повторить попытку оплаты
- Оставить комментарий без доната
- Изменить комментарий
- Удалить комментарий
А как вообще xG может помочь определить случайность результата в отдельном матче? Я всегда считал, что этот показатель способен на что-либо только на дистанции в сезон и более
По математике автору двойка. Угол наклона как раз показывает а, сдвиг показывает b
Если говорить именно про средние, у антропометрии почти всегда малая значимость. Вот комбинация рабочей ноги + части тела + позиции удара часто имеют серьезное влияние.
Хотелось бы побольше узнать про вес данных показателей в расчётах, конечно
Вопрос человека только начинающего учить машинное обцчение
Так и в работе с продуктом: летом Спортс запустил полностью новое Fantasy, 2 месяца назад полностью обновил комментарии, на этой неделе полностью раскатили донаты для авторов – все это параллельно развитию приложений происходило и происходит, а ведь есть еще много других менее визуально заметных проектов, в том числе внутренних.
Никто и не говорит, что это единственная метрика, которая показывает, сколько голов команда заслуживает. Любая модель xG может интерпретироваться даже на одном ударе, все остальное – сумма, которая благодаря большей дистанции дает сглаживание.
> Так вот, для того, чтобы у статистической метрики появилась предсказательная сила, она должна быть основана на достаточно существенном объёме вводных данных - в данном случае, количестве ударов.
Сколько нужно ударов для такого? У нас более ста тысяч, например, достаточно? В CV есть модель, распознающая рукописные цифры – многие учатся во время ее создания работать с изображениями, обучена очень маленьком объеме данных, и при этом работает. Или не работает и есть какая-то константа "существенного объема данных" для всего?
> (а сколько таких критических нюансов не учитывается? наверняка десятки и сотни)
Так никто и не спорит. Мы пытаемся решить задачу с имеющимся набором данных, и не утверждаем, что точность нашей модели равна 100%. Снова пример из CV: есть задачка по распознаванию растений по картинке. По Вашей логике, работать с одной картинкой бессмысленно, ведь растение можно понюхать, потрогать и посмотреть с других углов. Правильно понял? Пока мы не сможем вычислять настроение футболиста (важный фактор, мне кажется), за эту задачу лучше не браться?
Ну вот же самая главная ваша ошибка прямо здесь: подавляющее большинство статистических метрик в целом, что в футболе, что в астрофизике - и ОСОБЕННО такие нестабильные, как xG - ни в коем случае не должны интерпретироваться на такой миниатюрной выборке как 5-10 ударов по воротам в отдельно взятом матче.
Что такое статистика? Это попытка осмыслить пост-фактум некое явление в цифрах для единственной цели: чтобы получить некую predictive power - как это, предсказательная сила? - и иметь возможность построить вероятностное суждение о подобном событии в будущем. Если вы пытаетесь использовать статистику в других целях - то вы делаете ошибку.
Так вот, для того, чтобы у статистической метрики появилась предсказательная сила, она должна быть основана на достаточно существенном объёме вводных данных - в данном случае, количестве ударов. Но это даже не самое главное: параметрирование в такой метрике, как хG, очень комплексное, и самый маленький разброс по вычисляемым показателям, условно 0.5 для "удара с левого угла штрафной правшой с 10 метров" в одной модели, и 0.6 за то же действие в другой и так далее, будут приводить к критически разнящимся расчётам в целом. Более того, даже достаточно подробное с футбольной точки зрения "удар с левого угла штрафной правшой с 10 метров" - это очень "неёмкое" определение статистически, и просчёт даже на огромном объёме вводных данных такого заданного определения всё равно замаскирует критические нюансы, которые следовало бы в иделе различать, ну например, сколько защитников между бьющим и воротами (а сколько таких критических нюансов не учитывается? наверняка десятки и сотни).
То есть проблем здесь две, и обе критичны: первая, параметрирование самой метрики очень, очень далеко от идеала, и вторая, xG просто не имеет почти никакой статистической ценности на выборке меньше чем, наверно, тысячи и тысячи элементов (ударов).
Так что я бы вообще не стал сравнивать xG на дистанции меньше хотя бы сезона, а в идеале - вообще бы сравнивать не стал)) пока параметрирование не достигнет по-настоящему глубокой разбивки на базовые элементы подсчёта, которые очень комплексно связаны мульти-мерной сетью взаимодействий.... Но правда в том, что этого не достигнуто на гораздо более простых системах, так что я сильно сомневаюсь в достижении означенной цели в ближайшем будущем. Как-то так
Вы, похоже, тоже не понимаете, что xG - это модель оценки качества моментов, а не реализации.
Интерпретировать-то технически можно, правда толку негативное значение)
>Сколько нужно ударов для такого? У нас более ста тысяч, например, достаточно? В CV есть модель, распознающая рукописные цифры – многие учатся во время ее создания работать с изображениями, обучена очень маленьком объеме данных, и при этом работает. Или не работает и есть какая-то константа "существенного объема данных" для всего?
Я прям был уверен, что тут не поймут, хотя я специально разделил два разговора)
В целом, в нашем случае есть два объёма данных: большие вводные данные для начисления "ценности" удара (условные 0.5 за удар правши с левого угла штрафной с 10 метров), и потом количество ударов команды, после которых ожидаемое и реальное значения начинают из раза в раз сходиться. Я тут говорил о последнем, причём в том контексте, что на такое нужны тысячи или даже десятки тысяч ударов с учётом несовершенства параметрирования. Эта цифра вообще-то должна быть просчитана изначальна, например через randomized rarefaction curves на очень большом объёме ударов, что поможет определить нижний порог количества ударов, на котором ожидаемое сходится с наблюдаемым. Я не хочу выябываться, но вообще это азы статистики на самом деле. Я хочу ещё раз подчеркнуть, если у вас ожидаемые и реальные голы из раза в раз не сходятся, то цена такого приложения статистики - ну вы должны и сами понимать... Но это претензия не к модели спорца, я думаю у вас всё в порядке в среднем по больнице, это вопрос скорее к министру здравоохранения)
В этом смысле в тексте есть разумное казалось бы предложение о том, что раз уж хГ не получается по-человечески использовать (то есть для того, чтобы оценить вероятность следующего подобного события, а в данном случае, соединённого множества событий), то можно хотя бы попробовать получить некое представление о том, насколько случаен результат, исходя из того, насколько он расходится с ожидаемым. Но для этого, по иронии, нужно, чтобы на заранее определённом объёме выборки (кол-во голов команды) через, например, предложенный rarefaction curves анализ, ожидаемый и полученный результат сходились в некотором оговорённом большом количестве n случаев. И тут, конечно, всё становится ещё сложнее. В медицинских науках например, n=0.95 (т.е. 95% случаев).
Смысл этого следующий: из 100% расхождений между ожидаемым и наблюдаемым результатами, только 5% объясняются каким-то несовершенством статистической модели, а 95% указывают на некие неучтённые "силы" (параметры), которые и привели к расхождению - то есть та самая футбольная "случайность", которая предложена в тексте. Другими словами, такое приложение искджы было бы разумным и полезным, если бы (например, по медицинским понятиям) в 95 случаях из 100 ожидаемые и реальные цифры хотя бы более менее совпадали. Тогда можно было бы говорить о некой "случайности" как причине расхождения ожидаемого результата и реального. НО, 1) только с 95% вероятностью, и при условии подсчёта 2) на заранее определённой БОЛЬШОЙ дистанции (матч или даже 10 матчей, т.е 10-100 голов - это ни о чём). Конечно, даже 95% вероятность - это скорее нечто недостижимое в футболе. Но именно поэтому и следует обращать внимание на приложение статистики в футболе - очевидно, что даже профессионалы в этом деле не отдают себе отчёт, что пока что это выглядит скорее как попытка забить гвоздь воздушным шариком.
>Так никто и не спорит. Мы пытаемся решить задачу с имеющимся набором данных, и не утверждаем, что точность нашей модели равна 100%. Снова пример из CV: есть задачка по распознаванию растений по картинке. По Вашей логике, работать с одной картинкой бессмысленно, ведь растение можно понюхать, потрогать и посмотреть с других углов. Правильно понял? Пока мы не сможем вычислять настроение футболиста (важный фактор, мне кажется), за эту задачу лучше не браться?
Нет, я в целом думаю что параметрирование со временем разовьётся достаточно прилично, и я бы на вашем месте именно этим занялся - конечно, настроение вряд ли получится эффективно забить в модель, но вот к тому же кол-ву защитников фореста перед игроком сити пробивающим из штрафной стоит наверно присмотреться) я вижу в этом перспективу, которую можно освоить. Но как я уже писал выше, менее решаема проблема с качественным приложением модели - средства должны очень точно отвечать цели, а пока я ни в одном случае использования иксджы этого не наблюдаю. Хотя опять же, оптимизация параметрирования и здесь немного поможет... Вообще пока всё это писал, стало интересно поиграться с такими моделями серьёзно)) но когда этим заниматься, эх...
Все же оцениваем опасность момента таким образом чтобы "средний" игрок забил с определенной вероятностью. У нас, как я писал, не средний игрок, а немного категорий, но в целом не хочется уходить от такого определения.
> и потом количество ударов команды, после которых ожидаемое и реальное значения начинают из раза в раз сходиться.
Именно команды, а не в целом? У меня не до конца складывается картинка из-за непонимания этого момента, поэтому ответ дальше про случай "в целом".
> Я хочу ещё раз подчеркнуть, если у вас ожидаемые и реальные голы из раза в раз не сходятся, то цена такого приложения статистики - ну вы должны и сами понимать...
Я же правильно понял, что тут речь не про сходство xG и реальных голов, а про сопоставление результатов классификации и реального результата? Так сходится, вроде, с довольно неплохой точностью, по крайней мере в сравнении с open-source решениями. Про rarefaction curves слышу впервые, и, судя по беглому изучению, это что-то из специфичного домена статистики. Не совсем понимаю, зачем это нужно, если мы в процессе обучения видим метрики типа logloss / auc / etc – не важно, главное, что понятно само качество модели в процессе. И данные в процессе семплятся и разбиваются train/validation выборки как раз для этого.
Или Вы говорите про момент, когда модель уже есть, нам нужна отсечка после какого числа ударов считать результаты прогноза значимыми?
> но вот к тому же кол-ву защитников фореста перед игроком сити пробивающим из штрафной стоит наверно присмотреться
Безусловно, если бы такие данные были, мы бы их использовали. К сожалению, пока такой детализации у нас нет.