IT Industrija

🔥 Najčitanije
🔥 Najčitanije
Nenad Živić, data scientist u Nordeusu, piše o procesu optimizacije A/B testiranja u razvoju dizajna igre.
A/B testiranje u poslednjih nekoliko godina igra izuzetno važnu ulogu u gejming industriji, posebno nakon popularizacije free to play modela.
Ovo je metod koji se koristi kada niste sigurni o potencijalu i vrednosti novog ili redizajniranog dela igre. Štaviše, A/B testiranje je zastupljeno i u drugim oblastima — na komercijalnim sajtovima i društvenim mrežama, između ostalih.
To je praktično primenjeno statističko testiranje — ništa više od toga. Ključna reč ovde je primenjeno. Umetnost valjanog korišćenja A/B testiranja leži u njihovoj savršenoj implementaciji, a kao što ćemo pisati kasnije u članku, ovo nije lako kao što zvuči.
Zapravo, o tome i jeste članak — pametnim trikovima i metodama koji će otključati pun potencijal vašeg A/B testiranja.
A/B testovi su popularni jer rešavaju dileme na najbolji mogući način — objektivno. Implementiraj ideju i probaj je, ništa nije bolje to toga. Ako su dobro obavljeni, pomoći će vam da donesete dobre objektivne odluke koje mogu voditi boljoj igri koja će više i zaraditi.
To znači da će svi biti zadovoljni, zar ne?
I blagoslov i kletva A/B testiranja je u tome što mnogi imaju interesa da ga koriste.
Dizajneri igara veruju da će im A/B testiranje dati odgovor na dilemu o samom dizajnu — podešavanje parametara progresije u igri, cene novih ili redizajniranih elemenata, UX odluke — ne postoji nešto što A/B testiranje ne može da sredi.
Marketari žele da optimizuju svoje kampanje; žele da znaju koje kampanje će im doneti najviše vrednosti, najjeftinije korisnike ili korisnike koji najviše plaćaju. U biznisu i menadžmentu projekata teži se unapređenju metrika zarade. Svi oni žele da među svojim oružjem imaju A/B testove.
Na prvi pogled, radi se o relativno jednostavnom procesu. Možemo ga podeliti u pet faza:
Statistički šum
Statistički šum je dobro poznati neprijatelj data scientista. Po Marfijevom zakonu, visoke varijacije metrika igre uglavnom su baš one koje nas najviše zanimaju. Ovo čini naše živote težim, a naše algoritme uzorkovanja još važnijim.
Ravnopravnost u PVP igrama
Sa druge strane, statistička buka nije nešto što veliki uzorak ne može da reši. Ako imate sajt sa milionima poseta svakog dana, statistika će obaviti svoj posao i rešiti probleme sa šumom. U takvoj situaciji, milioni korisnika znače milione eksperimentalnih jedinica — svaki posetilac je nezavistan i može mu se zadati grupa bez obraćanja pažnje na ostale korisnike.
Nažalost, ako ste ponosni developeri jedne PVP igre, trebalo bi da vas brine još nešto — ravnopravnost. Naime, vaš primarni fokus bi trebalo da bude to da su ljudi koji se takmiče u online PVP okruženju izloženi istim uslovima, posebno ako ne govorimo o malim razlikama u UX-u.
Vrlo aktivan korisnik bi bio jako ljut da vidi da je njegovim protivnicima potrebno manje treninga za dostizanje trening bonusa u Top Elevenu. Ne bi bio ni previše oduševljen nefer cenama Scout igrača.
Sada, ovo poimanje ravnopravnosti prirodno razdvaja vašu bazu igrača, bez obzira koliko je velika, na manje delove. U daljem tekstu zvaćemo ih serverima.
Server = {Skup ljudi koji mogu da igraju jedni protiv drugih u online PVP okruženju}
Server može, a i ne mora biti fizički server. Može biti nivo u igri, zemlja, neka druga razdvajajuća osobina, ili fizički server. Ovo praktično znači da ne radimo sa milionima eksperimentalnih jedinica — već stotinama. Ovo dalje znači da moramo biti izuzetno, izuzetno pažljivi sa algoritmom za uzorkovanje ako ne želimo da nam test grupe budu različite čak i pre izlaganja A/B testu.
Naš zadatak je da uzorkujemo populaciju servera, čiji red veličine se broji stotinama, na takav način da su naše grupe servera vrlo slične pre objavljivanja testa. Za potrebe primera (i snažnim korenima u stvarnosti), recimo da gledamo ka ARPDAU (Average Revenue Per Daily Active Users) kao glavnoj metrici.
Počeli smo sa tradicionalnim nasumičnim uzorkovanjem, ali je bilo očigledno da sa ovako malom populacijom, ono neće raditi.
Prva ideja za unapređenje ovoga bila je da pokušamo sa stratifikovanim random uzorkovanjem, gde razdvajamo servere u one sa niskim ARPDAU, srednjim ARPDAU i visokim ARPDAU, i uzorkujemo nezavisno iz te tri grupe.
Kao što je očekivano, bilo je malo bolje, ali i dalje, ni blizu zadovoljavajućem. Morali smo ovo da ponavljamo i vizuelno istražujemo sličnosti grupa – nepraktično i dosadno.
Nastavili smo dalje, tražeći bolje rešenje. Ponovo, za potrebe primera, recimo da želimo da uzorkujemo dve grupe deset servera za A/B testiranje. Naša naredna ideja je da uzorkujemo parove servera na sledeći način:
Ovo bi trebalo da radi na osnovu zapažanja da ako su svi parovi jako slični, dve grupe ovako kreirane trebalo bi da budu slične. Ovo dobro radi kada radimo samo sa jednom metrikom.
Šta se dešava ako želimo da pratimo više od jedne izlazne metrike — recimo njih pet (što je veoma realistično)? Zbog kletve dimenzionalnosti, postaje sve teže pronaći parove izuzetno sličnih servera u populaciji stotina. Moramo pronaći bolji način da poništimo ove razlike tako što ćemo uzorkovati na pametan način.
Ideja je bila da odustanemo od random uzorkovanja i počnemo da optimizujemo. Zašto ne bismo kreirali najsličnije moguće grupe? Bukvalno!
Bez nasumičnog uzorkovanja — odaberimo ih optimalno. Imamo pristup podacima iz prošlosti. Za svaku odabranu metriku, svaki server, svaki dan, imamo vrednost i možemo te podatke koristiti da odaberemo grupe sa najmanje razlika.
Drugim rečima, možemo rešiti problem optimizacije korišćenjem cost funkcije koja kažnjava sve razlike između grupa. Ovu optimalnu tačku pronalazimo korišćenjem izuzetno jednostavnog algoritma za optimizaciju.
Definisanje cost funkcije
Definisali smo cost funkciju u — za one koji se poznaju mašinsko učenje — prirodnom, L2 maniru. Penalizujemo kvadratnu razliku između grupa za svaku metriku i za svaki dan prošlih podataka. Na ovaj način i uspomoć procedure za optimizaciju, pokušaćemo da pronađemo optimalne grupe.
Cost funkciju definišemo na sledeći način:
M je set svih KPI koji nas interesuju, D je set svih istorijskih podataka na kojima optimizujemo grupe, lambde su težine važnosti koje koristimo da oslovimo važnost optimizacije za svaku pojedinu metriku, a X označavaju istorijske vrednosti željenih metrika za određeni dan.
Cost funkcija se može minimizovati na mnogo načina. Predstaviću vam jednostavnu proceduru prvo, a potom ćemo diskutovati moguća poboljšanja ove ideje. Pohlepan (Greedy) pristup radi ovako:
Predstavljen je primer sa dve grupe, ali se procedura trivijalno može primeniti i na više od dve test grupe. Jedna iteracija je grafički predstavljena ovde:
Moguće popravke tehnike za optimizaciju:
Kako smo evaluirali?
Sad kada imamo ceo algoritam za dodeljivanja servera grupama, spremni smo da obavimo test i evaluiramo kvalitet novog načina uzorkovanja. Da li je procedura bolja od jednostavnog stratifikovanog random uzorkovanja? Ako jeste, koliko? Da li vredi truda?
Ovo evaluiramo koristeći A/A test. Dve grupe moraju biti gotovo jednake po prošlim podacima jer optimizujemo na osnovu njih.
Neformalno, njihove linije na grafiku moraju se skoro potpuno podudarati pre pokretanja testa. Štaviše, moramo proveriti da li su slične tokom A/A testiranja i koliko dugo. To će nam dati informacije o nivou poverenja koji možemo imati u algoritam za selekciju grupa.
Idealno, želeli bismo da grupe ostanu slične dugo vremena nakon uzorkovanja. To bi značilo da nema prepreka u A/B testiranju različitih grupa.
Grafici ispod pokazuju A/A test na dvema grupama optimizovanim na dva meseca podataka iz prošlosti.
Na sledećem grafiku možete videti kako izgleda A/A test sa stratifikovanom random uzorkovanjem. Varijacija je jako velika, a i srednje vrednosti grupa se razlikuju. Ovo značajno ometa analizu testa.
Na grafiku ispod vidite grupe koje smo oformili novim algoritmom. Može se videti koliko su slične grupe na istorijskim podacima na kojima smo optimizovali.
To bi se i očekivalo. Šta je još više kul jeste da grupe ostaju slične nedeljama nakon što smo ih odabrali. To praktično znači da ako primetimo razlike nakon pokretanja testa, možemo biti sigurni da je razlika posledica novih modifikacija igre, a ne statističkog šuma ili sistematske razlike koja je postojala pre A/B testa.
A/B testiranje je sjajan alat za objektivno rešavanje dilema u dizajnu igara i povećavanja playtime-a ili zarade, i na kraju krajeva, stvaranja bolje igre.
Zahtevi A/B testiranja znače da će korisnici biti izloženi različitim setovima kriterijuma. Ipak, ako je vaša igra online PVP, tada je posebno važno biti fer.
Neuspeh u ovome rezultiraće u neravnopravnosti, i integritet vaše igre će biti narušen. Ako vrednujete svoje igrače više od svega drugog, taj integritet je nešto što nikada ne treba shvatiti olako.
U članku sam vam predstavio algoritam kojim biramo test grupe na najbolji mogući način, kako bismo analizu učinili što jednostavnijom i kako bi nam rezultati bili što statistički značajniji. Nadam se da će vam to pomoći da unapredite svoje A/B testove u budućnosti.
Tekst je uz odobrenje autora preveden i uređen za potrebe Startita. Originalni tekst možete pronaći na blogu kompanije Nordeus, ovde.
Nordeus nudi tromesečnu plaćenu praksu za poziciju Backend Developera.
Objavio/la članak.
utorak, 9. Avgust, 2016.