{"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\/it\/blog\/news\/kak-my-ispolzuem-tsepi-markova-v-otsenke-reshenij-i-poiske-bagov-so-skriptom-na-python","title":{"rendered":"Come utilizziamo le catene di Markov nella valutazione delle decisioni e nella ricerca di bug. Con uno script in Python","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>\u00c8 importante comprendere cosa accade ai nostri studenti durante l'apprendimento e come questi eventi influenzino il risultato, quindi stiamo creando una Customer Journey Map - una mappa dell'esperienza del cliente. Infatti, il processo di apprendimento non \u00e8 continuo e omogeneo, ma una sequenza di eventi e azioni correlate degli studenti, le cui azioni possono variare notevolmente da studente a studente. Dunque, dopo aver completato una lezione: cosa far\u00e0 dopo? Andr\u00e0 a fare i compiti? Avvier\u00e0 l'app mobile? Cambier\u00e0 corso, chieder\u00e0 di cambiare insegnante? Entrer\u00e0 direttamente nella prossima lezione? O lascer\u00e0 semplicemente insoddisfatto? \u00c8 possibile, analizzando questa mappa, identificare schemi che portano a un completamento con successo del corso o, al contrario, all'abbandono dello studente?<\/p>\n<p><img decoding=\"async\" alt=\"Come utilizziamo le catene di Markov nella valutazione delle decisioni e nella ricerca di bug. Con uno script in Python\" src=\"\/wp-content\/uploads\/2019\/10\/3eaee2e858273669b4490f6ceb65d281.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDi solito, per costruire il CJM si utilizzano strumenti specializzati, piuttosto costosi e con codice chiuso. Ma noi volevamo ideare qualcosa di semplice, che richiedesse uno sforzo minimo e, se possibile, open source. \u00c8 cos\u00ec che \u00e8 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 grafo, visto risposte completamente inattese a domande globali di business e persino trovato bug profondamente nascosti. Tutto ci\u00f2 l'abbiamo fatto grazie a soluzioni open source in uno script Python. In questo articolo parler\u00f2 di due casi con quegli stessi risultati poco evidenti e condivider\u00f2 lo script con tutti i desiderosi.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nQuindi, le catene di Markov mostrano la probabilit\u00e0 di transizioni tra eventi. Ecco un esempio primitivo da Wikipedia:<\/p>\n<p><img decoding=\"async\" alt=\"Come utilizziamo le catene di Markov nella valutazione delle decisioni e nella ricerca di bug. Con uno script in Python\" src=\"\/wp-content\/uploads\/2019\/10\/978e18169ba4c7b2b71787536e4bb219.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nQui, \"E\" e \"A\" sono eventi, le frecce sono le transizioni tra di essi (compresa la transizione da un evento a se stesso), e i pesi delle frecce sono la probabilit\u00e0 di transizione (\"grafo orientato pesato\").<\/p>\n<h2>Cosa abbiamo usato<\/h2>\n<p>\nLa catena \u00e8 stata addestrata con le funzionalit\u00e0 standard di Python, ai quali sono stati forniti i log delle attivit\u00e0 degli studenti. Il grafo sulla matrice ottenuta \u00e8 stato costruito con la libreria NetworkX.<\/p>\n<p>Il log appare cos\u00ec:<\/p>\n<p><img decoding=\"async\" alt=\"Come utilizziamo le catene di Markov nella valutazione delle decisioni e nella ricerca di bug. Con uno script in Python\" src=\"\/wp-content\/uploads\/2019\/10\/bc75077802cd7eeb00ebe4a56bc61050.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u00c8 un file csv che contiene una tabella di tre colonne: id studente, nome dell'evento, momento in cui \u00e8 avvenuto. Questi tre campi sono sufficienti per tracciare i movimenti del cliente, costruire una mappa e infine ottenere una catena di Markov.<\/p>\n<p>La biblioteca restituisce i grafi costruiti in formato .dot o .gexf. Per visualizzare i primi, \u00e8 possibile utilizzare il pacchetto gratuito Graphviz (strumento gvedit); noi abbiamo lavorato con .gexf e Gephi, anch'esso gratuito.<\/p>\n<p>Voglio ora presentare due esempi di utilizzo delle catene di Markov che ci hanno permesso di rivedere i nostri obiettivi, i processi di apprendimento e l'ecosistema Skyeng. E di correggere i bug.<\/p>\n<h2>Primo caso: applicazione mobile<\/h2>\n<p>\nPer iniziare, abbiamo esaminato il percorso dello studente nel nostro prodotto pi\u00f9 popolare: il corso General. In quel momento lavoravo nel dipartimento bambini di Skyeng e volevamo vedere quanto fosse efficace l'app mobile con il nostro pubblico infantile.<\/p>\n<p>Prendendo i log e facendoli passare attraverso uno script, ho ottenuto qualcosa di simile:<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habrastorage.org\/webt\/ws\/ru\/de\/wsrudeufw3pzwrrxtxtn1pjeqvu.png\"><img decoding=\"async\" alt=\"Come utilizziamo le catene di Markov nella valutazione delle decisioni e nella ricerca di bug. Con uno script in Python\" src=\"\/wp-content\/uploads\/2019\/10\/f2533ddfae7d5f85d0e86902b9b7005f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p>Nodo iniziale \u2014 Start General, e in basso ci sono tre nodi di uscita: lo studente \"si \u00e8 addormentato\", ha cambiato corso, ha finito il corso.<\/p>\n<ul>\n<li>Si \u00e8 addormentato, \"Zasnul\" \u2014 significa che non partecipa pi\u00f9 alle lezioni, molto probabilmente ha abbandonato. Noi lo chiamiamo ottimisticamente \"si \u00e8 addormentato\", poich\u00e9 in teoria ha ancora la possibilit\u00e0 di continuare l'apprendimento. \u00c8 il risultato peggiore per noi.<\/li>\n<li>Cambiato corso, ha cambiato da General a qualcos'altro e si \u00e8 perso per la nostra catena di Markov.<\/li>\n<li>Finito il corso \u2014 condizione ideale, la persona ha completato l'80% delle lezioni (non tutte le lezioni sono obbligatorie).<\/li>\n<\/ul>\n<p>\nL'arrivo nel nodo corso riuscito indica il superamento con successo della lezione sulla nostra piattaforma insieme all'insegnante. Essa registra i progressi nel corso e la vicinanza al risultato desiderato \u2014 \"Finito il corso\". \u00c8 importante per noi che gli studenti partecipino il pi\u00f9 possibile.<\/p>\n<p>Per ottenere conclusioni quantitative pi\u00f9 precise per l'app mobile (nodo sessione app), abbiamo costruito catene separate per ciascun nodo finale e poi confrontato i pesi degli archi a coppie:<\/p>\n<ul>\n<li>dalla sessione app di nuovo a se stessa;<\/li>\n<li>dalla sessione app al corso riuscito;<\/li>\n<li>dal corso riuscito alla sessione 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=\"Come utilizziamo le catene di Markov nella valutazione delle decisioni e nella ricerca di bug. Con uno script in Python\" src=\"\/wp-content\/uploads\/2019\/10\/fc68ca73b379f57a38b53f0c31e75cb1.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><br \/>\n<i>A sinistra \u2014 studenti che hanno finito il corso, a destra \u2014 \"si sono addormentati\"<\/i><\/p>\n<p>Questi tre archi mostrano la connessione tra il successo dello studente e l'uso dell'app mobile. Ci aspettavamo di vedere che tra gli studenti che hanno finito il corso, la connessione con l'app fosse pi\u00f9 forte rispetto a quelli che si sono \"addormentati\". Tuttavia, in realt\u00e0 abbiamo ottenuto risultati opposti:<\/p>\n<ul>\n<li>ci siamo resi conto che diversi gruppi di utenti interagiscono in modo diverso con l'app mobile;<\/li>\n<li>gli studenti di successo utilizzano meno intensamente l'app mobile;<\/li>\n<li>gli studenti che si addormentano utilizzano l'app mobile in modo pi\u00f9 attivo.<\/li>\n<\/ul>\n<p>\nQuesto significa che gli studenti \"che si addormentano\" iniziano a trascorrere sempre pi\u00f9 tempo nell'app mobile e alla fine ci rimangono per sempre.<\/p>\n<p><img decoding=\"async\" alt=\"Come utilizziamo le catene di Markov nella valutazione delle decisioni e nella ricerca di bug. Con uno script in Python\" src=\"\/wp-content\/uploads\/2019\/10\/45c17a908e2178edd99e340f34657cad.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nInizialmente siamo rimasti sorpresi, ma riflettendoci abbiamo capito che si tratta di un effetto del tutto comprensibile. Tempo fa, ho studiato francese da solo, utilizzando due strumenti: l'app mobile e le lezioni di grammatica su YouTube. All'inizio dividevo il tempo tra di essi in modo equo, 50 e 50. Tuttavia, l'app \u00e8 pi\u00f9 divertente, ci sono elementi di gamification, \u00e8 tutto semplice, rapido e chiaro, mentre nelle lezioni bisogna comprendere, prendere appunti e fare esercizi su un quaderno. Gradualmente ho iniziato a trascorrere pi\u00f9 tempo sullo smartphone, fino a quando la sua quota non \u00e8 salita al 100%: se si sta un'ora l\u00ec dentro, si ha una falsa sensazione di aver lavorato, per cui non c'\u00e8 alcun desiderio di andare a ascoltare qualcosa.<\/p>\n<p>Ma com'\u00e8 possibile? Abbiamo creato apposta un'app mobile, <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/skyeng\/blog\/312126\/\">integrando la curva di Ebbinghaus,<\/a><\/noindex>, gamificando, rendendola attraente per far s\u00ec che le persone ci trascorrano del tempo, e invece essa le distrae? In realt\u00e0, la ragione \u00e8 che il team dell'app mobile ha svolto cos\u00ec bene il proprio lavoro che essa \u00e8 diventata un prodotto autonomo e straordinario, uscendo dalla nostra ecosistema.<\/p>\n<p>Alla fine della ricerca, abbiamo capito che l'app mobile deve essere modificata in modo che distolga meno dal corso principale dell'apprendimento. E questo vale sia per i bambini che per gli adulti. Attualmente \u00e8 in corso questo lavoro.<\/p>\n<h2>Secondo caso: bug dell'onboarding<\/h2>\n<p>\nL'onboarding \u00e8 una procedura aggiuntiva non obbligatoria durante la registrazione di un nuovo studente, che elimina potenziali problemi tecnici futuri. Lo scenario di base prevede che l'individuo si registri sulla landing page, ottenga accesso al proprio account personale, venga contattato e partecipi a una lezione introduttiva. In questo frangente, abbiamo notato un alto tasso di difficolt\u00e0 tecniche durante la lezione introduttiva: versione del browser errata, microfono o audio non funzionanti, l'insegnante non riesce subito a suggerire una soluzione, il che risulta particolarmente complicato quando si tratta di bambini. Pertanto, abbiamo sviluppato un'applicazione aggiuntiva nell'account personale, dove \u00e8 possibile seguire quattro semplici passaggi: controllare il browser, la videocamera, il microfono e confermare che i genitori saranno presenti durante la lezione introduttiva (dopotutto, sono loro a pagare per l'istruzione dei bambini).<\/p>\n<p>Queste poche pagine di onboarding dimostravano un funnel di questo tipo:<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habrastorage.org\/webt\/l5\/pt\/aj\/l5ptajlgx6msydvswctke1w505w.jpeg\"><img decoding=\"async\" alt=\"Come utilizziamo le catene di Markov nella valutazione delle decisioni e nella ricerca di bug. Con uno script in Python\" src=\"\/wp-content\/uploads\/2019\/10\/5e949640d4d4f8a70dc4fd677e3c93a7.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><br \/>\n<i>1: blocco iniziale con tre moduli di accesso login-password che differiscono leggermente (a seconda del cliente).<br \/>\n2: firma per l'approvazione della procedura di onboarding aggiuntiva.<br \/>\n2.1-2.3: verifica della presenza di un genitore, della versione di Chrome e dell'audio.<br \/>\n3: blocco finale.<\/i><\/p>\n<p>Appare molto naturale: nei primi due passaggi la maggior parte dei visitatori abbandona, rendendosi conto che qui devono compilare qualcosa, controllare, e non hanno tempo. Se un cliente raggiunge il terzo passaggio, \u00e8 quasi certo che arriver\u00e0 alla fine. Nel funnel non si vedono motivi per sospettare nulla.<\/p>\n<p>Tuttavia, abbiamo deciso di analizzare il nostro onboarding non attraverso il classico funnel unidimensionale, ma utilizzando una catena di Markov. Abbiamo incluso un numero maggiore di eventi, eseguito uno script e ottenuto questo:<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habrastorage.org\/webt\/pi\/e6\/9p\/pie69p-4rmwaqdqqunigm3oz8am.png\"><img decoding=\"async\" alt=\"Come utilizziamo le catene di Markov nella valutazione delle decisioni e nella ricerca di bug. Con uno script in Python\" src=\"\/wp-content\/uploads\/2019\/10\/44c094cb0be013beac00c0af5a3801be.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p>In questo caos, si pu\u00f2 comprendere con certezza solo una cosa: qualcosa non ha funzionato. Il processo di onboarding \u00e8 lineare, questo \u00e8 ci\u00f2 che il design prevede, non dovrebbe esserci una tale rete di connessioni. Qui \u00e8 evidente che l'utente viene spostato tra passaggi, tra i quali non dovrebbero esserci transizioni.<\/p>\n<p><img decoding=\"async\" alt=\"Come utilizziamo le catene di Markov nella valutazione delle decisioni e nella ricerca di bug. Con uno script in Python\" src=\"\/wp-content\/uploads\/2019\/10\/f43fcabaa7b773c17741b4eaa927b600.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nLe ragioni di questo strano quadro potrebbero essere due:<\/p>\n<ul>\n<li>errori si sono infiltrati nel database dei log;<\/li>\n<li>errori sono presenti nel prodotto stesso \u2014 nell'onboarding.<\/li>\n<\/ul>\n<p>\nLa prima ragione, probabilmente, \u00e8 valida, ma verificarla \u00e8 piuttosto laborioso, e correggere i log non aiuter\u00e0 a migliorare l'UX. Per quanto riguarda la seconda, se esiste, bisognava agire urgentemente. Cos\u00ec abbiamo iniziato a esaminare i nodi, identificare i bordi che non dovevano esserci e cercare le ragioni della loro apparizione. Abbiamo visto che alcuni utenti si bloccavano e giravano in tondo, altri \u2014 cadevano da met\u00e0 all'inizio, altri ancora non riuscivano affatto a superare i primi due passaggi. Abbiamo inviato i dati al QA \u2014 e s\u00ec, si \u00e8 scoperto che c'erano diversi bug nel processo di onboarding: \u00e8 un prodotto secondario, un po' di ripiego, che non \u00e8 stato testato abbastanza a fondo, poich\u00e9 non ci si aspettava alcun problema. Ora l'intero processo di registrazione \u00e8 cambiato.<\/p>\n<p>Questa storia ci ha mostrato un'applicazione inaspettata delle catene di Markov nel campo del QA.<\/p>\n<h3>Provalo tu stesso!<\/h3>\n<p>\nHo pubblicato il mio <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/BartolomeuD\/markov-chain\">script Python per l'apprendimento delle catene di Markov<\/a><\/noindex> in accesso aperto \u2014 usalo pure. La documentazione \u00e8 su GitHub, puoi porre domande qui, cercher\u00f2 di rispondere a tutto.<\/p>\n<p>Ecco alcuni link utili: <noindex><a rel=\"nofollow\" href=\"https:\/\/networkx.github.io\/\">la libreria NetworkX<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"http:\/\/www.graphviz.org\/\">il visualizzatore Graphviz<\/a><\/noindex>. Ma qui <noindex><a rel=\"nofollow\" href=\"http:\/\/habr.com\/ru\/post\/455762\">su Habr c'\u00e8 un articolo<\/a><\/noindex> sulle catene di Markov. I grafi nell'articolo sono stati realizzati con <noindex><a rel=\"nofollow\" href=\"https:\/\/gephi.org\/\">Gephi<\/a><\/noindex>.<br \/>\n<br \/>Fonte: <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.1.1 - 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\/it\/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.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"it_IT\" \/>\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\/it\/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\udd47Come utilizziamo le catene di Markov nella valutazione delle soluzioni e nella ricerca di bug. Con uno script in Python | ProHoster","description":"\u00c8 importante capire cosa succede ai nostri studenti durante l'apprendimento e come questi eventi influenzano il risultato, quindi stiamo costruendo una Customer Journey Map \u2014 una mappa dell'esperienza del cliente.","canonical_url":"https:\/\/prohoster.info\/it\/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":"it_IT","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\/it\/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\/it\/wp-json\/wp\/v2\/posts\/39546","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/comments?post=39546"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/39546\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media\/39547"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media?parent=39546"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/categories?post=39546"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/tags?post=39546"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}