вступление

Сколько раз вы наблюдали за разрекламированным матчем соперничества в LEC и ни с того, ни с сего, во время пик-и-бана всех времен, толпа начинает расходиться, как будто грядет ганг, который изменит правила игры, и у другой команды нет абсолютно ничего. зрение на нем? Если вы похожи на меня, это происходит почти каждый раз, когда на сервер загружаются две мощные команды. Профессиональные игроки в League of Legends больше всего на свете любят троллить своих противников подстрекающими к беспорядкам ховерами, отбирать мета-чемпионов, которых они тренировали только на своем 95-м альте в SoloQ, и, конечно же, исторические карманные выборы, которые возвращаются спустя месяцы. , а иногда и годы покоя. Будучи на сцене только с начала 2018 года, я не обращал внимания на эти события до весны 2019 года, через год после того, как я начал работать в команде Team Liquid по League of Legends. На самом деле, примерно в то же время я узнал, насколько фаза выбора/бана может изменить ход матча, что и привело меня к нашей теме: Можно ли предсказать исход матча исключительно на основе данных из Этап выбора/блокировки?

Давайте оценим ситуацию

Прежде чем мы углубимся в данные, давайте сделаем шаг назад и посмотрим на картину в целом. Что мы здесь делаем и какую информацию мы можем использовать после выбора/бана и до того, как добрый голос диктора скажет «Добро пожаловать в Summoner’s Rift»? Что мы делаем, так это определяем исход игры, основываясь только на факторах до игры. Возможны два исхода игры: выигрыш или проигрыш. Судя по всему, мы можем использовать один из самых популярных бинарных классификаторов машинного обучения — логистическую регрессию. К какой информации или функциям у нас есть доступ, когда речь идет о предыгровых данных?

  • Выбор стороны
  • Чемпионы и позиции
  • матчи

Так что… немного, но это не значит, что у нас уже нет какой-то значимой информации! Нам придется быть творческими инженерами данных и максимально использовать нашу далеко не идеальную ситуацию. Если вы профессиональный аналитик League of Legends, у вас есть интуитивное представление об этих точках данных, например, на чьей стороне лучше быть в зависимости от того, хотите ли вы контр-выбрать позицию x или yпротив вашего противника, или как ваша синергия Jungle-Mid работает по сравнению с противоположной командой. Чего у вас нет, по крайней мере, пока, так это встроенного в ваш мозг компьютера, который может обрабатывать тысячи эпох обучающих данных и давать вам больше, чем эти интуитивные догадки, основанные на недавних событиях.

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

Количественная оценка матчапа

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

Существует множество данных о профессиональной League of Legends, но мой выбор, за исключением Riot API, был Oracle's Elixir. Я загрузил все данные матчей за 2018–2019 годы и с помощью творческой обработки данных создал второй набор данных, который состоит из следующих функций:

  • идентификатор игры (целое число)
  • лига (строка)
  • синяя команда, красная команда (строки)
  • выбор и бан синей команды (массивы)
  • выбор и бан красной команды (массивы)
  • Сумма синей команды (плавающая)
  • сумма красной команды (плавающая)
  • первая кровь, первая башня, первый барон и результат (0–1 в масштабе)

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

Для начала я написал скрипт на Python, который выполнялся построчно, чтобы получить коэффициенты побед для каждого чемпиона в массиве против 5 чемпионов в массиве противоположной команды и сложить их все вместе. После того, как я получил 5 очков для каждой команды, я сложил их вместе, чтобы получить функции сумма синей команды и сумма красной команды. Эти отдельные числа используются логистической регрессией для прогнозирования исхода матча. Моя интуиция при выборе этого метода заключалась в том, что оценка каждого чемпиона на основе 5 чемпионов, против которых он выступает, даст точное представление не только о позиционном матче, но и о способностях командной игры к середине-поздней игре. Я знаю, что это не на 100% здравая логика, но мне кажется, что я плаваю с ней на четверку с плюсом.

Тренировочный день

Все, что осталось сделать, это подогнать модель и протестировать ее!

Я передал модели 70% своих данных в качестве тренировочного набора, а остальные 30% зарезервировал для проверки соответствия. Благодаря SciKit Learn мне не пришлось создавать свой собственный класс логистической регрессии (хотя я сделал это ранее в тот же день для развлечения), и я смог реализовать алгоритм с помощью нескольких простых строк кода.

К моему удивлению, только по функциям синяя сумма и красная сумма я получил рейтинг точности 84,9% для предсказания бинарного результата матча. ! Не так уж плохо для быстрой однодневной задачи! Я решил использовать те же функции для прогнозирования других целевых функций, таких как Первая башня, Первая кровь и Первый барон.

  • Результат (Победа/Проигрыш) — 84,89%
  • Первая кровь — 56,28%
  • Первая башня — 62,23%
  • Первый барон — 74,69%

Я говорил вам, что моя интуиция в математике была на твердую четверку с плюсом.

Вывод

Мы многое знаем до того, как загрузим Summoner's Rift, и, возможно, однажды с помощью Nural Link Илона мы сможем обрабатывать такие данные без предубеждений относительно недавнего времени и подтверждения, но до этого дня я призываю команды изучить возможность создания своих Программы Data Science и Analytics. Если вы такой же человек, как и я, у которого непоколебимая страсть к творческому решению проблем и исследованию данных, ознакомьтесь с Oracle’s Elixir и Riot API. Существует множество новых способов взглянуть на игру League of Legends, которые мы только начали открывать.

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

Спасибо за прочтение и не забудьте поделиться с друзьями!

Посетите меня на https://kevinmhaube.com/