{"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\/es\/blog\/news\/kak-my-ispolzuem-tsepi-markova-v-otsenke-reshenij-i-poiske-bagov-so-skriptom-na-python","title":{"rendered":"C\u00f3mo utilizamos cadenas de Markov para evaluar decisiones y buscar errores. Con un script en Python","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Es importante para nosotros entender qu\u00e9 sucede con nuestros estudiantes durante el aprendizaje y c\u00f3mo estos eventos impactan en los resultados, por lo que creamos un Customer Journey Map \u2014 un mapa de la experiencia del cliente. El proceso de aprendizaje no es algo continuo y homog\u00e9neo, sino una cadena de eventos y acciones interconectados del estudiante, donde estas acciones pueden diferir significativamente entre los distintos alumnos. \u00c9l ha completado una lecci\u00f3n: \u00bfqu\u00e9 har\u00e1 a continuaci\u00f3n? \u00bfIr\u00e1 a hacer la tarea? \u00bfAbrir\u00e1 la aplicaci\u00f3n m\u00f3vil? \u00bfCambiar\u00e1 de curso, pedir\u00e1 un nuevo profesor? \u00bfEntrar\u00e1 de inmediato a la siguiente lecci\u00f3n? \u00bfO simplemente se marchar\u00e1 decepcionado? \u00bfEs posible, al analizar este mapa, identificar patrones que conducen a la finalizaci\u00f3n exitosa del curso o, por el contrario, al abandono del estudiante?<\/p>\n<p><img decoding=\"async\" alt=\"C\u00f3mo utilizamos cadenas de Markov para evaluar decisiones y buscar errores. Con un script en Python\" src=\"\/wp-content\/uploads\/2019\/10\/3eaee2e858273669b4490f6ceb65d281.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNormalmente, para construir un CJM se utilizan herramientas especializadas, bastante costosas y con c\u00f3digo cerrado. Pero quer\u00edamos idear algo simple, que requiriera un esfuerzo m\u00ednimo y, en la medida de lo posible, que fuera de c\u00f3digo abierto. As\u00ed surgi\u00f3 la idea de utilizar cadenas de Markov \u2014 y lo logramos. Construimos un mapa, interpretamos los datos sobre el comportamiento de los estudiantes en forma de grafo, y encontramos respuestas completamente inesperadas a preguntas globales del negocio e incluso descubrimos errores profundamente ocultos. Todo esto lo hicimos con soluciones de c\u00f3digo abierto usando un script de Python. En este art\u00edculo, contar\u00e9 sobre dos casos con esos resultados inesperados y compartir\u00e9 el script con todos los interesados.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nAs\u00ed que, las cadenas de Markov muestran la probabilidad de transiciones entre eventos. Aqu\u00ed hay un ejemplo primitivo de Wikipedia:<\/p>\n<p><img decoding=\"async\" alt=\"C\u00f3mo utilizamos cadenas de Markov para evaluar decisiones y buscar errores. Con un script en Python\" src=\"\/wp-content\/uploads\/2019\/10\/978e18169ba4c7b2b71787536e4bb219.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAqu\u00ed, \"E\" y \"A\" son eventos, las flechas son transiciones entre ellos (incluyendo la transici\u00f3n de un evento a s\u00ed mismo), y los pesos de las flechas son la probabilidad de transici\u00f3n (\"grafo orientado ponderado\").<\/p>\n<h2>Qu\u00e9 utilizamos<\/h2>\n<p>\nLa cadena se entren\u00f3 con la funcionalidad est\u00e1ndar de Python, que recibi\u00f3 los registros de actividad de los estudiantes. El grafo se construy\u00f3 a partir de la matriz obtenida utilizando la biblioteca NetworkX.<\/p>\n<p>El registro se ve as\u00ed:<\/p>\n<p><img decoding=\"async\" alt=\"C\u00f3mo utilizamos cadenas de Markov para evaluar decisiones y buscar errores. Con un script en Python\" src=\"\/wp-content\/uploads\/2019\/10\/bc75077802cd7eeb00ebe4a56bc61050.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEs un archivo csv que contiene una tabla de tres columnas: id del estudiante, nombre del evento, y el tiempo en que ocurri\u00f3. Estos tres campos son suficientes para seguir los movimientos del cliente, construir un mapa y, al final, obtener una cadena de Markov.<\/p>\n<p>La biblioteca devuelve los grafos construidos en formato .dot o .gexf. Para la visualizaci\u00f3n de los primeros, se puede utilizar el paquete gratuito Graphviz (herramienta gvedit), nosotros trabajamos con .gexf y Gephi, que tambi\u00e9n es gratuito.<\/p>\n<p>A continuaci\u00f3n, quiero presentar dos ejemplos del uso de cadenas de Markov, que nos permitieron replantearnos nuestras metas, procesos de aprendizaje y el mismo ecosistema de Skyeng. Tambi\u00e9n corregimos algunos errores.<\/p>\n<h2>Primer caso: aplicaci\u00f3n m\u00f3vil<\/h2>\n<p>\nPrimero, investigamos el camino del estudiante en nuestro producto m\u00e1s popular: el curso General. En ese momento trabajaba en el departamento infantil de Skyeng y quer\u00edamos ver qu\u00e9 tan eficaz era la aplicaci\u00f3n m\u00f3vil con nuestro p\u00fablico infantil.<\/p>\n<p>Tom\u00e9 los registros y los pas\u00e9 por un script, obteniendo algo como esto:<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habrastorage.org\/webt\/ws\/ru\/de\/wsrudeufw3pzwrrxtxtn1pjeqvu.png\"><img decoding=\"async\" alt=\"C\u00f3mo utilizamos cadenas de Markov para evaluar decisiones y buscar errores. Con un script en Python\" src=\"\/wp-content\/uploads\/2019\/10\/f2533ddfae7d5f85d0e86902b9b7005f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p>El nodo de inicio \u2014 Start General, y abajo tres nodos de salida: el estudiante 'se durmi\u00f3', cambi\u00f3 de curso, finaliz\u00f3 el curso.<\/p>\n<ul>\n<li>'Se durmi\u00f3' \u2014 significa que ya no asiste a las clases, lo m\u00e1s probable es que se haya desconectado. Lo llamamos optimistamente 'se durmi\u00f3', ya que te\u00f3ricamente tiene la posibilidad de continuar su aprendizaje. Es el peor resultado para nosotros.<\/li>\n<li>'Cambiado de curso' \u2014 se pas\u00f3 de General a otra cosa y se perdi\u00f3 para nuestra cadena de Markov.<\/li>\n<li>'Finaliz\u00f3 el curso' \u2014 un estado ideal, la persona complet\u00f3 el 80% de las lecciones (no todas son obligatorias).<\/li>\n<\/ul>\n<p>\nLlegar al nodo 'clase exitosa' significa que se ha completado una lecci\u00f3n en nuestra plataforma con el profesor. Registra el progreso en el curso y la aproximaci\u00f3n al resultado deseado \u2014 'Finaliz\u00f3 el curso'. Es importante que los estudiantes lo visiten lo m\u00e1s posible.<\/p>\n<p>Para obtener conclusiones cuantitativas m\u00e1s precisas para la aplicaci\u00f3n m\u00f3vil (nodo de sesi\u00f3n de la app), construimos cadenas separadas para cada uno de los nodos finales y luego comparamos los pesos de las aristas de manera pareada:<\/p>\n<ul>\n<li>de sesi\u00f3n de app de vuelta a ella misma;<\/li>\n<li>de sesi\u00f3n de app a clase exitosa;<\/li>\n<li>de clase exitosa a sesi\u00f3n de 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=\"C\u00f3mo utilizamos cadenas de Markov para evaluar decisiones y buscar errores. Con un script en Python\" src=\"\/wp-content\/uploads\/2019\/10\/fc68ca73b379f57a38b53f0c31e75cb1.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><br \/>\n<i>A la izquierda \u2014 estudiantes que finalizaron el curso, a la derecha \u2014 'se durmieron'<\/i><\/p>\n<p>Estas tres aristas muestran la relaci\u00f3n entre el \u00e9xito del estudiante y su uso de la aplicaci\u00f3n m\u00f3vil. Esper\u00e1bamos ver que los estudiantes que finalizaron el curso tuvieran una relaci\u00f3n m\u00e1s fuerte con la aplicaci\u00f3n que los 'dormidos'. Sin embargo, obtuvimos resultados exactamente opuestos:<\/p>\n<ul>\n<li>Nos dimos cuenta de que diferentes grupos de usuarios interact\u00faan de manera diferente con la aplicaci\u00f3n m\u00f3vil;<\/li>\n<li>los estudiantes exitosos utilizan la aplicaci\u00f3n m\u00f3vil de manera menos intensa;<\/li>\n<li>los estudiantes que se distraen utilizan m\u00e1s activamente la aplicaci\u00f3n m\u00f3vil.<\/li>\n<\/ul>\n<p>\nEsto significa que los estudiantes 'que se distraen' comienzan a pasar cada vez m\u00e1s tiempo en la aplicaci\u00f3n m\u00f3vil y, al final, se quedan en ella para siempre.<\/p>\n<p><img decoding=\"async\" alt=\"C\u00f3mo utilizamos cadenas de Markov para evaluar decisiones y buscar errores. Con un script en Python\" src=\"\/wp-content\/uploads\/2019\/10\/45c17a908e2178edd99e340f34657cad.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAl principio nos sorprendi\u00f3, pero al pensarlo, nos dimos cuenta de que era un efecto bastante l\u00f3gico. En su momento, estudi\u00e9 franc\u00e9s por mi cuenta utilizando dos herramientas: una aplicaci\u00f3n m\u00f3vil y lecciones de gram\u00e1tica en YouTube. Al principio, divid\u00eda mi tiempo entre ambas en una proporci\u00f3n de 50 a 50. Pero la aplicaci\u00f3n es m\u00e1s divertida, tiene gamificaci\u00f3n, todo es simple, r\u00e1pido y claro, mientras que en las lecciones hay que profundizar, tomar notas y practicar en un cuaderno. Con el tiempo, empec\u00e9 a pasar m\u00e1s tiempo en mi tel\u00e9fono, hasta que su proporci\u00f3n alcanz\u00f3 el 100%: si pasas tres horas en ella, se crea una falsa sensaci\u00f3n de trabajo realizado, lo que genera una falta de deseo de ir a escuchar algo.<\/p>\n<p>Pero, \u00bfc\u00f3mo es posible? Despu\u00e9s de todo, dise\u00f1amos la aplicaci\u00f3n m\u00f3vil espec\u00edficamente, <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/skyeng\/blog\/312126\/\">integramos la curva de Ebbinghaus,<\/a><\/noindex>, la gamificamos, la hicimos atractiva para que la gente pasara tiempo en ella, \u00bfy resulta que solo los distrae? En realidad, la raz\u00f3n es que el equipo de la aplicaci\u00f3n m\u00f3vil cumpli\u00f3 tan bien con sus tareas que se convirti\u00f3 en un producto independiente y comenz\u00f3 a salirse de nuestro ecosistema.<\/p>\n<p>Como resultado de la investigaci\u00f3n, se lleg\u00f3 a la comprensi\u00f3n de que la aplicaci\u00f3n m\u00f3vil debe ser modificada para que no desv\u00ede tanto del curso principal de aprendizaje. Esto se aplica tanto a ni\u00f1os como a adultos. Actualmente, se est\u00e1 trabajando en esto.<\/p>\n<h2>Segundo caso: errores en la incorporaci\u00f3n.<\/h2>\n<p>\nLa incorporaci\u00f3n es un procedimiento adicional no obligatorio al registrar un nuevo estudiante, que evita problemas t\u00e9cnicos potenciales en el futuro. El escenario b\u00e1sico implica que la persona se registre en la p\u00e1gina de aterrizaje, obtenga acceso a su cuenta personal, se ponga en contacto con ellos y reciba una lecci\u00f3n introductoria. Observamos un gran porcentaje de dificultades t\u00e9cnicas durante la lecci\u00f3n introductoria: no tener la versi\u00f3n correcta del navegador, el micr\u00f3fono o el sonido que no funcionan, el profesor no puede ofrecer una soluci\u00f3n de inmediato, y todo esto es especialmente complicado cuando se trata de ni\u00f1os. Por ello, hemos desarrollado una aplicaci\u00f3n adicional en la cuenta personal, donde se pueden realizar cuatro pasos sencillos: verificar el navegador, la c\u00e1mara, el micr\u00f3fono y confirmar que los padres estar\u00e1n presentes durante la lecci\u00f3n introductoria (pues son ellos quienes pagan por la educaci\u00f3n de los ni\u00f1os).<\/p>\n<p>Estas p\u00e1ginas de incorporaci\u00f3n mostraron el siguiente embudo:<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habrastorage.org\/webt\/l5\/pt\/aj\/l5ptajlgx6msydvswctke1w505w.jpeg\"><img decoding=\"async\" alt=\"C\u00f3mo utilizamos cadenas de Markov para evaluar decisiones y buscar errores. Con 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 bloque inicial con tres formularios de inicio de sesi\u00f3n ligeramente diferentes (dependiendo del cliente).<br \/>\n2: una casilla de aceptaci\u00f3n para el procedimiento adicional de incorporaci\u00f3n.<br \/>\n2.1-2.3: verificaci\u00f3n de la presencia del padre, la versi\u00f3n de Chrome y el sonido.<br \/>\n3: bloque final.<\/i><\/p>\n<p>Se ve muy natural: en los primeros dos pasos, la mayor\u00eda de los visitantes se retiran, al darse cuenta de que aqu\u00ed hay que llenar algo, verificar, y no hay tiempo. Si el cliente llega al tercer paso, es casi seguro que llegar\u00e1 hasta el final. En el embudo no se observa ninguna raz\u00f3n para sospechar algo.<\/p>\n<p>Sin embargo, decidimos analizar nuestra incorporaci\u00f3n no con el cl\u00e1sico embudo unidimensional, sino mediante una cadena de Markov. Incluimos un poco m\u00e1s de eventos, ejecutamos el script y obtuvimos esto:<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habrastorage.org\/webt\/pi\/e6\/9p\/pie69p-4rmwaqdqqunigm3oz8am.png\"><img decoding=\"async\" alt=\"C\u00f3mo utilizamos cadenas de Markov para evaluar decisiones y buscar errores. Con un script en Python\" src=\"\/wp-content\/uploads\/2019\/10\/44c094cb0be013beac00c0af5a3801be.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p>Solo se puede entender con claridad en este caos una cosa: algo sali\u00f3 mal. El proceso de incorporaci\u00f3n es lineal, as\u00ed lo establece el dise\u00f1o, no deber\u00eda haber una red de conexiones como esta. Aqu\u00ed se ve claramente que el usuario es desviado entre pasos, entre los que no deber\u00eda haber transiciones.<\/p>\n<p><img decoding=\"async\" alt=\"C\u00f3mo utilizamos cadenas de Markov para evaluar decisiones y buscar errores. Con un script en Python\" src=\"\/wp-content\/uploads\/2019\/10\/f43fcabaa7b773c17741b4eaa927b600.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nLas razones de esta extra\u00f1a imagen pueden ser dos:<\/p>\n<ul>\n<li>errores han infiltrado la base de logs;<\/li>\n<li>los errores est\u00e1n presentes en el propio producto: la incorporaci\u00f3n.<\/li>\n<\/ul>\n<p>\nLa primera raz\u00f3n probablemente est\u00e9 presente, pero comprobarla es bastante laborioso, y la correcci\u00f3n de los registros no ayudar\u00e1 a mejorar la experiencia del usuario. En cuanto a la segunda, si existe, hab\u00eda que hacer algo al respecto de inmediato. Por eso nos dedicamos a analizar los nodos, identificar los bordes que no deber\u00edan existir y buscar las causas de su aparici\u00f3n. Observamos que algunos usuarios se quedaban atrapados y daban vueltas en c\u00edrculos, otros sal\u00edan de la mitad al inicio, y algunos simplemente no pod\u00edan salir de los primeros dos pasos. Pasamos los datos a QA y s\u00ed, result\u00f3 que hab\u00eda muchos bugs en el onboarding: es un producto secundario, un poco improvisado, no se prob\u00f3 lo suficientemente a fondo porque no se esperaban problemas. Ahora todo el proceso de registro ha cambiado.<\/p>\n<p>Esta historia nos mostr\u00f3 una aplicaci\u00f3n inesperada de las cadenas de Markov en el \u00e1rea de QA.<\/p>\n<h3>\u00a1Int\u00e9ntalo t\u00fa mismo!<\/h3>\n<p>\nHe subido mi <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/BartolomeuD\/markov-chain\">script de Python para el entrenamiento de cadenas de Markov<\/a><\/noindex> al dominio p\u00fablico \u2014 \u00fasenlo con gusto. La documentaci\u00f3n est\u00e1 en GitHub, pueden preguntar aqu\u00ed, intentar\u00e9 responder a todas las consultas.<\/p>\n<p>Y algunos enlaces \u00fatiles: <noindex><a rel=\"nofollow\" href=\"https:\/\/networkx.github.io\/\">la biblioteca NetworkX<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"http:\/\/www.graphviz.org\/\">el visualizador Graphviz<\/a><\/noindex>. Y aqu\u00ed hay un art\u00edculo <noindex><a rel=\"nofollow\" href=\"http:\/\/habr.com\/ru\/post\/455762\">en Habr sobre cadenas de Markov. Los gr\u00e1ficos en el art\u00edculo est\u00e1n hechos con<\/a><\/noindex> Gephi <noindex><a rel=\"nofollow\" href=\"https:\/\/gephi.org\/\">Nos importa entender qu\u00e9 les sucede a nuestros estudiantes durante el proceso de aprendizaje y c\u00f3mo estos eventos influyen en los resultados, por eso estamos construyendo un Customer Journey Map \u2014 mapa de la experiencia del cliente.<\/a><\/noindex>.<br \/>\n<br \/>Fuente: <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\/es\/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=\"es_ES\" \/>\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\/es\/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\udd47C\u00f3mo utilizamos las cadenas de Markov en la evaluaci\u00f3n de decisiones y b\u00fasqueda de bugs. Con el script en Python | ProHoster","description":"\ud83e\udd47C\u00f3mo utilizamos las cadenas de Markov en la evaluaci\u00f3n de decisiones y b\u00fasqueda de bugs. Con el script en Python | ProHoster","canonical_url":"https:\/\/prohoster.info\/es\/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":"es_ES","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\/es\/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\/es\/wp-json\/wp\/v2\/posts\/39546","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/comments?post=39546"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/39546\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media\/39547"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media?parent=39546"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/categories?post=39546"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/tags?post=39546"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}