Контрпики в доте. Интересные наблюдения.

Привет, посетители dota2.ru! В этом посте я хотел бы поделиться интересными результатами моей работы со статистикой dotabuff.com. А именно, я анализировал какие герои каких героев контрят и решил выделить из всей этой каши взаимоотношений героев наиболее, на мой взгляд, интересные.

Раздел matchups сайта dotabuff.com и что он показывает

Объяснение лучше сразу начать с примера. Зайдем на страницу героя windranger на dotabuff, а там откроем ее matchups. Видим, что против героя omniknight windranger имеет самый большой advantage (преимущество). Это значит, что windranger лучше всего "заходит" против omniknight. Смотрим героя, против которого у windranger самый маленький advantage. Это герой, против которого хуже всего "заходит" windranger. Возникает 2 вопроса:

1) почему именно эти герои
2) откуда взялись эти данные

Ответ на первый вопрос дать, порой, трудно. Начинаешь представлять ситуацию, когда windranger играет против omniknight. Например, omniknight не имеет дизейбла и windranger легко может уйти от omniknight и от его команды, в особенности когда он скастует ульт. Кроме того, если она удачно свяжет, omniknight не сможет спасти героя repel, т.к. он не снимает связку. Ну хорошо, подумаете вы, но он же может спасти от нее ультом. Да, может, но если на герое не висит repel, то даже под ультом omniknight герой будет получать урон от молний maelstrom или mjolnir, которых будет вылетать под ультом windranger очень много. Вероятно все вышеописанное и привело к такой статистике. Тут мы и подходим к ответу на 2-й вопрос. Откуда взялись эти данные? Это можно понять из описания, но я постараюсь объяснить более наглядно. Предположим, игроки dota 2 сыграли 200 игр, которые можно разделить на 2 группы:

1) 100 игр, где был только omniknight, но не было windranger
2) 100 игр, где были оба в разных командах.

В первых 100 играх у всех героев, которые играли против omniknight был winrate В СРЕДНЕМ в районе 39%, т.к. omniknight имеет winrate около 61%. Я говорю В СРЕДНЕМ, т.к. он не мог быть везде 39%, где-то могли пикать контрящих героев, где-то наоборот, слабых против него. Во второй группе игр, благодаря появлению windranger, произошло изменение среднего winrate и он стал равен 40%. То есть можно сказать, что появление в пике winranger негативно влияет на winrate omniknight, то есть она его контрит. Достигается это, конечно, особенностями героя и механикой их игры друг против друга. В данном примере все выглядит не очень убедительно, всего 1% разницы, но это всего лишь пример. У других героев это может быть более ощутимо.
Далее можно сказать о тех героях, против которых у windranger самое маленькое преимущество, которое даже является отрицательным. В данном случае мы видим arc warden. Вероятно она страдает от его магических прокастов, плохо дефает очень активный пуш, неспособна его перефармить, из-за обилия копий-иллюзий не может давать нормальные связки. Также рассмотрим 2 группы игр:

1) 100 игр, где был только arc warden, но не было windranger
2) 100 игр, где были оба в разных командах.

В первых 100 играх средний winrate против arc warden был около 61%. Во вторых 100 играх из-за появления windranger средний winrate против arc warden уменьшился и стал равен около 60%. То есть появление winranger в пике против arc warden положительно повляило на arc warden и отрицательно на тиммейтов windranger. То есть можно сказать, что arc warden - это контрпик windranger.

Как работают мои скрипты

Начну с того, зачем я вообще все это затеял, ведь есть сайты, которые позволяют посмотреть контрпики, например http://dotaedge.com. Ничего не имею против этих сайтов, но:

1) я не знаю как они работают
2) я не знаю насколько информация в них актуальная
3) они не дают той гибкости и простора, который я могу достичь своими скриптами
4) проведя небольшую проверку, я заметил что есть некоторые расхождения, порой довольно существенные между результатами, в частности, сайта http://dotaedge.com и моими скриптами

В моей работе мне нередко приходится пользоваться скриптовым языком Tcl. Именно его я и решил использовать для анализа пиков в dota 2. Я разработал простой алгоритм, который в результате позволил мне провернуть много интересных "фишек".

Сначала мне нужно было "вытащить" данные с dotabuff, но сделать это совсем уж по-простому я не смог, да и не пытался. Пришлось немного поизвращаться. Я заходил в раздел matchups каждого героя и нажимал в браузере "посмотреть исходный код". Открывался исходный код на языке html. В этом исходом коде и содержались все заветные цифры matchups для одного героя. Я проделывал эту манипуляцию для каждого героя и получил 111 файлов на языке html. Далее я написал скрипт, который "выдергивал" из этих файлов нужную информацию и собирал в 1 файл. В итоге получилось следующее. Файл, который я назвал matchups.txt имеет 111 строк, по 1 строке на каждого героя. В строке 1-е слово - имя героя, для которого приведены matchups. Следующие слова - это имена героев в том порядке, в котором герой их контрит. Например, если 1-е слово - это windranger, то следом за ней идет уже упомянутый omniknight, затем ursa, abaddon и т.д., а в конце уже упомянутый arc warden. В итоге получилось что-то вроде матрицы размером 111 на 111. Все дальнейшие результаты были получены только из этой матрицы.

Скрипт по подбору наилучших пиков

Сперва я напишу, как я пользуюсь своим скриптом и как это все выглядит, а потом опишу принцип его работы. Я запускаю интерфейс командной строки Tcl, запускаю игру и запускаю текстовый редактор. Начинается игра и я вижу первые пики. Предположим, что это dazzle и tusk. Я альт-табаюсь в текстовый редактор, там у меня открыт файл, где уже прописаны имена всех героев, но не на 1-й строке, откуда берутся данные. Т.к. я пользуюсь notepad++, то мне достаточно прописать пару букв имени героя и notepad++ предложит дописать их до конца (от "видит" полные имена героев в этом файле). Поэтому я могу очень быстро ввести 2 имени героя без ошибок, dazzle и tusk, на первой строке. Далее я альт-табаюсь в интерфейс командной строки tcl и выполняю уже сохраненную в его памяти команду "tclsh cpick.tcl". В командной строке выводится список наилучших контрпиков против этих 2-х героев. Я вывожу первые 15.

Вот что выводится:
Споилер
sven 202
earth-spirit 197
magnus 192
kunkka 187
visage 187
doom 185
ursa 183
io 182
templar-assassin 180
undying 175
puck 172
gyrocopter 171
luna 171
terrorblade 169
axe 168
В этом списке герои идут в порядке убывания по набранным очкам. Первые - самые лучшие. Чем ниже, тем хуже. То есть лучше всего пикать свена или земелю. Они хороши сразу против обоих пиков. Почему - сказать сложно, все получено из статистики dotabuff. Пользуясь этой информацией можно, не включая мозг, советовать тиммейтам что пикать или пикать героев самому. Если, допустим, в пике врагов появляются все 5 героев, к 2-м названным dazzle и tusk добавляются какие-то pudge, void и lich, я дописываю их в файл, снова вызываю скрипт и получаю следующее:
Споилер
undying 480
ursa 469
queen-of-pain 460
visage 452
sven 447
phoenix 446
magnus 444
doom 443
earth-spirit 443
puck 442
kunkka 431
io 429
batrider 428
morphling 426
anti-mage 419
И действительно, undying и ursa смотрятся весьма профитно против полученного пика. Конечно всегда можно их переиграть, использовать правильную стратегию игры, делать все грамотно и т.д. Но в целом шансы на победу будут выше, если взять именно этих героев.

Конечно это все не совсем честно, но ведь можно взять похожие варианты и из головы, а можно даже придумать что-то еще хитрее, чем результат, полученный из сухой статистики, но все мы любим выигрывать и наши способы добиться побед у каждого свои. Признаюсь, я пользуюсь своей программой, пользуюсь не всегда (<50% игр), но т.к. играю на саппортах и беру героя 1-м или 2-м пиком, то пользуюсь ей по большей части чтобы советовать, какого героя взять на позицию керри. Меня иногда слушают, но не всегда, менее чем в 50% случаев. Бывает, что даже когда послушают, мы проигрываем. Но все-таки, за счет выгодного пика, чаще мы выигрываем, когда слушают моего совета. Такая закономерность точно есть. Я тоже стараюсь советовать что-то попроще из предлагаемых вариантов, что-то, что мне самому нравится, пытаюсь включать голову.

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

Описание алгоритма работы моей программы

Алгоритм достаточно прост. В качестве исходных данных берется уже описанный файл-матрица matchups.txt и анализируемый файл analyzed.txt. В анализируемом файле "сканируется" только первая строка, в которую я вписываю от 1 до 5 героев оппонентов. Берется 1-й герой, допустим dazzle. Скрипт ищет этого героя в матрице matchups и каждому из 110 героев (всех героев dota кроме dazzle) начисляет очки. Количество очков зависит от позиции героя. Чем она ближе к началу строки, тем больше очков. Максимально - 110 очков, минимально - 1. Например ancient apparition зарабатывает против dazzle максимум, 110 очков. Axe тоже зарабатывает достаточно много, 100 очков. Эти контрпики для всех достаточно очевидны. Если к dazzle добавляется еще 1 герой, например tusk, очки, которые накоплены на dazzle, сохраняются и начинают начисляться дополнительные очки за tusk. Например, templar assassin зарабатывает довольно много, что тоже, по-моему, очевидно, т.к. она "блокирует" его ульт своим refraction. Если введено 5 имен героев, то все герои зарабатывают очки на каждом из этих 5 героев и в результате получается матрица героев и очков. Матрица сортируется по количеству очков, первыми идут герои с максимальным счетом. Они и выводятся на экран.

Давайте посмотрим на контрпики текущей меты

Кроме использования своих скриптов в своих играх я задумался о том, что бы интересного можно было получить с их помощью. И у меня возникло несколько идей. Во-первых все мы знаем, что в доте всегда есть какая-то мета - то есть группа героев, которая актуальна в текущем патче или просто на сегодняшний день, но которая периодически меняется (отсюда и название мета). Сегодня, на дату 26 декабря 2015 года, с патчем 6.86 мы видим в самых популярных пиках следующих 20 героев.

pudge invoker windranger shadow-fiend juggernaut phantom-assassin legion-commander sniper zeus earthshaker riki arc-warden anti-mage slark drow-ranger slardar ember-spirit spirit-breaker wraith-king bristleback

Я просто прогоняю на них свой скрипт и вижу следующий результат:
Споилер
morphling 1469
dazzle 1465
lion 1455
omniknight 1448
dragon-knight 1398
tusk 1379
clockwerk 1366
spirit-breaker 1360
phantom-assassin 1340
slardar 1317
bounty-hunter 1309
lone-druid 1301
chaos-knight 1300
earth-spirit 1291
io 1284
Думаю, для многих выглядит довольно удивительным то, что список возглавил давно уже невзрачный morphling, которого никто особенно и не берет сейчас. Думаю и вы, и я хотели увидеть какого-то героя, которого можно смело брать, ожидая, что с высокой вероятностью возьмут что-то метовое и твой шанс их законтрить будет очень высок. И тут этим "чем-то" оказался morphling. Оставляю это на ваш суд и обсуждение. Но, прочитав предыдущую часть моей статьи, вы должны понять, что результат не рандомный, он получен на основе статистики. Значит в нем есть какое-то здравое зерно. Нужно просто его найти, проанализировав все логически. А можно начать задротить морфа и в какой-то момент прозреть и понять, чем же он так крут против сегодняшней меты. Со своей колокольни саппорт-пикера мне судить трудно. Но мы продолжим наши изыскания дальше.

Лучший керри против всех керри

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

alchemist anti-mage arc-warden chaos-knight clinkz dragon-knight doom drow-ranger gyrocopter huskar invoker juggernaut phantom-lancer legion-commander lifestealer lone-druid luna lycan medusa meepo morphling naga-siren phantom-assassin razor riki bloodseeker shadow-fiend slardar slark

Прогоняем этот список по matchups для этого же списка героев и получаем следующий, снова несколько неожиданный результат:
Споилер
troll-warlord 2218
sven 2009
meepo 1994
tiny 1918
phantom-assassin 1887
luna 1852
terrorblade 1782
faceless-void 1774
chaos-knight 1741
dragon-knight 1735
morphling 1699
bloodseeker 1699
lone-druid 1692
phantom-lancer 1685
naga-siren 1682
ursa 1660
windranger 1620
legion-commander 1597
slark 1587
shadow-fiend 1577
medusa 1576
lycan 1534
slardar 1527
riki 1513
weaver 1500
wraith-king 1486
gyrocopter 1480
razor 1439
spectre 1426
sniper 1379
drow-ranger 1368
invoker 1349
lifestealer 1349
viper 1336
clinkz 1332
huskar 1281
anti-mage 1255
arc-warden 1247
juggernaut 1228
alchemist 1194
doom 1028
Оказывается троль и свен - лучшие керри, а столь рекомендуемый и популярный леорик сидит где-то в заднице. Чудеса. Представляю, сколько шума поднимется в комментариях. Давайте искать во всем этом здравое зерно. Давайте искать какое-то объяснение. Заметим, что мы рассматриваем керри в отрыве от остальных героев. Возможно дело в этом. Если керри будут встречаться в чистом поле друг с другом много раз и зарабатывать на этом очки, должна получиться вот такая итоговая таблица.

Лучший саппорт против всех керри

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

omniknight abaddon lich crystal-maiden warlock vengeful-spirit dazzle venomancer silencer ogre-magi jakiro witch-doctor disruptor shadow-shaman mirana phoenix treant-protector earthshaker enigma ancient-apparition winter-wyvern sand-king windranger keeper-of-the-light lion death-prophet pugna bane visage skywrath-mage lina rubick chen enchantress shadow-demon oracle io arc-warden
Споилер
crystal-maiden 1995
sand-king 1882
vengeful-spirit 1845
jakiro 1836
enigma 1820
omniknight 1791
winter-wyvern 1772
lich 1748
lion 1737
enchantress 1697
earthshaker 1691
io 1677
lina 1614
abaddon 1609
dazzle 1603
treant-protector 1584
shadow-demon 1547
shadow-shaman 1541
warlock 1513
ogre-magi 1491
ancient-apparition 1482
mirana 1456
chen 1451
bane 1418
keeper-of-the-light 1415
witch-doctor 1406
disruptor 1368
skywrath-mage 1322
phoenix 1306
oracle 1298
venomancer 1291
visage 1259
death-prophet 1220
pugna 1174
rubick 1086
silencer 1073
Оказывается, цмка и скорпион лучше всего контрят большинство керри. Этот результат означает вот что. Если каждый из саппортов будет поочередно встречаться со всеми керри в рамках игр доты и зарабатывать на этом очки, то такой будет итоговая таблица среди всех саппортов.

Самые контрящие герои

Я сделал другой скрипт, работающий по другому принципу, не тому, который я описал ранее. Берется каждый из 111 героев доты и ищется в matchups всех остальных героев. В зависимости от того, какую позицию он занимает, он набирает очки. Чем дальше позиция от начала списка matchups, тем больше он зарабатывает очков. Ведь чем он дальше от начала списка, тем лучшим контрпиком он является, за это он и заслуживает большее количество очков. В результате я получил следующий список героев и их очков в порядке убывания очков:
Споилер
oracle 8031
io 7986
natures-prophet 7762
enchantress 7588
broodmother 7457
shadow-demon 7453
naga-siren 7398
meepo 7398
lone-druid 7301
leshrac 7297
puck 7174
timbersaw 7173
death-prophet 7127
batrider 7105
arc-warden 7061
lina 7000
chen 6969
tinker 6945
huskar 6913
magnus 6909
storm-spirit 6796
sniper 6785
rubick 6773
phantom-lancer 6771
outworld-devourer 6731
skywrath-mage 6669
axe 6658
morphling 6629
ember-spirit 6573
bristleback 6570
clinkz 6543
queen-of-pain 6503
kunkka 6494
faceless-void 6490
anti-mage 6457
pugna 6431
sand-king 6429
bane 6410
visage 6382
riki 6277
slark 6270
razor 6255
brewmaster 6246
gyrocopter 6136
keeper-of-the-light 6129
lifestealer 6117
weaver 6093
tiny 6090
drow-ranger 6083
lion 6039
techies 6038
ancient-apparition 6008
witch-doctor 6002
earthshaker 5987
shadow-fiend 5943
nyx-assassin 5932
clockwerk 5902
viper 5898
winter-wyvern 5843
enigma 5795
bloodseeker 5778
legion-commander 5775
dark-seer 5713
tidehunter 5706
dragon-knight 5705
windranger 5697
tusk 5679
lycan 5665
alchemist 5619
chaos-knight 5617
juggernaut 5582
zeus 5549
doom 5535
invoker 5529
beastmaster 5529
templar-assassin 5487
ogre-magi 5484
terrorblade 5454
medusa 5415
bounty-hunter 5408
jakiro 5406
sven 5376
silencer 5368
pudge 5308
phantom-assassin 5279
undying 5275
luna 5269
disruptor 5267
crystal-maiden 5265
phoenix 5232
warlock 5231
centaur-warrunner 5196
night-stalker 5187
shadow-shaman 5159
troll-warlord 5144
venomancer 5134
mirana 5089
treant-protector 5050
slardar 5048
wraith-king 5030
dazzle 4993
spirit-breaker 4992
spectre 4970
earth-spirit 4869
necrophos 4784
lich 4714
elder-titan 4705
vengeful-spirit 4699
ursa 4415
abaddon 4108
omniknight 3733
Посмотрите, что в этом списке удивительно. Прослеживается обратная зависимость от винрейта. Видно, что многие герои с высоким винрейтом стоят ближе к концу списка и наборот, герои с низким винрейтом оказываются самыми контрящими. Возможно так valve и построила в доте баланс? Возможно поэтому у Omniknight такой высокий winrate, а у Oracle такой низкий? Просто Omniknight толком никого не контрит, поэтому его так усилили, сделали таким мощным, а Oracle наоборот занерфили, потому что он в принципе хорош против очень многих героев? Я могу лишь строить предположения, dota игра слишком сложная, чтобы о ней так просто судить.

Заключение

Все вышеописанное, возможно, выглядит какой-то нелепицей, не удивлюсь, если кто-то так считает. Но если у кого-то есть какие-то мысли или критика по поводу полученных результатов, будет интересно почитать. Добро пожаловать в комментарии.
Eugenius4
26 Дек 2015 в 23:13
11088
52
1 5 5 60 56 4

Комментарии

Правила
На данный момент в комментариях у нас действуют следующие правила: https://dota2.ru/forum/threads/pravila-portala.1694/ (срок бана выдаётся на усмотрение модератора).
Комментарии отсутствуют
Для того, чтобы оставить комментарий, Вам необходимо зарегистрироваться или войти под своим аккаунтом.

Академия

Новости

Железо

Форум

Мемы

WoWLoLDotA
11

Матчи

Стримы

Видео

Есть предложение по улучшению сайта?