Com fem servir les cadenes de Markov per avaluar solucions i trobar errors. Amb un script Python

És important per a nosaltres entendre què passa amb els nostres estudiants durant la formació i com aquests esdeveniments afecten el resultat, així que elaborem un mapa del viatge del client: un mapa de l'experiència del client. Al cap i a la fi, el procés d'aprenentatge no és quelcom continu i integral, és una cadena d'esdeveniments i accions interconnectades de l'alumne, i aquestes accions poden variar molt entre els diferents alumnes. Ara ha acabat la seva lliçó: què farà després? Anirà a fer els deures? Llançarà una aplicació mòbil? Canviarà de rumb, demanarà canviar de professor? Aniràs directament a la següent lliçó? O simplement marxarà decebut? És possible, analitzant aquest mapa, identificar patrons que condueixen a la superació de l'assignatura o, per contra, a l'“abandonament” de l'estudiant?

Com fem servir les cadenes de Markov per avaluar solucions i trobar errors. Amb un script Python

Normalment, s'utilitzen eines de codi tancat especialitzades i molt cares per crear CJM. Però volíem crear alguna cosa senzilla, que requereixi un esforç mínim i, si és possible, de codi obert. Així que va sorgir la idea d'utilitzar cadenes de Markov, i ho vam tenir èxit. Vam crear un mapa, vam interpretar les dades sobre el comportament dels estudiants en forma de gràfic, vam veure respostes completament no òbvies a problemes empresarials globals i, fins i tot, vam trobar errors profundament ocults. Tot això ho hem fet utilitzant solucions d'script Python de codi obert. En aquest article parlaré de dos casos amb aquests resultats tan poc evidents i compartiré el guió amb tothom.

Per tant, les cadenes de Markov mostren la probabilitat de transicions entre esdeveniments. Aquí teniu un exemple primitiu de la Viquipèdia:

Com fem servir les cadenes de Markov per avaluar solucions i trobar errors. Amb un script Python

Aquí "E" i "A" són esdeveniments, les fletxes són transicions entre ells (inclosa la transició d'un esdeveniment al mateix) i els pesos de les fletxes són la probabilitat de transició ("gràfic dirigit ponderat").

Què vas fer servir?

El circuit es va entrenar amb la funcionalitat estàndard de Python, que es va alimentar amb els registres d'activitat dels estudiants. El gràfic de la matriu resultant va ser construït per la biblioteca NetworkX.

El registre té aquest aspecte:

Com fem servir les cadenes de Markov per avaluar solucions i trobar errors. Amb un script Python

Aquest és un fitxer csv que conté una taula de tres columnes: identificador de l'estudiant, nom de l'esdeveniment, hora en què es va produir. Aquests tres camps són suficients per rastrejar els moviments del client, construir un mapa i, finalment, obtenir una cadena de Markov.

La biblioteca retorna els gràfics construïts en format .dot o .gexf. Per visualitzar el primer, podeu utilitzar el paquet Graphviz gratuït (eina gvedit), hem treballat amb .gexf i Gephi, també gratuït.

A continuació, m'agradaria donar dos exemples d'ús de cadenes de Markov, que ens van permetre fer una nova mirada als nostres objectius, processos educatius i el propi ecosistema Skyeng. Bé, corregeix els errors.

Primer cas: aplicació mòbil

Per començar, vam explorar el viatge dels estudiants a través del nostre producte més popular: el curs General. En aquell moment, jo estava treballant al departament infantil de Skyeng i volíem veure com funcionava l'aplicació mòbil amb el nostre públic infantil.

Prenent els registres i executant-los a través de l'script, vaig obtenir alguna cosa com això:

Com fem servir les cadenes de Markov per avaluar solucions i trobar errors. Amb un script Python

El node inicial és Inici general, i a la part inferior hi ha tres nodes de sortida: l'estudiant "es va adormir", va canviar de curs i va acabar el curs.

  • Es va adormir, "Es va adormir", això vol dir que ja no està fent classes, el més probable és que s'hagi caigut. Amb optimisme anomenem aquest estat "adormit", perquè... en teoria, encara té l'oportunitat de continuar els seus estudis. El pitjor resultat per a nosaltres.
  • General abandonat, canvi de rumb: hem canviat de general a una altra cosa i hem perdut per la nostra cadena de Markov.
  • Curs acabat, Acabat el curs - estat ideal, la persona ha completat el 80% de les lliçons (no totes les lliçons són obligatòries).

Entrar al node de classe amb èxit significa completar amb èxit la lliçó a la nostra plataforma juntament amb el professor. Registra el progrés al llarg del curs i l'aproximació al resultat desitjat: "Ha completat el curs". Per a nosaltres és important que els alumnes assisteixin el màxim possible.

Per obtenir conclusions quantitatives més precises per a l'aplicació mòbil (node ​​de sessió de l'aplicació), vam crear cadenes separades per a cadascun dels nodes finals i després vam comparar els pesos de la vora per parells:

  • de la sessió de l'aplicació de nou a ella;
  • de la sessió de l'aplicació a la classe reeixida;
  • de la classe reeixida a la sessió de l'aplicació.

Com fem servir les cadenes de Markov per avaluar solucions i trobar errors. Amb un script Python
A l'esquerra hi ha els alumnes que han acabat el curs, a la dreta els que "es van adormir"

Aquestes tres vores mostren la relació entre l'èxit d'un estudiant i el seu ús de l'aplicació mòbil. Esperàvem veure que els estudiants que van completar el curs tindrien una connexió més forta amb l'aplicació que els estudiants que es van quedar adormits. Tanmateix, en realitat hem obtingut els resultats exactament oposats:

  • ens hem assegurat que diferents grups d'usuaris interactuen amb l'aplicació mòbil de manera diferent;
  • els estudiants amb èxit utilitzen l'aplicació mòbil de manera menys intensa;
  • els estudiants que s'adormen fan servir l'aplicació mòbil de manera més activa.

Això vol dir que els alumnes que s'adormen comencen a passar cada cop més temps a l'aplicació mòbil i, al final, s'hi queden per sempre.

Com fem servir les cadenes de Markov per avaluar solucions i trobar errors. Amb un script Python

Al principi ens va sorprendre, però després de pensar-ho, ens vam adonar que es tractava d'un efecte totalment natural. En un moment, vaig estudiar francès pel meu compte amb dues eines: una aplicació mòbil i conferències de gramàtica a YouTube. Al principi, vaig dividir el temps entre ells en una proporció de 50 a 50. Però l'aplicació és més divertida, hi ha gamificació, tot és senzill, ràpid i clar, però a la conferència cal aprofundir-hi, escriure alguna cosa. , practicar en un quadern. A poc a poc, vaig començar a passar més temps al meu telèfon intel·ligent, fins que la seva quota va créixer al 100%: si hi dediques tres hores, es crea una falsa sensació de treball acabat, per la qual no tens ganes d'anar a escoltar res. .

Però com pot ser això? Després de tot, hem creat especialment una aplicació mòbil, hi va construir la corba d'Ebbinghaus, el va gamificar, el va fer atractiu perquè la gent hi passés temps, però resulta que només els distreu? De fet, el motiu és que l'equip d'aplicacions mòbils va fer front massa bé a les seves tasques, com a resultat de la qual cosa es va convertir en un producte fantàstic i autosuficient i va començar a caure fora del nostre ecosistema.

Com a resultat de la investigació, va quedar clar que l'aplicació mòbil s'havia de canviar d'alguna manera perquè distregués menys del curs principal de l'estudi. I tant nens com adults. Aquest treball està actualment en curs.

Segon cas: errors d'incorporació

La incorporació és un procediment addicional opcional a l'hora de registrar un nou estudiant, eliminant possibles problemes tècnics en el futur. L'escenari bàsic suposa que una persona s'ha registrat a la pàgina de destinació, ha obtingut accés al seu compte personal, es posa en contacte i se li dóna una lliçó introductòria. Al mateix temps, observem un gran percentatge de dificultats tècniques durant la lliçó introductòria: la versió incorrecta del navegador, el micròfon o el so no funciona, el professor no pot suggerir immediatament una solució, i tot això és especialment difícil quan es tracta. als nens. Per tant, hem desenvolupat una aplicació addicional al vostre compte personal, on podeu completar quatre senzills passos: comproveu el vostre navegador, la càmera, el micròfon i confirmeu que els pares estaran a prop durant la lliçó introductòria (al cap i a la fi, ells són els qui paguen per l'educació dels seus fills).

Aquestes poques pàgines d'incorporació mostraven un embut com aquest:

Com fem servir les cadenes de Markov per avaluar solucions i trobar errors. Amb un script Python
1: bloc d'inici amb tres formularis d'entrada i contrasenya lleugerament diferents (segons el client).
2: casella de selecció que accepta el procediment d'incorporació addicional.
2.1-2.3: comproveu la presència dels pares, la versió de Chrome i el so.
3: bloc final.

Sembla molt natural: en els dos primers passos, la majoria dels visitants marxen, adonant-se que hi ha alguna cosa per omplir, comprovar, però no hi ha temps. Si el client ha arribat al tercer pas, gairebé segur que arribarà al final. No hi ha una sola raó per sospitar de res a l'embut.

No obstant això, vam decidir analitzar la nostra incorporació no en un embut unidimensional clàssic, sinó amb una cadena de Markov. Vam activar una mica més d'esdeveniments, vam executar el guió i vam obtenir això:

Com fem servir les cadenes de Markov per avaluar solucions i trobar errors. Amb un script Python

En aquest caos, només es pot entendre clarament una cosa: alguna cosa va fallar. El procés d'incorporació és lineal, això és inherent al disseny, no hi hauria d'haver cap xarxa de connexions. I aquí queda clar de seguida que l'usuari es veu llançat entre passos, entre els quals no hi hauria d'haver cap transició.

Com fem servir les cadenes de Markov per avaluar solucions i trobar errors. Amb un script Python

Hi pot haver dues raons per a aquesta estranya imatge:

  • els bancs es van col·locar a la base de dades de registres;
  • Hi ha errors en el propi producte: incorporació.

El primer motiu és probablement cert, però provar-lo és força laboriós i corregir els registres no ajudarà a millorar l'UX. Però amb el segon, si existeix, calia fer alguna cosa amb urgència. Per tant, vam anar a mirar els nodes, identificar les vores que no haurien d'existir i buscar els motius de la seva aparició. Vam veure que alguns usuaris s'encallaven i caminaven en rotllana, d'altres van caure del mig al principi i d'altres, en principi, no van poder sortir dels dos primers passos. Vam transferir les dades a QA, i sí, va resultar que hi havia prou errors en la incorporació: aquest és un subproducte, una mica de crossa, no es va provar prou profundament, perquè... No esperàvem cap problema. Ara tot el procés d'enregistrament ha canviat.

Aquesta història ens va mostrar una aplicació inesperada de les cadenes de Markov en el camp del control de qualitat.

Proveu-ho vosaltres mateixos!

Vaig publicar el meu Script Python per entrenar cadenes de Markov de domini públic: utilitzeu-lo per a la vostra salut. Documentació a GitHub, aquí es poden fer preguntes, intentaré respondre-ho tot.

Bé, enllaços útils: Biblioteca NetworkX, Visualitzador Graphviz. I aquí hi ha un article sobre Habré sobre les cadenes de Markov. Els gràfics de l'article es fan utilitzant Gephi.

Font: www.habr.com

Afegeix comentari