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

Для тех, кто не в курсе, Dota 2 — крупнейший титул в киберспорте, а последний выпуск его крупнейшего турнира, The International 10, собрал самый большой призовой фонд во всех турнирах в размере 40 миллионов долларов США, несмотря на то, что он был отложен из-за пандемии. . Также 29 из 30 игроков с самым высоким суммарным заработком в киберспорте являются профессионалами в Dota 2.

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

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

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

Наивно-байесовский — довольно простой, но эффективный классификатор. Он основан на предположении, что признаки независимы друг от друга, и основан на теореме Байеса. Эта теорема описывает вероятность события на основе предварительного знания условий, которые могут быть связаны с этим событием. Проще говоря, он описывает вероятность события A при условии, что произошло событие B, на основе знания вероятностей как событий A, так и B, а также условной вероятности события B при условии, что произошло A.

Итак, для данного класса y и вектора признаков X вероятность класса y определяется как:

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

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

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

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

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

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

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

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

В целом классификатор Наивного Байеса работал лучше, чем три других классификатора, со средним значением 52,24% и достижением максимального значения около 54%. Это небольшой скачок, но все же лучше, чем просто слепо предсказывать команду-победителя.

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

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