hvorfor og hvordan man bruger Bland-Altman-plottet til A | B-test / Python + kode

hvorfor bruge Bland-Altman-plottet

Bland-Altman-plottet kommer fra den medicinske industri for at sammenligne foranstaltningen for to instrumenter. Det første mål med John Martin Bland & Douglas Altman var at besvare dette spørgsmål :

er de to målemetoder enige tilstrækkeligt tæt ? – D. G. ALTMAN og J. M. BLAND

hvis det er tilfældet, betyder det, at hvis du har to instrumenter, hvor den ene er den nyeste teknik til en høj pris, og den anden er 10 gange billigere, er de resultater, der opnås ved den billigste metode, sammenlignelige med referencen, og kan den erstattes med en tilstrækkelig nøjagtighed? For eksempel er hjertefrekvensen leveret af et $20 tilsluttet ur tilstrækkeligt nøjagtigt som følge af et elektrokardiogram ? Det andet mål var at producere en metode, hvor resultaterne er let forståelige for ikke-statistikere.

i analytics er A / B-test (såvel kendt som Champion-Challenger) en almindelig testmetode for at sammenligne resultaterne af en ny handling / en ny behandling / et nyt design / … på population_A til population_B, der har den aktuelle handling. Når vi har testens resultater, skal de analyseres og præsenteres for et beslutningshold, der hovedsagelig består af ikke-statistikere. Derfor er Bland – Altman-plottet relevant, fordi det vil sammenligne resultaterne af A/B-testen på et plot med alle de statistiske foranstaltninger, der vises på en forståelig måde.

i deres papir viste de også, hvorfor korrelationskoefficienten, den statistiske test af middelsammenligning og regressionen er uhensigtsmæssige til at beslutte, om der er enighed om to foranstaltninger, som ville være i Vores A/B-testsag for at beslutte udfordrerens magt sammenlignet med den ene af mesteren.

de anvendte data

til denne artikel vil jeg bruge et datasæt, der er tilgængeligt på Kaggle (kommer fra et DataCamp-projekt) kaldet “Mobile Games A/B Testing med Cookie Cats”. Linket er i referencedelen .

Cookie Cats er et populært mobilt puslespil, hvor han som spiller Udvikler niveauerne, vil støde på “porte”, der vil tvinge ham til at vente et stykke tid, før han fortsætter med at spille eller foretage et køb. I en sådan branche er tilbageholdelsen en af nøglemetrikerne, og holdet med ansvar for spillet ville se virkningen, hvis den første port blev flyttet fra niveau 30 til niveau 40 på tilbageholdelsen efter 7 dage. For at se opførelsen af et sådant træk gjorde de en A/B-test, og de gav os datasættet af disse resultater. Vi vil se, hvordan Bland-Altman-plottet vil svare på følgende spørgsmål : “Hvordan analyseres A / B-resultaterne på tilbageholdelsesniveauet på 7 dage, når ventetiden går fra niveau 30 til niveau 40 ?”

datasættet består af 90.189 rækker, hvor vi har spillerens unikke id, A / B-testens version (ventetid ved gate_30 / gate_40), spillerundernes sum, retention_1 er et boolsk ordsprog, hvis spilleren kom tilbage den næste dag, og retention_7 er et boolsk ordsprog, hvis spilleren kom tilbage efter 7 dage. For at få de relevante data til at besvare vores spørgsmål, er det nødvendigt at gøre noget rengøring. Jeg vil kun holde klienten med en retention_1 = True (fordi hvis retention_1=False, retention_7 er også falsk), et antal spilrunder, der er 30 (fordi hvis de ikke går før 30, vil de ikke blive påvirket af porten) og et antal spilrunder < 170 (fordi hvis vi overvejer varigheden af et spil = 5 minutter, hvis en spiller spiller 2 timer om dagen i løbet af 7 dage, vil han spille 120*7/5 = 168 spil. Et højere tal ville blive betragtet som en anormal anvendelse). Efter dette filter er datasættet sammensat af 20.471 rækker som Figur1 nedenfor. Desuden er datasættet lige afbalanceret mellem gate_30 & gate_40.

Figur1. CookieCats datasæt

hvordan bygges Bland-Altman-plottet

vi vil se på dette afsnit, hvordan man tilpasser det originale Bland-Altman-plot for at anvende det på en A/B-test. Først og fremmest vil jeg forklare , hvordan plottet er bygget i sin oprindelige version, og så vil jeg forklare, hvordan man bygger det med vores A/B-testdata.

på grund af at det originale Bland-Altman-plot sammenligner målingen af 2 instrumenter, har de samme længde efter design. For eksempel med pulsmåling mellem $20 connect-uret og elektrokardiogrammet tages foranstaltningen på samme tid med de samme betingelser, der fører til at have det samme antal målinger for de 2 metoder. Så vi kan repræsentere hvert datasæts række som en oplevelse som på eksemplet i Figur2 nedenfor.

Figur2. Instrumentmål pr. oplevelse

det er her, vi støder på det første “smertepunkt”. En A / B-test betragtes som en unik oplevelse, mens vi, som vi ser ovenfor, har brug for flere oplevelser for at opbygge plottet. For at omgå denne begrænsning opretter vi fra A/B-testen flere bootstrapped prøver med begge de samme & forskellige længder.

vi genererer 300 ikke-unikke tilfældige heltal mellem 200 og 1.000. Disse heltal repræsenterer længden af hver bootstrapped prøve og for at gavne bootstraps statistiske egenskaber duplikeres hvert ikke-unikt tilfældigt heltal 50 gange. Disse tal bruges til at have en stikprøvediversitet, men det er vilkårligt, og længden afhænger af størrelsen på det originale datasæt. Disse 15.000 (300 * 50) bootstrapped prøver med en længde mellem 200 og 2.000 opnås ved en tilfældig prøveudtagning med en erstatning fra det oprindelige datasæt, og de sammenkædes sammen. Det kan repræsenteres som Figuren3.

Figur3. Bootstrapped dataset building

følgende kode opretter det bootstrapped datasæt fra de originale data (vær forsigtig, det kan tage tid, fordi det bootstrapped datasæt har en længde på 9.184.350 rækker {ved at ændre random_state ville vi i gennemsnit have (((200+1.000)/2)*300*50 = 9.000.000 rækker}).

derefter grupperes vi efter n_sample (id for hver 15.000 bootstrapped prøve), n_sample_2 (længden af hver bootstrapped prøve) og version for at have summen af spillerens tilbageholdelse på 7 dage pr porte som i figur 4.

Figur4. Bootstrapped datasæt efter groupby

vi kan læse dette output som: den bootstrapped prøve n ren 0/14.999 består af 564 rækker, hvor 98 spillere stadig spiller på 7 dage med en ventetid på gate_30, mens 105 spillere stadig spiller på 7 dage med en ventetid på gate_40.

derefter bruger vi en statistisk egenskab af boostrap, der siger, at gennemsnittet af en bootstrap-prøve er en god estimator af det sande gennemsnit af en fordeling. Vi laver en gruppe af n_sample_2 og version for at have for hver unik prøve længde det gennemsnitlige antal spillerens tilbageholdelse på 7 dage pr porte som i figur 5.

Figur5. Gennemsnitligt antal spillere stadig spiller på 7 dage for hver unik prøve længde og PR gates

vi kan læse denne udgang som: når prøven har 200 rækker, er der i gennemsnit 34,60 spillere, der stadig spiller på 7 dage med ventetid på gate_30, mens 34,38 spillere, der stadig spiller på 7 dage med ventetid på gate_40.

så løsner vi databasen for at få datasættet i et klarere format som Figuren6.

figur 6. Unstacked version af datasættet

på dette stadium har vi alle de nødvendige oplysninger for at opbygge Bland-Altman plot og repræsentationen af datasættet er den samme som i Figuren2 ovenfor.

Bland-Altman-plottet er sammensat af 2-akse. Aksen er gennemsnittet af de to metoder, der skal sammenlignes. Så det er for hver række: (gate_30i + gate_40i) / 2 ||| Y-aksen er forskellen mellem metode A og metode B. Så det er for hver række: (gate_30i – gate_40i) ||| og her er det andet “smertepunkt”, vi har. Ved at holde Y-aksen som den er, vil stigningen i prøvernes størrelse øge forskellene variabilitet. Som et resultat vil den statistiske foranstaltning, vi opnår senere, blive overvægtet af de største prøver. For at omgå denne begrænsning repræsenterer vi Y-aksen i procent . For at gøre det er beregningen af y for hver række: ((gate_30i – gate_40i)*100 / ((gate_30i + gate_40i)/2) ||| datasættet ligner Figur7.

Figur 7. & Y-akse

vi er nødt til at kontrollere, at y-aksen er normalt fordelt for at stole på det konfidensinterval, der vises. Du kan vurdere det ved hjælp af Shapiro-vilk-testen eller i det mindste med et histogram. Hvis distributionen ikke er Normal, kan du foretage en transformation som logaritmisk transformation. I vores tilfælde betragter jeg distributionen som Normal.

Figur8. Histogram af Y-aksen

Bland-Altman er sammensat af 3 linjer (se Figur9):

  • gennemsnitsværdierne for y
  • y ‘s øvre grænse for konfidensintervallet (her ved 95% givet 1,96)
  • y’ s nedre grænse for konfidensintervallet (ved 95%)

figur 9. Værdier af Bland-Altman plot

vi sætter alle sammen, pakken pyCompare gør det muligt at tegne Bland-Altman plot på en meget nem måde uden at skulle bygge db:

det tager først metoden a (mesteren) og derefter metoden B (udfordreren). Så hvis procent = sand, vil den automatisk gøre den beregning, vi lavede ovenfor. Der er nogle andre parametre, vi vil diskutere senere.

sådan fortolkes Bland-Altman-plottet til A / B-testen

her er vi ! Her er figuren af Bland-Altman-plottet til A / B-testen genereret af koden ovenfor:

Figur10. Bland-Altman-plot ansøgte om A / B-test

først og fremmest er middelværdien og middelets konfidensinterval (Lyseblå stribe) anderledes end 0 (højere i vores tilfælde). Hvilket betyder, at niveauet for tilbageholdelse (navngivet bias i det originale papir) af gate_30 og gate_40 er væsentligt forskellige. På grund af det 2.93 > 0 betyder det, at a > B < — > Champion > Challenger og som et resultat, at en ventetid på gate_30 giver en større tilbageholdelse end en ventetid på gate_40.

de to laksebarer repræsenterer konfidensintervallet på 95% (navngivet aftalegrænse i det originale papir) og siger, at vi er overbeviste om, at 95% af værdierne vil være mellem . I vores eksempel er dette meget kraftigt, fordi vi kan sige, at tilbageholdelsen af gate_30 næsten altid vil være større end den af gate_40.

som du kan se, er der 2 værdier over den øverste laksestribe og 4 under den nederste, hvilket er 6/300 = 0,02 < 0.05 så på grund af at vi er sikre på, at 95% af værdierne er inden for de 2 grænser, kan 5% være over eller under, og i vores tilfælde repræsenterer det 2%, så er det helt normalt 😉

i pyCompare-pakken er der parametergrænsenaftale, der sigter mod at ændre grænserne for tillid. Her ville et relevant spørgsmål være: “ved hvilken procentdel kan jeg være sikker på, at tilbageholdelsen af gate_30 altid vil være større end den af gate_40 ?”For at besvare dette spørgsmål skal den laveste grænse være lig med 0, så vi er nødt til at finde den rigtige værdi for at have 0, som vi kan se i koden nedenfor, som giver Figuren11:

Figur 11. Output ved ændring af limitOfAgreement ‘ S parameter

vi ser, at når limitOfAgreement = 1,55, er grænsen næsten lig med 0. Så skal vi i Normalfordelingstabellen kontrollere værdien på 1.55, som er 0.9394, så vi er sikre på ((1-0.9394)*2)*100 = 87.88%, at tilbageholdelsen af gate_30 altid vil være større end den af gate_40

et sidste punkt at tilføje er, at uanset gennemsnitsværdien af prøven, er de ensartet repræsenteret på plottet, hvilket betyder, at den fortolkning, vi laver, er generaliseret, uanset størrelsen af prøven er. Faktisk hvis vi havde set en slags konisk repræsentation af værdierne, kunne vi have konkluderet, at størrelsen af prøven har indflydelse på resultaterne, så vi ikke kan have en gyldig fortolkning.

konklusion

vi så, hvorfor det kan være relevant at bruge Bland-Altman-plottet for at få en visning om resultaterne af en A/B-test på et simpelt plot, hvordan man opretter plottet fra en A/B-test og hvordan man fortolker det. Dette fungerer kun i tilfælde af normalitet af forskellen, men det vil være nødvendigt at transformere dataene.

desuden kontrollerede jeg appen, og portene ser ud til at være på gate_40, mens vi beviste, at tilbageholdelsen på 7 dage var bedre på 30. I dette tilfælde viser det, at tilbageholdelsen måske ikke er den bedste måling at følge i forhold til rentabiliteten !

D. G. Altman og J. M. Bland, måling i medicin: analysen af Metodesammenligningsundersøgelser, statistikeren 32 (1983) 307-317

https://projects.datacamp.com/projects/184 eller https://www.kaggle.com/yufengsui/mobile-games-ab-testing

D. G. Altman og J. M. Bland, statistiske metoder til vurdering af enighed mellem to metoder til klinisk måling, The Lancet 327 (1986) 307-310

D. Giavarina, forståelse kedelig Altman analyse, Biochemia Medica 25 (2015) 141-151

You might also like

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.