Как создать систему рейтинга Elo на основе данных для игр 2 на 2

Создание системы рейтинга Elo для 2 на 2 игр на основе данных

Размещение математики на столе: от алгоритмов до безумия по футболу, поиск идеального офисного чемпиона.

Фото Паскаля Свиера на Unsplash

Привет и добро пожаловать!

Меня зовут Лазарь, и я только что закончил свою вторую степень бакалавра по анализу данных в бизнесе. Эта статья основана на работе, которую я выполнил для своей бакалаврской диссертации.

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

В этой статье рассматривается математика за 2 на 2 системы рейтингов на основе Elo, которая может быть применена к футболу на ручках или любой другой игре за 2 на 2. Она также исследует архитектуру, поддерживающую обработку данных, и представляет создание веб-приложения, которое обеспечивает ранжирование и анализ данных в реальном времени с использованием Python.

Рейтинг Elo

Система рейтинга Elo – это метод, используемый для определения относительного уровня мастерства игрока в играх с нулевой суммой. Она была впервые разработана для шахмат, но сейчас применяется в качестве системы рейтинга в различных других видах спорта, таких как бейсбол, баскетбол, различные настольные игры и киберспорт.

Один из хорошо известных примеров этой системы – в шахматах, где система рейтинга Elo используется для ранжирования игроков по всему миру. Магнус Карлсен, также известный как “Моцарт шахмат”, занимает первое место в рейтинге Elo в мире с рейтингом 2853 в 2023 году, демонстрируя свои выдающиеся навыки в игре.

Формула рейтинга Elo состоит из двух частей: сначала она рассчитывает ожидаемый результат для данной группы игроков, а затем определяет корректировку рейтинга на основе результата матча и ожидаемого результата.

Расчет ожидаемого результата

Рассмотрим следующий пример в шахматах с Игроком A и Игроком B с рейтингами R𝖠 и R𝖡 соответственно. Уравнение для ожидаемого счета Игрока A против Игрока B имеет следующий вид:

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

Теперь давайте рассмотрим более реалистичный пример, где у игрока A рейтинг 1500, а у игрока B – 1200.

То же уравнение, которое было показано выше, может рассчитать ожидаемый счет Игрока A против Игрока B:

По этому расчету мы знаем, что Игрок A имеет 84,9% шансов на победу против Игрока B.

Чтобы найти примерную вероятность победы Игрока B против Игрока A, используется то же самое уравнение, но порядок рейтингов меняется:

Сумма вероятностей победы Игрока A и Игрока B равна 1 (0,849 + 0,151 = 1). В этом сценарии Игрок A имеет 84,9% шансов на победу, оставляя Игрока B только с 15,1% шансами.

Расчет рейтинга

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

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

Формула для расчета нового рейтинга Игрока A, играющего против Игрока B, следующая:

В этой формуле ( S𝖠 — E𝖠 ) представляет разницу между фактическим счетом Игрока A и ожидаемым счетом. Дополнительная переменная K определяет примерно насколько может измениться рейтинг игрока после одного матча. В шахматах эта переменная установлена в 32.

Если Игрок A побеждает, фактический счет, который в данном случае равен 1, будет больше ожидаемого счета, который равен 0,849, создавая положительную разницу.

Это указывает на то, что Игрок A выступил лучше, чем изначально ожидалось. В результате система рейтинга Эло перекалибрует рейтинги обоих игроков:

  • Рейтинг Игрока A увеличится из-за победы
  • Рейтинг Игрока B уменьшится из-за поражения

Еще раз, эта же формула может рассчитать новый рейтинг Игрока A и Игрока B:

В итоге, система рейтинга Эло предлагает надежный и эффективный метод для оценки и сравнения навыков игроков динамически и справедливо. Она постоянно обновляет рейтинг игрока после каждого матча, учитывая разницу в навыках между двумя соперниками.

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

РИСУНОК I: Пример системы Эло в шахматах | Таблица от автора

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

В итоге, когда игрок побеждает, чем ниже его вероятность победы, тем больше очков он может выиграть.

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

На самом деле, в футболе настольном есть больше переменных, чем в шахматах, таких как:

  • Это игра на четырех игроков с командами по два (2 на 2)
  • Каждый член команды может положительно или отрицательно влиять на своего товарища
  • В отличие от бинарного результата в шахматах, в футболе настольном масштаб победы или поражения может существенно варьироваться в зависимости от счета команд

Исследование алгоритма рейтинга

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

Вероятность победы

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

Ожидаемый рейтинг Игрока 1, обозначенный как E𝖯𝟣, может быть рассчитан путем усреднения суммы рейтингов каждого противника с использованием формулы рейтинга Эло следующим образом:

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

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

Для расчета ожидаемого счета Игрока 2, обозначенного как E𝖯𝟤, против Игрока 3 и Игрока 4, можно использовать тот же метод, что и для Игрока 1.

Ожидаемый счет Команды, обозначенный E𝖳𝟣, может быть рассчитан путем вычисления среднего значения E𝖯𝟣 и E𝖯𝟤:

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

Таблица ниже показывает ожидаемые счета Игрока 1 и 2 против Игроков 3 и 4.

  • Ожидаемые счеты Игрока 1 против Игрока 3 и Игрока 4 составляют 0,091 и 0,201, что соответствует вероятности победы в 14,6%
  • Ожидаемые счеты Игрока 2 против Игрока 3 и Игрока 4 составляют 0,201 и 0,387, что дает комбинированную вероятность победы в 29,4%
  • Для Игрока 1 партнерство с более сильным игроком, например, Игроком 2, может увеличить их общие шансы на победу, как показано на 22%
РИСУНОК III: Ожидаемый счет на основе сценария, показанного на рисунке II | Таблица автора

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

С другой стороны, Игрок 2 получает больше очков из-за наличия партнера с более низким рейтингом. В случае победы Игрок 2 награждается за принятие риска, в то время как Игрок 1 получает меньше очков, так как предполагается, что Игрок 2 значительно больше способствовал победе, и наоборот, если они проиграют.

Параметры рейтинга

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

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

Например, в полуфинале Чемпионата мира 2014 года Германия победила Бразилию со счетом 7-1. Это был один из самых шокирующих и унизительных результатов в истории Чемпионата мира, так как Бразилия была страной-хозяином и никогда не проигрывала соревновательный матч дома с 1975 года.

Если бы мы применили систему рейтинга к этому матчу, мы ожидали бы, что Германия получит значительное количество очков, а Бразилия потеряет большое количество очков, отражая разницу в их выступлении и уровне мастерства.

Значение K Значение K-рейтинга, обозначенное как K𝟣 для Игрока 1 в данном случае, определяет, насколько изменится рейтинг игрока после одной игры. Это пересмотренное значение K учитывает количество игр, сыгранных игроком, чтобы сбалансировать влияние каждой игры на его рейтинг. После проведения многочисленных тестов была разработана формула для расчета значения K для каждого игрока.

Для Игрока 1 это выражается следующим образом:

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

Рисунок IV: Значение K в течение времени | Диаграмма автора

На рисунке IV показано, как количество сыгранных игр влияет на значение K. Начиная с 50, этот график показывает, что значение K уменьшается с увеличением числа сыгранных игр и достигает половинного значения 25 после 300 игр. Это гарантирует, что влияние каждой игры на рейтинг игрока уменьшается с ростом опыта.

Фактор очковДля учета очков, набранных каждой командой, в уравнение была введена новая переменная, называемая “фактором очков”. Этот фактор умножает параметр K каждого игрока и основан на абсолютной разнице в очках между двумя командами. Влияние матча должно быть больше, когда команда побеждает с большим отрывом, то есть одерживает подавляющую победу.

Для вычисления фактора очков использовалась следующая формула:

Эта формула берет абсолютную разницу между счетами двух команд, добавляет 1 и вычисляет десятичный логарифм от результата. Затем полученное значение возводится в куб и к нему добавляется 2 для получения окончательного значения фактора очков.

Рисунок V: Фактор очков | Диаграмма автора

Расчет конечного рейтинга

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

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

Исходя из предыдущего примера, новая формула для рейтинга игрока A выглядит следующим образом:

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

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

Проектирование и моделирование базы данных

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

Рисунок VI: Диаграмма модели базы данных | Изображение автора

В этой модели базы данных существуют два типа отношений между таблицами: один-ко-многим и многие-ко-многим.

Отношение между таблицей “Игрок” и таблицей “Матч” является многие-ко-многим, поскольку игрок может участвовать во множестве матчей, и в одном матче может участвовать несколько игроков. Связующая таблица с названием “ИгрокМатч” соединяет это отношение и содержит два внешних ключа: “player_id” (ссылается на участвующего игрока) и “match_id” (ссылается на соответствующий матч).

Эта структура обеспечивает точную связь игроков и матчей, как показано в коде ниже:

CREATE TABLE PlayerMatch (player_match_id serial PRIMARY KEY,player_id INT NOT NULL REFERENCES Player(player_id),match_id INT NOT NULL REFERENCES Match(match_id));

Аналогичная логика применяется к таблице «TeamMatch», которая служит соединительным звеном между таблицами «Match» и «Team», позволяя нескольким командам играть в один матч, а одному матчу включать несколько команд.

Для упрощения анализа рейтинга со временем были разработаны отдельные таблицы для «PlayerRating» и «TeamRating». Эти таблицы соединяются соответственно с таблицами «PlayerMatch» и «TeamMatch» через «player_match_id» и «team_match_id».

Целостность данных

Помимо использования PK и FK, в этой модели базы данных также используются соответствующие типы данных и ограничения CHECK для обеспечения целостности данных:

  • Столбцы «winning_team_score» и «losing_team_score» в таблице «Match» являются целыми числами, что исключает ввод нечисловых значений
  • Ограничения CHECK гарантируют, что «winning_team_score» равен 11
  • Ограничения CHECK гарантируют, что «losing_team_score» находится в диапазоне от 0 до 10, что соответствует правилам игры

Как показано в фрагменте кода ниже, для каждого первичного ключа в создании базы данных использованы последовательности, чтобы упростить ввод данных. Эта автоматизация упрощает процедуру при последующем использовании цикла Python для ввода данных.

CREATE SEQUENCE player_id_seq START 1;CREATE SEQUENCE team_id_seq START 1;CREATE SEQUENCE match_id_seq START 1;CREATE SEQUENCE player_match_id_seq START 1;CREATE SEQUENCE player_rating_id_seq START 1;CREATE SEQUENCE team_match_id_seq START 1;CREATE SEQUENCE team_rating_id_seq START 1;

Обработка данных

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

Эти конкретные идентификаторы могут затем служить в качестве внешних ключей для управления остальными данными, создавая необходимые связи в процессе. Другими словами, первым шагом было определить и сохранить конкретные данные (идентификаторы) из исходных данных, а затем использовать эти идентификаторы в качестве связи и обработки остальных данных.

Данные обрабатывались поэтапно, с использованием все более сложных циклов Python. Каждая новая запись получала уникальный первичный ключ, сгенерированный из последовательности таблицы.

  1. Первый шаг заключался в обработке отдельных игроков и получении их идентификаторов.
  2. Затем команды обрабатывались с использованием идентификаторов игроков. Для каждой уникальной пары игроков в матче создавалась запись в таблице «Team» (FK игроки)
  3. После этого обрабатывались матчи с использованием идентификаторов выигрышной и проигрышной команд. После обработки матчей обращались к таблицам «PlayerMatch» и «TeamMatch», получая соответствующие идентификаторы матча, игрока и команды.
  4. После обработки всех необходимых данных идентификаторы «PlayerMatch» и «TeamMatch», а также временные метки матча, использовались в таблицах «PlayerRating» и «TeamRating» для отслеживания развития рейтинга со временем.

Разработка веб-приложения

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

Кроме того, я хотел сделать веб-приложение удобным для мобильных устройств, потому что кто бы хотел таскать ноутбук, чтобы поиграть в настольный футбол? Это было бы не очень практично и весело.

Стек технологий

BackendПосле сравнения Django и Flask, двух популярных веб-фреймворков для создания веб-приложений на языке Python, был выбран Flask из-за его простоты для начинающих. Flask используется для обработки пользовательских запросов, обработки данных и взаимодействия с базой данных PostgreSQL.

FrontendФронтенд состоит из статических файлов HTML и CSS, которые определяют структуру и стиль веб-приложения. JavaScript используется для валидации форм и обработки взаимодействия с пользователем. Это гарантирует, что данные, отправленные пользователями, являются последовательными и точными перед отправкой на сервер.

Визуализация данныхКогда речь идет о визуализации данных, самой большой проблемой является наличие актуальных данных. Для преодоления этого ограничения слой визуализации данных использует Plotly, библиотеку Python, для создания интерактивных диаграмм и графиков, которые визуализируют рейтинги игроков со временем. Этот компонент получает данные с бэкэнда, обрабатывает их и представляет их пользователям в удобном формате.

База данныхPostgreSQL использовалась как для локальной среды разработки, так и для продуктивной среды на AWS через Heroku. Автоматическое резервное копирование базы данных обеспечивается Heroku, что гарантирует защиту данных и их легкую восстановление при необходимости.

Исследование UI/UX

Для дизайна UI/UX была использована вдохновение современными веб-дизайнами Spotify и новым поисковым движком Bing. Целью было создание знакомого и интуитивно понятного пользовательского интерфейса.

Рисунок VII: Макет приложения | Изображение автора

Функции приложения

Давайте рассмотрим функции приложения на конкретном примере. Команда 1 (Матье и Габриэль) хочет сыграть против команды 2 (Виссам и Малик). У всех игроков разный рейтинг, который отражает их уровень мастерства, показанный ниже.

Расчет шансов

Первое, что игроки хотят сделать перед каждой игрой – это расчитать свою вероятность победы.

Для этого представлена “Расчет шансов”, где пользователи могут выбрать четырех игроков из выпадающего меню и получить вероятность победы выбранных команд.

Рисунок VIII: Расчет шансов | Изображение автора

Эта функция в основном используется перед игрой для проверки баланса матча и информирования игроков о вероятности их победы. Например, у команды 1 больше шансов на победу (64.19%), чем у команды 2, у которой шанс победы составляет 35.81%. Этот вид информирует каждого игрока о ставках и риске.

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

Загрузка игры

Страница “Загрузка игры” служит домашней страницей приложения. Она разработана для удобства пользователей, позволяя им загружать игры сразу после открытия приложения.

Рисунок IX: Загрузка игры и загруженный матч | Изображение автора

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

  • Выбраны четыре разных игрока
  • Очки являются неотрицательными целыми числами
  • Есть только одна победная команда с результатом 11, без ничьих

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

Представление “Загруженный матч” предназначено для отображения пользователям влияния каждого матча на их индивидуальные рейтинги. Оно рассчитывает разницу между рейтингами игроков до и после загрузки матча.

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

Рейтинг Эло

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

РИСУНОК X: Рейтинг игроков | Изображение автора

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

Это включает объединение всех необходимых таблиц и отображение последнего обновления рейтинга с использованием селектора периода для фильтрации запроса:

def get_latest_player_ratings(month=None, year=None):    now = datetime.now()    default_month = now.month    default_year = now.year    selected_year = int(year) if year else default_year    selected_month = int(month) if month else default_month    start_date = f'{selected_year}-{selected_month:02d}-01 00:00:00'    end_date = f'{selected_year}-{selected_month:02d}-{get_last_day_of_month(selected_month, selected_year):02d} 23:59:59'    query = '''        WITH max_player_rating_timestamp AS (            SELECT                 pm.player_id,                MAX(pr.player_rating_timestamp) as max_timestamp            FROM PlayerMatch pm            JOIN PlayerRating pr ON pm.player_match_id = pr.player_match_id            WHERE pr.player_rating_timestamp BETWEEN %s AND %s            GROUP BY pm.player_id        ),        filtered_player_match AS (            SELECT                 pm.player_id,                pm.match_id            FROM PlayerMatch pm            JOIN max_player_rating_timestamp mprt ON pm.player_id = mprt.player_id        ),        filtered_matches AS (            SELECT match_id            FROM Match            WHERE match_timestamp BETWEEN %s AND %s        )        SELECT             CONCAT(p.first_name, '.', SUBSTRING(p.last_name FROM 1 FOR 1)) as player_name,             pr.rating,             COUNT(DISTINCT fpm.match_id) as num_matches,            pr.player_rating_timestamp        FROM Player p        JOIN max_player_rating_timestamp mprt ON p.player_id = mprt.player_id        JOIN PlayerMatch pm ON p.player_id = pm.player_id        JOIN PlayerRating pr ON pm.player_match_id = pr.player_match_id            AND pr.player_rating_timestamp = mprt.max_timestamp        JOIN filtered_player_match fpm ON p.player_id = fpm.player_id        JOIN filtered_matches fm ON fpm.match_id = fm.match_id        GROUP BY p.player_id, pr.rating, pr.player_rating_timestamp        ORDER BY pr.rating DESC;    '''

Визуализация данных

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

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

Для достижения этой цели были использованы два метода:

  • Во-первых, был использован фреймворк Dash Plotly, который позволяет разработчикам создавать интерактивные приложения на основе приложений Flask с использованием данных
  • Во-вторых, были задействованы различные SQL-запросы и статические HTML-страницы для извлечения информации из базы данных и ее отображения, обеспечивая пользователям доступ к данным в режиме реального времени

Эволюция рейтинга

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

РИСУНОК XI: Эволюция рейтинга | Изображение автора

При доступе к представлению “Эволюция рейтинга” приложение выполняет запрос к базе данных для каждого выбранного игрока, извлекая наиболее последнее обновление рейтинга для каждого дня, в котором была сыграна игра:

SELECT DISTINCT ON (DATE_TRUNC('day', m.match_timestamp))    DATE_TRUNC('day', m.match_timestamp) AS day_start,    CASE WHEN p.first_name = '{player}' THEN pr.rating ELSE NULL END AS ratingFROM PlayerMatch pmJOIN Player p ON pm.player_id = p.player_idJOIN PlayerRating pr ON pm.player_match_id = pr.player_match_idJOIN Match m ON pm.match_id = m.match_idWHERE p.first_name = '{player}'ORDER BY DATE_TRUNC('day', m.match_timestamp) DESC, m.match_timestamp DESC

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

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

Метрики игрока

Вдохновленный Spotify Wrapped, идея заключается в предоставлении информации, полученной на основе постоянного сбора данных. Несмотря на огромный потенциал визуализации информации об игроках, акцент сделан на метриках, которые подчеркивают индивидуальную производительность и связи между игроками.

Рисунок XII: Метрики игрока | Изображение автора

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

Метрики игрЭти метрики сосредоточены на экране и отображаются синим цветом для нейтральности. Они включают общее количество сыгранных игр с момента начала сбора данных.

Метрики партнеровМетрики партнеров отображаются слева на экране. Они отображаются зеленым цветом из-за их положительной коннотации.

  • Верхний блок выделяет основного партнера, с которым выбранный игрок сыграл больше всего игр
  • Вторая метрика определяет лучшего партнера игрока. Это определяется наивысшим процентом побед
  • Третья метрика в этой категории – худший партнер выбранного игрока. Это рассчитывается на основе наименьшего процента побед (или наивысшего процента поражений)

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

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

Заключение

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

  1. Эта система ранжирования, основанная на системе Эло, предсказывает результаты матчей и точно ранжирует игроков на основе их реальной производительности
  2. Игроки стали более конкурентоспособными, так как они теперь все более осознают свою производительность благодаря визуализации данных
  3. Игроки стали более включительными благодаря улучшенной формуле, которая вознаграждает игроков, рискующих. Игроки, которые обычно не играют вместе, теперь имеют стимул объединиться

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

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

Спасибо за чтение до конца! Надеюсь, вам понравилась эта статья. Если вас интересует чтение полной статьи, она доступна здесь. Также весь код доступен на Github.

Не стесняйтесь делиться своими мыслями в комментариях 🙂