Jestem programistą pracującym nad systemami testowymi A / B. Nie mam solidnych statystyk, ale zbierałem wiedzę w ciągu ostatnich kilku miesięcy.
Typowy scenariusz testowy polega na porównaniu dwóch adresów URL na stronie internetowej. Odwiedzający odwiedza, LANDING_URL
a następnie jest losowo przekazywany do jednego URL_CONTROL
lub jednego URL_EXPERIMENTAL
. Odwiedzający stanowi próbkę, a warunek zwycięstwa zostaje osiągnięty, gdy odwiedzający wykona pożądane działanie na tej stronie. Stanowi to konwersję, a współczynnik konwersji to współczynnik konwersji (zazwyczaj wyrażony w procentach). Typowy współczynnik konwersji dla danego adresu URL to coś w zakresie od 0,01% do 0,08%. Przeprowadzamy testy w celu ustalenia, jak nowe adresy URL mają się do starych adresów. Jeśli URL_EXPERIMENTAL
jest pokazany wyprzedzić URL_CONTROL
, wymienimy URL_CONTROL
się URL_EXPERIMENTAL
.
Opracowaliśmy system wykorzystujący proste techniki testowania hipotez. Użyłem odpowiedzi na inne pytanie CrossValidated tutaj, aby rozwinąć ten system.
Test jest konfigurowany w następujący sposób:
- Oszacowanie współczynnika konwersji
CRE_CONTROL
zURL_CONTROL
oblicza się przy użyciu danych historycznych. - Żądany docelowa szybkość konwersji
CRE_EXPERIMENTAL
odURL_EXPERIMENTAL
jest ustawiona. - Zwykle stosowany jest poziom istotności 0,95.
- Zwykle używana jest moc 0,8.
Razem wszystkie te wartości są używane do obliczenia pożądanej wielkości próbki. Używam funkcji R, power.prop.test
aby uzyskać ten rozmiar próbki.
Test będzie trwał do momentu pobrania wszystkich próbek. W tym momencie przedziały ufności dla CR_CONTROL
i CR_EXPERIMENTAL
są obliczane. Jeśli się nie pokrywają, zwycięzca może zostać ogłoszony z poziomem istotności 0,95 i mocą 0,8.
Użytkownicy naszych testów mają jednak dwie główne obawy:
1. Jeśli w pewnym momencie testu zostanie zebranych wystarczająca ilość próbek, aby pokazać wyraźnego zwycięzcę, czy nie można zatrzymać testu?
2. Jeśli na końcu testu nie zostanie ogłoszony zwycięzca, czy możemy przeprowadzić test dłużej, aby sprawdzić, czy możemy zebrać wystarczającą ilość próbek, aby znaleźć zwycięzcę?
Należy zauważyć, że istnieje wiele komercyjnych narzędzi, które pozwalają użytkownikom robić dokładnie to, czego pragną nasi użytkownicy. Czytałem, że istnieje wiele błędów związanych z powyższym, ale natknąłem się również na zasadę zatrzymania reguły i chciałbym zbadać możliwość zastosowania takiej reguły w naszych własnych systemach.
Oto dwa podejścia, które chcielibyśmy rozważyć:
1. Używając power.prop.test
, porównaj bieżące zmierzone współczynniki konwersji z bieżącą liczbą próbek i sprawdź, czy zebrano wystarczającą liczbę próbek, aby ogłosić zwycięzcę.
Przykład: skonfigurowano test, aby sprawdzić, czy w naszym systemie istnieje następujące zachowanie:
CRE_CONTROL
: 0,1CRE_EXPERIMENTAL
: 0,1 * 1,3- Przy tych parametrach wielkość próbki
N
wynosi 1774.
Jednak w miarę postępu testu i osiągnięcia 325 próbek CRM_CONTROL
(zmierzony współczynnik konwersji dla kontroli) wynosi 0,08 i CRM_EXPERIMENTAL
wynosi 0,15. power.prop.test
jest obliczany na podstawie tych współczynników konwersji i N
wynosi 325. Dokładnie liczba próbek potrzebna do ogłoszenia CRM_EXPERIMENTAL
zwycięstwa! W tym momencie mamy nadzieję, że test się zakończy. Podobnie, jeśli test osiągnie 1774 próbki, ale nie zostanie znaleziony zwycięzca, ale wtedy osiągnie 2122 próbki, co wystarczy, aby wykazać, że CRM_CONTROL
0,1 i CRM_EXPERIMENTAL
0,128 jest wynikiem, w którym można ogłosić zwycięzcę.
W pokrewnym pytaniu użytkownicy wskazali, że taki test jest mniej wiarygodny ze względu na zachęcanie do wczesnego zatrzymywania posiadania mniejszej liczby próbek, a także jest podatny na błąd szacowania i zwiększoną liczbę błędów typu I i typu II. Czy jest jakiś sposób, aby ta reguła zatrzymująca działała? Jest to nasze preferowane podejście, ponieważ oznacza dla nas krótszy czas programowania. Być może ta reguła zatrzymywania mogłaby zadziałać, oferując jakiś wynik liczbowy lub wyniki, które mierzą wiarygodność testu, czy należy go wcześniej przerwać?
2. Przy użyciu analizy sekwencyjnej lub SPRT .
Te metody testowania są zaprojektowane dokładnie dla sytuacji, w której się znajdujemy: w jaki sposób nasi użytkownicy mogą rozpocząć test i zakończyć go w taki sposób, aby nie tracić czasu na testowanie? Zbyt długie uruchamianie testu lub konieczność rozpoczęcia testu z innymi parametrami.
Spośród dwóch powyższych metod preferuję SPRT, ponieważ matematyka jest dla mnie nieco łatwiejsza do zrozumienia i ponieważ wygląda na to, że łatwiej jest ją zaprogramować. Nie rozumiem jednak, jak korzystać z funkcji wiarygodności w tym kontekście. Gdyby ktoś mógł skonstruować przykład obliczania ilorazu wiarygodności, skumulowanej sumy ilorazu wiarygodności, i kontynuowałby przykład ilustrujący sytuację, w której należy kontynuować monitorowanie, kiedy zaakceptuje się hipotezę zerową i hipotezę alternatywną, pomogłoby nam to ustalić, czy SPRT jest właściwą drogą.
Odpowiedzi:
Jest to interesujący problem, a związane z nim techniki mają wiele zastosowań. Są one często nazywane strategiami „tymczasowego monitorowania” lub „sekwencyjnym planowaniem eksperymentalnym” (artykuł w Wikipedii, z którym się łączysz, jest niestety trochę rzadki), ale jest na to kilka sposobów. Myślę, że @ user27564 jest w błędzie, mówiąc, że analizy te muszą koniecznie być bayesowskie - z pewnością istnieją również częste podejścia do tymczasowego monitorowania.
Podobna logika pozwala znaleźć „punkty nieuchronności” dla innych testów, w których:
Prawdopodobnie byłoby to łatwe do wdrożenia - oblicz kryteria zatrzymania offline, a następnie po prostu podłącz je do kodu witryny - ale często możesz zrobić to jeszcze lepiej, jeśli chcesz zakończyć eksperyment nie tylko wtedy, gdy wynik jest nieunikniony , ale kiedy zmiana jest bardzo mało prawdopodobna.
Istnieje również wiele innych podejść. Grupowe metody sekwencyjne są zaprojektowane dla sytuacji, w których uzyskanie pewnej liczby pacjentów może być niemożliwe, a badani wlewają się ze zmienną szybkością. W zależności od ruchu w witrynie możesz chcieć, ale nie chcesz, zaglądać do tego.
Istnieje wiele pakietów R unoszących się wokół CRAN, jeśli tego właśnie używasz do analizy. Dobrym miejscem do rozpoczęcia może być widok zadań badań klinicznych , ponieważ wiele z tych prac pochodziło z tej dziedziny.
[*] Tylko przyjazna rada: zachowaj ostrożność, patrząc na wartości istotności obliczone na podstawie bardzo dużej liczby punktów danych. Jak zbierać coraz więcej danych, to będzie w końcu znaleźć znaczący wynik, ale efekt może być trywialnie małe. Na przykład, jeśli zapytasz całą planetę, czy wolą A czy B, jest bardzo mało prawdopodobne, że zobaczysz dokładny podział 50:50, ale prawdopodobnie nie warto ponownie wprowadzać zmian w produkcie, jeśli podział wynosi 50,001: 49,999. Sprawdzaj też rozmiar efektu (tj. Różnicę współczynników konwersji)!
źródło
Możesz przestać wcześnie, ale jeśli to zrobisz, twoje wartości p nie będą łatwo interpretowane. Jeśli nie zależy ci na interpretacji wartości p, to sposób, w jaki odpowiedź na dwa pierwsze pytania brzmi „nie”, nie ma znaczenia (zbyt wiele). Twój klient wydaje się pragmatyczny, więc prawdziwa interpretacja wartości p prawdopodobnie nie jest dobrym punktem, na którym ci zależy.
Nie mogę mówić o drugim podejściu, które proponujecie.
Jednak pierwsze podejście nie opiera się na solidnym gruncie. Normalne aproksymacje rozkładów dwumianowych nie są poprawne dla tak niskich proporcji (co jest metodą wykorzystującą test power.prop.test, także metodę zastosowaną przez Cohena w jego klasycznej książce o potędze). Co więcej, o ile mi wiadomo, nie ma rozwiązania analizy mocy w postaci zamkniętej dla badań proporcji dwóch próbek (por. Jak można przeprowadzić analizę mocy dwumianowej dwóch grup bez stosowania normalnych przybliżeń? ). Istnieją jednak lepsze metody przybliżania przedziałów ufności proporcji (por. Binom pakietu). Możesz zastosować nie nakładające się przedziały ufności jako częściowe rozwiązanie ... ale to nie to samo, co oszacowanie wartości p, a zatem nie zapewnia bezpośredniej drogi do zasilania. Mam nadzieję, że ktoś ma fajne rozwiązanie w formie zamkniętej, które podzieli się z nami. Jeśli natknę się na jeden, zaktualizuję powyższe pytanie. Powodzenia.
Edycja: Kiedy o tym myślę, pozwólcie mi na chwilę całkowicie pragmatyczny. Twój klient chce, aby ten eksperyment się zakończył, gdy będzie pewien, że strona eksperymentalna działa lepiej niż strona kontrolna. Po zdobyciu przyzwoitej próbki, jeśli nie jesteś gotowy do podjęcia decyzji, po prostu zacznij dostosowywać stosunek swojego losowego zadania do dowolnej strony, która „wygrywa”. Jeśli to był tylko moment, regresja do średniej wślizgnie się, będziesz mniej pewny i zmniejszysz stosunek. Gdy masz wystarczającą pewność, zadzwoń, aby wyjść i ogłosić zwycięzcę. Optymalne podejście prawdopodobnie wymagałoby aktualizacji bayesowskiej, ale nie wiem wystarczająco dużo na ten temat, żeby cię pokierować. Jednak zapewniam cię, że choć może się to czasem wydawać sprzeczne z intuicją, sama matematyka nie jest wcale taka trudna.
źródło
Pytania, które masz, są typowymi pytaniami pojawiającymi się w testach statystycznych. Istnieją dwa „smaki” statystyk: częsty i bayesowski. Częsta odpowiedź na oba pytania jest łatwa:
Po zdefiniowaniu konfiguracji nie można nawet patrzeć na dane (ślepa analiza). Z punktu widzenia częstych nie ma mowy o obejściu, oszukiwaniu, żadnych sztuczkach! (EDYCJA: Oczywiście, istnieją próby, aby to zrobić, a one również będą działać, jeśli zostaną użyte poprawnie, ale większość z nich wprowadza uprzedzenia.)
Ale istnieje bayesowski punkt widzenia, który jest zupełnie inny. Podejście bayesowskie wymaga, w przeciwieństwie do częstych, dodatkowego wkładu, rozkładu prawdopodobieństwa a priori. Możemy to nazwać także wcześniejszą wiedzą lub uprzedzeniami. Dzięki temu możemy wykorzystać dane / pomiary do zaktualizowania naszej wiedzy do prawdopodobieństwa a posteriori. Chodzi o to, że możemy korzystać z danych, a co więcej, możemy wykorzystywać dane w każdym pośrednim punkcie pomiaru. W każdej aktualizacji ostatni posterior jest naszym nowym wcześniejszym i możemy go zaktualizować o nowy pomiar, zgodnie z naszą aktualną wiedzą. W ogóle nie ma problemu z wczesnym zatrzymaniem!
Znalazłem przemówienie omawiające podobne problemy, które masz, i opisałem powyżej: http://biostat.mc.vanderbilt.edu/wiki/pub/Main/JoAnnAlvarez/BayesianAdaptivePres.pdf
Ale czy na pewno naprawdę tego potrzebujesz? Wygląda na to, że masz jakiś system, który decyduje, gdzie połączyć żądanie. W tym celu nie musisz dowodzić, że Twoje decyzje są poprawne w sensie statystycznym, za pomocą testu hipotez. Czy kiedykolwiek kupiłeś colę, ponieważ możesz wykluczyć, że pepsi jest „w tej chwili” z prawdopodobieństwem 95%? Wystarczy wybrać ten, który jest po prostu lepszy, nie wykluczając hipotezy. Byłby to trywialny algorytm: obliczyć niepewność częstości A, obliczyć niepewność B. Weź różnicę obu stóp i podziel ją na niepewność różnicy. Wynik jest podobny do znaczenia różnicy w sigmie. Następnie po prostu weź wszystkie linki, w których występuje więcej niż dwie lub trzy różnice sigma. Wada,
źródło
być może można tam zastosować jakieś metody
dostosuje to wartość graniczną P na podstawie wyników i pomoże przestać gromadzić dane oraz zaoszczędzić zasoby i czas.
może można tu dodać inne prace.
źródło