Why & How to use the Bland-Altman plot for a | B testing / Python + code

Why use the Bland-Altman plot

the Bland-Altman plot comes from the medical industry in order to compare the measure for two instruments. John Martin Blandin & Douglas Altmanin ensimmäinen tavoite oli vastata tähän kysymykseen :

ovatko nämä kaksi mittausmenetelmää riittävän lähellä toisiaan ? – D. G. ALTMAN ja J. M. Mitäänsanomaton

jos näin on, se tarkoittaa sitä, että jos käytössä on kaksi välinettä, joissa toinen on huippumoderni kalliisti ja toinen 10 kertaa halvempi, ovatko halvimmalla menetelmällä saadut tulokset vertailtavissa referenssiin ja voidaanko se korvata riittävällä tarkkuudella? Onko esimerkiksi 20 dollarin kytketyn kellon tarjoama syke riittävän tarkka EKG: n perusteella ? Toinen tavoite oli tuottaa menetelmä, jossa tulokset ovat helposti ymmärrettävissä muille kuin tilastotieteilijöille.

analytiikassa A / B-testaus (tunnetaan myös nimellä Champion-Challenger) on yleinen Testimenetelmä, jolla verrataan uuden toiminnon / uuden hoidon / uuden suunnittelun / … tuloksia population_A: sta population_B: hen, jolla on nykyinen toiminto. Kun saamme testitulokset, ne on analysoitava ja esitettävä päättäjille, jotka koostuvat enimmäkseen muista kuin tilastotieteilijöistä. Siksi Bland-Altmanin juoni on merkityksellinen, koska siinä verrataan yhden tontin A/B-testin tuloksia kaikkiin ymmärrettävällä tavalla esitettyihin tilastollisiin mittoihin.

he osoittivat paperissaan myös, miksi korrelaatiokerroin, keskiarvovertailun tilastollinen testi ja regressio eivät ole soveliaita päättämään kahden toimenpiteen yksimielisyydestä, jotka meidän A/B-testijutussamme ratkaisisivat haastajan voiman Valioon verrattuna.

käytetyt tiedot

tässä artikkelissa käytän Kaggle-palvelussa saatavilla olevaa aineistoa (joka on peräisin DataCamp-projektista) nimeltä ”Mobile Games A/B Testing with Cookie Cats”. Linkki on referenssiosassa .

Cookie Cats on suosittu mobiili pulmapeli, jossa pelaajan edetessä tasoja hän kohtaa ”portteja”, jotka pakottavat hänet odottamaan jonkin aikaa ennen pelaamisen jatkamista tai ostoksen tekemistä. Tällaisessa teollisuudessa säilyttäminen on yksi tärkeimmistä mittareista ja joukkue vastuussa peli näkisi vaikutuksen, jos ensimmäinen portti siirrettiin tasolla 30 tasolle 40 säilyttämisen 7 päivää. Nähdäkseen tällaisen liikkeen käyttäytymisen he tekivät A / B-testin ja antoivat meille näiden tulosten aineiston. Saa nähdä, miten mitäänsanomaton Altmanin juoni vastaa seuraavaan kysymykseen : ”Miten analysoida A / B-tuloksia säilyttämisen tasolla 7 päivää, kun odotusaika siirtyy tasolta 30 tasolle 40 ?”

aineisto koostuu 90.189 rivistä, joissa on pelaajan yksilöllinen tunnus, A / B-testin versio (odotusaika gate_30 / gate_40), pelikierrosten summa, retention_1 on Boolen sanonta, Jos pelaaja tuli takaisin seuraavana päivänä ja retention_7 on Boolen sanonta, jos pelaaja tuli takaisin 7 päivän kuluttua. Jotta olisi tarvittavat tiedot vastata kysymykseemme, on tarpeen tehdä joitakin puhdistus. Pidän vain asiakkaan, jolla on retention_1 = True (koska jos retention_1=False, retention_7 on False samoin), useita pelikierroksia ≥ 30 (koska jos ne eivät mene ennen 30, ne eivät vaikuta portti) ja useita pelikierroksia < 170 (koska jos otamme huomioon kesto peli = 5 minuuttia, jos pelaaja pelaa 2 tuntia päivässä 7 päivän aikana hän pelaa 120*7/5 = 168 peliä. Suurempi luku katsottaisiin anormaaliksi käytöksi). Tämän suodattimen jälkeen aineisto koostuu 20.471 rivistä alla olevana Kuviona1. Lisäksi aineisto on yhtä tasapainossa gate_30 & gate_40.

Kuva1. CookieCats-aineisto

miten Bland-Altmanin tontti on rakennettu

tässä jaksossa nähdään, miten alkuperäistä Bland-Altmanin piirrettä voidaan mukauttaa A / B-testiin. Ensinnäkin aion selittää, miten tontti on rakennettu sen alkuperäisessä versiossa, ja sitten, selitän, miten rakentaa se meidän A/B testit’ tiedot.

koska alkuperäinen Bland-Altman-juoni vertailee kahden instrumentin mittoja, ne ovat rakenteeltaan samanpituisia. Esimerkiksi sykemittauksen välillä $20 connect watch ja EKG, toimenpide tehdään samaan aikaan samoilla ehdoilla, jotka johtavat on sama määrä mittaus 2 menetelmiä. Joten voimme edustaa kunkin aineiston rivin kokemuksena, kuten esimerkissä kuviossa 2 alla.

Kuva2. Instrumenttimitta per kokemus

tässä kohtaa kohdataan ensimmäinen ”kipupiste”. A / B-testiä pidetään ainutlaatuisena kokemuksena, kun taas kuten edellä näemme, tarvitsemme useita kokemuksia rakentaaksemme tontin. Tämän rajoituksen ohittamiseksi luomme A / B-testistä useita bootstrapattuja näytteitä, joilla molemmilla on sama & eri pituus.

luomme 300 Ei-ainutlaatuista satunnaislukua välillä 200-1 000. Nämä kokonaisluvut edustavat pituus kunkin bootstraped näyte ja hyödyksi bootstrap n tilastollisia ominaisuuksia, jokainen ei-ainutlaatuinen satunnainen kokonaisluku on päällekkäinen 50 kertaa. Näitä numeroita käytetään otoksen monimuotoisuuden saamiseksi, mutta se on mielivaltainen ja pituus riippuu alkuperäisen aineiston koosta. Nämä 15.000 (300*50) bootstraped näytteet, joiden pituus on välillä 200 ja 2.000 saadaan satunnaisotannalla korvaamalla alkuperäinen aineisto ja ne yhdistetään. Se voidaan esittää kuviona 3.

Kuva3. Bootstraped dataset building

seuraava koodi luo bootstraped datasetin alkuperäisestä datasta (ole varovainen, se voi viedä aikaa, koska bootstraped datasetin pituus on 9.184.350 riviä {muuttamalla random_state, meillä olisi keskimäärin (((200+1.000)/2)*300*50 = 9.000.000 rows}).

sitten, me ryhmä n_sample (id kunkin 15.000 bootstraped sample), n_sample_2 (pituus kunkin bootstraped sample) ja versio, jotta summa pelaajan säilyttäminen 7 päivää porttia kohti kuten kuvassa 4.

Kuva4. Bootstraped dataset jälkeen groupby

voimme lukea tämän tulosteen seuraavasti: bootstraped otos n°0/14.999 koostuu 564 rivistä, joissa 98 pelaajaa pelaa vielä 7 päivää odotusajan ollessa gate_30, kun taas 105 pelaajaa pelaa vielä 7 päivää odotusajan ollessa gate_40.

sitten käytetään boostrapin tilastollista ominaisuutta, jonka mukaan bootstrap-otoksen keskiarvo on hyvä estimaattori jakauman todellisesta keskiarvosta. Teemme ryhmän n_sample_2 ja versio, jotta on kunkin yksilöllisen näytteen pituus keskimäärin pelaajan säilyttäminen 7 päivää porttia kohti kuten kuvassa 5.

Kuva5. Keskimäärin pelaajia vielä pelaa 7 päivää kunkin yksilöllisen näytteen pituus ja porttia kohti

voimme lukea tämän tuotoksen: kun otoksessa on 200 riviä, on keskimäärin 34.60 pelaajaa, jotka pelaavat vielä 7 päivää odotusajalla gate_30: ssä, kun taas 34.38 pelaajaa, jotka pelaavat vielä 7 päivää odotusajalla gate_40: ssä.

sitten puramme tietokannan saadaksemme aineiston selkeämpään muotoon kuin Kuvio6.

kuva6. Aineistosta

tässä vaiheessa meillä on kaikki tarvittavat tiedot Bland-Altmanin tontin rakentamiseen ja aineiston esitys on sama kuin yllä olevassa Kuviossa2.

Bland-Altmanin juoni koostuu 2-akselisesta. X-akseli on kahden vertailutavan keskiarvo. Joten se on jokaiselle riville: (gate_30i + gate_40i) / 2 ||| y-akseli on menetelmän A ja menetelmän B erotus, joten se on jokaiselle riville: (gate_30i-gate_40i) | | ja tässä on toinen ”kipupiste”, joka meillä on. Pitämällä y-akselin sellaisena kuin se on, näytteiden koon kasvu lisää eroja. Tämän seurauksena suurimmat otokset ylipainottavat myöhemmin saamamme tilastollisen mittarin. Tämän rajoituksen ohittamiseksi edustamme Y-akselia prosentteina . Voit tehdä sen, laskeminen y on jokaiselle riville: ((gate_30i – gate_40i)*100 / ((gate_30i + gate_40i)/2) ||| tietokokonaisuus näyttää kuviolta 7.

Kuva7. x & y-akseli

on tarkistettava, että Y-akseli on normaalisti jakautunut, jotta voidaan luottaa näytettävään luottamusväliin. Sitä voi arvioida shapiro-Wilkin testillä tai ainakin histogrammilla. Jos jakauma ei ole normaali, voidaan tehdä esimerkiksi logaritminen muunnos. Meidän tapauksessamme pidän jakautumista normaalina.

Kuva8. Y-akselin histogrammi

Bland-Altman koostuu 3 viivasta (KS. Kuva9):

  • Y: n keskiarvot
  • Y: n luottamusvälin yläraja (tässä 95%, kun otetaan huomioon 1, 96)
  • Y: n luottamusvälin alaraja (at 95%)

Kuva9. Bland-Altmanin tontin arvot

kokoamme yhteen, paketti pyCompare mahdollistaa Bland-Altmanin tontin piirtämisen erittäin helpolla tavalla ilman dB: n rakentamista:

siihen tarvitaan ensin menetelmä A (mestari) ja sitten menetelmä B (haastaja). Sitten, jos prosenttiosuus = totta, se automaattisesti tehdä calculus teimme edellä. On joitakin muita parametreja, joista keskustelemme myöhemmin.

miten tulkitaan Bland-Altmanin juoni A / B-testiin

Here we are ! Tässä on Bland-Altmanin tontin luku A / B-testaukseen, joka syntyy yllä olevasta koodista:

Kuva10. Bland-Altmanin juoni haettu A / B-testiin

ensinnäkin keskiarvo ja keskiarvon luottamusväli (Vaaleansininen raita) ovat erilaiset kuin 0 (korkeampi meidän tapauksessamme). Mikä tarkoittaa, että gate_30: n ja gate_40: n retention taso (alkuperäispaperissa nimetty bias) on merkittävästi erilainen. Koska 2,93 > 0 se tarkoittaa, että > B < — > mestari > haastaja ja näin ollen odotusaika gate_30 tarjoaa suuremman säilyvyyden kuin odotusaika gate_40.

kahden lohipatukan luottamusväli on 95 prosenttia (alkuperäisessä asiakirjassa mainittu yhtymäraja), joten olemme vakuuttuneita siitä, että 95 prosenttia arvoista on niiden välillä . Esimerkeissämme tämä on hyvin voimakasta, koska voimme sanoa, että gate_30: n retentio on lähes aina suurempi kuin gate_40: n.

kuten näette, ylimmän lohijuovan yläpuolella on 2 arvoa ja alimman alapuolella 4, Mikä on 6/300 = 0, 02 < 0.05 joten koska olemme varmoja, että 95% arvoista on 2 rajojen sisällä, 5% voi olla yli tai alle ja meidän tapauksessamme se on 2% niin se on täysin normaalia 😉

pyCompare-paketissa on parametriraja, joka pyrkii muuttamaan luottamuksen rajoja. Tässä relevantti kysymys olisi: ”millä prosentilla voin olla varma, että gate_30: n retentio on aina suurempi kuin gate_40: n ?”Vastata tähän kysymykseen, alin raja on oltava yhtä suuri kuin 0, joten meidän on löydettävä oikea arvo, jotta on 0, kuten voimme nähdä koodin alla, joka antaa Kuvion11:

Kuva11. Tuotos kun muutetaan limitofagreementin parametria

näemme, että kun limitOfAgreement = 1,55, raja on lähes yhtä suuri kuin 0. Sitten meidän täytyy tarkistaa Normaalijakelutaulukossa arvo 1,55, joka on 0,9394, joten olemme varmoja ((1-0.9394)*2)*100 = 87.88%, että gate_30: n retentio on aina suurempi kuin gate_40

viimeinen asia, joka on lisättävä on, että riippumatta otoksen keskiarvosta, ne ovat tasaisesti edustettuina kuviolla, mikä tarkoittaa, että tekemämme tulkinta on yleistetty riippumatta otoksen koosta. Itse asiassa, jos olisimme nähneet eräänlainen conic edustus arvot olisimme voineet päätellä, että koko otoksen on vaikutusta tuloksiin, joten meillä ei voi olla pätevä tulkinta.

johtopäätös

näimme, miksi Bland-Altmanin juonen käyttäminen voi olla relevanttia, jotta olisi yksi näkemys yksinkertaisen juonen A/B-testin tuloksista, miten juoni luodaan A / B-testistä ja miten sitä tulkitaan. Tämä toimii vain siinä tapauksessa normaalius ero kuitenkin on tarpeen muuttaa tietoja.

lisäksi tarkistin sovelluksen ja portit näyttävät olevan gate_40: ssä, kun taas todistimme, että säilyvyys 7 päivässä oli parempi 30: ssä. Tässä tapauksessa se osoittaa, että omavastuu ei ehkä ole paras mittari seurata verrattuna kannattavuuteen !

D. G. Altman and J. M. Bland, Measurement in Medicine: the Analysis of Method Comparison Studies, The Statistician 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, understand Bland Altman analysis, Biochemia Medica 25 (2015) 141-151

You might also like

Vastaa

Sähköpostiosoitettasi ei julkaista.