Собесов

World of Warships — популярность игровых режимов и эффективность кораблей

Кейсы и метрикиEDA и визуализацииСредняяMiddle

Условие

Дана SQLite-база со случайной выборкой из free-to-play игры World of Warships. В базе 4 таблицы:

  1. arena_members — пользовательские данные по сыгранным боям (на каком корабле, насколько успешно). Отрицательные account_db_id — боты.
  2. arenas — характеристики боя (режим, карта, длительность).
  3. glossary_ships — словарь техники.
  4. catalog_items — словарь идентификаторов (типы режимов и т.п.).

Задания (часть 1, аналитика):

  1. Проанализируйте популярность режимов (team_build_type_id) среди игроков. Визуализируйте.
  2. Проанализируйте показатели эффективности кораблей, выбрав корректную методологию. Визуализируйте.
  3. Выберите 1–2 наиболее интересных наблюдения, которые были бы важны для команды разработки.

Результат — небольшой отчёт в PDF, ориентированный на менеджмент.

Решение

Подход

Это EDA-задача, где правильность важнее самих чисел. Главные ловушки:

  • Боты в arena_members (отрицательные id) — их нужно отфильтровать перед анализом «игроков».
  • «Эффективность корабля» — неоднозначное понятие; нужна прозрачная методология.
  • Малая выборка по редким кораблям даст шумные оценки — нужен фильтр на минимум боёв.

Реализация — Задание 1. Популярность режимов

SELECT
  ci.name AS team_build_type,
  COUNT(DISTINCT a.arena_id) AS battles,
  COUNT(DISTINCT am.account_db_id) AS unique_players
FROM arenas a
JOIN arena_members am USING (arena_id, periphery_id)
JOIN catalog_items  ci ON ci.id = a.team_build_type_id AND ci.category = 'TEAM_BUILD_TYPE'
WHERE am.account_db_id > 0   -- исключаем ботов
GROUP BY ci.name
ORDER BY battles DESC;

Визуализации:

  • Bar chart по числу боёв в каждом режиме (top–bottom).
  • Доля DAU, играющих в режим (если в базе есть даты — еженедельная динамика).
  • Heatmap «режим × игровая карта» — где какие режимы популярны.

Почему именно эти: bar chart — мгновенно показывает иерархию популярности; динамика — даёт понимание тренда (новый режим может расти, старый — падать); heatmap — даёт продуктовую инсайтовую информацию (карта X не работает с режимом Y).

Реализация — Задание 2. Эффективность кораблей

Методология «эффективности корабля» — самый важный пункт. Возможные определения:

Метрика Что показывает Слабость
Win rate = wins / battles результативность как часть команды зависит от matchmaking
Avg damage / battle core perf не учитывает класс корабля
K/D ratio агрессивность для танков-разведчиков занижен
Survivability rate доля боёв, где корабль остался жив не отделяет от командной работы
Frags-to-deaths ratio целостный показатель плохой для саппорт-классов

Корректная методология: multi-metric + сравнение внутри класса (battleship vs battleship, не battleship vs destroyer):

WITH ship_stats AS (
  SELECT
    gs.ship_class,
    gs.ship_name,
    COUNT(*)                                          AS battles,
    AVG(am.damage)                                    AS avg_damage,
    AVG(CAST(am.is_alive AS REAL))                    AS survival_rate,
    SUM(am.ships_killed) * 1.0 /
      NULLIF(COUNT(*) - SUM(am.is_alive), 0)          AS k_d_ratio,
    AVG(CASE WHEN a.winner_team_id = am.team_id
             THEN 1.0 ELSE 0.0 END)                   AS win_rate
  FROM arena_members am
  JOIN arenas a ON a.arena_id = am.arena_id
  JOIN glossary_ships gs ON gs.id = am.vehicle_type_id
  WHERE am.account_db_id > 0
  GROUP BY gs.ship_class, gs.ship_name
  HAVING COUNT(*) >= 50   -- минимальный порог для надёжности
)
SELECT * FROM ship_stats;

Визуализация: для каждого класса — scatter plot «avg_damage vs win_rate», точки — корабли, размер — число боёв. Аутлайеры (high damage, high win) — рекомендуемые мета-ships.

Альтернативаz-score внутри класса: для каждой метрики посчитать z от средней по классу, корабль с z > 2 на 2+ метриках — «overperformer», возможный кандидат на nerf.

Реализация — Задание 3. Интересные наблюдения

Примеры инсайтов, которые ищем:

  1. «Платный» бенефит: премиум-корабли (если выделить через catalog_items) показывают win rate +X пп vs free. Если разница большая (> 5 пп) — это pay-to-win, важный сигнал для команды.

  2. «Класс-доминатор»: если один класс кораблей даёт 50%+ kills команды, но при этом DAU класса = 15%, это disbalance — geometry разрушает баланс.

  3. «Боты vs живые»: сравнить win rate боёв с ботами и без — если живые игроки на тех же кораблях имеют сильно разный win rate, возможно, бот-настройки сбиты.

  4. «Карта в дисбалансе»: вероятность победы команды в зависимости от стартовой стороны (team_id = 0 vs team_id = 1) на конкретной карте. Если разница > 5 пп — карта несбалансирована.

  5. «Survival paradox»: корабли с высоким survival_rate, но низким win_rate — игроки прячутся, не помогают команде. Game design issue.

Анализ / интерпретация

В отчёте на 1–2 страницы для менеджмента должны быть:

  • TL;DR: 3–5 главных инсайтов в первом абзаце.
  • Раздел 1: «Что играют» — bar chart режимов с динамикой.
  • Раздел 2: «Какие корабли работают лучше» — топ-5 / антитоп-5 в каждом классе с методологией в одном абзаце.
  • Раздел 3: «Что важно для команды» — 1–2 инсайта, требующие действия.
  • Приложение: ссылка на код / SQL.

Подводные камни

  1. Не отфильтровать ботов. Полностью искажает «популярность» и «эффективность». Все запросы — WHERE account_db_id > 0.
  2. Сравнивать корабли разных классов. Linecorр и эсминец — разные роли; средний урон у них разный по дизайну.
  3. Игнорировать число боёв. Корабль с 1 боем и win rate 100% попадёт в топ — и будет шумом. Минимум 50–100 боёв.
  4. «Win rate» как единственная метрика. Рекомендован баланс — saturation, damage, survival.
  5. Нет CI на метриках. Если корабль X показал win rate 55% за 100 боёв, а Y — 53% за 1000, нельзя сказать, что X лучше.
  6. Не учитывать дату/период. Данные за полгода и за неделю выпуска — разные. Если есть сезонность мета — учитывайте.
  7. «Менеджерский» отчёт со страшным SQL в первом абзаце. PDF для бизнеса — это инсайты, а не код.

Альтернативы

  • Сделать interactive dashboard (Tableau / Looker) вместо PDF — менеджмент сможет копать.
  • Ml-кластеризация кораблей по multi-метрикам (k-means / GMM) — найти «архетипы поведения» (дамажеры / танки / саппорты).

Эталонный ответ

Структура: фильтр ботов → bar chart режимов → внутри класса z-score / scatter avg_damage × win_rate с фильтром min 50 боёв → 1–2 actionable insights (например, «премиум-корабли pay-to-win на +X пп», «карта Y несбалансирована»). Отчёт на 1–2 страницы для менеджмента, методология — в одном абзаце.

Хочешь увидеть разбор?

Зарегистрируйся бесплатно — откроется развёрнутое решение этой задачи и ещё 4 на выбор.

Зарегистрироваться и увидеть разбор
Уже есть аккаунт? Войти