{"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\/da\/blog\/news\/kak-my-ispolzuem-tsepi-markova-v-otsenke-reshenij-i-poiske-bagov-so-skriptom-na-python","title":{"rendered":"Hvordan vi bruger Markov-k\u00e6der til vurdering af beslutninger og fejls\u00f8gning. Med et script i Python","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Det er vigtigt for os at forst\u00e5, hvad der sker med vores studerende under deres uddannelse, og hvordan disse begivenheder p\u00e5virker resultatet. Derfor bygger vi en Customer Journey Map - en kortl\u00e6gning af kundeoplevelsen. Uddannelsesprocessen er ikke en kontinuerlig og ensartet proces, men en k\u00e6de af relaterede events og handlinger fra den studerende, hvor disse handlinger kan variere meget fra elev til elev. Han har gennemf\u00f8rt lektionen: hvad g\u00f8r han s\u00e5? G\u00e5r han videre til lektierne? Starter han mobilappen? \u00c6ndrer han kurset, beder om at skifte l\u00e6rer? G\u00e5r han straks til n\u00e6ste lektion? Eller forlader han bare skuffet? Er det muligt, ved at analysere dette kort, at identificere m\u00f8nstre, der f\u00f8rer til en vellykket afslutning af kurset eller tv\u00e6rtimod til at \u201dfalde fra\u201d for den studerende?<\/p>\n<p><img decoding=\"async\" alt=\"Hvordan vi bruger Markov-k\u00e6der til vurdering af beslutninger og fejls\u00f8gning. Med et script i Python\" src=\"\/wp-content\/uploads\/2019\/10\/3eaee2e858273669b4490f6ceb65d281.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNormalt anvendes der specialiserede, meget dyre v\u00e6rkt\u00f8jer med lukket kildekode til at opbygge CJM. Men vi \u00f8nskede at finde p\u00e5 noget simpelt, der kr\u00e6vede minimumsindsats og som helst skulle v\u00e6re open source. S\u00e5 ideen om at bruge Markov-k\u00e6der opstod - og det lykkedes os. Vi byggede et kort, fortolkede data om studerendes adf\u00e6rd i form af en graf, s\u00e5 nogle helt uventede svar p\u00e5 overordnede forretningssp\u00f8rgsm\u00e5l og fandt endda dybt skjulte bugs. Alt dette gjorde vi ved hj\u00e6lp af open source-l\u00f8sninger med Python-script. I denne artikel vil jeg fort\u00e6lle om to cases med de samme uventede resultater og dele scriptet med alle interesserede.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nS\u00e5 Markov-k\u00e6der viser sandsynligheder for overgange mellem begivenheder. Her er et primitivt eksempel fra Wikipedia:<\/p>\n<p><img decoding=\"async\" alt=\"Hvordan vi bruger Markov-k\u00e6der til vurdering af beslutninger og fejls\u00f8gning. Med et script i Python\" src=\"\/wp-content\/uploads\/2019\/10\/978e18169ba4c7b2b71787536e4bb219.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nHer er \u00abE\u00bb og \u00abA\u00bb begivenheder, pile angiver overgange mellem dem (inklusive overgangen fra en begivenhed til sig selv), og v\u00e6gtene p\u00e5 pilene angiver sandsynligheden for overgangen (\u00bbv\u00e6gte orienterede grafer\u00ab).<\/p>\n<h2>Hvad der blev brugt<\/h2>\n<p>\nK\u00e6den blev tr\u00e6net med standardfunktionaliteten i Python, hvor logfiler over studerendes aktivitet blev indl\u00e6st. Grafen i den modtagne matrix blev bygget med bibliotekerne NetworkX.<\/p>\n<p>Loggen ser s\u00e5dan ud:<\/p>\n<p><img decoding=\"async\" alt=\"Hvordan vi bruger Markov-k\u00e6der til vurdering af beslutninger og fejls\u00f8gning. Med et script i Python\" src=\"\/wp-content\/uploads\/2019\/10\/bc75077802cd7eeb00ebe4a56bc61050.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDet er en csv-fil, der indeholder en tabel med tre kolonner: studerendes id, betegnelse for begivenheden, tidspunktet hvor den fandt sted. Disse tre felter er tilstr\u00e6kkelige til at f\u00f8lge kundens bev\u00e6gelser, opbygge kortet og i sidste ende f\u00e5 en Markov-k\u00e6de.<\/p>\n<p>Biblioteket returnerer de konstruerede grafer i .dot eller .gexf format. For visualisering af de f\u00f8rste kan man bruge det gratis Graphviz-pakke (v\u00e6rkt\u00f8jet gvedit). Vi har arbejdet med .gexf og Gephi, som ogs\u00e5 er gratis.<\/p>\n<p>Jeg vil nu give to eksempler p\u00e5 brugen af Markov-k\u00e6der, som har givet os et nyt perspektiv p\u00e5 vores m\u00e5l, l\u00e6ringsprocesser og selve Skyeng-\u00f8kosystemet. Og ogs\u00e5 rette nogle fejl.<\/p>\n<h2>Det f\u00f8rste tilf\u00e6lde: mobilapplikationen<\/h2>\n<p>\nVi unders\u00f8gte f\u00f8rst studentens rejse gennem vores mest popul\u00e6re produkt \u2014 General-kurset. P\u00e5 det tidspunkt arbejdede jeg i Skyengs b\u00f8rneafdeling, og vi ville se, hvor effektivt mobilapplikationen fungerede for vores b\u00f8rnepublikum.<\/p>\n<p>Ved at tage logfilerne og k\u00f8re dem gennem et script, fik jeg noget som dette:<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habrastorage.org\/webt\/ws\/ru\/de\/wsrudeufw3pzwrrxtxtn1pjeqvu.png\"><img decoding=\"async\" alt=\"Hvordan vi bruger Markov-k\u00e6der til vurdering af beslutninger og fejls\u00f8gning. Med et script i Python\" src=\"\/wp-content\/uploads\/2019\/10\/f2533ddfae7d5f85d0e86902b9b7005f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p>Startknuden \u2014 Start General, og nedenunder tre udg\u00e5ende noder: eleven \"faldt i s\u00f8vn\", skiftede kursus, afsluttede kurset.<\/p>\n<ul>\n<li>Fell asleep, \"Faldt i s\u00f8vn\" \u2014 betyder, at han ikke l\u00e6ngere deltager i undervisningen; sandsynligvis er han ikke l\u00e6ngere aktiv. Vi kalder dette optimistisk for \"faldt i s\u00f8vn\", da han i teorien stadig har mulighed for at forts\u00e6tte sin uddannelse. Det v\u00e6rste resultat for os.<\/li>\n<li>Dropped general, Skiftede kursus \u2014 gik fra General til noget andet og er blevet v\u00e6k fra vores Markov-k\u00e6de.<\/li>\n<li>Finished course, Afsluttede kurset \u2014 en ideel tilstand; personen har gennemf\u00f8rt 80% af lektionerne (ikke alle lektioner er obligatoriske).<\/li>\n<\/ul>\n<p>\nIndtr\u00e6den i noden successful class betyder, at lektionen blev gennemf\u00f8rt succesfuldt p\u00e5 vores platform med l\u00e6reren. Den registrerer fremdriften i kurset og n\u00e6rmere sig \u00f8nsket resultat \u2014 \"Afsluttede kurset\". Det er vigtigt for os, at eleverne deltager i den s\u00e5 meget som muligt.<\/p>\n<p>For at f\u00e5 mere pr\u00e6cise kvantitative konklusioner for mobilapplikationen (noden app session) byggede vi separate k\u00e6der for hver af de afsluttende noder og sammenlignede derefter parvis v\u00e6gtene af kanterne:<\/p>\n<ul>\n<li>fra app session tilbage til den samme;<\/li>\n<li>fra app session til successful class;<\/li>\n<li>fra successful class til app session.<\/li>\n<\/ul>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/habrastorage.org\/webt\/iw\/mz\/yq\/iwmzyqmlmbkgzmjqa7qhxwd7shq.png\"><img decoding=\"async\" alt=\"Hvordan vi bruger Markov-k\u00e6der til vurdering af beslutninger og fejls\u00f8gning. Med et script i Python\" src=\"\/wp-content\/uploads\/2019\/10\/fc68ca73b379f57a38b53f0c31e75cb1.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><br \/>\n<i>Til venstre \u2014 studerende, der har afsluttet kurset; til h\u00f8jre \u2014 \"faldet i s\u00f8vn\".<\/i><\/p>\n<p>Disse tre kanter viser forbindelsen mellem studentens succes og brugen af mobilapplikationen. Vi forventede at se, at de studerende, der har afsluttet kurset, ville have en st\u00e6rkere forbindelse til applikationen end de \"faldet i s\u00f8vn\". Men i realiteten fik vi pr\u00e6cist de modsatte resultater:<\/p>\n<ul>\n<li>Vi blev overbevist om, at forskellige brugergrupper interagerer forskelligt med mobilapplikationen.<\/li>\n<li>Succesful studerende bruger mindre intensivt mobilapplikationen;<\/li>\n<li>Sovende studerende bruger mere aktivt mobilapplikationen.<\/li>\n<\/ul>\n<p>\nDet betyder, at 'sovende' studerende begynder at tilbringe mere og mere tid i mobilapplikationen og i sidste ende forbliver der for altid.<\/p>\n<p><img decoding=\"async\" alt=\"Hvordan vi bruger Markov-k\u00e6der til vurdering af beslutninger og fejls\u00f8gning. Med et script i Python\" src=\"\/wp-content\/uploads\/2019\/10\/45c17a908e2178edd99e340f34657cad.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nF\u00f8rst blev vi overraskede, men efter at have t\u00e6nkt over det, inds\u00e5 vi, at det er en helt naturlig effekt. I sin tid studerede jeg fransk for egen h\u00e5nd ved at bruge to v\u00e6rkt\u00f8jer: mobilapplikationen og grammatikforel\u00e6sninger p\u00e5 YouTube. I starten delte jeg tiden mellem dem i forholdet 50 til 50. Men applikationen er sjovere, der er gamification, alt er simpelt, hurtigt og tydeligt, mens man i forel\u00e6sningerne skal forst\u00e5, skrive noget ned og \u00f8ve sig i notebogen. Med tiden begyndte jeg at tilbringe mere tid p\u00e5 min smartphone, indtil andelen n\u00e5ede op p\u00e5 100%: hvis man bruger tre timer i den, skabes der en falsk f\u00f8lelse af gennemf\u00f8rt arbejde, hvilket g\u00f8r, at man ikke har nogen lyst til at g\u00e5 ud og lytte til noget.<\/p>\n<p>Men hvordan kan det v\u00e6re? For vi skabte jo netop mobilapplikationen, <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/skyeng\/blog\/312126\/\">integrerede Ebbinghaus-kurven<\/a><\/noindex>, gamificerede den, gjorde den attraktiv, s\u00e5 folk bruger tid i den, men det viser sig, at den kun distraherer dem? Den reelle \u00e5rsag er, at teamet bag mobilapplikationen har klaret deres opgaver s\u00e5 godt, at den er blevet et fantastisk selvst\u00e6ndigt produkt og er begyndt at falde ud af vores \u00f8kosystem.<\/p>\n<p>Som et resultat af unders\u00f8gelsen kom vi til forst\u00e5else for, at mobilapplikationen skal \u00e6ndres p\u00e5 en m\u00e5de, s\u00e5 den mindre afleder fra det prim\u00e6re l\u00e6ringsforl\u00f8b. Dette g\u00e6lder b\u00e5de for b\u00f8rn og voksne. Dette arbejde er i gang.<\/p>\n<h2>Andet tilf\u00e6lde: onboarding-bugs<\/h2>\n<p>\nOnboarding er en valgfri supplerende procedure ved registrering af nye elever, som fjerner potentielle tekniske problemer i fremtiden. Det grundl\u00e6ggende scenario indeb\u00e6rer, at personen registrerer sig p\u00e5 landing-siden, f\u00e5r adgang til deres personlige konto, bliver kontaktet og f\u00e5r en introduktionslektion. Vi bem\u00e6rker dog en stor procentdel af tekniske vanskeligheder under introduktionslektionen: forkert version af browseren, mikrofon eller lyd fungerer ikke, l\u00e6reren kan ikke straks give en l\u00f8sning, og alt dette er s\u00e6rligt udfordrende, n\u00e5r det drejer sig om b\u00f8rn. Derfor har vi udviklet en supplerende applikation i den personlige konto, hvor man kan udf\u00f8re fire enkle trin: kontrollere browseren, kameraet, mikrofonen og bekr\u00e6fte, at for\u00e6ldrene vil v\u00e6re til stede under introduktionslektionen (for det er dem, der betaler for b\u00f8rns uddannelse).<\/p>\n<p>Disse f\u00e5 sider om onboarding viste f\u00f8lgende tragt:<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habrastorage.org\/webt\/l5\/pt\/aj\/l5ptajlgx6msydvswctke1w505w.jpeg\"><img decoding=\"async\" alt=\"Hvordan vi bruger Markov-k\u00e6der til vurdering af beslutninger og fejls\u00f8gning. Med et script i Python\" src=\"\/wp-content\/uploads\/2019\/10\/5e949640d4d4f8a70dc4fd677e3c93a7.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><br \/>\n<i>1: startblok med tre lidt forskellige (afh\u00e6ngig af kunden) login-password formularer.<br \/>\n2: afkrydsningsfelt for accept af den supplerende onboarding-procedure.<br \/>\n2.1-2.3: kontrol af for\u00e6ldres tilstedev\u00e6relse, version af Chrome og lyd.<br \/>\n3: den afsluttende blok.<\/i><\/p>\n<p>Det ser meget naturligt ud: i de f\u00f8rste to trin falder st\u00f8rstedelen af bes\u00f8gende fra, n\u00e5r de indser, at de skal udfylde noget, kontrollere, og at der ikke er tid. Hvis kunden n\u00e5r til tredje trin \u2014 s\u00e5 er de n\u00e6sten garanteret til at n\u00e5 til slutningen. I tragten ses ikke nogen \u00e5rsager til at mist\u00e6nke noget.<\/p>\n<p>Vi besluttede alligevel at analysere vores onboarding ikke p\u00e5 den klassiske endimensionale tragt, men ved hj\u00e6lp af Markov-k\u00e6den. Vi inkluderede lidt flere begivenheder, k\u00f8rte scriptet og opn\u00e5ede f\u00f8lgende:<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habrastorage.org\/webt\/pi\/e6\/9p\/pie69p-4rmwaqdqqunigm3oz8am.png\"><img decoding=\"async\" alt=\"Hvordan vi bruger Markov-k\u00e6der til vurdering af beslutninger og fejls\u00f8gning. Med et script i Python\" src=\"\/wp-content\/uploads\/2019\/10\/44c094cb0be013beac00c0af5a3801be.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p>Man kan kun forst\u00e5 \u00e9n ting i dette kaos: at noget gik galt. Onboarding-processen er line\u00e6r, det er indbygget i designet, og der b\u00f8r ikke v\u00e6re et s\u00e5dant netv\u00e6rk af forbindelser. Her ses det straks, at brugeren kastes mellem trin, hvor der slet ikke b\u00f8r v\u00e6re overgange.<\/p>\n<p><img decoding=\"async\" alt=\"Hvordan vi bruger Markov-k\u00e6der til vurdering af beslutninger og fejls\u00f8gning. Med et script i Python\" src=\"\/wp-content\/uploads\/2019\/10\/f43fcabaa7b773c17741b4eaa927b600.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDer kan v\u00e6re to \u00e5rsager til dette m\u00e6rkelige billede:<\/p>\n<ul>\n<li>fejl er sneget ind i logdatabasen;<\/li>\n<li>fejl findes i selve produktet \u2014 onboarding-processen.<\/li>\n<\/ul>\n<p>\nDen f\u00f8rste \u00e5rsag er sandsynligvis til stede, men det er ret arbejdsintensivt at kontrollere, og reparation af logs vil ikke forbedre UX. Men hvad ang\u00e5r den anden, hvis den findes, skulle vi hurtigt have gjort noget. Derfor gik vi i gang med at unders\u00f8ge noderne, identificere kanter, der ikke burde v\u00e6re der, og finde \u00e5rsagerne til deres forekomst. Vi s\u00e5, at nogle brugere stod fast og gik i cirkler, andre r\u00f8g ud fra midten tilbage til starten, mens tredje gruppe generelt ikke kunne komme v\u00e6k fra de f\u00f8rste to trin. Vi sendte dataene til QA \u2014 og ja, det viste sig, at der var mange fejl i onboarding-processen: det var et biprodukt, lidt klodset, og det var ikke blevet testet grundigt, da vi ikke forventede problemer. Nu er hele tilmeldingsprocessen \u00e6ndret.<\/p>\n<p>Denne historie viste os en uventet anvendelse af Markov-k\u00e6der inden for QA.<\/p>\n<h3>Pr\u00f8v selv!<\/h3>\n<p>\nJeg har lagt min <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/BartolomeuD\/markov-chain\">Python-script til tr\u00e6ning af Markov-k\u00e6der<\/a><\/noindex> tilg\u00e6ngeligt \u2014 brug det gerne. Dokumentationen findes p\u00e5 GitHub, sp\u00f8rgsm\u00e5l kan stilles her, jeg vil fors\u00f8ge at besvare dem alle.<\/p>\n<p>Og nogle nyttige links: <noindex><a rel=\"nofollow\" href=\"https:\/\/networkx.github.io\/\">NetworkX-biblioteket<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"http:\/\/www.graphviz.org\/\">Graphviz-visualisatoren<\/a><\/noindex>. Og her <noindex><a rel=\"nofollow\" href=\"http:\/\/habr.com\/ru\/post\/455762\">p\u00e5 Habr er der en artikel<\/a><\/noindex> om Markov-k\u00e6der. Grafene i artiklen er lavet med <noindex><a rel=\"nofollow\" href=\"https:\/\/gephi.org\/\">Gephi.<\/a><\/noindex>.<br \/>\n<br \/>Kilde: <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.3 - 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\/da\/blog\/news\/kak-my-ispolzuem-tsepi-markova-v-otsenke-reshenij-i-poiske-bagov-so-skriptom-na-python\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"da_DK\" \/>\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\/da\/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\udd47Hvordan vi bruger Markov-k\u00e6der til evaluering af beslutninger og fejls\u00f8gning. Med script p\u00e5 Python | ProHoster","description":"Det er vigtigt for os at forst\u00e5, hvad der sker med vores studerende under undervisningen, og hvordan disse begivenheder p\u00e5virker resultatet, derfor opbygger vi et Customer Journey Map \u2014 et kort over kundeoplevelsen.","canonical_url":"https:\/\/prohoster.info\/da\/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":"da_DK","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\/da\/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\/da\/wp-json\/wp\/v2\/posts\/39546","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/comments?post=39546"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts\/39546\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media\/39547"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media?parent=39546"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/categories?post=39546"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/tags?post=39546"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}