Cum folosim lanțurile Markov în evaluarea soluțiilor și găsirea erorilor. Cu un script Python

Este important pentru noi să înțelegem ce se întâmplă cu studenții noștri în timpul instruirii și modul în care aceste evenimente afectează rezultatul, așa că construim o Hartă a călătoriei clienților - o hartă a experienței clienților. La urma urmei, procesul de învățare nu este ceva continuu și integral, este un lanț de evenimente și acțiuni interconectate ale elevului, iar aceste acțiuni pot varia foarte mult între diferiți elevi. Acum și-a încheiat lecția: ce va face în continuare? Va merge la teme? Va lansa o aplicație mobilă? Va schimba cursul, va cere schimbarea profesorilor? Vei merge direct la următoarea lecție? Sau va pleca pur și simplu dezamăgit? Este posibil, prin analiza acestei hărți, să se identifice tipare care duc la finalizarea cu succes a cursului sau, dimpotrivă, la „abandonul” studentului?

Cum folosim lanțurile Markov în evaluarea soluțiilor și găsirea erorilor. Cu un script Python

În mod obișnuit, pentru a construi CJM sunt folosite instrumente specializate, foarte scumpe, cu sursă închisă. Dar am vrut să venim cu ceva simplu, care necesită un efort minim și, dacă este posibil, open source. Așa că a venit ideea de a folosi lanțuri Markov - și am reușit. Am construit o hartă, am interpretat datele despre comportamentul elevilor sub forma unui grafic, am văzut răspunsuri complet neevidente la problemele de afaceri globale și chiar am găsit erori profund ascunse. Am făcut toate acestea folosind soluții de script Python open source. În acest articol voi vorbi despre două cazuri cu acele rezultate foarte neevidente și voi împărtăși scenariul tuturor.

Deci, lanțurile Markov arată probabilitatea tranzițiilor între evenimente. Iată un exemplu primitiv de pe Wikipedia:

Cum folosim lanțurile Markov în evaluarea soluțiilor și găsirea erorilor. Cu un script Python

Aici „E” și „A” sunt evenimente, săgețile sunt tranziții între ele (inclusiv tranziția de la un eveniment la același), iar ponderile săgeților sunt probabilitatea de tranziție („grafic ponderat direcționat”).

Ce ai folosit?

Circuitul a fost antrenat cu funcționalitatea standard Python, care a fost alimentată cu jurnalele de activitate ale elevilor. Graficul de pe matricea rezultată a fost construit de biblioteca NetworkX.

Jurnalul arată astfel:

Cum folosim lanțurile Markov în evaluarea soluțiilor și găsirea erorilor. Cu un script Python

Acesta este un fișier csv care conține un tabel de trei coloane: id-ul studentului, numele evenimentului, ora la care a avut loc. Aceste trei câmpuri sunt suficiente pentru a urmări mișcările clientului, pentru a construi o hartă și, în cele din urmă, pentru a obține un lanț Markov.

Biblioteca returnează graficele construite în format .dot sau .gexf. Pentru a vizualiza primul, puteți folosi pachetul gratuit Graphviz (instrumentul gvedit), am lucrat cu .gexf și Gephi, de asemenea gratuit.

În continuare, aș dori să dau două exemple de utilizare a lanțurilor Markov, care ne-au permis să aruncăm o privire nouă asupra obiectivelor noastre, proceselor educaționale și ecosistemului Skyeng însuși. Ei bine, remediați erorile.

Primul caz: aplicație mobilă

Pentru început, am explorat călătoria studenților prin cel mai popular produs al nostru - cursul General. În acel moment, lucram în departamentul pentru copii din Skyeng și am vrut să vedem cât de eficient funcționează aplicația mobilă cu publicul copiilor noștri.

Luând jurnalele și rulându-le prin script, am primit ceva de genul acesta:

Cum folosim lanțurile Markov în evaluarea soluțiilor și găsirea erorilor. Cu un script Python

Nodul de pornire este Start General, iar în partea de jos există trei noduri de ieșire: studentul „a adormit”, a schimbat cursul și a terminat cursul.

  • A adormit, „A adormit” - asta înseamnă că nu mai ia cursuri, cel mai probabil a căzut. Numim optimist această stare „adormit”, pentru că... teoretic mai are ocazia să-și continue studiile. Cel mai prost rezultat pentru noi.
  • Am renunțat la general, s-a schimbat cursul - am trecut de la General la altceva și ne-am pierdut pentru lanțul nostru Markov.
  • Curs terminat, Curs terminat - stare ideală, persoana a parcurs 80% din lecții (nu sunt necesare toate lecțiile).

A intra în nodul cursului de succes înseamnă a finaliza cu succes lecția de pe platforma noastră împreună cu profesorul. Înregistrează progresul de-a lungul cursului și abordarea către rezultatul dorit - „Cursul finalizat”. Este important pentru noi ca elevii să participe cât mai mult posibil.

Pentru a obține concluzii cantitative mai precise pentru aplicația mobilă (nodul de sesiune de aplicație), am construit lanțuri separate pentru fiecare dintre nodurile finale și apoi am comparat greutățile marginilor perechi:

  • din sesiunea aplicației înapoi la ea;
  • de la sesiune de aplicație la curs de succes;
  • de la clasă reușită la sesiune de aplicație.

Cum folosim lanțurile Markov în evaluarea soluțiilor și găsirea erorilor. Cu un script Python
În stânga sunt studenții care au finalizat cursul, în dreapta sunt cei care „au adormit”

Aceste trei margini arată relația dintre succesul unui student și utilizarea de către acesta a aplicației mobile. Ne așteptam să vedem că studenții care au finalizat cursul vor avea o conexiune mai puternică cu aplicația decât studenții care au adormit. Cu toate acestea, în realitate, am obținut exact rezultate opuse:

  • ne-am asigurat că diferite grupuri de utilizatori interacționează diferit cu aplicația mobilă;
  • studenții de succes folosesc aplicația mobilă mai puțin intens;
  • elevii care adorm folosesc aplicația mobilă mai activ.

Asta înseamnă că elevii care adorm încep să petreacă din ce în ce mai mult timp în aplicația mobilă și, în final, rămân în ea pentru totdeauna.

Cum folosim lanțurile Markov în evaluarea soluțiilor și găsirea erorilor. Cu un script Python

La început am fost surprinși, dar după ce ne-am gândit, ne-am dat seama că acesta a fost un efect complet natural. La un moment dat, am studiat franceza pe cont propriu folosind două instrumente: o aplicație mobilă și cursuri de gramatică pe YouTube. La început, am împărțit timpul între ei într-un raport de 50 la 50. Dar aplicația este mai distractivă, există gamification, totul este simplu, rapid și clar, dar în prelegere trebuie să te aprofundezi, să scrii ceva. , exersează într-un caiet. Treptat, am început să petrec mai mult timp pe smartphone, până când ponderea sa a crescut la 100%: dacă petreci trei ore pe el, creezi un fals sentiment de muncă terminată, din cauza căruia nu ai chef să mergi să asculți nimic. .

Dar cum poate fi asta? La urma urmei, am creat special o aplicație mobilă, a construit în el curba Ebbinghaus, l-a gamificat, l-a făcut atractiv pentru ca oamenii să petreacă timpul în ea, dar se dovedește că doar le distrage atenția? De fapt, motivul este că echipa de aplicații mobile și-a făcut față prea bine sarcinilor, drept urmare a devenit un produs cool, autosuficient și a început să cadă din ecosistemul nostru.

Ca rezultat al cercetării, a devenit clar că aplicația mobilă trebuia schimbată într-un fel, astfel încât să distragă mai puțin atenția de la cursul principal de studiu. Și atât copiii, cât și adulții. Această lucrare este în prezent în desfășurare.

Al doilea caz: erori la bord

Incorporarea este o procedură suplimentară opțională la înregistrarea unui nou student, eliminând potențialele probleme tehnice în viitor. Scenariul de bază presupune că o persoană s-a înregistrat pe pagina de destinație, a obținut acces la contul personal, este contactată și i se ia o lecție introductivă. În același timp, observăm un procent mare de dificultăți tehnice în timpul lecției introductive: versiunea greșită a browserului, microfonul sau sunetul nu funcționează, profesorul nu poate sugera imediat o soluție și toate acestea sunt deosebit de dificile atunci când vine vorba de la copii. Prin urmare, am dezvoltat o aplicație suplimentară în contul dvs. personal, în care puteți parcurge patru pași simpli: verificați browserul, camera, microfonul și confirmați că părinții vor fi în apropiere în timpul lecției introductive (la urma urmei, ei sunt cei care plătesc pentru educația copiilor lor).

Aceste câteva pagini de înscriere au arătat o pâlnie ca aceasta:

Cum folosim lanțurile Markov în evaluarea soluțiilor și găsirea erorilor. Cu un script Python
1: bloc de pornire cu trei formulare de autentificare și introducere a parolei ușor diferite (în funcție de client).
2: caseta de selectare pentru a fi de acord cu procedura suplimentară de îmbarcare.
2.1-2.3: Verificați prezența părintelui, versiunea Chrome și sunetul.
3: bloc final.

Pare foarte firesc: în primii doi pași, cei mai mulți dintre vizitatori pleacă, realizând că e ceva de completat, verificat, dar nu mai este timp. Dacă clientul a ajuns la a treia etapă, atunci aproape sigur va ajunge în finală. Nu există un singur motiv pentru a suspecta ceva pe pâlnie.

Cu toate acestea, am decis să analizăm integrarea noastră nu pe o pâlnie unidimensională clasică, ci folosind un lanț Markov. Am activat puțin mai multe evenimente, am rulat scriptul și am primit asta:

Cum folosim lanțurile Markov în evaluarea soluțiilor și găsirea erorilor. Cu un script Python

În acest haos, un singur lucru poate fi înțeles clar: ceva a mers prost. Procesul de onboarding este liniar, acesta este inerent designului, nu ar trebui să existe o astfel de rețea de conexiuni în el. Și aici este imediat clar că utilizatorul este aruncat între pași, între care nu ar trebui să existe deloc tranziții.

Cum folosim lanțurile Markov în evaluarea soluțiilor și găsirea erorilor. Cu un script Python

Pot exista două motive pentru această imagine ciudată:

  • bancuri s-au strecurat în baza de date de jurnal;
  • Există greșeli în produsul în sine - onboarding.

Primul motiv este cel mai probabil adevărat, dar testarea acestuia necesită destul de multă muncă, iar corectarea jurnalelor nu va ajuta la îmbunătățirea UX. Dar cu al doilea, dacă există, trebuia făcut ceva urgent. Prin urmare, am mers să privim nodurile, să identificăm marginile care nu ar trebui să existe și să căutăm motivele apariției lor. Am văzut că unii utilizatori s-au blocat și au umblat în cerc, alții au căzut de la mijloc până la început, iar alții, în principiu, nu au putut să iasă din primii doi pași. Am transferat datele către QA - și da, s-a dovedit că au existat suficiente erori în onboarding: acesta este un astfel de produs secundar, un pic de cârjă, nu a fost testat suficient de profund, pentru că... Nu ne așteptam la nicio problemă. Acum întregul proces de înregistrare s-a schimbat.

Această poveste ne-a arătat o aplicare neașteptată a lanțurilor Markov în domeniul QA.

Incearca-l tu insuti!

eu l-am postat pe al meu Script Python pentru antrenarea lanțurilor Markov în domeniul public - folosește-l pentru sănătatea ta. Documentație pe GitHub, întrebările se pot pune aici, voi încerca să răspund la toate.

Ei bine, linkuri utile: Biblioteca NetworkX, Vizualizator Graphviz. Si aici există un articol despre Habré despre lanțurile Markov. Graficele din articol sunt realizate folosind Gefi.

Sursa: www.habr.com

Adauga un comentariu