Comment nous utilisons les chaînes de Markov pour évaluer des solutions et trouver des bogues. Avec un 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, c'est pourquoi nous construisons une Customer Journey Map - 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 interconnectés de l'étudiant, et ces actions peuvent varier considérablement selon les différents étudiants. Maintenant qu’il a terminé sa leçon : que va-t-il faire ensuite ? Est-ce que ça ira aux devoirs ? Va-t-il lancer une application mobile ? Va-t-il changer de cap, demander à changer de professeur ? Allez-vous passer directement à la leçon suivante ? Ou va-t-il simplement repartir déçu ? Est-il possible, en analysant cette carte, d'identifier des schémas qui conduisent à la réussite du cours ou, à l'inverse, au « décrochage » de l'étudiant ?

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

En règle générale, des outils fermés spécialisés et très coûteux sont utilisés pour créer CJM. Mais nous voulions proposer quelque chose de simple, nécessitant un minimum d’effort et, si possible, 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 étudiants sous la forme d'un graphique, vu des réponses totalement non évidentes aux problèmes commerciaux mondiaux et avons même trouvé des bugs profondément cachés. Nous avons fait tout cela en utilisant des solutions de script Python open source. Dans cet article, je parlerai de deux cas avec ces résultats très peu évidents et partagerai le script avec tout le monde.

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

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

Ici « E » et « A » sont des événements, les flèches sont des transitions entre eux (y compris la transition d'un événement au même), et les poids des flèches sont la probabilité de transition (« graphique orienté pondéré »).

Qu'as-tu utilisé ?

Le circuit a été formé avec la fonctionnalité Python standard, qui a été alimentée par les journaux d'activité des étudiants. Le graphique sur la matrice résultante a été construit par la bibliothèque NetworkX.

Le journal ressemble à ceci :

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

Il s'agit d'un fichier csv contenant un tableau de trois colonnes : identifiant de l'étudiant, nom de l'événement, heure à laquelle il s'est produit. Ces trois champs suffisent pour retracer les déplacements du client, construire une carte et finalement 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 (outil gvedit), nous avons travaillé avec .gexf et Gephi, également gratuits.

Ensuite, je voudrais donner deux exemples d'utilisation des chaînes de Markov, qui nous ont permis de jeter un nouveau regard 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 des étudiants à travers notre produit le plus populaire : le cours général. À cette époque, je travaillais dans le département des enfants de Skyeng et nous voulions voir avec quelle efficacité l'application mobile fonctionnait auprès de notre public d'enfants.

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

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

Le nœud de départ est Démarrage général, et en bas se trouvent trois nœuds de sortie : l'étudiant « s'est endormi », a changé de cours et a terminé le cours.

  • S'est endormi, « s'est endormi » - cela signifie qu'il ne suit plus de cours, il est très probablement tombé. Nous appelons avec optimisme cet état « endormi », car... en théorie, il a encore la possibilité de poursuivre ses études. Le pire résultat pour nous.
  • Général abandonné, changement de cap - je suis passé du général à autre chose et je me suis perdu pour notre chaîne de Markov.
  • Cours terminé, Cours terminé - condition idéale, la personne a suivi 80% des cours (tous les cours ne sont pas obligatoires).

Entrer dans le nœud de classe réussi signifie terminer avec succès la leçon sur notre plateforme avec l'enseignant. Il enregistre les progrès tout au long du cours et l'approche du résultat souhaité : « Terminé le cours ». Il est important pour nous que les étudiants soient présents autant que possible.

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

  • de la session d'application à celle-ci ;
  • de la session d'application à la classe réussie ;
  • d'un cours réussi à une session d'application.

Comment nous utilisons les chaînes de Markov pour évaluer des solutions et trouver des bogues. Avec un script Python
A gauche se trouvent les étudiants qui ont terminé le cours, à droite ceux qui se sont « endormis »

Ces trois bords montrent la relation entre la réussite d'un élève et son utilisation de l'application mobile. Nous nous attendions à ce que les étudiants qui terminent le cours aient un lien plus fort avec l'application que les étudiants qui s'endorment. Cependant, en réalité, nous avons obtenu exactement les résultats inverses :

  • nous avons veillé à ce que différents groupes d'utilisateurs interagissent différemment avec l'application mobile ;
  • les étudiants qui réussissent utilisent l’application mobile de manière moins intensive ;
  • 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 l'application mobile et, finalement, y restent pour toujours.

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

Au début, nous avons été surpris, mais après y avoir réfléchi, nous avons réalisé qu'il s'agissait d'un effet tout à fait naturel. À une époque, j'étudiais le français seul en utilisant deux outils : une application mobile et des cours de grammaire sur YouTube. Au début, j'ai divisé le temps entre eux dans un rapport de 50 à 50. Mais l'application est plus ludique, il y a de la gamification, tout est simple, rapide et clair, mais dans le cours il faut approfondir, écrire quelque chose , pratiquez dans un cahier. Petit à petit, j'ai commencé à passer plus de temps sur mon smartphone, jusqu'à ce que sa part atteigne 100 % : si vous passez trois heures dessus, vous créez un faux sentiment de travail terminé, à cause duquel vous n'avez aucune envie d'aller écouter quoi que ce soit. .

Mais comment cela peut-il être? Après tout, nous avons spécialement créé une application mobile, intégré la courbe d'Ebbinghaus, l'a gamifié, l'a rendu attrayant pour que les gens y passent du temps, mais il s'avère que cela ne fait que les distraire ? En fait, la raison en est que l'équipe des applications mobiles a trop bien fait face à ses tâches, ce qui a fait qu'elle est devenue un produit sympa et autonome et a commencé à sortir de notre écosystème.

À la suite de la recherche, il est devenu évident que l’application mobile devait être modifiée d’une manière ou d’une autre afin qu’elle détourne moins l’attention du programme d’études principal. Et aussi bien les enfants que les adultes. Ce travail est actuellement en cours.

Deuxième cas : bugs d’onboarding

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 suppose qu'une personne s'est inscrite sur la page de destination, a eu accès à son compte personnel, est contactée et reçoit une leçon d'introduction. Parallèlement, on constate un pourcentage important de difficultés techniques lors du cours d'introduction : la mauvaise version du navigateur, le micro ou le son ne fonctionne pas, le professeur ne peut pas immédiatement proposer une solution, et tout cela est particulièrement difficile lorsqu'il s'agit aux enfants. C'est pourquoi nous avons développé une application supplémentaire dans votre compte personnel, où vous pouvez effectuer quatre étapes simples : vérifier votre navigateur, votre caméra, votre microphone et confirmer que les parents seront à proximité pendant le cours d'introduction (après tout, ce sont eux qui paient pour l'éducation de leurs enfants).

Ces quelques pages d'intégration ont montré un entonnoir comme celui-ci :

Comment nous utilisons les chaînes de Markov pour évaluer des solutions et trouver des bogues. Avec un script Python
1 : bloc de départ avec trois formulaires de saisie de login et de mot de passe légèrement différents (selon le client).
2 : case à cocher acceptant la procédure d’intégration supplémentaire.
2.1-2.3 : Vérifiez la présence des parents, la version et le son de Chrome.
3 : bloc final.

Cela semble très naturel : dans les deux premières étapes, la plupart des visiteurs partent, se rendant compte qu'il y a quelque chose à remplir, à vérifier, mais qu'ils n'ont pas le temps. Si le client a atteint la troisième étape, il atteindra presque certainement la finale. Il n’y a aucune raison de soupçonner quoi que ce soit sur l’entonnoir.

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

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

Dans ce chaos, une seule chose peut être clairement comprise : quelque chose s’est mal passé. Le processus d'intégration est linéaire, cela est inhérent à la conception, il ne devrait pas y avoir un tel réseau de connexions. Et ici, il est immédiatement clair que l'utilisateur est projeté entre des étapes entre lesquelles il ne devrait y avoir aucune transition.

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

Il peut y avoir deux raisons à cette étrange image :

  • des hauts-fonds se sont glissés dans la base de données des journaux ;
  • Il y a des erreurs dans le produit lui-même : l'intégration.

La première raison est probablement vraie, mais la tester demande beaucoup de travail et la correction des journaux n'aidera pas à améliorer l'UX. Mais avec le second, s’il existe, il fallait faire quelque chose de toute urgence. Par conséquent, nous sommes allés examiner les nœuds, identifier les arêtes qui ne devraient pas exister et rechercher les raisons de leur apparition. Nous avons vu que certains utilisateurs restaient coincés et tournaient en rond, d'autres tombaient du milieu au début et d'autres, en principe, ne pouvaient pas sortir des deux premières étapes. Nous avons transféré les données au contrôle qualité - et oui, il s'est avéré qu'il y avait suffisamment de bugs lors de l'intégration : c'est un tel sous-produit, un peu une béquille, il n'a pas été testé assez en profondeur, parce que... Nous ne nous attendions à aucun problème. Aujourd’hui, tout le processus d’enregistrement a changé.

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

Essayez-le vous-même!

j'ai posté le mien Script Python pour entraîner les chaînes de Markov dans le domaine public - utilisez-le pour votre santé. Documentation sur GitHub, des questions peuvent être posées ici, je vais essayer de répondre à tout.

Eh bien, des liens utiles : Bibliothèque NetworkX, Visualiseur Graphviz. Et ici il y a un article sur Habré à propos des chaînes de Markov. Les graphiques de l'article sont réalisés en utilisant Gephi.

Source: habr.com

Ajouter un commentaire