Блоги

Идентификация игрока в Dota 2

67

Всем привет! Я давно не писал, потому что ресерчил вот какую тему. Представьте, что у вас есть список из 50 игроков и записи их игр из паблика. Вам в случайном порядке включают запись демки с глаз игрока и вам надо угадать что это за игрок. Задача усложняется тем что игрок может играть на разных позициях и разных героях. Как вы думаете какой процент попаданий у вас будет ? Сможете ли вы только по движениям игрока понять это MATUMBAMAN или Miracle а может вообще Fng ?.

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

Немного теории. Когда вы смотрите демку с глаз игрока вы можете видеть некоторые признаки, которые могут его идентифицировать, например:

  1. Скорость и ускорение движения мыши
  2. Скорость и ускорение движения камеры
  3. Как часто игрок переключает вид на другого игрока
  4. Как часто игрок кликает по карте во время перемещения
  5. Расстояние между кликами по карте во время передвижения
  6. В каком слоте в инвентаре у игрока находятся расходники (ботл, танго, кларити и т.д.). Эта метрика по сути прокси на бинды клавиш игрока.

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

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

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

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

Ускорение и скорость движения курсора игрока
Ускорение и скорость движения курсора игрока
Ускорение и скорость движения курсора игрока
Ускорение и скорость движения курсора игрока

На графике функция ECDF расшифровывается как Empirical Distribution Function. Можете погуглить что это такое. По оси Y доля, по оси X ускорение (Acceleration) и скорость (Velocity). Единицы измерения скорости и ускорения для меня загадка, но это не так важно.

Если посмотреть на график скорости курсора игрока V-Tune видим, что скорость колеблется от 30 до 40, в среднем где-то 35, у eurus скорость курсора колеблется от 60 до 110, в среднем где-то 80. Скорость движения курсора у eurus более чем в два раза больше чем у V-Tune.

Если вам интересно, вы можете включить запись игры eurus и если вы, как и я не подготовлены, то при попытке проследить за движением курсора этого игрока у вас может закружиться голова, настолько там все быстро!

Хочу отметить, что тут не работает правило чем больше тем лучше! Это лишь комфортные параметры для игрока.

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

Вот примерно такое качество на тестовых данных я получил.

Метрика качества
Метрика качества

Подробно описывать что означают метрики я не буду, отмечу лишь то, что тут работает правило чем больше тем лучше. Метрика принимает значение от 0 до 1. Где 1 означает что все игры были правильно идентифицированы, а 0.5 что только половина. Support - это количество игр на котором получена тестовая метрика. Сложнее всего оказалось идентифицировать игрока Nightfall с точностью 0.92 (92%). Средняя оценка точности по всем игрокам 0.98 (98%).

Теперь самое интересное. Я написал парсер данных с топ 500 рейтинга игроков по всем регионам c dotabuff https://www.dotabuff.com/players/leaderboard, отфильтровал только тех кто играет на европейских и российских серверах. Взял игроков у которых количество игр менее тысячи. Всего получилось примерно 270 игроков. Из этих 270 игроков удалось скачать записи игр только у 29. Каждого из 29 игроков я попробовал идентифицировать, мне удалось обнаружить несколько фейков профессиональных игроков из тех что будут играть на ближайшем мажоре.

Что же нас ждет? Я не стану раскрывать аккаунты игроков и тех героев что они тренируют. Возможно я вообще неверно их идентифицировал.

Расскажу о необычных моментах и героях. Из интересного мы увидим Abadon на первой позиции от одной сильной команды, скорее всего часто будем видеть в миде Void Spirit. Так же в миде активно тренируют Broodmother. Мы увидим смену позиции, один игрок пересядет на 5ую позицию, судя по героям что он тренирует.

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

ps: Я потратил примерно месяц на весь ресерч. Я нигде ранее не встречал подобный анализ, думаю эта статья это первое, что есть в паблике по этой теме. Я обработал порядка 3TB данных. Надеюсь вам было интересно. Поставьте лайк. Спасибо!

Комментарии