League of Legends: создайте модель для прогнозирования команд-победителей на основе результатов

Резюме

В течение 2 месяцев я делал небольшой проект данных по League of Legends, так как я большой поклонник игры и ее использования данных. Проект сосредоточен на вопросе, можем ли мы создать модель для прогнозирования команд-победителей на основе результатов. Я пытался использовать логистическую регрессию и другие модели, чтобы предсказать исход матча. Функции были извлечены из данных, которые предоставляет Riot Games API, включая чемпионов, выбранных для игры, информацию о ролях игроков и уровни мастерства для чемпионов игроков (до начала игры знания), а также внутриигровую статистику игрока. Я обнаружил, что использование только знаний предматча (чемпионы, навыки, роли, заклинания) с самого начала является лишь слабым предиктором исхода матча, но использование внутриигрового статистика, модель становится сильным предсказателем.

Вступление

1- Введение в данные и аналитику в игровой индустрии:

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

В этом проекте в качестве примера я выбрал знаменитую онлайн-игру League of Legends (LoL), разработанную Riot Games в 2009 году. Основная причина в том, что я играл и наслаждался игрой с 5-го сезона, и я хотел бы дать более осознанный взгляд на этот проект, чем с другим тематическим исследованием. Еще одним важным мотивирующим моментом был Riot Games’ API , который позволяет пользователям легко делать запросы и извлекать информацию со своих серверов.

2- Связанные работы

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

Предыстория League of Legends как игры

1- Обзор игры:

League of Legends - это игра в стиле Multiplayer Online Battleground Arena (MOBA), разработанная Riot Games. В каждой игре участвуют две команды по 5 игроков в каждой. Каждая команда начинает игру на противоположных сторонах арены, и цель состоит в том, чтобы преодолеть препятствия (турели, ингибиторы и вражеские игроки), чтобы уничтожить базу противника (Nexus). Есть 5 стандартных позиций для командных игроков, разделенных на карте: Верхняя, Средняя, ​​Джунгли, Перенос атакующих повреждений (ADC) и Поддержка. Каждый матч обычно длится от двадцати минут до часа. Игроки могут выбрать уникального чемпиона из более чем 140 чемпионов с разными характеристиками и способностями. Игра также представляет собой процветающую конкурентную среду с миллионными призовыми фондами турниров, а также онлайн-зрителями.

При таком большом количестве параметров в каждой игре невозможно сказать, что один фактор будет определять успех или неудачу какого-либо конкретного игрока. Кроме того, с таким большим сообществом, стоящим за League of Legends, прогнозирование результатов матчей для случайных игроков и турнирных игр было бы интересным и ценным как для игроков, так и для болельщиков.

2- Информация об игре:

League of Legends - сложная игра, в которой для профессионального мастерства требуется знание многих элементов. В игре две команды по пять игроков в каждой сражаются друг с другом на поле битвы под названием Ущелье призывателя. Есть и другие поля сражений с другими целями и схемами, но они не будут изучаться в нашем проекте. Ущелье призывателя состоит из базы каждой команды, трех переулков и джунглей. Цель League of Legends - разрушить Нексус противостоящей команды, структуру, расположенную на базе противника.

Дифференциал золота - это пример необработанной статистики, которая может с первого взгляда дать представление о состоянии матча. Обычно, когда у команды больше золота, чем у другой, это означает, что их чемпионы имеют более мощные предметы и с большей вероятностью выиграют, если вступят в командный бой. В сочетании с индивидуальными цифрами KDA (убийств, смертей, передач) и общим количеством убийств, накопленных командой, это простой способ сообщить зрителям, кто побеждает. Если мы посмотрим на трансляцию LCS, дифференциал золота будет одним из первых чисел, которые мы увидим в верхней части экрана. Но подобная статистика не говорит всей картины ...

Сбор данных

Я попытался извлечь данные из общедоступного Riot Games API, который позволяет собирать данные о призывателях (термин LoL для игроков), чемпионах и прошлых матчах. Затем я собрал все это в файл формата .xlsx, содержащий все данные, доступные для каждой игры, сыгранной в течение сезона 2017 года.

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

Я загрузил данные на Kaggle, можете скачать их здесь.

Итак, я решил удалить 25 переменных, которые не помогут в нашем прогнозе. Теперь у нас есть набор данных в формате .csv, который содержит 50 переменных.

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

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

Исследовательский анализ данных (EDA):

а- Эволюция League of Legends:

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

В 2016 году состоялось 2429 игр. Лига продолжает расти быстрыми темпами, достигнув невероятных 3117 профессиональных соревновательных игр в 2017 году.

Мы также видим, что в лигах LPL, NALCS, LCK и EULCS больше всего игр с более чем 350 каждый.

б- Команды:

Вычисление процента выигрышей эквивалентно оценке доли выигрышей в общем количестве игр. Как мы видим ниже, есть команды, у которых коэффициент побед 0% и 100%, и это непоследовательно.

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

Как мы видим, SK Telecom T1, Flash Wolves и Samsung Galaxy обладают наибольшим винрейтом. Сначала я подсчитал выигрыши и проигрыши, а затем рассчитал соотношение побед для каждой команды индивидуально:

Таким образом, мы заключаем, что:

  • Среднее процент побед для команды профессионалов составляет 45%.
  • SK Telecom T1 имеет самый высокий коэффициент выигрыша. Из 139 игр им удалось выиграть 97, что привело к выдающемуся 69,78% проценту побед.
  • У Flash Wolves 93 выигрыша в играх 64 (68,82%)
  • Sumsung Galaxy занимает третье место по винрейту. Им удалось выиграть 80 игр, что дало 67,23% выигрышей.

c- Игроки:

  • Мистик (598), Бьергсен (577) и Сие (541) - игроки с наибольшим количеством убийств в соревновательной лиге.
  • Биофрост (1282), Волк (1099) и Конди (1004) - игроки с наибольшим количеством передач в соревновательной лиге.

Еще один важный фактор в этой игре - это соотношение убийств, смертей и передач KDA (убийств, смертей, передач). Формула:

Коэффициент KDA = (K + A) / Max (1, D) Где: K = Убийств | D = Смерти | A = Ассисты

  • Средний KDA для профессионального игрока составляет 3,74.
  • Дженсен и Бьергсен - два игрока с наивысшим KDA в соревновательных лигах, имея 7,78 и 7,34 соответственно

d- Золото и урон

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

Кроме того, я изучал другие аспекты игр League of Legends, но я не хочу их здесь объяснять, чтобы не писать длинную статью. Возможно, в будущем я смогу написать другие статьи, чтобы представить исследование целиком. А теперь перейдем к самому важному!

Прогноз победителя:

Можем ли мы предсказать результат игры?

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

Фактически, мы не уверены, какие из наших переменных полезны для прогнозирования результата. Часто бывает полезно строить двумерные модели, которые предсказывают результат с использованием одной независимой переменной. Но проблема в том, какая из 28 переменных является значимым предиктором переменной Result в модели двумерной логистической регрессии? Нам нужно построить разные модели, чтобы найти лучшую с наивысшей точностью, или мы можем использовать функцию корреляции, чтобы получить представление о переменных, которые сильно коррелированы с переменной Result.

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

Я применил логистическую регрессию и случайный лес к одному и тому же набору данных. Итак, я получил переменную важность (абсолютный коэффициент для логистической регрессии) и (переменная важность для случайного леса). Я попытался объединить их, чтобы получить окончательную важность переменной. После многих попыток мне удалось построить окончательную модель (Stacking: Logistic Regression & Random Froest) со следующими значимыми переменными:

  • gdat10: разница в золоте на 10:00
  • gdat15: разница в золоте на 15:00
  • fb: первое убийство крови (1 да, 0 нет)
  • teamkill, s: общее количество убийств по команде.
  • teamdeaths: общее количество смертей по команде.
  • ft: первая игровая башня убита (1 да, 0 нет)
  • teamtowerkills: Всего башен, убитых командой.
  • opptowerkills: общее количество башен, убитых противоборствующей командой.
  • fd: убит первый дракон в игре (1 да, 0 нет)
  • teamdragkills: Всего драконов, убитых командой.
  • oppdragkills: общее количество драконов, убитых противоборствующей командой.

Объяснение матрицы путаницы

  • Верно: прогнозируемая и фактическая победа красной команды: 6318 раз.
  • Верно: прогнозируемая и фактическая победа синей команды: 6351 раз.
  • Неправильно: прогнозировалось, что красная команда выиграет, но проиграет красной: 95 раз
  • Неправильно: прогнозируемая синяя команда выиграет, но синяя команда проиграла: 106 раз

Точность = 98,43%

R блестящее приложение:

Shiny - это пакет R, который упрощает создание интерактивных веб-приложений прямо из R. Я решил создать веб-приложение, состоящее из двух частей:

  • Первая часть использует нашу лучшую модель прогнозирования с точностью 98%; Вы можете заполнить форму и получить процент своего шанса на выигрыш.
  • Второй - с помощью Riot Games Api для сравнения статистики чемпионов League of Legends. Одновременно можно сравнивать двух чемпионов, также можно выбрать версию патча.

Обсуждение:

В этом исследовании я использовал данные, относящиеся к одному патчу игры, потому что Riot Games пытается поддерживать процент побед чемпионов на уровне, близком к 50%. Любой процент побед выше 50% означает, что чемпион дает игроку преимущество, а любой процент побед ниже 50% означает, что чемпион ставит игрока в невыгодное положение.

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

Заключение:

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

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

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

Использованная литература: