de ce să folosiți complotul Bland-Altman
complotul Bland-Altman provine din industria medicală pentru a compara măsura pentru două instrumente. Primul obiectiv al lui John Martin Bland & Douglas Altman a fost să răspundă la această întrebare :
sunt cele două metode de măsurare suficient de apropiate ? – D. G. ALTMAN și J. M. BLAND
dacă este cazul, înseamnă că dacă aveți două instrumente în care unul este stadiul tehnicii la un cost ridicat, iar al doilea este de 10 ori mai ieftin, rezultatele obținute prin metoda cea mai ieftină sunt comparabile cu referința și ar putea fi înlocuite cu o precizie suficientă? De exemplu, ritmul cardiac furnizat de un ceas conectat de 20 USD este suficient de precis ca urmare a unei electrocardiograme ? Al doilea obiectiv a fost de a produce o metodă în care rezultatele să fie ușor de înțeles pentru non-statisticieni.
în analiză, testarea A/B (cunoscută și sub numele de Champion-Challenger) este o metodologie comună de testare pentru a compara rezultatele unei noi acțiuni / a unui nou tratament / a unui nou design / … pe population_A la population_B având acțiunea actuală. Odată ce avem rezultatele testului, acestea trebuie analizate și prezentate unei echipe decizionale compuse în mare parte din non-statisticieni. Acesta este motivul pentru care complotul Bland-Altman este relevant, deoarece va compara rezultatele testului A/B pe un complot cu toate măsurile statistice afișate într-un mod ușor de înțeles.
în lucrarea lor, ei au arătat, de asemenea, de ce coeficientul de corelație, testul statistic al comparației medii și regresia sunt inadecvate pentru a decide cu privire la Acordul a două măsuri care ar fi în cazul nostru de testare A/B pentru a decide cu privire la puterea provocatorului în comparație cu cea a campionului.
datele utilizate
pentru acest articol voi folosi un set de date disponibil pe Kaggle (provenind dintr-un proiect DataCamp) numit „Mobile Games A/B Testing with Cookie Cats”. Link – ul se află în partea de referințe .
Cookie Cats este un popular joc de puzzle mobil în care, ca jucător, progresează nivelurile, va întâlni „porți” care îl vor forța să aștepte ceva timp înainte de a continua să joace sau să facă o achiziție. Într-o astfel de industrie, reținerea este una dintre valorile cheie, iar echipa responsabilă de joc ar vedea impactul dacă prima poartă ar fi mutată de la nivelul 30 la nivelul 40 asupra reținerii la 7 zile. Pentru a vedea comportamentul unei astfel de mișcări au făcut un test A/B și ne-au furnizat setul de date al acestor rezultate. Vom vedea cum complotul Bland-Altman va răspunde la următoarea întrebare : „Cum se analizează rezultatele A / B la nivelul de retenție la 7 zile când timpul de așteptare trece de la nivelul 30 la nivelul 40 ?”
setul de date este compus din 90.189 de rânduri în care avem id-ul unic al jucătorului, versiunea testului A/B (timpul de așteptare la gate_30 / gate_40), suma rundelor de joc, retention_1 este o zicală booleană dacă jucătorul s-a întors a doua zi și retention_7 este o zicală booleană dacă jucătorul s-a întors după 7 zile. Pentru a avea datele relevante pentru a răspunde la întrebarea noastră, este necesar să faceți o curățare. Voi păstra doar clientul având un retention_1 = True (pentru că dacă retention_1=False, retention_7 este fals, de asemenea), un număr de runde de joc 30 (pentru că dacă nu merg până la 30, nu vor fi afectate de poartă) și un număr de runde de joc < 170 (pentru că dacă luăm în considerare durata unui joc = 5 minute, dacă un jucător joacă 2 ore pe zi în timpul zilei 7 va juca 120*7/5 = 168 jocuri. Un număr mai mare ar fi considerat o utilizare anormală). După acest filtru, setul de date este compus din 20.471 rânduri ca Figure1 de mai jos. Mai mult, setul de date este la fel de echilibrat între gate_30 & gate_40.
cum se construiește complotul Bland-Altman
vom vedea în această secțiune cum să adaptăm complotul Bland-Altman original pentru a-l aplica la un test A/B. În primul rând , voi explica cum este construit complotul în versiunea sa originală și apoi voi explica cum să îl construim cu datele testelor noastre A/B.
datorită faptului că complotul original Bland-Altman compară măsurarea a 2 instrumente, acestea au aceeași lungime prin proiectare. De exemplu, cu măsurarea ritmului cardiac între $20 connect ceas și electrocardiograma, măsura sunt luate în același timp, cu aceleași condiții care conduc să aibă același număr de măsurare pentru 2 metode. Deci, putem reprezenta rândul fiecărui set de date ca o experiență ca pe exemplul din Figura2 de mai jos.
aici întâlnim primul „punct de durere”. Un test A / B este considerat o experiență unică, în timp ce, după cum vedem mai sus, avem nevoie de mai multe experiențe pentru a construi complotul. Pentru a ocoli această limitare vom crea din testul A / B mai multe probe bootstrapped având ambele aceeași & lungime diferită.
generăm 300 de numere întregi aleatorii non-unice între 200 și 1.000. Aceste numere întregi vor reprezenta lungimea fiecărui eșantion Bootstrap și pentru a beneficia de proprietățile statistice ale bootstrap, fiecare număr întreg aleatoriu non-unic este duplicat de 50 de ori. Aceste numere sunt utilizate pentru a avea o diversitate de eșantioane, dar este arbitrară, iar lungimea depinde de dimensiunea setului de date original. Aceste 15.000 (300*50) probe bootstrapped având o lungime cuprinsă între 200 și 2.000 sunt obținute printr-o prelevare aleatorie cu un înlocuitor din setul de date original și sunt concatenate împreună. Acesta poate fi reprezentat ca Figura3.
următorul cod creează setul de date bootstrapped din datele originale (fii atent, se poate nevoie de timp, deoarece setul de date bootstrapped are o lungime de 9.184.350 rânduri {prin schimbarea random_state, ne-ar avea în medie (((200+1.000)/2)*300*50 = 9.000.000 rânduri}).
apoi, grupăm după n_sample (id-ul fiecărui 15.000 eșantion bootstrapped), n_sample_2 (lungimea fiecărui eșantion bootstrapped) și versiune pentru a avea suma reținerii jucătorului la 7 zile pe porți ca în Figura 4.
putem citi această ieșire ca: eșantionul bootstrapped n 0/14.999 este compus din 564 de rânduri în care 98 de jucători joacă încă la 7 zile cu un timp de așteptare la gate_30, în timp ce 105 jucători joacă încă la 7 zile cu un timp de așteptare la gate_40.
apoi, folosim o proprietate statistică a boostrap spunând că media unui eșantion bootstrap este un bun estimator al adevăratei medii a unei distribuții. Facem un grup după n_sample_2 și versiune pentru a avea pentru lungimea fiecărui eșantion unic numărul mediu de păstrare a jucătorului la 7 zile pe porți ca în Figura 5.
putem citi această ieșire ca: când eșantionul are 200 de rânduri, există în medie 34,60 jucători care joacă încă la 7 zile cu un timp de așteptare la gate_30, în timp ce 34,38 jucători care joacă încă la 7 zile cu un timp de așteptare la gate_40.
apoi deblocăm baza de date pentru a avea setul de date într-un format mai clar ca Figura6.
în această etapă avem toate informațiile necesare pentru a construi parcela Bland-Altman și reprezentarea setului de date este aceeași ca în Figura2 de mai sus.
parcela Bland-Altman este compusă din 2 axe. Axa x este media celor două metode de comparat. Deci, este pentru fiecare rând: (gate_30i + gate_40i) / 2 ||| axa y este diferența dintre metoda a și metoda B. Deci este pentru fiecare rând: (gate_30i – gate_40i) ||| și aici este al doilea „punct de durere” pe care îl avem. Prin păstrarea axei y așa cum este, creșterea dimensiunii eșantioanelor va crește variabilitatea diferențelor. Drept urmare, măsura statistică pe care o vom obține ulterior va fi supra-ponderată de cele mai mari eșantioane. Pentru a ocoli această limitare, vom reprezenta axa y în procente . Pentru a face acest lucru, calculul y este pentru fiecare rând: ((gate_30i – gate_40i)*100 / (( gate_30i + gate_40i)/2) ||| setul de date arată ca Figure7.
trebuie să verificăm dacă axa y este distribuită în mod normal pentru a avea încredere în intervalul de încredere care va fi afișat. Puteți să o evaluați utilizând testul shapiro-wilk sau cel puțin cu o histogramă. Dacă distribuția nu este normală, atunci puteți face o transformare, cum ar fi transformarea logaritmică. În cazul nostru, consider că distribuția este normală.
Bland-Altman este compus din 3 linii (vezi Figura 9):
- valorile medii ale lui y
- limita superioară a intervalului de încredere a lui y (aici la 95% având în vedere 1,96)
- limita inferioară a intervalului de încredere a lui y (la 95%)
am pus toate împreună, pachetul pyCompare permite să atragă complot Bland-Altman pe un mod foarte ușor, fără a fi nevoie pentru a construi db:
este nevoie mai întâi de metoda A (campionul) și apoi de metoda B (challenger). Apoi, dacă procent = adevărat, va face automat calculul pe care l-am făcut mai sus. Există și alți parametri pe care îi vom discuta mai târziu.
cum se interpretează complotul Bland-Altman pentru testul A/B
Iată-ne ! Iată figura complotului Bland-Altman pentru testarea A/B generată de codul de mai sus:
în primul rând, media și intervalul de încredere al mediei (banda albastră deschisă) sunt diferite de 0 (mai mare în cazul nostru). Ceea ce înseamnă că nivelul de retenție (denumit bias în lucrarea originală) al gate_30 și gate_40 sunt semnificativ diferite. Datorită faptului că 2.93 > 0 înseamnă că a > B < — > campion > Challenger și ca urmare că o perioadă de așteptare pe gate_30 oferă o retenție mai mare decât o perioadă de așteptare pe gate_40.
cele două bare de somon reprezintă intervalul de încredere la 95% (numit limita de acord în lucrarea originală) spunând că suntem convinși că 95% din valori vor fi între . În exemplul nostru, acest lucru este foarte puternic, deoarece putem spune că reținerea gate_30 va fi aproape întotdeauna mai mare decât cea a gate_40.
după cum puteți vedea, există 2 valori deasupra benzii superioare de somon și 4 sub cea inferioară, care este 6/300 = 0,02 < 0.05 deci, datorită faptului că suntem siguri că 95% din valori sunt în limitele 2, 5% pot fi deasupra sau sub și în cazul nostru reprezintă 2% atunci este perfect normal 😉
în pachetul pyCompare există parametrul limitOfAgreement care își propune să schimbe limitele încrederii. Aici, o întrebare relevantă ar fi: „la ce procent pot fi sigur că reținerea gate_30 va fi întotdeauna mai mare decât cea a gate_40 ?”Pentru a răspunde la această întrebare, limita cea mai mică trebuie să fie egală cu 0, deci trebuie să găsim valoarea corectă pentru a avea 0 așa cum putem vedea în codul de mai jos care furnizează Figura11:
vedem că atunci când limitOfAgreement = 1.55, limita este aproape egală cu 0. Apoi trebuie să verificăm în tabelul normal de distribuție valoarea la 1.55 care este 0.9394, deci suntem siguri la ((1-0.9394)*2)*100 = 87.88% că reținerea gate_30 va fi întotdeauna mai mare decât cea a gate_40
un ultim punct de adăugat este că, indiferent de valoarea medie a eșantionului, acestea sunt reprezentate uniform pe complot, ceea ce înseamnă că interpretarea pe care o facem este generalizată indiferent de dimensiunea eșantionului. Într-adevăr, dacă am fi văzut un fel de reprezentare conică a valorilor, am fi putut concluziona că dimensiunea eșantionului are un impact asupra rezultatelor, astfel încât nu putem avea o interpretare validă.
concluzie
am văzut de ce poate fi relevant să folosiți complotul Bland-Altman pentru a avea o singură viziune despre rezultatele unui test A/B pe un complot simplu, cum să creați complotul dintr-un test A/B și cum să îl interpretați. Acest lucru funcționează numai în caz de normalitate a diferenței, însă va fi necesară transformarea datelor.
mai mult, am verificat aplicația și porțile pare să fie pe gate_40 în timp ce am dovedit că păstrarea la 7 zile a fost mai bună la 30. În acest caz, arată că reținerea nu este poate cea mai bună metrică de urmat în comparație cu rentabilitatea !
D. G. Altman și J. M. Bland, măsurarea în medicină: analiza studiilor de comparare a metodelor, statisticianul 32 (1983) 307-317
https://projects.datacamp.com/projects/184 OR https://www.kaggle.com/yufengsui/mobile-games-ab-testing
D. G. Altman și J. M. Bland, metode statistice pentru evaluarea Acordului între două metode de măsurare clinică, lanceta 327 (1986) 307-310
D. Giavarina, înțelegerea analizei bland Altman, Biochemia Medica 25 (2015) 141-151