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ą.