Come utilizziamo le catene di Markov per valutare soluzioni e individuare bug. Con uno script Python

Per noi è importante capire cosa succede ai nostri studenti durante la formazione e come questi eventi influenzano il risultato, per questo costruiamo una Customer Journey Map, una mappa dell'esperienza del cliente. Dopotutto, il processo di apprendimento non è qualcosa di continuo e integrale, è una catena di eventi e azioni interconnesse dello studente, e queste azioni possono variare notevolmente tra i diversi studenti. Ora ha terminato la lezione: cosa farà dopo? Andrà a fare i compiti? Lancerà un'applicazione mobile? Cambierà corso, chiederà di cambiare insegnanti? Andrai direttamente alla prossima lezione? Oppure se ne andrà semplicemente deluso? È possibile, analizzando questa mappa, identificare modelli che portano al completamento con successo del corso o, al contrario, al “abbandono” dello studente?

Come utilizziamo le catene di Markov per valutare soluzioni e individuare bug. Con uno script Python

In genere, per creare CJM vengono utilizzati strumenti closed source specializzati e molto costosi. Ma volevamo realizzare qualcosa di semplice, che richiedesse il minimo sforzo e, se possibile, open source. Così è nata l'idea di utilizzare le catene di Markov e ci siamo riusciti. Abbiamo costruito una mappa, interpretato i dati sul comportamento degli studenti sotto forma di grafico, visto risposte completamente non ovvie a problemi aziendali globali e persino trovato bug profondamente nascosti. Abbiamo fatto tutto questo utilizzando soluzioni di script Python open source. In questo articolo parlerò di due casi con risultati molto non ovvi e condividerò lo script con tutti.

Quindi, le catene di Markov mostrano la probabilità di transizioni tra eventi. Ecco un esempio primitivo da Wikipedia:

Come utilizziamo le catene di Markov per valutare soluzioni e individuare bug. Con uno script Python

Qui “E” e “A” sono eventi, le frecce sono transizioni tra di loro (inclusa la transizione da un evento allo stesso), e i pesi delle frecce sono la probabilità di transizione (“grafico diretto ponderato”).

Cosa hai usato?

Il circuito è stato addestrato con funzionalità Python standard, alimentate con i registri delle attività degli studenti. Il grafico sulla matrice risultante è stato costruito dalla libreria NetworkX.

Il registro è simile al seguente:

Come utilizziamo le catene di Markov per valutare soluzioni e individuare bug. Con uno script Python

Questo è un file csv contenente una tabella di tre colonne: ID studente, nome dell'evento, ora in cui si è verificato. Questi tre campi sono sufficienti per tracciare i movimenti del cliente, costruire una mappa e infine ottenere una catena di Markov.

La libreria restituisce i grafici costruiti in formato .dot o .gexf. Per visualizzare il primo è possibile utilizzare il pacchetto gratuito Graphviz (strumento gvedit), abbiamo lavorato con .gexf e Gephi, anch'essi gratuiti.

Successivamente vorrei fornire due esempi di utilizzo delle catene di Markov, che ci hanno permesso di dare uno sguardo nuovo ai nostri obiettivi, ai processi educativi e allo stesso ecosistema Skyeng. Bene, correggi i bug.

Primo caso: applicazione mobile

Per cominciare, abbiamo esplorato il viaggio degli studenti attraverso il nostro prodotto più popolare: il corso Generale. In quel momento lavoravo nel dipartimento infantile di Skyeng e volevamo vedere quanto efficacemente l'applicazione mobile funzionasse con il pubblico dei nostri bambini.

Prendendo i log ed eseguendoli attraverso lo script, ho ottenuto qualcosa del genere:

Come utilizziamo le catene di Markov per valutare soluzioni e individuare bug. Con uno script Python

Il nodo di partenza è Inizio Generale, e in basso ci sono tre nodi di output: lo studente “si è addormentato”, ha cambiato corso e ha finito il corso.

  • Mi sono addormentato, "Mi sono addormentato" - questo significa che non frequenta più le lezioni, molto probabilmente è caduto. Chiamiamo ottimisticamente questo stato “addormentato”, perché... in teoria ha ancora la possibilità di proseguire gli studi. Il risultato peggiore per noi.
  • Abbandonato il generale, cambiato rotta: passato da generale a qualcos'altro e ci siamo persi per la nostra catena di Markov.
  • Corso finito, Corso finito - condizione ideale, la persona ha completato l'80% delle lezioni (non tutte le lezioni sono obbligatorie).

Entrare nel nodo classe di successo significa completare con successo la lezione sulla nostra piattaforma insieme all'insegnante. Registra i progressi lungo il percorso e l'avvicinamento al risultato desiderato: "Corso completato". Per noi è importante che gli studenti partecipino il più possibile.

Per ottenere conclusioni quantitative più accurate per l'applicazione mobile (nodo sessione app), abbiamo creato catene separate per ciascuno dei nodi finali e quindi abbiamo confrontato i pesi dei bordi a coppie:

  • dalla sessione dell'app ad essa;
  • dalla sessione dell'app alla lezione di successo;
  • dalla lezione di successo alla sessione dell'app.

Come utilizziamo le catene di Markov per valutare soluzioni e individuare bug. Con uno script Python
A sinistra ci sono gli studenti che hanno completato il corso, a destra quelli che si sono “addormentati”

Questi tre aspetti mostrano la relazione tra il successo di uno studente e l'utilizzo dell'app mobile. Ci aspettavamo di vedere che gli studenti che avevano completato il corso avrebbero avuto un legame più forte con l'applicazione rispetto agli studenti che si erano addormentati. Tuttavia, in realtà abbiamo ottenuto esattamente i risultati opposti:

  • ci siamo assicurati che diversi gruppi di utenti interagiscano con l'applicazione mobile in modo diverso;
  • gli studenti di successo utilizzano l'applicazione mobile meno intensamente;
  • gli studenti che si addormentano utilizzano l'applicazione mobile in modo più attivo.

Ciò significa che gli studenti che si addormentano iniziano a trascorrere sempre più tempo nell'applicazione mobile e, alla fine, vi rimangono per sempre.

Come utilizziamo le catene di Markov per valutare soluzioni e individuare bug. Con uno script Python

All'inizio siamo rimasti sorpresi, ma dopo averci pensato, ci siamo resi conto che si trattava di un effetto del tutto naturale. Un tempo studiavo il francese da solo utilizzando due strumenti: un'applicazione mobile e lezioni di grammatica su YouTube. All'inizio ho diviso il tempo tra loro in un rapporto di 50 a 50. Ma l'applicazione è più divertente, c'è gamification, tutto è semplice, veloce e chiaro, ma nella lezione devi approfondire, scrivere qualcosa , esercitati su un quaderno. A poco a poco, ho iniziato a trascorrere più tempo sul mio smartphone, fino a quando la sua quota è cresciuta fino al 100%: se ci passi tre ore, crei una falsa sensazione di lavoro completato, per cui non hai voglia di andare ad ascoltare nulla. .

Ma come può essere? Dopotutto, abbiamo creato appositamente un'applicazione mobile, incorporata in essa la curva di Ebbinghaus, lo ha gamificato, lo ha reso attraente in modo che le persone ci trascorressero del tempo, ma si scopre che le distrae solo? In realtà, il motivo è che il team dell'applicazione mobile ha affrontato troppo bene i suoi compiti, di conseguenza è diventato un prodotto interessante e autosufficiente e ha iniziato a uscire dal nostro ecosistema.

Come risultato della ricerca, è diventato chiaro che l'applicazione mobile doveva essere modificata in qualche modo in modo da distrarre meno dal corso di studi principale. E sia bambini che adulti. Questo lavoro è attualmente in corso.

Secondo caso: bug di onboarding

L'onboarding è una procedura aggiuntiva facoltativa quando si registra un nuovo studente, eliminando potenziali problemi tecnici in futuro. Lo scenario di base presuppone che una persona si sia registrata sulla landing page, abbia ottenuto l'accesso al proprio account personale, venga contattata e gli venga impartita una lezione introduttiva. Allo stesso tempo, notiamo un'alta percentuale di difficoltà tecniche durante la lezione introduttiva: la versione sbagliata del browser, il microfono o l'audio non funzionano, l'insegnante non può suggerire immediatamente una soluzione, e tutto ciò è particolarmente difficile quando si tratta ai bambini. Per questo motivo abbiamo sviluppato un'applicazione aggiuntiva nel tuo account personale, dove potrai completare quattro semplici passaggi: controllare il browser, la fotocamera, il microfono e confermare che i genitori saranno vicini durante la lezione introduttiva (dopo tutto, sono loro che pagano per l'istruzione dei figli).

Queste poche pagine di onboarding mostravano una canalizzazione come questa:

Come utilizziamo le catene di Markov per valutare soluzioni e individuare bug. Con uno script Python
1: blocco iniziale con tre moduli di inserimento login e password leggermente diversi (a seconda del cliente).
2: checkbox di accettazione della procedura aggiuntiva di onboarding.
2.1-2.3: verifica la presenza dei genitori, la versione di Chrome e l'audio.
3: blocco finale.

Sembra molto naturale: nei primi due passaggi la maggior parte dei visitatori se ne va, rendendosi conto che c'è qualcosa da compilare, controllare, ma non c'è tempo. Se il cliente ha raggiunto il terzo passaggio, quasi sicuramente raggiungerà la finale. Non c'è un solo motivo per sospettare qualcosa sull'imbuto.

Tuttavia, abbiamo deciso di analizzare il nostro onboarding non utilizzando un classico funnel unidimensionale, ma utilizzando una catena di Markov. Abbiamo attivato altri eventi, eseguito lo script e ottenuto questo:

Come utilizziamo le catene di Markov per valutare soluzioni e individuare bug. Con uno script Python

In questo caos si può capire chiaramente solo una cosa: qualcosa è andato storto. Il processo di onboarding è lineare, è inerente al design, non dovrebbe esserci una tale rete di connessioni al suo interno. E qui è subito chiaro che l'utente viene gettato tra i passaggi, tra i quali non dovrebbero esserci transizioni.

Come utilizziamo le catene di Markov per valutare soluzioni e individuare bug. Con uno script Python

Ci possono essere due ragioni per questa strana immagine:

  • banchi si sono insinuati nel database dei registri;
  • Ci sono errori nel prodotto stesso: onboarding.

Il primo motivo è molto probabilmente vero, ma testarlo richiede molto lavoro e la correzione dei registri non aiuterà a migliorare la UX. Ma con il secondo, se esiste, bisognava fare qualcosa con urgenza. Pertanto, siamo andati a guardare i nodi, individuare i bordi che non dovrebbero esistere e cercare le ragioni della loro presenza. Abbiamo visto che alcuni utenti sono rimasti bloccati e hanno camminato in tondo, altri sono caduti da metà all'inizio e altri, in linea di principio, non sono riusciti a uscire dai primi due passaggi. Abbiamo trasferito i dati al QA e sì, si è scoperto che c'erano abbastanza bug nell'onboarding: questo è un sottoprodotto, un po' una stampella, non è stato testato abbastanza a fondo, perché... Non ci aspettavamo alcun problema. Ora l'intero processo di registrazione è cambiato.

Questa storia ci ha mostrato un'applicazione inaspettata delle catene di Markov nel campo del QA.

Provalo tu stesso!

Ho pubblicato il mio Script Python per l'addestramento delle catene di Markov di dominio pubblico: usalo per la tua salute. Documentazione su GitHub, le domande possono essere poste qui, cercherò di rispondere a tutto.

Bene, link utili: Libreria NetworkX, Visualizzatore Graphviz. E qui c'è un articolo su Habré sulle catene di Markov. I grafici nell'articolo sono realizzati utilizzando Dove.

Fonte: habr.com

Aggiungi un commento