Как поднять процент побед в WoT | % побед в World Of Tanks

Как поднять процент побед в WoT | % побед в World Of Tanks World of Tanks

Вступление

Сегодня мы поговорим о поднятии статистики в

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

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

Статистика аккаунта состоит из трёх позиций – общий процент побед, КПД (рейтинг эффективности), и количество боев.

Рейтинг эффективности – это качественная характеристика полезности бойца в бою.

Есть несколько формул для вычисления рейтинга эффективности. Мы же будем рассматривать только одну формулу, которая условно обозначается «eff»(Эффективность). Эта формула появилась раньше всех остальных, поэтому рассмотрим только её. Она включает в себя: -средний урон;-среднее количество фрагов; -среднее количество засвеченных игроков; -среднее количество очков захвата базы;-среднее количество очков защиты базы.

Анализ данных

Зависит ли винрейт от нации техники? Логично предположить, что нет, так как разработчики пытаются максимально сбалансировать это. Давайте построим график. Для построения графиков я использовал библиотеку seaborn:

sns.factorplot('nation','winrate', data=df_normalized,size=4,aspect=3)
sns.plt.title('Winrate from nation')

В глаза сразу бросаются чешские танки – среднее значение винрейта 51%, но и разброс самый большой. Это объяснятся тем, что ветка относительно новая и многие игроки, которые уже выкачали всё, что только можно, бросились выкачивать и эту ветку. Понятно, что такие игроки довольно скиловые, поэтому и процент побед выше среднего.

А как обстоят дела с классом техники, какой класс «нагибает»? Построим похожий график:

ax = sns.factorplot('type','winrate', data=df_normalized,size=5,aspect=3)
sns.plt.title('Winrate from type')

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

Далее мы не будем говорить об этих двух признаках, так как они не вносят особой пользы в модель на основе random forest.

Посмотрим на корреляцию выбранных раннее признаков и процента побед:

Выделяется сильная корреляция is_premium с winrate. Неужели премиумные танки намного лучше обычных? Не совсем так. Такая сильная зависимость скорее всего объясняется тем, что на премиумной технике играют опытные игроки, чтобы фармить серебро, так как у многих танков, покупаемых за золото, льготный уровень боёв, больше серебра за бой, возможность быстрой прокачки экипажа. Можно построить график и посмотреть, как распределён винрейт на премиумной и обычной технике:

facet = sns.FacetGrid(df_normalized, hue="is_premium",aspect=4)
facet.map(sns.kdeplot,'winrate',shade= True)
facet.set(xlim=(0.40, df_normalized['winrate'].max()))
facet.add_legend()
sns.plt.title('Winrate from premium')

Видно, что плотность распределения побед на обычной технике — это Гаусовское нормальное распределение со средним значением 49%. Плотность распределения побед на премиумной технике вытянута в сторону большего винрейта, среднее значение 52%, а дисперсия намного больше чем у обычной техники.

Про WoT:  Турниры WOT Blitz. Неофициальная статистика World of Tanks Blitz

В игре всего 114 премиумных танка, а это 25% от общего количества. На гистограмме всех танков по проценту побед мы видели хвост справа. Давайте посмотрим, какие танки попали в него:

Получается 93% танков из хвоста — премиумные. Что интересно остальные 7% (2 из 31) это чешские танки.

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

Легко объяснить такую картину. На первых двух уровнях техники такой маленький винрейт из-за того, что все начинающие игроки портят статистику танкам из-за отсутствия опыта. Также на первых уровнях больше шансов оказаться внизу списка. На 10 уровне наоборот, ты всегда в топе. Также на 9-10 уровне играть без премиум аккаунта убыточно, поэтому большинство людей там, играют с премиумом.

Из оставшихся признаков прямо пропорциональны винрейту: прочность, скорость вперёд, урон в минуту и броня. Обратно пропорциональны: скорость сведения, разброс орудия. Пока всё очевидно, но дальше видно, что максимальный урон и бронепробитие обратно пропорциональны проценту побед.

Это странно, ведь чем больше танк наносит урона, тем лучше. Так и есть. Если еще раз взглянуть на то, как я получал значения для максимального урона, можно догадаться в чем подвох. Я просто брал максимальные значения урона и бронепробития из всех возможных снарядов для топового орудия.

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

Важность признаков

Теперь можно построить random forest на этих данных и посмотреть на результат. Random forest это один из самых распространённых алгоритмов машинного обучения, основанный на усреднении результатов множества разных деревьев решений. Этот алгоритм хорошо подходит для того чтобы узнать важность отдельных признаков:

Я пробовал разные параметры и признаки, но сильно уменьшить ошибку мне не удалось. Видно, что алгоритм в среднем ошибается в предсказаниях на 1.3% процента. А теперь посмотрим на важность признаков для этого леса:

importances = rf.feature_importances_
std = np.std([tree.feature_importances_ for tree in rf.estimators_], axis=0)
indices = np.argsort(importances)[::-1]
legends = []
for i in range(X.shape[1]):
    legends.append('%d.%s (%f)' % (i   1, X.columns[indices[i]], importances[indices[i]]))
plt.title('Feature importances')
bars = plt.bar(range(X.shape[1]), importances[indices], color='c', yerr=std[indices], align='center')
plt.xticks(range(X.shape[1]), range(1, X.shape[1]   1))
plt.xlim([-1, X.shape[1]])
plt.legend(bars, legends, fontsize=12)

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

Что будет, если мы уберем из выборки премиумные танки и обучим random forest с такими же параметрами? Результаты удобно представить на boxplot:

fig, ax1 = plt.subplots(figsize=(10, 6))
data = [score_with_premium, score_without_premim]
bp = plt.boxplot(data, notch=0, sym=' ', vert=1, whis=1.5)
ax1.set_title('Comparison of score with and without premium')
ax1.set_ylabel('mean_absolute_error')
xtickNames = plt.setp(ax1, xticklabels=['With premium', 'Without premium'])
plt.setp(xtickNames, rotation=0, fontsize=12)

Алгоритму сразу стало намного легче угадывать процент побед и в среднем ошибка на кросс валидации уменьшилась до 0.9%, разброс ошибки также стал существенно меньше.

Про WoT:  День 16: M54 Renegade. Новогодний календарь 2022 в World of Tanks | WOT Express первоисточник новостей

Нормализация признаков

Перед тем как приступить к анализу нужно нормализовать некоторые фичи. Мы хотим получить значения, не зависящие от уровня танка, поэтому для каждого уровня будем нормализовывать отдельно. Другими словами, сделаем так, чтобы среднее значение признаков по уровню было равно 0.

Перед вами таблица рейтинга эффективности в бою (кпд):

Ну, что же, для чего нужна хорошая статистика – мы разобрали. Теперь посмотрим, как её такую сделать!

Многие опытные игроки-вододелы, такие как Джов, Глеборг, Маракаси, Амвей921, сделали, как минимум одно видео по теме: «Как поднять процент побед и КПД в World of Tanks». Там они рассказали, как они добивались своих высочайших результатов статистики аккаунта. Я же расскажу, как это НУЖНО делать.

Сразу скажу, что иметь высокий процент побед играя соло (в одиночку), у Вас не получится. Поэтому Вам понадобится взвод, желательно из трёх человек включая вас. Если даже у всех троих статистика будет плохой, то шансов затащить и выиграть больше, чем при игре соло, так как вы можете выполнять слаженные действия, переговариваться, втроём рашить, дефить… И плюс ко всему, играть с боевыми товарищами, гораздо веселее, поэтому и настроение будет лучше!

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

Заходите в свой ангар -> Вкладка «Достижения» -> Вкладка «Техника» -> Сортировать по проценту побед. Там смотрите на танки от 6го уровня с наивысшими показателями процента побед и среднего урона.

Берете этот танк, настраиваете себя на нагиб и идёте в бой во взводе, с хорошим настроением. Работаете в каждом бою по максимуму, набиваете, как можно больше урона за бой. По возможности, захватывайте вражескую базу, и защищайте свою. Думаю, что и так понятно, но все, же скажу: 1)

НИКОГДА не едте один на фланг, без поддержки;2)Никогда не сливайтесь вначале боя;3)Играя взводом – распределяйте дамаг. Поясню. Например, если у Ваших совзводных мало очков прочности, вы должны их прикрыть своей тушкой, чтобы их не убили, и вы не потеряли потенциал вашего взвода.

Существует легенда, что если долго не везёт и постоянно проигрыши – можно сменить сервер, и всё пройдёт – будете нагибать как в сказке! Я лично проверял, хоть и немного раз — легенда РАБОТАЕТ!!! Так что пробуйте, может и Вам повезет.

Работа с признаками

Для анализа данных я использовал питоновскую библиотеку pandas. Загрузим все данные в pandas.DataFrame, получили 450 строк и 40 колонок. Список всех признаков:

Про WoT:  Низкая скорость загрузки HD-клиента | Форум

Все фичи должны быть интуитивно понятны, кроме ap_damage, apcr_damage, he_damge, hc_damage и такие же с _penetration. Это урон и бронепробитие разными типами снарядов. API возвращает информацию об орудии в виде массива объектов, которые содержат данные о уроне и бронепробитие для конкретного типа снарядов. Их есть 4 типа:

API не говорит какой из снарядов основной, а какой покупается за золото, что усложняет анализ.

Создание и отбор признаков

На основе исходных данных можно получить более информативные признаки:

df['power'] = df.engine_power / (df.weight / 1000) # в лошадях на тонну 
df['max_damage'] = df[['ap_damage', 'apcr_damage', 'he_damage', 'hc_damage']].max(axis=1)
df['max_penetration'] = df[['ap_penetration', 'apcr_penetration', 'he_penetration', 'hc_penetraion']].max(axis=1)
df['dpm'] = df['max_damage'] * df['gun_fire_rate'] # урон в минуту
def get_armor(y):
    # если есть башня, то берём среднее значение лобовой брони башни и корпуса
    # если нет, то просто берём лобовую броню корпуса
    if y[1]:
        return np.mean(y[:2])
    else:
        return y[0]
df['armor'] = df[['armor_hull_front', 'armor_turrer_sides']].apply(get_armor, axis=1) 

Методом проб и ошибок (random forest) я отобрал самые значимые признаки (но далее мы также рассмотрим еще два интересных признака):

Для тех, кто не играл в WOT, здесь отображены: уровень танка (от 1 до 10), премиумный танк или нет, количество очков прочности, мощность (лошадей/тонну), скорострельность(выстрелов/минуту), скорость сведения орудия(сек), разброс орудия(метры), скорость вперёд(км/ч), максимальный урон(хп), максимальное бронепробитие(мм), урон в минуту(хп/мин), броня(мм).

Формула расчета:

DAMAGE * (10 / (TIER 2)) * (0.21 3*TIER / 100) FRAGS * 250 SPOT * 150 log (CAP 1) / log(1.732) * 150 DEF * 150

где:

  • DAMAGE — средний урон
  • FRAGS — среднее количество фрагов
  • SPOT — среднее количество засвеченных игроков
  • CAP — среднее количество очков захвата
  • DEF — среднее количество очков защиты

Заключение

Мы посмотрели, как работать с WG API. Узнали, как винрейт зависит от нации — на данный момент на чехах он самый нестабильный, от класса техники — на средних танках самый большой, а на арте самый маленький. Также увидели прямолинейную зависимость от уровня.

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

Upd: saw_tooth навёл на мысль построить график по винрейту от уровня техники и типа отдельно (кликабельно):
Как поднять процент побед в WoT | % побед в World Of Tanks
P.S.: Если вы тоже хотите поработать с этим датасетом, но не хотите загружать данные через API то пишите мне.

Подведём итоги

Что нужно чтобы поднять статистику аккаунта:

  • Хороший, сыгранный взвод
  • Нагибаторская техника — техника на которой Вам везёт, или нравится играть
  • Работать в боях по максимуму
  • Менять сервер при сливах
  • Играть, только если у Вас хорошее настроение

На этом у меня всё. Желаю Вам стать «

фиолетовым

»! Надеюсь, статья была полезной, с вами был

iLetGo

, Удачи Вам в жизни, и на полях сражений!

Оцените статью
TankMod's
Добавить комментарий