Comment nous utilisons les chaînes de Markov pour évaluer les solutions et trouver des bogues. Avec le script Python

Il est important pour nous de comprendre ce qui arrive à nos étudiants pendant la formation et comment ces événements affectent le résultat.Nous construisons donc une carte du parcours client - une carte de l'expérience client. Après tout, le processus d'apprentissage n'est pas quelque chose de continu et intégral, c'est une chaîne d'événements et d'actions interreliés d'un étudiant, et ces actions peuvent varier considérablement d'un étudiant à l'autre. Il a donc suivi une leçon: que fera-t-il ensuite? Aller aux devoirs? Lancer une application mobile? Changer de cours, demander de changer de professeur? Aller directement à la prochaine leçon? Ou tout simplement laisser déçu? Est-il possible, en analysant cette fiche, d'identifier les schémas qui conduisent à la réussite du cours, ou vice versa, la «chute» de l'étudiant?



Habituellement, des outils spécialisés, très coûteux et de source fermée sont utilisés pour créer des CJM. Mais nous voulions trouver quelque chose de simple, nécessitant un minimum d'effort et éventuellement open source. L'idée est donc venue d'utiliser des chaînes de Markov - et nous avons réussi. Nous avons construit une carte, interprété les données sur le comportement des élèves sous forme de graphique, vu des réponses complètement non évidentes à des questions commerciales mondiales et même trouvé des bogues profondément cachés. Nous avons fait tout cela à l'aide de solutions de script Python open source. Dans cet article, je vais parler de deux cas avec des résultats très peu évidents et partager le script avec tout le monde.

Ainsi, les chaînes de Markov montrent la probabilité de transitions entre les événements. Voici un exemple primitif de Wikipedia:



Ici, «E» et «A» sont des événements, les flèches sont des transitions entre eux (y compris la transition d'un événement à celui-ci), et les poids des flèches sont la probabilité de transition («graphe orienté pondéré»).

Ce qui a été utilisé


La chaîne a été formée par la fonctionnalité Python standard, qui a été alimentée par les journaux d'activité des élèves. Le graphique sur la matrice résultante a été construit par la bibliothèque NetworkX.

Le journal ressemble à ceci:



Il s'agit d'un fichier csv contenant un tableau de trois colonnes: identifiant étudiant, nom de l'événement, heure à laquelle il s'est produit. Ces trois champs sont suffisants pour tracer les mouvements du client, construire une carte et enfin obtenir une chaîne de Markov.

La bibliothèque renvoie les graphiques construits au format .dot ou .gexf. Pour visualiser le premier, vous pouvez utiliser le package gratuit Graphviz (l'outil gvedit), nous avons travaillé avec .gexf et Gephi, également gratuit.

Ensuite, je veux donner deux exemples de l'utilisation des chaînes de Markov, qui nous ont permis de jeter un regard neuf sur nos objectifs, nos processus éducatifs et l'écosystème Skyeng lui-même. Eh bien, corrigez les bugs.

Premier cas: application mobile


Pour commencer, nous avons exploré le parcours de l'étudiant à travers notre produit le plus populaire, Général. À ce moment-là, je travaillais dans le département des enfants Skyeng et nous voulions voir avec quelle efficacité l'application mobile fonctionne avec le public de nos enfants.

En prenant les journaux et en les exécutant dans le script, j'ai obtenu quelque chose comme ceci:



Le nœud de départ est Start General, et ci-dessous se trouvent trois nœuds de sortie: l'étudiant s'est «endormi», a changé de cours, a terminé le cours.

  • S'endormi, "S'endormit" - cela signifie que les cours n'ont plus lieu, très probablement, il est tombé. Nous appelons avec optimisme cette condition «endormie», car en théorie, il a encore la possibilité de poursuivre ses études. Le pire résultat pour nous.
  • Général abandonné, parcours modifié - passé de général à autre chose et perdu pour notre chaîne de Markov.
  • Cours terminé, je suis diplômé du cours - parfait état, la personne a terminé 80% des leçons (toutes les leçons ne sont pas obligatoires).

Entrer dans le nœud de classe réussi signifie réussir la leçon sur notre plate-forme avec l'enseignant. Il capture la progression du cours et l'approximation du résultat souhaité - «Terminé le cours». Il est important pour nous que les étudiants y participent autant que possible.

Pour obtenir des conclusions quantitatives plus précises pour une application mobile (nœud de session d'application), nous avons construit des chaînes distinctes pour chacun des nœuds finaux, puis comparé le poids des bords par paires:

  • de la session de l'application vers elle;
  • de la session d'application à la classe réussie;
  • de la classe réussie à la session d'application.


A gauche - étudiants qui ont terminé le cours, à droite - «endormi»

Ces trois côtes montrent la relation entre la réussite des élèves et leur utilisation d'une application mobile. Nous nous attendions à voir que les étudiants qui ont terminé le cours auront un lien plus fort avec l'application que ceux qui se sont «endormis». Cependant, en fait, ils ont reçu exactement les résultats opposés:

  • nous nous sommes assurés que les différents groupes d'utilisateurs interagissent différemment avec l'application mobile;
  • les étudiants qui réussissent utilisent moins intensivement l'application mobile;
  • les étudiants qui s'endorment utilisent plus activement l'application mobile.

Cela signifie que les étudiants qui s'endorment commencent à passer de plus en plus de temps dans une application mobile et, finalement, y restent pour toujours.



Au début, nous avons été surpris, mais, réfléchissant, nous avons réalisé que c'était un effet tout à fait naturel. À une époque, j'ai indépendamment étudié le français à l'aide de deux outils: une application mobile et des cours de grammaire sur YouTube. Au début, j'ai partagé le temps entre eux dans une proportion de 50 à 50. Mais l'application est plus amusante, il y a la gamification, tout est simple, rapide et compréhensible, mais vous devez vous plonger dans le cours, écrire quelque chose, pratiquer dans un cahier. Peu à peu, j'ai commencé à passer plus de temps sur le smartphone jusqu'à ce que sa part atteigne 100%: s'il se bloque pendant trois heures, il crée un faux sens du travail accompli, à cause duquel il n'y a aucune envie d'aller écouter quelque chose.

Mais comment ça? Après tout, nous avons spécialement créé une application mobile, construite dans la courbe Ebbinghaus , gamifiée, rendue attrayante pour que les gens y passent du temps, mais il s'avère que cela ne les distrait que? En fait, la raison en est que l'équipe d'applications mobiles a trop bien fait ses tâches, ce qui en fait un produit cool et autosuffisant et a commencé à tomber de notre écosystème.

À la suite de l'étude, il est apparu que l'application mobile devait être modifiée d'une manière ou d'une autre afin qu'elle s'inspire moins du cours principal. De plus, enfants et adultes. Maintenant, ce travail est en cours.

Deuxième cas: intégration de bogues


L'intégration est une procédure supplémentaire facultative lors de l'inscription d'un nouvel étudiant, éliminant ainsi les problèmes techniques potentiels à l'avenir. Le scénario de base implique qu'une personne inscrite sur une page de destination, a accès à son compte personnel, la contacte et organise une leçon d'introduction. Dans le même temps, on note un pourcentage important de difficultés techniques lors de la leçon d'introduction: mauvaise version du navigateur, microphone ou son ne fonctionne pas, l'enseignant ne peut pas immédiatement proposer une solution, et tout cela est particulièrement difficile quand il s'agit d'enfants. Par conséquent, nous avons développé une application supplémentaire dans votre compte personnel, où vous pouvez effectuer quatre étapes simples: vérifiez votre navigateur, l'appareil photo, le microphone et confirmez que les parents seront là pendant la leçon d'introduction (après tout, ils paient pour l'éducation des enfants).

Ces quelques pages d'intégration ont montré cet entonnoir:


1: bloc de démarrage avec trois formulaires de saisie de login / mot de passe légèrement différents (selon le client).
2: Jackdaw consent à une procédure supplémentaire d'intégration.
2.1-2.3: vérification de la présence du parent, de la version de Chrome et du son.
3: bloc final.

Cela semble très naturel: aux deux premières étapes, la plupart des visiteurs fusionnent, réalisant qu'il y a quelque chose à remplir, vérifiez, mais il n'y a pas de temps. Si le client a atteint la troisième étape, il atteindra presque certainement la finale. Aucune raison n'est visible sur l'entonnoir pour soupçonner quelque chose.

Néanmoins, nous avons décidé d'analyser notre intégration non pas sur l'entonnoir unidimensionnel classique, mais en utilisant la chaîne Markov. Nous avons activé un peu plus d'événements, exécuté le script et obtenu ceci:



Il n'y a qu'une seule chose qui peut être clairement comprise dans ce chaos: quelque chose s'est mal passé. Le processus d'intégration est linéaire, il est inhérent à la conception, il ne devrait pas avoir un tel réseau de liens. Et ici, vous pouvez immédiatement voir que l'utilisateur lance entre les étapes, entre lesquelles il ne devrait y avoir aucune transition.



Il peut y avoir deux raisons pour une image aussi étrange:

  • les montants se sont glissés dans la base du rondin;
  • Des hauts-fonds sont présents dans le produit lui-même - l'intégration.

La première raison, très probablement, se produit, mais sa vérification prend un certain temps et la correction des journaux n'aidera pas à améliorer l'UX. Mais avec le second, s'il y en a un, il était urgent de faire quelque chose. Par conséquent, nous sommes allés examiner les nœuds, identifier les bords, qui ne devraient pas l'être, rechercher les causes de leur apparition. Nous avons vu que certains utilisateurs faisaient des cycles et tournaient en rond, d'autres tombaient du milieu au début, et le troisième, en principe, ne pouvait pas sortir des deux premières étapes. Les données ont été transférées à QA - et oui, il s'est avéré qu'il y avait suffisamment de bogues dans l'intégration: c'est un tel sous-produit, un peu un produit de béquille, il n'a pas été testé suffisamment en profondeur, car ne m'attendais à aucun problème. Maintenant, tout le processus d'enregistrement a changé.

Cette histoire nous a montré l'application inattendue des chaînes de Markov dans le domaine de l'assurance qualité.

Essayez-le vous-même!


J'ai posté mon script Python pour apprendre les chaînes de Markov dans le domaine public - utilisez-le pour la santé. Documentation sur GitHub, des questions peuvent être posées ici, je vais essayer de tout répondre.

Liens utiles et utiles: bibliothèque NetworkX , visualiseur Graphviz . Et ici, sur Habré, il y a un article sur les chaînes de Markov. Les graphiques de l'article sont réalisés à l'aide de Gephi .

Source: https://habr.com/ru/post/fr473124/


All Articles