{"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\/sv\/blog\/news\/kak-my-ispolzuem-tsepi-markova-v-otsenke-reshenij-i-poiske-bagov-so-skriptom-na-python","title":{"rendered":"Hur vi anv\u00e4nder Markovkedjor f\u00f6r att utv\u00e4rdera beslut och hitta buggar. Med ett skript i Python","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Vi anser att det \u00e4r viktigt att f\u00f6rst\u00e5 vad som h\u00e4nder med v\u00e5ra studenter under utbildningen och hur dessa h\u00e4ndelser p\u00e5verkar resultatet. D\u00e4rf\u00f6r bygger vi en Customer Journey Map \u2014 en karta \u00f6ver kundupplevelsen. Utbildningsprocessen \u00e4r inte en kontinuerlig och enhetlig process utan en kedja av sammanl\u00e4nkade h\u00e4ndelser och studentens handlingar, d\u00e4r dessa handlingar kan variera kraftigt mellan olika elever. Han har genomf\u00f6rt lektionen: vad g\u00f6r han h\u00e4rn\u00e4st? Kommer han att g\u00e5 vidare till l\u00e4xan? Ska han starta mobilappen? Kommer han att byta kurs, be om en ny l\u00e4rare? G\u00e5r han direkt till n\u00e4sta lektion? Eller kommer han bara att l\u00e4mna besviken? Kan vi genom att analysera denna karta identifiera m\u00f6nster som leder till en framg\u00e5ngsrik kursavslutning eller tv\u00e4rtom, en elev som \u201dfaller bort\u201d?<\/p>\n<p><img decoding=\"async\" alt=\"Hur vi anv\u00e4nder Markovkedjor f\u00f6r att utv\u00e4rdera beslut och hitta buggar. Med ett skript i Python\" src=\"\/wp-content\/uploads\/2019\/10\/3eaee2e858273669b4490f6ceb65d281.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nVanligtvis anv\u00e4nds specialiserade, ganska kostsamma verktyg med st\u00e4ngd kod f\u00f6r att bygga CJM. Men vi ville komma p\u00e5 n\u00e5got enkelt, som kr\u00e4ver minimala anstr\u00e4ngningar och som i m\u00f6jligaste m\u00e5n \u00e4r \u00f6ppen k\u00e4llkod. S\u00e5 f\u00f6ddes id\u00e9n att anv\u00e4nda Markovkedjor \u2014 och vi lyckades. Vi byggde en karta, tolkade data om studenternas beteende i form av en graf, s\u00e5g helt ovisade svar p\u00e5 globala aff\u00e4rsfr\u00e5gor och till och med hittade djupt begravda buggar. Allt detta gjorde vi med hj\u00e4lp av \u00f6ppen k\u00e4llkods-l\u00f6sningar i Python-skript. I den h\u00e4r artikeln kommer jag att ber\u00e4tta om tv\u00e5 fall med just dessa ovisade resultat och dela skriptet med alla intresserade.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nS\u00e5, Markovkedjor visar sannolikheterna f\u00f6r \u00f6verg\u00e5ngar mellan h\u00e4ndelser. H\u00e4r \u00e4r ett enkelt exempel fr\u00e5n Wikipedia:<\/p>\n<p><img decoding=\"async\" alt=\"Hur vi anv\u00e4nder Markovkedjor f\u00f6r att utv\u00e4rdera beslut och hitta buggar. Med ett skript i Python\" src=\"\/wp-content\/uploads\/2019\/10\/978e18169ba4c7b2b71787536e4bb219.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nH\u00e4r representerar \"E\" och \"A\" h\u00e4ndelserna, pilarna representerar \u00f6verg\u00e5ngarna mellan dem (inklusive \u00f6verg\u00e5ngar fr\u00e5n en h\u00e4ndelse till sig sj\u00e4lv), och vikterna p\u00e5 pilarna representerar sannolikheten f\u00f6r \u00f6verg\u00e5ngen (\"vikta riktade grafer\").<\/p>\n<h2>Vad som anv\u00e4ndes<\/h2>\n<p>\nKedjan tr\u00e4nades med standardfunktioner i Python, d\u00e4r loggar \u00f6ver studenternas aktivitet matades in. Grafen p\u00e5 den resulterande matrisen byggdes med biblioteket NetworkX.<\/p>\n<p>Loggen ser ut s\u00e5 h\u00e4r:<\/p>\n<p><img decoding=\"async\" alt=\"Hur vi anv\u00e4nder Markovkedjor f\u00f6r att utv\u00e4rdera beslut och hitta buggar. Med ett skript i Python\" src=\"\/wp-content\/uploads\/2019\/10\/bc75077802cd7eeb00ebe4a56bc61050.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDetta \u00e4r en csv-fil som inneh\u00e5ller en tabell med tre kolumner: studentens id, h\u00e4ndelsens namn, tidpunkten n\u00e4r den intr\u00e4ffade. Dessa tre f\u00e4lt \u00e4r tillr\u00e4ckliga f\u00f6r att sp\u00e5ra kundens r\u00f6relser, bygga en karta och slutligen skapa en Markovkedja.<\/p>\n<p>Biblioteket returnerar byggda grafer i .dot eller .gexf-format. F\u00f6r visualisering av det f\u00f6rsta kan man anv\u00e4nda det kostnadsfria paketet Graphviz (verktyget gvedit). Vi har arbetat med .gexf och Gephi, som ocks\u00e5 \u00e4r kostnadsfritt.<\/p>\n<p>D\u00e4refter vill jag ge tv\u00e5 exempel p\u00e5 anv\u00e4ndningen av Markovkedjor som har gjort att vi har f\u00e5tt en ny syn p\u00e5 v\u00e5ra m\u00e5l, inl\u00e4rningsprocesser och sj\u00e4lva ekosystemet Skyeng. Och ocks\u00e5 r\u00e4ttat till buggar.<\/p>\n<h2>F\u00f6rsta fallet: mobilapplikationen<\/h2>\n<p>\nTill att b\u00f6rja med unders\u00f6kte vi studentens v\u00e4g genom v\u00e5r mest popul\u00e4ra produkt \u2014 kursen General. Vid den tidpunkten arbetade jag i Skyengs barnavdelning och vi ville se hur effektivt mobilapplikationen fungerar med v\u00e5r barnaudience.<\/p>\n<p>Jag tog loggar och k\u00f6rde dem genom ett skript, och fick n\u00e5got s\u00e5dant:<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habrastorage.org\/webt\/ws\/ru\/de\/wsrudeufw3pzwrrxtxtn1pjeqvu.png\"><img decoding=\"async\" alt=\"Hur vi anv\u00e4nder Markovkedjor f\u00f6r att utv\u00e4rdera beslut och hitta buggar. Med ett skript i Python\" src=\"\/wp-content\/uploads\/2019\/10\/f2533ddfae7d5f85d0e86902b9b7005f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p>Startknut \u2014 Start General, och l\u00e4ngst ner tre utg\u00e5ende noder: eleven \"somnade\", bytte kurs, avslutade kursen.<\/p>\n<ul>\n<li>Fell asleep, \"Somnade\" \u2014 vilket betyder att han inte l\u00e4ngre deltar i lektioner, troligtvis har han f\u00f6rsvunnit. Vi kallar optimistiskt detta tillst\u00e5nd \"somnade\", eftersom han teoretiskt fortfarande har m\u00f6jlighet att forts\u00e4tta l\u00e4ra sig. Det s\u00e4msta resultatet f\u00f6r oss.<\/li>\n<li>Dropped general, Bytte kurs \u2014 gick fr\u00e5n General till n\u00e5got annat och gick f\u00f6rlorad f\u00f6r v\u00e5r Markovkedja.<\/li>\n<li>Finished course, Avslutade kursen \u2014 det ideala tillst\u00e5ndet, personen har genomf\u00f6rt 80% av lektionerna (inte alla lektioner \u00e4r obligatoriska).<\/li>\n<\/ul>\n<p>\nAtt hamna i noden successful class inneb\u00e4r att lektionen har genomf\u00f6rts framg\u00e5ngsrikt p\u00e5 v\u00e5r plattform tillsammans med l\u00e4raren. Det registrerar framsteg i kursen och n\u00e4rmar sig \u00f6nskat resultat \u2014 \"Avslutade kursen\". Det \u00e4r viktigt f\u00f6r oss att studenterna deltar s\u00e5 mycket som m\u00f6jligt.<\/p>\n<p>F\u00f6r att f\u00e5 mer exakta kvantitativa resultat f\u00f6r mobilapplikationen (noden app session) byggde vi separata kedjor f\u00f6r varje slutnod och j\u00e4mf\u00f6rde sedan vikterna p\u00e5 kanterna parvis:<\/p>\n<ul>\n<li>fr\u00e5n app session tillbaka till sig sj\u00e4lv;<\/li>\n<li>fr\u00e5n app session till successful class;<\/li>\n<li>fr\u00e5n successful class till 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=\"Hur vi anv\u00e4nder Markovkedjor f\u00f6r att utv\u00e4rdera beslut och hitta buggar. Med ett skript i Python\" src=\"\/wp-content\/uploads\/2019\/10\/fc68ca73b379f57a38b53f0c31e75cb1.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><br \/>\n<i>Till v\u00e4nster \u2014 studenter som avslutat kursen, till h\u00f6ger \u2014 \"somnat\"<\/i><\/p>\n<p>Dessa tre kanter visar sambandet mellan studentens framg\u00e5ng och anv\u00e4ndningen av mobilapplikationen. Vi f\u00f6rv\u00e4ntade oss att se att avslutande studenter skulle ha en starkare koppling till applikationen \u00e4n de \"somnat\". Men verkligheten visade sig vara helt motsatt:<\/p>\n<ul>\n<li>vi kunde konstatera att olika grupper av anv\u00e4ndare interagerar p\u00e5 olika s\u00e4tt med mobilapplikationen;<\/li>\n<li>Framg\u00e5ngsrika studenter anv\u00e4nder mobilappen mindre intensivt;<\/li>\n<li>Sovande studenter anv\u00e4nder mobilappen mer aktivt.<\/li>\n<\/ul>\n<p>\nDet betyder att \"sovande\" studenter b\u00f6rjar spendera mer och mer tid i mobilappen och till slut stannar de d\u00e4r f\u00f6r alltid.<\/p>\n<p><img decoding=\"async\" alt=\"Hur vi anv\u00e4nder Markovkedjor f\u00f6r att utv\u00e4rdera beslut och hitta buggar. Med ett skript i Python\" src=\"\/wp-content\/uploads\/2019\/10\/45c17a908e2178edd99e340f34657cad.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nF\u00f6rst blev vi f\u00f6rv\u00e5nade, men efter att ha t\u00e4nkt efter ins\u00e5g vi att det \u00e4r en helt rimlig effekt. Jag studerade franska p\u00e5 egen hand en g\u00e5ng i tiden, med hj\u00e4lp av tv\u00e5 verktyg: mobilappen och grammatikf\u00f6rel\u00e4sningar p\u00e5 YouTube. I b\u00f6rjan delade jag tiden mellan dem i en 50\/50-f\u00f6rdelning. Men appen \u00e4r roligare, den har gamification, allt \u00e4r enkelt, snabbt och klart, medan f\u00f6rel\u00e4sningar kr\u00e4ver att man g\u00e5r in i detaljer, skriver ner saker och \u00f6var i anteckningsblock. S\u00e5 sm\u00e5ningom b\u00f6rjade jag spendera mer tid p\u00e5 min smartphone, tills andelen n\u00e5dde 100%: om man sitter i den i tre timmar ger det en falsk k\u00e4nsla av att man har utf\u00f6rt arbete, vilket g\u00f6r att man inte har n\u00e5got initiativ att g\u00e5 och lyssna p\u00e5 n\u00e5got.<\/p>\n<p>Men hur kan det vara s\u00e5? Vi skapade ju faktiskt mobilappen, <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/skyeng\/blog\/312126\/\">integrerade Ebbinghaus kurva,<\/a><\/noindex>, gamifierade den, gjorde den attraktiv s\u00e5 att folk skulle spendera tid d\u00e4r, men det verkar som att den bara distraherar dem? Egentligen \u00e4r anledningen att teamet bakom mobilappen hanterade sina uppgifter s\u00e5 bra, att den blev en riktigt bra sj\u00e4lvst\u00e4ndig produkt och b\u00f6rjade falla ut ur v\u00e5rt ekosystem.<\/p>\n<p>Som ett resultat av unders\u00f6kningen kom vi fram till att mobilappen m\u00e5ste f\u00f6r\u00e4ndras p\u00e5 n\u00e5got s\u00e4tt f\u00f6r att den inte ska dra f\u00f6r mycket fr\u00e5n de centrala utbildningskurserna. Detta g\u00e4ller b\u00e5de barn och vuxna. Det arbetet p\u00e5g\u00e5r nu.<\/p>\n<h2>Andra fallet: onboarding-buggar<\/h2>\n<p>\nOnboarding \u00e4r en valfri procedur vid registreringen av en ny elev, som avl\u00e4gsnar potentiella tekniska problem i framtiden. Det grundl\u00e4ggande scenariot inneb\u00e4r att en person registrerar sig p\u00e5 landningssidan, f\u00e5r tillg\u00e5ng till sitt personliga konto, blir kontaktad och genomg\u00e5r en introduktionslektion. Vi noterar dock en h\u00f6g procentandel tekniska sv\u00e5righeter under introduktionslektionen: fel version av webbl\u00e4saren, mikrofonen fungerar inte eller ljudet \u00e4r borta, l\u00e4raren kan inte omedelbart ge en l\u00f6sning, och allt detta \u00e4r s\u00e4rskilt sv\u00e5rt n\u00e4r det handlar om barn. D\u00e4rf\u00f6r har vi utvecklat en ytterligare applikation i det personliga kontot, d\u00e4r man kan genomf\u00f6ra fyra enkla steg: kontrollera webbl\u00e4saren, kameran, mikrofonen och bekr\u00e4fta att f\u00f6r\u00e4ldrarna kommer att vara n\u00e4rvarande under introduktionslektionen (eftersom det \u00e4r de som betalar f\u00f6r barnens utbildning).<\/p>\n<p>Dessa n\u00e5gra sidor av onboarding visade en s\u00e5dan tratt:<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habrastorage.org\/webt\/l5\/pt\/aj\/l5ptajlgx6msydvswctke1w505w.jpeg\"><img decoding=\"async\" alt=\"Hur vi anv\u00e4nder Markovkedjor f\u00f6r att utv\u00e4rdera beslut och hitta buggar. Med ett skript i Python\" src=\"\/wp-content\/uploads\/2019\/10\/5e949640d4d4f8a70dc4fd677e3c93a7.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><br \/>\n<i>1: startblock med tre n\u00e5got olika (beroende p\u00e5 klienten) inloggning-formul\u00e4r f\u00f6r anv\u00e4ndarnamn-l\u00f6senord.<br \/>\n2: kryssruta f\u00f6r godk\u00e4nnande av den ytterligare onboarding-proceduren.<br \/>\n2.1-2.3: kontroll av n\u00e4rvaro av f\u00f6r\u00e4lder, Chrome-version och ljud.<br \/>\n3: avslutande block.<\/i><\/p>\n<p>Det ser mycket naturligt ut: p\u00e5 de tv\u00e5 f\u00f6rsta stegen faller majoriteten av bes\u00f6karna bort, d\u00e5 de inser att de beh\u00f6ver fylla i n\u00e5got, kontrollera och att de inte har tid. Om klienten har kommit till det tredje steget \u00e4r det n\u00e4stan s\u00e4kert att de g\u00e5r hela v\u00e4gen till slutet. I tratten syns ingen anledning att misst\u00e4nka n\u00e5got.<\/p>\n<p>\u00c4nd\u00e5 beslutade vi att analysera v\u00e5r onboarding inte p\u00e5 den klassiska endimensionella tratten, utan med hj\u00e4lp av en Markovkedja. Vi inkluderade lite fler h\u00e4ndelser, k\u00f6rde skriptet och fick fram detta:<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habrastorage.org\/webt\/pi\/e6\/9p\/pie69p-4rmwaqdqqunigm3oz8am.png\"><img decoding=\"async\" alt=\"Hur vi anv\u00e4nder Markovkedjor f\u00f6r att utv\u00e4rdera beslut och hitta buggar. Med ett skript i Python\" src=\"\/wp-content\/uploads\/2019\/10\/44c094cb0be013beac00c0af5a3801be.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p>Det g\u00e5r entydigt att f\u00f6rst\u00e5 i detta kaos att n\u00e5got har g\u00e5tt fel. Onboardingprocessen \u00e4r linj\u00e4r, det \u00e4r inbyggt i designen, och den borde inte ha ett s\u00e5dant n\u00e4t av kopplingar. H\u00e4r ser man omedelbart att anv\u00e4ndaren kastas mellan stegen som inte borde ha n\u00e5gra \u00f6verg\u00e5ngar.<\/p>\n<p><img decoding=\"async\" alt=\"Hur vi anv\u00e4nder Markovkedjor f\u00f6r att utv\u00e4rdera beslut och hitta buggar. Med ett skript i Python\" src=\"\/wp-content\/uploads\/2019\/10\/f43fcabaa7b773c17741b4eaa927b600.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDet kan finnas tv\u00e5 orsaker till denna m\u00e4rkliga bild:<\/p>\n<ul>\n<li>fel har smugit sig in i loggdatabasen;<\/li>\n<li>fel finns i sj\u00e4lva produkten \u2013 onboarding.<\/li>\n<\/ul>\n<p>\nDen f\u00f6rsta orsaken \u00e4r f\u00f6rmodligen n\u00e4rvarande, men att kontrollera den \u00e4r ganska arbetskr\u00e4vande, och att fixa loggarna hj\u00e4lper inte alls med att f\u00f6rb\u00e4ttra UX. Men ang\u00e5ende den andra, om den finns, var vi tvungna att agera snabbt. D\u00e4rf\u00f6r gick vi igenom noder, identifierade kanter som inte skulle finnas, och s\u00f6kte orsaker till deras uppkomst. Vi s\u00e5g att vissa anv\u00e4ndare fastnade och gick i cirklar, andra hoppade fr\u00e5n mitten till b\u00f6rjan, medan tredje gruppen i princip inte kunde ta sig f\u00f6rbi de f\u00f6rsta tv\u00e5 stegen. Vi skickade data till QA \u2014 och ja, det visade sig att det fanns en hel del buggar i onboarding-processen: det \u00e4r en slags biprodukt, lite av en n\u00f6dl\u00f6sning, den har inte testats tillr\u00e4ckligt djupt, eftersom vi inte f\u00f6rv\u00e4ntade oss n\u00e5gra problem. Nu har hela inspelningsprocessen \u00e4ndrats.<\/p>\n<p>Denna historia visade oss en ov\u00e4ntad till\u00e4mpning av Markov-kedjor inom QA.<\/p>\n<h3>Testa sj\u00e4lv!<\/h3>\n<p>\nJag har publicerat min <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/BartolomeuD\/markov-chain\">Python-script f\u00f6r att tr\u00e4na Markov-kedjor<\/a><\/noindex> \u00f6ppet f\u00f6r allm\u00e4nheten \u2014 anv\u00e4nd det g\u00e4rna. Dokumentationen finns p\u00e5 GitHub, fr\u00e5gor kan st\u00e4llas h\u00e4r, jag ska f\u00f6rs\u00f6ka svara p\u00e5 allt.<\/p>\n<p>Och n\u00e5gra anv\u00e4ndbara l\u00e4nkar: <noindex><a rel=\"nofollow\" href=\"https:\/\/networkx.github.io\/\">biblioteket NetworkX<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"http:\/\/www.graphviz.org\/\">visualisatorn Graphviz<\/a><\/noindex>. Och h\u00e4r <noindex><a rel=\"nofollow\" href=\"http:\/\/habr.com\/ru\/post\/455762\">p\u00e5 Habr\u00e9 finns en artikel<\/a><\/noindex> om Markov-kedjor. Grafikerna i artikeln \u00e4r gjorda med hj\u00e4lp av <noindex><a rel=\"nofollow\" href=\"https:\/\/gephi.org\/\">Gephi<\/a><\/noindex>.<br \/>\n<br \/>K\u00e4lla: <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.4 - 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\/sv\/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.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sv_SE\" \/>\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\/sv\/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\udd47Hur vi anv\u00e4nder Markov-kedjor i v\u00e4rderingen av beslut och felletande. Med script i Python | ProHoster","description":"Det \u00e4r viktigt f\u00f6r oss att f\u00f6rst\u00e5 vad som h\u00e4nder med v\u00e5ra studenter under utbildningen och hur dessa h\u00e4ndelser p\u00e5verkar resultatet, d\u00e4rf\u00f6r bygger vi en Customer Journey Map \u2014 karta \u00f6ver kundupplevelsen.","canonical_url":"https:\/\/prohoster.info\/sv\/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":"sv_SE","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\/sv\/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\/sv\/wp-json\/wp\/v2\/posts\/39546","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/comments?post=39546"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/posts\/39546\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media\/39547"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/media?parent=39546"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/categories?post=39546"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sv\/wp-json\/wp\/v2\/tags?post=39546"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}