{"id":39546,"date":"2019-10-31T22:35:27","date_gmt":"2019-10-31T19:35:27","guid":{"rendered":"https:\/\/prohoster.info\/blog\/kak-my-ispolzuem-tsepi-markova-v-otsenke-reshenij-i-poiske-bagov-so-skriptom-na-python\/"},"modified":"2019-10-31T22:35:27","modified_gmt":"2019-10-31T19:35:27","slug":"kak-my-ispolzuem-tsepi-markova-v-otsenke-reshenij-i-poiske-bagov-so-skriptom-na-python","status":"publish","type":"post","link":"https:\/\/prohoster.info\/fr\/blog\/news\/kak-my-ispolzuem-tsepi-markova-v-otsenke-reshenij-i-poiske-bagov-so-skriptom-na-python","title":{"rendered":"Comment nous utilisons les cha\u00eenes de Markov pour \u00e9valuer les d\u00e9cisions et rechercher des bogues. Avec un script en Python","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Il est important pour nous de comprendre ce qui se passe avec nos \u00e9tudiants pendant leur apprentissage et comment ces \u00e9v\u00e9nements influencent les r\u00e9sultats. C'est pourquoi nous construisons une Customer Journey Map \u2014 une carte de l'exp\u00e9rience client. En effet, le processus d'apprentissage n'est pas quelque chose de continu et homog\u00e8ne, c'est une cha\u00eene d'\u00e9v\u00e9nements et d'actions li\u00e9s, et ces actions peuvent varier consid\u00e9rablement d'un \u00e9l\u00e8ve \u00e0 l'autre. Une fois qu'il a termin\u00e9 une le\u00e7on : que va-t-il faire ensuite ? Va-t-il faire ses devoirs ? Lancer une application mobile ? Changer de cours, demander \u00e0 changer de professeur ? Passer directement \u00e0 la le\u00e7on suivante ? Ou repartira-t-il d\u00e9\u00e7u ? Est-il possible, en analysant cette carte, d'identifier des mod\u00e8les qui conduisent \u00e0 une r\u00e9ussite du cours ou, \u00e0 l'inverse, \u00e0 l'abandon de l'\u00e9tudiant ?<\/p>\n<p><img decoding=\"async\" alt=\"Comment nous utilisons les cha\u00eenes de Markov pour \u00e9valuer les d\u00e9cisions et rechercher des bogues. Avec un script en Python\" src=\"\/wp-content\/uploads\/2019\/10\/3eaee2e858273669b4490f6ceb65d281.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nHabituellement, pour \u00e9laborer une CJM, on utilise des outils sp\u00e9cialis\u00e9s, souvent co\u00fbteux, avec un code ferm\u00e9. Mais nous voulions concevoir quelque chose de simple, n\u00e9cessitant un minimum d'efforts et, si possible, open source. C'est ainsi qu'est n\u00e9e l'id\u00e9e d'utiliser des cha\u00eenes de Markov \u2014 et nous y sommes parvenus. Nous avons construit une carte, interpr\u00e9t\u00e9 les donn\u00e9es sur le comportement des \u00e9tudiants sous forme de graphe, et d\u00e9couvert des r\u00e9ponses totalement inattendues \u00e0 des questions commerciales majeures, ainsi que des bogues profond\u00e9ment cach\u00e9s. Tout cela a \u00e9t\u00e9 r\u00e9alis\u00e9 gr\u00e2ce \u00e0 des solutions open source et \u00e0 un script Python. Dans cet article, je vais vous parler de deux cas avec ces r\u00e9sultats surprenants et partager le script avec tous les int\u00e9ress\u00e9s.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nAinsi, les cha\u00eenes de Markov montrent la probabilit\u00e9 des transitions entre les \u00e9v\u00e9nements. Voici un exemple primitif provenant de Wikip\u00e9dia :<\/p>\n<p><img decoding=\"async\" alt=\"Comment nous utilisons les cha\u00eenes de Markov pour \u00e9valuer les d\u00e9cisions et rechercher des bogues. Avec un script en Python\" src=\"\/wp-content\/uploads\/2019\/10\/978e18169ba4c7b2b71787536e4bb219.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIci, \u00ab E \u00bb et \u00ab A \u00bb sont des \u00e9v\u00e9nements, les fl\u00e8ches repr\u00e9sentent les transitions entre eux (y compris les transitions d'un \u00e9v\u00e9nement \u00e0 lui-m\u00eame), et les poids des fl\u00e8ches sont la probabilit\u00e9 de transition (un \u00ab graphe orient\u00e9 pond\u00e9r\u00e9 \u00bb).<\/p>\n<h2>Ce qui a \u00e9t\u00e9 utilis\u00e9<\/h2>\n<p>\nLa cha\u00eene a \u00e9t\u00e9 entra\u00een\u00e9e avec la fonctionnalit\u00e9 standard de Python, \u00e0 laquelle ont \u00e9t\u00e9 fournis les journaux d'activit\u00e9 des \u00e9tudiants. Le graphe de la matrice obtenue a \u00e9t\u00e9 construit avec la biblioth\u00e8que NetworkX.<\/p>\n<p>Le journal ressemble \u00e0 ceci :<\/p>\n<p><img decoding=\"async\" alt=\"Comment nous utilisons les cha\u00eenes de Markov pour \u00e9valuer les d\u00e9cisions et rechercher des bogues. Avec un script en Python\" src=\"\/wp-content\/uploads\/2019\/10\/bc75077802cd7eeb00ebe4a56bc61050.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nC'est un fichier csv contenant un tableau de trois colonnes : l'id de l'\u00e9tudiant, la description de l'\u00e9v\u00e9nement, et le moment o\u00f9 il s'est produit. Ces trois champs sont suffisants pour suivre les mouvements du client, construire la carte et, au final, obtenir une cha\u00eene de Markov.<\/p>\n<p>La biblioth\u00e8que renvoie des graphes construits au format .dot ou .gexf. Pour visualiser les premiers, on peut utiliser le paquet gratuit Graphviz (l'outil gvedit), nous avons travaill\u00e9 avec .gexf et Gephi, qui est \u00e9galement gratuit.<\/p>\n<p>Je souhaite maintenant donner deux exemples d'utilisation des cha\u00eenes de Markov qui nous ont permis de r\u00e9examiner nos objectifs, nos processus d'apprentissage et l'\u00e9cosyst\u00e8me Skyeng lui-m\u00eame. Et aussi de corriger quelques bogues.<\/p>\n<h2>Premier cas : application mobile<\/h2>\n<p>\nPour commencer, nous avons \u00e9tudi\u00e9 le parcours de l'\u00e9l\u00e8ve avec notre produit le plus populaire - le cours General. \u00c0 ce moment-l\u00e0, je travaillais dans le d\u00e9partement pour enfants de Skyeng et nous voulions voir \u00e0 quel point l'application mobile fonctionne efficacement avec notre public enfant.<\/p>\n<p>En prenant les logs et en les faisant passer par un script, j'ai obtenu quelque chose comme \u00e7a :<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habrastorage.org\/webt\/ws\/ru\/de\/wsrudeufw3pzwrrxtxtn1pjeqvu.png\"><img decoding=\"async\" alt=\"Comment nous utilisons les cha\u00eenes de Markov pour \u00e9valuer les d\u00e9cisions et rechercher des bogues. Avec un script en Python\" src=\"\/wp-content\/uploads\/2019\/10\/f2533ddfae7d5f85d0e86902b9b7005f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p>Le noeud de d\u00e9part - Start General, et en bas trois noeuds de sortie : l'\u00e9l\u00e8ve \u00ab s'est endormi \u00bb, a chang\u00e9 de cours, a termin\u00e9 le cours.<\/p>\n<ul>\n<li>S'est endormi, \u00ab Endormi \u00bb - signifie qu'il ne suit plus les cours, probablement qu'il a abandonn\u00e9. Nous appelons de mani\u00e8re optimiste cet \u00e9tat \u00ab endormi \u00bb, car en th\u00e9orie, il conserve la possibilit\u00e9 de reprendre l'\u00e9ducation. C'est notre pire r\u00e9sultat.<\/li>\n<li>A abandonn\u00e9 g\u00e9n\u00e9ral, Changer de cours - est pass\u00e9 de General \u00e0 autre chose et s'est perdu pour notre cha\u00eene de Markov.<\/li>\n<li>A termin\u00e9 le cours, \u00c9tat id\u00e9al, la personne a suivi 80 % des le\u00e7ons (toutes les le\u00e7ons ne sont pas obligatoires).<\/li>\n<\/ul>\n<p>\nAtteindre le noeud de cours r\u00e9ussi signifie avoir r\u00e9ussi une le\u00e7on sur notre plateforme avec un enseignant. Cela fixe les progr\u00e8s dans le cours et rapproche de l'objectif souhait\u00e9 - \u00ab A termin\u00e9 le cours \u00bb. Il est important pour nous que les \u00e9l\u00e8ves y assistent le plus possible.<\/p>\n<p>Pour obtenir des conclusions quantitatives plus pr\u00e9cises pour l'application mobile (noeud session app), nous avons construit des cha\u00eenes distinctes pour chacun des noeuds finaux et avons ensuite compar\u00e9 les poids des bords deux \u00e0 deux :<\/p>\n<ul>\n<li>de la session app \u00e0 elle-m\u00eame ;<\/li>\n<li>de la session app \u00e0 cours r\u00e9ussi ;<\/li>\n<li>de cours r\u00e9ussi \u00e0 session app.<\/li>\n<\/ul>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/habrastorage.org\/webt\/iw\/mz\/yq\/iwmzyqmlmbkgzmjqa7qhxwd7shq.png\"><img decoding=\"async\" alt=\"Comment nous utilisons les cha\u00eenes de Markov pour \u00e9valuer les d\u00e9cisions et rechercher des bogues. Avec un script en Python\" src=\"\/wp-content\/uploads\/2019\/10\/fc68ca73b379f57a38b53f0c31e75cb1.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><br \/>\n<i>\u00c0 gauche - \u00e9tudiants ayant termin\u00e9 le cours, \u00e0 droite - \u00ab endormis \u00bb<\/i><\/p>\n<p>Ces trois bords montrent le lien entre le succ\u00e8s de l'\u00e9tudiant et son utilisation de l'application mobile. Nous nous attendions \u00e0 ce que les \u00e9tudiants ayant termin\u00e9 le cours aient un lien plus fort avec l'application que les \u00ab endormis \u00bb. Cependant, en r\u00e9alit\u00e9, nous avons obtenu des r\u00e9sultats exactement oppos\u00e9s :<\/p>\n<ul>\n<li>nous avons constat\u00e9 que diff\u00e9rents groupes d'utilisateurs interagissent diff\u00e9remment avec l'application mobile ;<\/li>\n<li>Les \u00e9tudiants performants utilisent moins intensivement l'application mobile ;<\/li>\n<li>Les \u00e9tudiants distraits utilisent l'application mobile de mani\u00e8re plus active.<\/li>\n<\/ul>\n<p>\nCela signifie que les \u00e9tudiants \u00ab distraits \u00bb commencent \u00e0 passer de plus en plus de temps dans l'application mobile et finissent par y rester ind\u00e9finiment.<\/p>\n<p><img decoding=\"async\" alt=\"Comment nous utilisons les cha\u00eenes de Markov pour \u00e9valuer les d\u00e9cisions et rechercher des bogues. Avec un script en Python\" src=\"\/wp-content\/uploads\/2019\/10\/45c17a908e2178edd99e340f34657cad.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAu d\u00e9but, cela nous a surpris, mais apr\u00e8s r\u00e9flexion, nous avons compris que c'\u00e9tait un effet tout \u00e0 fait attendu. \u00c0 une \u00e9poque, j'ai appris le fran\u00e7ais par moi-m\u00eame en utilisant deux outils : l'application mobile et des cours de grammaire sur YouTube. Au d\u00e9part, je partageais mon temps entre les deux \u00e0 raison de 50\/50. Mais l'application est plus amusante, elle est gamifi\u00e9e, tout y est simple, rapide et clair, alors que les le\u00e7ons n\u00e9cessitent d'y pr\u00eater attention, de prendre des notes et de pratiquer sur un cahier. Progressivement, j'ai commenc\u00e9 \u00e0 passer plus de temps sur mon smartphone, jusqu'\u00e0 ce que sa part atteigne 100 % : si je reste dessus pendant trois heures, cela cr\u00e9e une fausse impression d'avoir accompli quelque chose, ce qui ne me donne aucune envie d'aller \u00e9couter quelque chose.<\/p>\n<p>Mais comment cela se fait-il ? Apr\u00e8s tout, nous avons cr\u00e9\u00e9 l'application mobile expr\u00e8s, <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/skyeng\/blog\/312126\/\">nous y avons int\u00e9gr\u00e9 la courbe d'Ebbinghaus,<\/a><\/noindex>, nous l'avons gamifi\u00e9e, la rendant attrayante pour que les gens y passent du temps, et il s'av\u00e8re qu'elle les distrait seulement ? En r\u00e9alit\u00e9, la raison r\u00e9side dans le fait que l'\u00e9quipe de d\u00e9veloppement de l'application mobile a trop bien r\u00e9ussi sa mission, ce qui a fait de celle-ci un produit autonome de qualit\u00e9, se d\u00e9tachant ainsi de notre \u00e9cosyst\u00e8me.<\/p>\n<p>Au terme de l'\u00e9tude, il est devenu \u00e9vident que l'application mobile devait \u00eatre modifi\u00e9e pour qu'elle nuise moins au parcours d'apprentissage principal. Cela s'applique tant aux enfants qu'aux adultes. Ce travail est actuellement en cours.<\/p>\n<h2>Deuxi\u00e8me cas : bugs d'onboarding<\/h2>\n<p>\nL'onboarding est une proc\u00e9dure suppl\u00e9mentaire facultative lors de l'inscription d'un nouvel \u00e9l\u00e8ve, visant \u00e0 \u00e9viter de potentiels probl\u00e8mes techniques \u00e0 l'avenir. Le sc\u00e9nario de base suppose qu'une personne s'est inscrite sur la page d'atterrissage, a obtenu l'acc\u00e8s \u00e0 son espace personnel, qu'un contact est \u00e9tabli et qu'un cours d'introduction est donn\u00e9. Cependant, nous constatons un taux \u00e9lev\u00e9 de difficult\u00e9s techniques lors de ce cours d'introduction : version de navigateur incorrecte, microphone ou son qui ne fonctionnent pas, l'enseignant ne peut pas imm\u00e9diatement fournir une solution, et tout cela est d'autant plus compliqu\u00e9 lorsqu'il s'agit d'enfants. C'est pourquoi nous avons d\u00e9velopp\u00e9 une application compl\u00e9mentaire dans l'espace personnel o\u00f9 l'on peut effectuer quatre \u00e9tapes simples : v\u00e9rifier le navigateur, la cam\u00e9ra, le microphone et confirmer que les parents seront pr\u00e9sents pendant le cours d'introduction (car ce sont eux qui paient pour l'\u00e9ducation des enfants).<\/p>\n<p>Ces quelques pages d'onboarding ont montr\u00e9 un tel entonnoir :<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habrastorage.org\/webt\/l5\/pt\/aj\/l5ptajlgx6msydvswctke1w505w.jpeg\"><img decoding=\"async\" alt=\"Comment nous utilisons les cha\u00eenes de Markov pour \u00e9valuer les d\u00e9cisions et rechercher des bogues. Avec un script en Python\" src=\"\/wp-content\/uploads\/2019\/10\/5e949640d4d4f8a70dc4fd677e3c93a7.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><br \/>\n<i>1 : un bloc de d\u00e9part avec trois formulaires l\u00e9g\u00e8rement diff\u00e9rents (selon le client) pour entrer le login et le mot de passe.<br \/>\n2 : case \u00e0 cocher pour l'acceptation de la proc\u00e9dure d'onboarding suppl\u00e9mentaire.<br \/>\n2.1-2.3 : v\u00e9rification de la pr\u00e9sence d'un parent, de la version de Chrome et du son.<br \/>\n3 : bloc final.<\/i><\/p>\n<p>Il a l'air tr\u00e8s naturel : lors des deux premi\u00e8res \u00e9tapes, la majorit\u00e9 des visiteurs abandonnent, r\u00e9alisant qu'ils doivent remplir quelque chose, v\u00e9rifier, alors qu'ils n'ont pas le temps. Si un client arrive \u00e0 la troisi\u00e8me \u00e9tape, il est presque certain d'atteindre la fin. Dans l'entonnoir, aucune raison de soup\u00e7onner quoi que ce soit n'est visible.<\/p>\n<p>Cependant, nous avons d\u00e9cid\u00e9 d'analyser notre onboarding non pas sur un entonnoir unidimensionnel classique, mais en utilisant une cha\u00eene de Markov. Nous avons inclus un peu plus d'\u00e9v\u00e9nements, lanc\u00e9 le script et obtenu ceci :<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habrastorage.org\/webt\/pi\/e6\/9p\/pie69p-4rmwaqdqqunigm3oz8am.png\"><img decoding=\"async\" alt=\"Comment nous utilisons les cha\u00eenes de Markov pour \u00e9valuer les d\u00e9cisions et rechercher des bogues. Avec un script en Python\" src=\"\/wp-content\/uploads\/2019\/10\/44c094cb0be013beac00c0af5a3801be.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p>Il est clair qu'il n'y a qu'une seule conclusion \u00e0 tirer dans ce chaos : quelque chose s'est mal pass\u00e9. Le processus d'onboarding est lin\u00e9aire, cela est inscrit dans le design, et il ne devrait en aucun cas y avoir une telle toile de liens. Or, il est imm\u00e9diatement \u00e9vident que l'utilisateur est balanc\u00e9 d'une \u00e9tape \u00e0 l'autre, entre lesquelles il ne devrait pas y avoir de transitions.<\/p>\n<p><img decoding=\"async\" alt=\"Comment nous utilisons les cha\u00eenes de Markov pour \u00e9valuer les d\u00e9cisions et rechercher des bogues. Avec un script en Python\" src=\"\/wp-content\/uploads\/2019\/10\/f43fcabaa7b773c17741b4eaa927b600.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nLes raisons de ce tableau \u00e9trange peuvent \u00eatre deux :<\/p>\n<ul>\n<li>des erreurs se sont gliss\u00e9es dans la base de logs ;<\/li>\n<li>des erreurs sont pr\u00e9sentes dans le produit lui-m\u00eame \u2014 l'onboarding.<\/li>\n<\/ul>\n<p>\nLa premi\u00e8re raison est probablement valable, mais la v\u00e9rifier est assez laborieux, et la correction des journaux ne va pas am\u00e9liorer l'exp\u00e9rience utilisateur. Pour ce qui est de la seconde, s'il y en avait une, il fallait agir rapidement. Nous avons donc commenc\u00e9 \u00e0 examiner les n\u0153uds, \u00e0 identifier les ar\u00eates qu'il ne devrait pas y avoir, \u00e0 chercher les causes de leur apparition. Nous avons constat\u00e9 que certains utilisateurs se retrouvaient bloqu\u00e9s dans une boucle, d'autres sortaient du milieu pour revenir au d\u00e9but, et d'autres encore ne pouvaient tout simplement pas sortir des deux premi\u00e8res \u00e9tapes. Nous avons transf\u00e9r\u00e9 les donn\u00e9es \u00e0 l'\u00e9quipe QA \u2014 et oui, il s'est av\u00e9r\u00e9 qu'il y avait de nombreux bugs dans le programme d'int\u00e9gration : c'est un produit un peu bricol\u00e9, qui n'a pas \u00e9t\u00e9 suffisamment test\u00e9 car aucun probl\u00e8me n'\u00e9tait attendu. Maintenant, l'ensemble du processus d'enregistrement a chang\u00e9.<\/p>\n<p>Cette histoire nous a montr\u00e9 une application inattendue des cha\u00eenes de Markov dans le domaine de la QA.<\/p>\n<h3>Essayez vous-m\u00eame !<\/h3>\n<p>\nJ'ai publi\u00e9 mon <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/BartolomeuD\/markov-chain\">script Python pour l'apprentissage des cha\u00eenes de Markov<\/a><\/noindex> en acc\u00e8s libre \u2014 profitez-en. La documentation est sur GitHub, vous pouvez poser des questions ici, j'essaierai de r\u00e9pondre \u00e0 toutes.<\/p>\n<p>Et voici des liens utiles : <noindex><a rel=\"nofollow\" href=\"https:\/\/networkx.github.io\/\">la biblioth\u00e8que NetworkX<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"http:\/\/www.graphviz.org\/\">le visualiseur Graphviz<\/a><\/noindex>. Et ici <noindex><a rel=\"nofollow\" href=\"http:\/\/habr.com\/ru\/post\/455762\">sur Habr, il y a un article<\/a><\/noindex> sur les cha\u00eenes de Markov. Les graphes dans l'article sont r\u00e9alis\u00e9s avec <noindex><a rel=\"nofollow\" href=\"https:\/\/gephi.org\/\">Gephi<\/a><\/noindex>.<br \/>\n<br \/>Source : <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/skyeng\/blog\/473124\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041d\u0430\u043c \u0432\u0430\u0436\u043d\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c, \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0441 \u043d\u0430\u0448\u0438\u043c\u0438 \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u0430\u043c\u0438 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f, \u0438 \u043a\u0430\u043a \u044d\u0442\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0432\u043b\u0438\u044f\u044e\u0442 \u043d\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u0432\u044b\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c Customer Journey Map \u2014 \u043a\u0430\u0440\u0442\u0443 \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u043e\u0433\u043e \u043e\u043f\u044b\u0442\u0430. \u0412\u0435\u0434\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u2014 \u043d\u0435 \u043d\u0435\u0447\u0442\u043e \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e\u0435 \u0438 \u0446\u0435\u043b\u044c\u043d\u043e\u0435, \u044d\u0442\u043e \u0446\u0435\u043f\u043e\u0447\u043a\u0430 \u0432\u0437\u0430\u0438\u043c\u043e\u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u0430, \u043f\u0440\u0438\u0447\u0435\u043c \u044d\u0442\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043c\u043e\u0433\u0443\u0442 \u0441\u0438\u043b\u044c\u043d\u043e \u043e\u0442\u043b\u0438\u0447\u0430\u0442\u044c\u0441\u044f \u0443 \u0440\u0430\u0437\u043d\u044b\u0445 \u0443\u0447\u0435\u043d\u0438\u043a\u043e\u0432. \u0412\u043e\u0442 \u043e\u043d [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":39547,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[702],"tags":[],"class_list":["post-39546","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-news"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041d\u0430\u043c \u0432\u0430\u0436\u043d\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c, \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0441 \u043d\u0430\u0448\u0438\u043c\u0438 \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u0430\u043c\u0438 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f, \u0438 \u043a\u0430\u043a \u044d\u0442\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0432\u043b\u0438\u044f\u044e\u0442 \u043d\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u0432\u044b\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c Customer Journey Map \u2014 \u043a\u0430\u0440\u0442\u0443 \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u043e\u0433\u043e \u043e\u043f\u044b\u0442\u0430.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/fr\/blog\/news\/kak-my-ispolzuem-tsepi-markova-v-otsenke-reshenij-i-poiske-bagov-so-skriptom-na-python\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"fr_FR\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041a\u0430\u043a \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0446\u0435\u043f\u0438 \u041c\u0430\u0440\u043a\u043e\u0432\u0430 \u0432 \u043e\u0446\u0435\u043d\u043a\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0439 \u0438 \u043f\u043e\u0438\u0441\u043a\u0435 \u0431\u0430\u0433\u043e\u0432. \u0421\u043e \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u043c \u043d\u0430 Python | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041d\u0430\u043c \u0432\u0430\u0436\u043d\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c, \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0441 \u043d\u0430\u0448\u0438\u043c\u0438 \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u0430\u043c\u0438 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f, \u0438 \u043a\u0430\u043a \u044d\u0442\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0432\u043b\u0438\u044f\u044e\u0442 \u043d\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u0432\u044b\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c Customer Journey Map \u2014 \u043a\u0430\u0440\u0442\u0443 \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u043e\u0433\u043e \u043e\u043f\u044b\u0442\u0430.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/fr\/blog\/news\/kak-my-ispolzuem-tsepi-markova-v-otsenke-reshenij-i-poiske-bagov-so-skriptom-na-python\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T19:35:27+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:35:27+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Comment nous utilisons les cha\u00eenes de Markov pour \u00e9valuer les solutions et identifier les bugs. Avec un script Python | ProHoster","description":"Il est important pour nous de comprendre ce qui se passe avec nos \u00e9tudiants pendant leur formation et comment ces \u00e9v\u00e9nements affectent les r\u00e9sultats, c'est pourquoi nous construisons une Customer Journey Map \u2014 la carte de l'exp\u00e9rience client.","canonical_url":"https:\/\/prohoster.info\/fr\/blog\/news\/kak-my-ispolzuem-tsepi-markova-v-otsenke-reshenij-i-poiske-bagov-so-skriptom-na-python","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"fr_FR","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041a\u0430\u043a \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0446\u0435\u043f\u0438 \u041c\u0430\u0440\u043a\u043e\u0432\u0430 \u0432 \u043e\u0446\u0435\u043d\u043a\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0439 \u0438 \u043f\u043e\u0438\u0441\u043a\u0435 \u0431\u0430\u0433\u043e\u0432. \u0421\u043e \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u043c \u043d\u0430 Python | ProHoster","og:description":"\u041d\u0430\u043c \u0432\u0430\u0436\u043d\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c, \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0441 \u043d\u0430\u0448\u0438\u043c\u0438 \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u0430\u043c\u0438 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f, \u0438 \u043a\u0430\u043a \u044d\u0442\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0432\u043b\u0438\u044f\u044e\u0442 \u043d\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u0432\u044b\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c Customer Journey Map \u2014 \u043a\u0430\u0440\u0442\u0443 \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u043e\u0433\u043e \u043e\u043f\u044b\u0442\u0430.","og:url":"https:\/\/prohoster.info\/fr\/blog\/news\/kak-my-ispolzuem-tsepi-markova-v-otsenke-reshenij-i-poiske-bagov-so-skriptom-na-python","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T19:35:27+00:00","article:modified_time":"2019-10-31T19:35:27+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"39546","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-24 02:13:24","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 17:16:25","updated":"2026-01-24 02:13:24","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/39546","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/comments?post=39546"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/39546\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media\/39547"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media?parent=39546"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/categories?post=39546"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/tags?post=39546"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}