Strona głównaAI i uczenie maszynoweOptymalizator testów A/B — bandyta wieloramienny UCB1 na żywo

🎰 Optymalizator testów A/B — bandyta wieloramienny UCB1 na żywo

Obserwuj, jak prawdziwy algorytm bandyty wieloramiennego UCB1 (Górna Granica Ufności) rozdziela na żywo symulowany ruch pomiędzy warianty strony, faktycznie równoważąc eksplorację i eksploatację, by szybciej niż stały podział 50/50 zbiec do wariantu o najlepszej konwersji.

AI i uczenie maszynowe 3D Umiarkowany 60 FPS UCB1 Analiza żalu
ai-ab-testing-multiarmed-bandit ↗ Otwórz osobno

O tej symulacji

Ta symulacja uruchamia prawdziwy algorytm bandyty wieloramiennego UCB1 (Górna Granica Ufności) przeciwko kilku symulowanym wariantom strony („ramionom”), z których każdy ma ukryty prawdziwy współczynnik konwersji, którego algorytm nigdy nie widzi. W każdej rundzie oblicza on rzeczywisty wynik UCB1 — średnia obserwowana nagroda + √(2·ln(N)/ni) — dla każdego ramienia i pociąga to o najwyższym wyniku, a następnie obserwuje prawdziwy wynik konwersji o rozkładzie Bernoulliego wylosowany z ukrytego wskaźnika tego ramienia. Identyczny jednolicie losowy wzorzec odniesienia w stylu 50/50 jest uruchamiany na tych samych podstawowych losowaniach konwersji w każdej rundzie, więc obie strategie są uczciwie porównywane pod względem skumulowanych konwersji i skumulowanego żalu.

🔬 Co pokazuje

3D wieże dla każdego wariantu: złote wieże pokazują liczbę pociągnięć UCB1 i świecą jaśniej wraz ze wzrostem szacowanego współczynnika konwersji; przygaszone szare wieże za nimi pokazują liczbę pociągnięć naiwnego jednolitego wzorca odniesienia na identycznym symulowanym ruchu. Cienki biały pierścień oznacza prawdziwy (ukryty przed algorytmem) współczynnik konwersji każdego wariantu. Pod wieżami wykres 2D na żywo śledzi skumulowane konwersje i skumulowany żal obu strategii w czasie.

🎮 Jak korzystać

Ustaw liczbę wariantów (2–6) i przeciągnij suwak prawdziwego współczynnika konwersji każdego wariantu, aby zdefiniować ukryte środowisko. Dostosuj liczbę rund na takt, by przyspieszyć lub spowolnić symulację, przeciągnij po 3D wieżach, aby obrócić kamerę, i użyj Restartu, aby zresetować nowy przebieg. Obserwuj, jak wieża UCB1 dla najlepszego wariantu rośnie najwyżej, przenosząc ruch z dala od słabszych wariantów.

💡 Czy wiesz, że?

Skumulowany żal UCB1 jest udowodnienie ograniczony przez O(ln N) — rośnie coraz wolniej wraz z akumulacją rund. Stały podział 50/50, w przeciwieństwie do tego, ma żal, który rośnie liniowo w nieskończoność, ponieważ nigdy nie przestaje wysyłać ruchu do przegrywającego wariantu. Ta gwarancja logarytmicznego żalu jest powodem, dla którego bandyci w stylu UCB są używani w rzeczywistych produkcyjnych systemach testów A/B i serwowania reklam zamiast statycznych podziałów.

Najczęściej zadawane pytania

Czym jest problem bandyty wieloramiennego?

Bandyta wieloramienny to problem decyzyjny, w którym agent wielokrotnie wybiera spośród kilku opcji („ramion”) o nieznanym prawdopodobieństwie nagrody, dążąc do maksymalizacji łącznej nagrody w czasie. Nazwa pochodzi od rzędu automatów do gry („jednorękich bandytów”), gdzie hazardzista musi zdecydować, w który automat dalej grać, nie znając prawdziwego wskaźnika wypłat każdego z nich. W testach A/B każdy wariant strony jest ramieniem, a „pociągnięcie” to pokazanie tego wariantu jednemu odwiedzającemu i obserwacja, czy dokona konwersji.

Czym jest UCB1 i jak działa ten wzór?

UCB1 (Górna Granica Ufności) to algorytm, który w każdej rundzie wybiera ramię maksymalizujące średnia_nagroda + √(2·ln(N)/ni), gdzie średnia_nagroda to dotychczasowy obserwowany współczynnik konwersji ramienia, N to całkowita liczba rozegranych rund, a ni to liczba pociągnięć danego konkretnego ramienia. Pierwszy człon nagradza ramiona, które dobrze sobie radziły (eksploatacja); drugi człon to bonus zaufania, który maleje, gdy ramię jest ciągnięte częściej, ale rośnie powoli wraz z całkowitą liczbą rund N, więc rzadziej testowane ramiona są nadal próbkowane (eksploracja), dopóki dane ich nie wykluczą. Dzięki temu UCB1 ma matematycznie udowodnioną granicę skumulowanego żalu, która rośnie tylko logarytmicznie wraz z liczbą rund.

Czym UCB1 różni się od stałego podziału testu A/B 50/50?

Tradycyjny test A/B ze stałym podziałem wysyła stałą część ruchu do każdego wariantu przez cały czas trwania testu, nawet gdy staje się statystycznie jasne, że jeden wariant jest gorszy. UCB1 zamiast tego stale dostosowuje rozdział ruchu: nadal eksploruje każde ramię na początku, ale w miarę gromadzenia dowodów przesuwa coraz większą część ruchu na lepiej działający wariant, zmniejszając liczbę odwiedzających, którym pokazano przegrywający wariant. Obniża to skumulowany żal — łączną liczbę utraconych konwersji z powodu niewybierania zawsze najlepszego ramienia — w porównaniu z naiwnym jednolitym podziałem ocenianym na tych samych podstawowych losowaniach konwersji.

Co oznacza „skumulowany żal” i dlaczego ma to znaczenie?

Skumulowany żal to bieżąca suma, obejmująca wszystkie dotychczasowe rundy, różnicy między prawdziwym współczynnikiem konwersji najlepszego możliwego ramienia a prawdziwym współczynnikiem konwersji ramienia faktycznie wybranego w każdej rundzie. Mierzy on, ile konwersji utracono, nie wybierając zawsze optymalnego wariantu. Żal dobrego algorytmu bandyty rośnie logarytmicznie wraz z liczbą rund (niemal płasko po zebraniu wystarczających danych), podczas gdy żal naiwnego jednolicie losowego wzorca odniesienia rośnie liniowo w nieskończoność, ponieważ nadal wysyła stałą część ruchu do gorszych wariantów bezterminowo.

Dlaczego UCB1 pociąga każde ramię przynajmniej raz, zanim użyje wzoru?

Bonus zaufania wyniku UCB1, √(2·ln(N)/ni), jest nieokreślony (dzielenie przez zero) dla każdego ramienia z zerową liczbą pociągnięć, a w innym przypadku byłby nieskończenie optymistyczny wobec ramion bez danych. Standardowa implementacja traktuje więc wynik nietestowanego ramienia jako nieskończony, gwarantując, że każde ramię otrzyma początkowe eksploracyjne pociągnięcie, zanim algorytm zacznie ufać obserwowanym średnim. Ta zasada „optymizmu w obliczu niepewności” daje UCB1 jego udowodnioną gwarancję logarytmicznego żalu.