BrawlVision

Методология

Как мы строим каждую статистику

BrawlVision сочетает официальное API Supercell, нашу собственную систему семплинга PRO-игроков и несколько шагов статистического сглаживания, чтобы давать вам стабильные, сопоставимые числа, честные по поводу собственной неопределённости. Эта страница описывает каждый из шагов с точными формулами и частотами обновления.

Последнее обновление: 2026-04-30

Источники данных

Всё, что мы показываем, происходит из трёх источников, которые мы держим аудируемыми: публичный API Supercell (developer.brawlstars.com), CDN Brawlify (cdn.brawlify.com) и наша собственная база Supabase, в которой персистируются бои и агрегаты, не раскрываемые официальным API дальше последних 25 матчей на игрока.

API Supercell — каноничный источник структурных данных: бойцов, гаджетов, star powers, гиперзарядов, шестерёнок и ротации событий. Однако оно не возвращает картинки бойцов, редкость и длинные описания. Эти поля мы сверяем с CDN Brawlify, который работает независимо и иногда отстаёт от Supercell на один-три дня. Когда в API появляется новый боец, которого ещё нет в Brawlify, мы держим локальную карту редкости (BRAWLER_RARITY_MAP), чтобы страница бойца корректно отрисовывалась в день релиза.

Наша база хранит два класса записей в meta_stats: source=user (реальные бои премиум-пользователей с включённой синхронизацией) и source=global (автоматический сэмплинг из топ-рейтингов PRO). Любая публичная статистика на сайте считается с фильтром source=global, чтобы личные данные никогда не утекали на публичные страницы.

Как мы строим PRO-данные

Слой "PRO" в BrawlVision — это агрегаты, посчитанные на свежих боях лучших игроков мира. Каждые шесть часов cron-задача (meta-poll) опрашивает официальные рейтинги Supercell по одиннадцати странам — там, где сосредоточена соревновательная активность — и строит дедуплицированный пул примерно из 2 100 уникальных игроков из топ-200 каждой страны.

Над этим пулом применяется вероятностный сэмплер, чтобы популярные комбинации (карта, режим) не доминировали в датасете и не маскировали редкие. Вероятность принять отдельный бой — p = min(1, (minLive + 1) / (current + 1)), где minLive — счётчик наименее представленной комбинации, а current — счётчик комбинации кандидата. Недосэмплированные комбинации получают больший вес, насыщенные перестают расти.

Cron итерирует до META_POLL_MAX_DEPTH = 1 000 игроков за запуск с мягким бюджетом 270 секунд, чтобы оставаться в пределах maxDuration 300 с serverless-функции. Каждый ответ содержит блок "adaptive" с диагностикой: число итераций, опрошенных игроков, счётчики по режимам — чтобы аномалии сэмплера были видны в продакшене.

Bayesian Win Rate

Наивный Win Rate (победы / матчи) обманчив на малых выборках: боец 3-0 на новой карте показывает "100 % WR", и это ничего не значит. BrawlVision применяет байесовское сглаживание для коррекции и возвращает число, сравнимое между бойцами с очень разными размерами выборки.

Формула: WR_bayesian = (wins + α) / (battles + α + β), где α и β — гиперпараметры, кодирующие предварительное убеждение, центрированное на 50 % WR. На практике α = β = 25, что эквивалентно "предположить 50 предыдущих боёв 50/50 до того, как видны реальные данные". Боец с 3 победами и 0 поражениями из наивных 100 % переходит к (3 + 25) / (3 + 50) = 52,8 %, гораздо ближе к реальному состоянию выборки.

По мере роста выборки вес priora падает: при 1 000 боях и 530 победах байесовский WR становится (530 + 25) / (1 000 + 50) = 52,9 %, практически идентично наивным 53,0 %. Сглаживание "бьёт" только тогда, когда выборка действительно мала. Это и есть нужное свойство: штрафовать шум, а не сигнал.

Comfort Score

Comfort Score — собственная метрика BrawlVision, отвечающая на вопрос "с каким бойцом ты на самом деле играешь лучше среднего?". Это не чистый Win Rate: он сочетает три компонента с весами 60/30/10, покрывая разные стороны личной формы.

Главный компонент (60 %) — WR игрока с этим бойцом, сглаженный байесовски как и глобальный мета, чтобы редко играемый боец не искажал ранг. Средний компонент (30 %) — разница между этим личным WR и общим мета-WR бойца: игрок с 55 % на SHELLY при глобальном мета 48 % набирает больше comfort, чем игрок с 55 % на бойце с мета 53 %, потому что относительный лифт выше.

Финальный компонент (10 %) — нормализованная частота использования: при прочих равных играть бойца 100 раз весит больше, чем 10, потому что постоянство вознаграждается. Точные формулы и веса живут в src/lib/analytics/compute.ts и применяются одинаково на каждом вызове эндпоинта, чтобы ранг был воспроизводим.

Частота обновления

Как часто данные обновляются — влияет на интерпретацию, поэтому мы документируем явно. Статичные страницы (включая эту) используют ISR (Incremental Static Regeneration) с ревалидацией раз в 24 часа. Страницы с динамическими данными кэшируют ответ API, пока соответствующая задача не инвалидирует его.

Бойцы, гаджеты и star powers синхронизируются с API Supercell с серверным кэшем 24 часа. Meta-poll (PRO-данные) запускается каждые 6 часов и пишет свежие строки в meta_stats. Предрасчёт 7-дневных трендов запускается в pg_cron на "17 */6 * * *" (минута 17 каждых шести часов), чтобы не сталкиваться с meta-poll. Внутриигровая ротация событий обновляется каждые 30 минут.

Отдельные бои премиум-пользователей с включённой синхронизацией скачиваются сразу после каждой партии в скользящем окне через cron sync. Попадая в нашу базу, они подпитывают meta_stats с source=user и являются основой приватной аналитики в разделе профиля; они никогда не появляются в публичных агрегатах и никогда не смешиваются с source=global.

Часто задаваемые вопросы

Почему WR редко играющего бойца не 0 % или 100 %?+

Потому что мы применяем байесовское сглаживание с приором, центрированным на 50 %. При очень малом числе матчей показанное число близко к 50 %; с ростом выборки оно сходится к реальному WR. Это сделано намеренно: 100 % при 3 матчах — это шум, не информация.

Используют ли публичные страницы данные реальных пользователей?+

Нет. Каждый публичный агрегат фильтрует по source=global, который содержит только бои из автоматического сэмплинга PRO-рейтингов. Приватные бои премиум-пользователей хранятся с source=user и никогда не попадают на публичные страницы.

Что происходит, когда Supercell выпускает нового бойца?+

Список бойцов берётся из официального API, поэтому полный ростер появляется на сайте в день релиза. Редкость и картинки приходят из Brawlify, который может отставать на один-три дня; мы держим локальную карту редкости (BRAWLER_RARITY_MAP) как fallback на эти первые дни.

Почему некоторые тренды показывают прочерк вместо процента?+

Тренд показывается, только если в каждой половине 14-дневного окна есть хотя бы 3 боя в source=global. Когда боец редко встречается, мы предпочитаем ничего не показывать, чем число со слабым сигналом.

Использует ли сайт ИИ для генерации описаний?+

Описания генерируются динамически из наших данных (лучшая карта, лучший режим, байесовский WR на бойца). Мы не копируем тексты из Brawlify или вики и не используем языковые модели для раздувания контента.

Вопросы или поправки?

Если вы заметили методологическую ошибку или хотите предложить улучшение, напишите нам. Мы держим эту страницу синхронизированной с каждым релевантным изменением расчётов.