BrawlVision

Metodologia

Jak budujemy każdą statystykę

BrawlVision łączy oficjalne API Supercella, naszą warstwę próbkowania graczy PRO i kilka kroków statystycznego smoothing​a, by dostarczać liczby stabilne, porównywalne i uczciwe wobec własnej niepewności. Ta strona dokumentuje każdy z tych kroków z dokładnymi wzorami i częstotliwościami aktualizacji.

Ostatnia aktualizacja: 2026-04-30

Źródła danych

Wszystko, co wyświetlamy, pochodzi z trzech źródeł, które trzymamy audytowalne: publiczne API Supercella (developer.brawlstars.com), CDN Brawlify (cdn.brawlify.com) i nasza własna baza Supabase, która utrwala walki i agregaty, których oficjalne API nie udostępnia poza ostatnimi 25 meczami na gracza.

API Supercella to kanoniczne źródło danych strukturalnych — brawlery, gadżety, star powery, hypercharge, gearsy i rotacja eventów — ale pomija krytyczne pola jak obrazy brawlerów, rzadkość i długie opisy. Te pola krzyżujemy z CDN Brawlify, który działa niezależnie i czasem opóźnia się o jeden do trzech dni względem Supercella. Gdy wykrywamy nowego brawlera w API, którego jeszcze nie ma w Brawlify, trzymamy lokalną mapę rzadkości (BRAWLER_RARITY_MAP), żeby strona brawlera renderowała się poprawnie w dniu premiery.

Nasza baza przechowuje dwie klasy wierszy w meta_stats: source=user (prawdziwe walki użytkowników premium z włączoną sync) i source=global (automatyczne próbkowanie z rankingów PRO). Każda publiczna statystyka jest liczona z filtrem source=global, by dane osobowe pojedynczego użytkownika nigdy nie wyciekły na strony publiczne.

Jak budujemy dane PRO

Warstwa "PRO" BrawlVision to agregaty liczone na ostatnich walkach najlepszych graczy świata. Co sześć godzin cron job (meta-poll) odpytuje oficjalne rankingi Supercella dla jedenastu krajów — tych z największą aktywnością competitive — i buduje deduplikowaną pulę około 2 100 unikalnych graczy z top 200 każdego.

Na tej puli stosujemy probabilistyczny sampler, by popularne kombinacje (mapa, tryb) nie zdominowały datasetu i nie maskowały rzadkich. Prawdopodobieństwo akceptacji pojedynczej walki to p = min(1, (minLive + 1) / (current + 1)), gdzie minLive to liczba najmniej reprezentowanej kombinacji, a current liczba kombinacji walki kandydata. Niedopróbkowane kombinacje dostają większą wagę, nasycone przestają rosnąć.

Cron iteruje do META_POLL_MAX_DEPTH = 1 000 graczy na uruchomienie z miękkim budżetem 270 sekund, by mieścić się w maxDuration 300 s funkcji serverless. Każda odpowiedź zawiera blok diagnostyczny "adaptive" z liczbą iteracji, sprawdzonymi graczami i licznikami per tryb, by anomalie samplera były obserwowalne w produkcji.

Bayesian Win Rate

Naiwny Win Rate (zwycięstwa / mecze) wprowadza w błąd przy małych próbach: brawler 3-0 na nowej mapie pokazuje "100 % WR" bez znaczenia. BrawlVision używa Bayesian smoothing, by to skorygować i zwracać liczbę porównywalną między brawlerami o bardzo różnych rozmiarach próby.

Wzór: WR_bayesian = (wins + α) / (battles + α + β), gdzie α i β to hiperparametry kodujące wcześniejsze przekonanie wyśrodkowane na 50 % WR. W praktyce α = β = 25, równoważne "załóż 50 wcześniejszych walk 50/50 zanim zobaczysz prawdziwe dane". Brawler z 3 wins i 0 losses przechodzi z naiwnego 100 % na (3 + 25) / (3 + 50) = 52,8 %, znacznie bardziej reprezentatywne dla rzeczywistego stanu próbkowania.

Wraz ze wzrostem próby waga prior​a spada: przy 1 000 walk i 530 wins WR bayesowski wynosi (530 + 25) / (1 000 + 50) = 52,9 %, niemal identycznie jak naiwne 53,0 %. Smoothing "boli" tylko wtedy, gdy próba jest naprawdę mała. To dokładnie pożądana właściwość: karać szum, nie sygnał.

Comfort Score

Comfort Score to wewnętrzna metryka BrawlVision odpowiadająca na pytanie "z którym brawlerem grasz naprawdę lepiej niż średnia?". To nie jest czysty Win Rate: łączy trzy komponenty z wagami 60/30/10, pokrywając różne wymiary osobistej formy.

Główny komponent (60 %) to WR gracza z tym brawlerem, wygładzony bayesowsko jak meta globalna, by rzadko grany brawler nie zawyżał rankingu. Komponent średni (30 %) to różnica między tym osobistym WR a metą WR brawlera ogółem: gracz z 55 % na SHELLY przy globalnej mecie 48 % zyskuje więcej comfort niż gracz z 55 % na brawlerze z metą 53 %, bo względny lift jest większy.

Komponent końcowy (10 %) to znormalizowana częstość użycia: przy reszcie równej granie brawlerem 100 razy waży więcej niż 10, bo konsystencja jest nagradzana. Dokładne wzory i wagi żyją w src/lib/analytics/compute.ts i są stosowane identycznie przy każdym wywołaniu endpointa, by ranking był powtarzalny.

Częstotliwość aktualizacji

Jak często dane się odświeżają wpływa na ich interpretację, więc dokumentujemy to wprost. Strony statyczne (w tym ta) używają ISR (Incremental Static Regeneration) z rewalidacją co 24 godziny. Strony z danymi dynamicznymi cache​ują odpowiedź API, dopóki odpowiedni job jej nie unieważni.

Brawlerzy, gadżety i star powery synchronizują się z API Supercella z 24-godzinnym cache serwera. Meta-poll (dane PRO) działa co 6 godzin i produkuje świeże wiersze meta_stats. Preliczanie trendów 7d działa w pg_cron na "17 */6 * * *" (minuta 17 co szóstej godziny), by nie kolidować z meta-poll. Rotacja eventów w grze odświeża się co 30 minut.

Pojedyncze walki użytkowników premium z włączoną sync są pobierane zaraz po każdym meczu w przesuwanym oknie przez cron sync. Po dotarciu do naszej bazy zasilają meta_stats z source=user i są podstawą prywatnych analiz w sekcji profilu; nigdy nie pojawiają się w agregatach publicznych i nigdy nie mieszają z source=global.

Najczęstsze pytania

Czemu WR brawlera z małą próbą nie wynosi 0 % lub 100 %?+

Bo stosujemy Bayesian smoothing z priorem wyśrodkowanym na 50 %. Przy bardzo małej liczbie meczów wyświetlana liczba jest blisko 50 %; gdy próba rośnie, zbliża się do prawdziwego WR. To celowe: 100 % na 3 meczach to nie informacja, to szum.

Czy strony publiczne używają danych prawdziwych użytkowników?+

Nie. Każdy publiczny agregat filtruje po source=global, który zawiera tylko walki z automatycznego próbkowania rankingów PRO. Prywatne walki użytkowników premium są zapisywane z source=user i nigdy nie przechodzą na strony publiczne.

Co się dzieje, gdy Supercell wypuszcza nowego brawlera?+

Lista brawlerów pochodzi z oficjalnego API, więc pełny roster pojawia się na stronie w dniu premiery. Rzadkość i obrazy pochodzą z Brawlify, który może opóźnić się o jeden do trzech dni; trzymamy lokalną mapę rzadkości (BRAWLER_RARITY_MAP) jako fallback na te pierwsze dni.

Czemu niektóre trendy pokazują kreskę zamiast procentu?+

Pokazujemy trend tylko, jeśli każda połowa okna 14d ma co najmniej 3 walki w source=global. Gdy brawler jest rzadko widziany, wolimy nic nie pokazać niż liczbę o słabym sygnale.

Czy strona używa AI do generowania opisów?+

Opisy są generowane dynamicznie z naszych danych (najlepsza mapa, najlepszy tryb, Bayesian WR per brawler). Nie kopiujemy tekstu z Brawlify ani z wiki i nie używamy modeli językowych do nadymania treści.

Pytania lub poprawki?

Jeśli zauważyłeś błąd metodologiczny lub chcesz zasugerować ulepszenie, napisz do nas. Trzymamy tę stronę zsynchronizowaną z każdą istotną zmianą sposobu liczenia danych.