Dlaczego używać wykresu Bland-Altman
wykresy Bland-Altman pochodzą z branży medycznej w celu porównania miary dla dwóch instrumentów. Pierwszym celem Johna Martina Blanda & była odpowiedź na to pytanie :
czy obie metody pomiaru zgadzają się wystarczająco ściśle ? – D. G. ALTMAN i J. M. Mdły
jeśli tak, to znaczy, że jeśli masz dwa instrumenty, w których jeden jest najnowocześniejszy przy wysokich kosztach, a drugi jest 10 razy tańszy, czy wyniki uzyskane najtańszą metodą są porównywalne z referencjami i czy można je zastąpić wystarczającą dokładnością? Na przykład, czy tętno dostarczane przez zegarek za 20 usd jest wystarczająco dokładne w wyniku elektrokardiogramu ? Drugim celem było opracowanie metody, w której wyniki będą łatwe do zrozumienia dla osób nie będących statystykami.
w analityce, testowanie A / B (tak dobrze znane jako Champion-Challenger) to wspólna metodologia testu porównująca wyniki nowego działania / nowego leczenia / nowego projektu / … na population_A do population_B o bieżącej akcji. Po uzyskaniu wyników testu należy je przeanalizować i przedstawić zespołowi decyzyjnemu składającemu się głównie z osób nie będących statystykami. Dlatego Wykres Bland-Altmana jest istotny, ponieważ porównuje wyniki testu A/B na jednym wykresie ze wszystkimi miarami statystycznymi wyświetlanymi w zrozumiały sposób.
w swojej pracy pokazali również, dlaczego współczynnik korelacji, statystyczny test średniego porównania i regresja są niewłaściwe, aby zdecydować o porozumieniu dwóch środków, które byłyby w naszym przypadku testowym A/B, aby zdecydować o sile challengera w porównaniu z tym, który ma być mistrzem.
dane użyte
do tego artykułu użyję zestawu danych dostępnego na Kaggle (pochodzącego z projektu DataCamp) o nazwie „Mobile Games A/B Testing with Cookie Cats”. Link znajduje się w części referencje .
Cookie Cats to popularna mobilna gra logiczna, w której gracz rozwija poziomy, napotyka „bramy”, które zmuszą go do czekania przez jakiś czas przed kontynuowaniem gry lub dokonaniem zakupu. W takiej branży retencja jest jedną z kluczowych wskaźników, a zespół odpowiedzialny za grę zobaczyłby wpływ, gdyby pierwsza bramka została przeniesiona z poziomu 30 do poziomu 40 na retencję po 7 dniach. Aby zobaczyć zachowanie takiego ruchu, wykonali test A / B i dostarczyli nam zestaw danych z tych wyników. Zobaczymy, w jaki sposób Wykres Bland-Altman odpowie na następujące pytanie : „Jak analizować wyniki a / B na poziomie retencji w 7 dni, gdy czas oczekiwania przechodzi z poziomu 30 do poziomu 40 ?”
zbiór danych składa się z 90.189 wierszy, w których mamy unikalny identyfikator gracza, wersję testu A/B (czas oczekiwania w bramce_30 / bramce_40), sumę rund gry, retention_1 jest logicznym powiedzeniem, jeśli gracz wrócił następnego dnia, a retention_7 jest logicznym powiedzeniem, jeśli gracz wrócił po 7 dniach. Aby uzyskać odpowiednie dane, aby odpowiedzieć na nasze pytanie, konieczne jest wykonanie pewnego czyszczenia. Zachowam tylko, aby klient miał retention_1 = True (ponieważ jeśli retention_1 = False, retention_7 również jest False), liczbę rund ≥ 30 (ponieważ jeśli nie pójdą do 30, nie zostaną dotknięte bramką) i liczbę rund < 170 (ponieważ jeśli weźmiemy pod uwagę czas trwania gry = 5 minut, jeśli gracz gra 2 godziny dziennie podczas 7 dni, zagra 120*7/5 = 168 gier. Wyższa liczba będzie uważana za anormalne użycie). Po tym filtrze zestaw danych składa się z 20.471 wierszy, jak na Rys. 1 poniżej. Co więcej, zbiór danych jest równie zrównoważony między gate_30 & gate_40.
jak jest zbudowany Wykres Bland-Altman
w tej sekcji zobaczymy, jak dostosować oryginalny Wykres Bland-Altman, aby zastosować go do testu a/B. Przede wszystkim wyjaśnię , jak jest zbudowana fabuła w jej pierwotnej wersji, a następnie wyjaśnię, jak ją zbudować na podstawie danych z naszych testów A/B.
ze względu na to, że oryginalny Wykres Bland-Altmana porównuje pomiar 2 instrumentów, mają one taką samą długość według projektu. Na przykład, przy pomiarze tętna między zegarkiem connect za 20 USD a elektrokardiogramem, pomiar jest wykonywany w tym samym czasie z tymi samymi warunkami, które prowadzą do takiej samej liczby pomiarów dla 2 metod. Możemy więc reprezentować każdy wiersz zestawu danych jako doświadczenie, jak na przykładzie na Rysunku2 poniżej.
to jest miejsce, w którym napotykamy pierwszy „punkt bólu”. Test A / B jest uważany za wyjątkowe doświadczenie, podczas gdy jak widzimy powyżej, potrzebujemy kilku doświadczeń, aby zbudować fabułę. Aby ominąć to ograniczenie, stworzymy z testu A / B kilka bootstrapowanych próbek o tej samej & różnej długości .
generujemy 300 Nie unikalnych liczb całkowitych z przedziału od 200 do 1.000. Te liczby całkowite będą reprezentować długość każdej próbki rozruchowej i aby skorzystać z właściwości statystycznych Bootstrapa, każda Nie unikalna losowa liczba całkowita jest powielana 50 razy. Liczby te są używane w celu uzyskania różnorodności próbki, ale jest to dowolne, a długość zależy od wielkości oryginalnego zbioru danych. Te 15.000 (300*50) bootstraped próbki o długości między 200 i 2.000 otrzymuje się przez losowe pobieranie próbek z zastąpieniem z oryginalnego zestawu danych i są one połączone razem. Można go przedstawić jako Obraz3.
poniższy kod tworzy bootstrapped dataset z oryginalnych danych (bądź ostrożny, może to zająć trochę czasu, ponieważ bootstrapped dataset ma długość 9.184.350 wierszy {zmieniając random_state, mielibyśmy średnio (((200+1.000)/2)*300*50 = 9.000.000 wiersze}).
następnie grupujemy przez n_sample (id każdego 15.000 bootstrapped sample), n_sample_2 (długość każdej bootstrapped sample) i wersji w celu uzyskania sumy zatrzymań gracza na 7 dni na bramki, jak na rysunku 4.
możemy odczytać to wyjście jako: próbka bootstrapped N°0/14.999 składa się z 564 wierszy, w których 98 graczy nadal gra w 7 dni z czasem oczekiwania na gate_30, podczas gdy 105 graczy nadal gra w 7 dni z czasem oczekiwania na gate_40.
następnie używamy właściwości statystycznej boostrapa, mówiąc, że średnia próbki Bootstrapa jest dobrym estymatorem prawdziwej średniej rozkładu. Tworzymy Grupę przez n_sample_2 i wersję, aby dla każdej długości unikalnej próbki średnia liczba zatrzymań gracza na 7 dni na bramkę, jak na rysunku 5.
możemy odczytać ten wynik jako: gdy próbka ma 200 wierszy, średnio 34,60 graczy nadal gra w 7 dni z czasem oczekiwania na gate_30, podczas gdy 34,38 graczy, którzy nadal grają w 7 dni z czasem oczekiwania na gate_40.
następnie rozpakowujemy bazę danych w celu uzyskania zbioru danych w jaśniejszym formacie jako rys. 6.
na tym etapie posiadamy wszystkie niezbędne informacje do zbudowania wykresu Bland-Altman i reprezentacja zbioru danych jest taka sama jak na Rysunku2 powyżej.
Wykres Bland-Altman składa się z 2 osi. Oś x jest średnią z dwóch metod porównywania. Tak więc dla każdego wiersza: (gate_30i + gate_40i) / 2 ||| oś y jest różnicą między metodą a i metodą B. tak jest dla każdego wiersza: (gate_30i-gate_40i) / / / i tutaj jest drugi” punkt bólu”, który mamy. Utrzymując oś y w takiej postaci, wzrost wielkości próbek zwiększy zmienność różnic. W rezultacie statystyczna miara, którą uzyskamy później, zostanie przeciążona przez największe próbki. Aby ominąć to ograniczenie, będziemy reprezentować oś y w procentach . Aby to zrobić, obliczenie y jest dla każdego wiersza: ((gate_30i – gate_40i)*100 / (( gate_30i + gate_40i)/2) ||| zestaw danych wygląda jak Figure7.
musimy sprawdzić, czy oś y jest normalnie rozłożona, aby zaufać przedziałowi ufności, który będzie wyświetlany. Można to ocenić za pomocą testu shapiro-Wilka lub przynajmniej z histogramem. Jeśli rozkład nie jest normalny, to można wykonać transformację taką jak transformacja logarytmiczna. W naszym przypadku uważam rozkład za normalny.
Bland-Altman składa się z 3 linii (patrz Rys. 9):
- średnie wartości y
- górna granica przedziału ufności y (tutaj przy 95% biorąc pod uwagę 1,96)
- dolna granica przedziału ufności y (przy 95%)
zebraliśmy wszystko razem, pakiet pyCompare pozwala narysować wykres Bland-Altman w bardzo łatwy sposób bez konieczności budowania db:
najpierw metoda a (mistrz), a następnie metoda B (challenger). Następnie, jeśli procent = True, automatycznie wykona rachunek, który zrobiliśmy powyżej. Istnieje kilka innych parametrów, które omówimy później.
jak zinterpretować wykres Blanda-Altmana do testu A / B
oto jesteśmy ! Oto rysunek wykresu Bland-Altman dla testu A/B wygenerowanego przez powyższy kod:
przede wszystkim średnia i przedział ufności średniej (Jasnoniebieski Pasek) są inne niż 0 (wyższe w naszym przypadku). Co oznacza, że poziom retencji (nazwany biasem w oryginalnym papierze) bramek formula_30 i formula_40 są znacząco różne. Ze względu na to, że 2.93 > 0 oznacza to, że a > B < — > Champion > Challenger i w rezultacie, że okres oczekiwania na gate_30 zapewnia większą retencję niż okres oczekiwania na gate_40.
dwa batony z łososiem reprezentują przedział ufności na poziomie 95% (określony w oryginalnym dokumencie limit porozumienia), mówiąc, że jesteśmy przekonani, że 95% wartości będzie pomiędzy . W naszym exemple, jest to bardzo potężne, ponieważ możemy powiedzieć, że zachowanie bramy_30 będzie prawie zawsze większe niż ta z bramy_40.
jak widać, są 2 wartości powyżej górnego paska łososia i 4 poniżej dolnego, co wynosi 6/300 = 0,02 < 0.05 więc ze względu na to, że jesteśmy pewni, że 95% wartości mieści się w granicach 2, 5% może być powyżej lub poniżej, a w naszym przypadku stanowi 2% to jest zupełnie normalne 😉
w pakiecie pyCompare znajduje się parametr limitOfAgreement, który ma na celu zmianę granic zaufania. Tutaj istotne pytanie brzmi: „przy jakim procentach mogę być pewien, że zachowanie bramki_30 będzie zawsze większe niż ta z bramki_40 ?”Aby odpowiedzieć na to pytanie, najniższa granica musi być równa 0, więc musimy znaleźć odpowiednią wartość, aby mieć 0, jak widzimy w poniższym kodzie, który dostarcza Figure11:
widzimy, że gdy limitOfAgreement = 1.55, granica jest prawie równa 0. Następnie musimy sprawdzić w tabeli rozkładu normalnego wartość 1,55 czyli 0,9394, więc jesteśmy pewni, że w ((1-0.9394)*2)*100 = 87.88%, że zachowanie gate_30 zawsze będzie większe niż gate_40
ostatnim punktem do dodania jest to, że niezależnie od średniej wartości próbki, są one równomiernie reprezentowane na wykresie, co oznacza, że interpretacja, którą wykonujemy, jest uogólniona niezależnie od wielkości próbki. Rzeczywiście, gdybyśmy widzieli rodzaj stożkowej reprezentacji wartości moglibyśmy stwierdzić, że wielkość próby ma wpływ na wyniki, więc nie możemy mieć prawidłowej interpretacji.
wniosek
widzieliśmy, dlaczego użycie wykresu Bland-Altman może być istotne, aby mieć jeden widok na wyniki testu A/B na prostym wykresie, jak utworzyć Wykres z testu A/B i jak go zinterpretować. Działa to tylko w przypadku normalności różnicy, jednak konieczne będzie przekształcenie danych.
co więcej, sprawdziłem aplikację i bramki wydają się być na gate_40, podczas gdy udowodniliśmy, że retencja w 7 dni była lepsza w 30. W tym przypadku pokazuje to, że retencja nie jest być może najlepszym wskaźnikiem do naśladowania w porównaniu do rentowności !
D. G. Altman i J. M. Bland, pomiar w medycynie: analiza badań porównawczych metod, Statystyka 32 (1983) 307-317
https://projects.datacamp.com/projects/184 OR https://www.kaggle.com/yufengsui/mobile-games-ab-testing
D. G. Altman and J. M. Bland, Statistical Methods for Assessing Agreement between Two Methods of Clinical Measurement, The Lancet 327 (1986) 307-310
D. Giavarina, zrozumienie Bland Altman analiza, Biochemia Medica 25 (2015) 141-151