Kiedy zakończyć test Bayesian A / B?

10

Próbuję robić A / B testowania Bayesa sposób, jak w probabilistyczny Programowanie dla hakerów i Bayesa testów A / B . Oba artykuły zakładają, że decydent decyduje, który z wariantów jest lepszy, wyłącznie na podstawie prawdopodobieństwa pewnego kryterium, np. , dlatego A jest lepsze. Prawdopodobieństwo to nie dostarcza żadnych informacji na temat tego, czy ilość danych była wystarczająca do wyciągnięcia z nich jakichkolwiek wniosków. Nie jest więc dla mnie jasne, kiedy zatrzymać test.P(pA>pB)=0.97A

Załóżmy, że istnieją dwa binarne RV, i B , i chcę oszacować, jak prawdopodobne jest to, że p A > p B i p A - p BABpA>pBna podstawie obserwacjiAiB. Dodatkowo załóżmy, żeboczne tylnepAipBsą dystrybuowane w wersji beta.pApBpA>5%ABpApB

Ponieważ mogę znaleźć parametry dla p Aα,β i p BpA|data , mogę próbkować tylne i oszacować P ( p A > p B | dane ) . Przykład w python:pB|dataP(pA>pB | data)

import numpy as np

samples = {'A': np.random.beta(alpha1, beta1, 1000),
           'B': np.random.beta(alpha2, beta2, 1000)}
p = np.mean(samples['A'] > samples['B'])

Mógłbym uzyskać na przykład . Teraz chciałbym mieć coś w rodzaju P ( p A > p B | data ) = 0,95 ± 0,03 .P(pA>pB)=0.95P(pA>pB | data)=0.95±0.03

Badałem wiarygodne interwały i czynniki Bayesa, ale nie mogę zrozumieć, jak je obliczyć dla tego przypadku, jeśli w ogóle mają one zastosowanie. Jak mogę obliczyć te dodatkowe statystyki, aby mieć dobre kryterium zakończenia?

Bogdan Kulynych
źródło
1
Dobry artykuł na ten temat, w załączniku znajdziesz przykład z obliczeniami ... support.google.com/analytics/answer/2844870?hl=pl
Fabio Beltramini

Odpowiedzi:

10

Cieszę się, że wspomniałeś o tym przykładzie, ponieważ jeden projekt, nad którym pracuję, polega na napisaniu całego rozdziału dotyczącego testowania Bayesian A / B.

P(pA>pB|data)P(pA>pB|data)

P(pA>pB|data)

P(pA>pB|data)=0.95

pA>pBpApBpApBpB>

pA>pBpApBpB

wprowadź opis zdjęcia tutaj

W miarę pozyskiwania coraz większej ilości danych rozkład ten zbiega się z rzeczywistym wzrostem względnym, można powiedzieć, że rozkład się stabilizuje. W tym miejscu sugeruję zastanowienie się nad zakończeniem eksperymentu. Gdy wydaje się, że ta dystrybucja „uspokaja się” i możemy czuć się pewnie co do wzrostu, a następnie zakończ eksperyment.

Cam.Davidson.Pilon
źródło
pApBpA
hej @ Cam.Davidson.Pilon, dziękuję za odpowiedź. Nadal jestem zdezorientowany, podając takie prawdopodobieństwa, jak: „Prawdopodobieństwo, że A jest o 10% lepsze niż B, to X%”. Stworzyłem 2 rozkłady; jeden jest o 10% lepszy od drugiego i zastosował ogromną wartość N, dlatego diff (A / B-1) ma rozkład normalny ze średnią 10%. Dlatego (diff> .10) .mean () zwraca ~ 50%, ale czy nie powinno to być 100%?
CanCeylan
@CanCeylan czy masz kod do udostępnienia? Nie jestem pewien, jak stworzyłeś dystrybucje ...
Cam.Davidson.Pilon
0

Eksperymentowałem z sposobami na zatrzymanie testu Bayesian A / B i masz rację - nie ma aż tak wielu oczywistych sposobów na googlowanie. Najbardziej podoba mi się metoda oparta na precyzji, oparta na tym: http://doingbayesiandataanalysis.blogspot.com/2013/11/optional-stopping-in-data-collection-p.html . Nie znalazłem jednak dużo literatury matematycznej na ten temat, więc teraz jest to po prostu dobra heurystyka.

P(A>B|data)

ilanman
źródło
0

Wydaje się, że istnieją dwa główne podejścia do podejmowania decyzji w testach Bayesian A / B. Pierwszy oparty jest na artykule Johna Kruschke z Indiana University (K. Kruschke, Bayesian Estimation zastępuje test t, Journal of Experimental Psychology: General, 142, 573 (2013)). Reguła decyzyjna zastosowana w tym artykule oparta jest na koncepcji Regionu Praktycznej Równoważności (LINY).

Inną możliwością jest zastosowanie koncepcji oczekiwanej straty. Został zaproponowany przez Chrisa Stucchio (C. Stucchio, Bayesian A / B Testing at VWO). To inne podejście, które rozważę.

(pApB)/pA

Więcej informacji można znaleźć w tym poście na blogu: Bayesian A / B Testing: przewodnik krok po kroku . Zawiera także niektóre fragmenty kodu w języku Python, które w większości oparte są na projekcie Python hostowanym na Github .

cbellei
źródło