Условие
Дана SQLite-база со случайной выборкой из free-to-play игры World of Warships. В базе 4 таблицы:
arena_members— пользовательские данные по сыгранным боям (на каком корабле, насколько успешно). Отрицательныеaccount_db_id— боты.arenas— характеристики боя (режим, карта, длительность).glossary_ships— словарь техники.catalog_items— словарь идентификаторов (типы режимов и т.п.).
Задания (часть 1, аналитика):
- Проанализируйте популярность режимов (
team_build_type_id) среди игроков. Визуализируйте. - Проанализируйте показатели эффективности кораблей, выбрав корректную методологию. Визуализируйте.
- Выберите 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. Интересные наблюдения
Примеры инсайтов, которые ищем:
-
«Платный» бенефит: премиум-корабли (если выделить через
catalog_items) показывают win rate +X пп vs free. Если разница большая (> 5 пп) — это pay-to-win, важный сигнал для команды. -
«Класс-доминатор»: если один класс кораблей даёт 50%+ kills команды, но при этом DAU класса = 15%, это disbalance — geometry разрушает баланс.
-
«Боты vs живые»: сравнить win rate боёв с ботами и без — если живые игроки на тех же кораблях имеют сильно разный win rate, возможно, бот-настройки сбиты.
-
«Карта в дисбалансе»: вероятность победы команды в зависимости от стартовой стороны (
team_id = 0vsteam_id = 1) на конкретной карте. Если разница > 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.
Подводные камни
- Не отфильтровать ботов. Полностью искажает «популярность» и «эффективность». Все запросы —
WHERE account_db_id > 0. - Сравнивать корабли разных классов. Linecorр и эсминец — разные роли; средний урон у них разный по дизайну.
- Игнорировать число боёв. Корабль с 1 боем и win rate 100% попадёт в топ — и будет шумом. Минимум 50–100 боёв.
- «Win rate» как единственная метрика. Рекомендован баланс — saturation, damage, survival.
- Нет CI на метриках. Если корабль X показал win rate 55% за 100 боёв, а Y — 53% за 1000, нельзя сказать, что X лучше.
- Не учитывать дату/период. Данные за полгода и за неделю выпуска — разные. Если есть сезонность мета — учитывайте.
- «Менеджерский» отчёт со страшным 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 страницы для менеджмента, методология — в одном абзаце.