Cómo utilizamos las cadenas de Markov para evaluar soluciones y encontrar errores. Con un script en Python

Para nosotros es importante comprender qué les sucede a nuestros estudiantes durante la capacitación y cómo estos eventos afectan el resultado, por eso construimos un Customer Journey Map, un mapa de la experiencia del cliente. Después de todo, el proceso de aprendizaje no es algo continuo e integral, es una cadena de eventos y acciones interconectadas del estudiante, y estas acciones pueden variar mucho entre diferentes estudiantes. Ahora ha completado su lección: ¿qué hará a continuación? ¿Irá a la tarea? ¿Lanzará una aplicación móvil? ¿Cambiará de rumbo, pedirá cambiar de profesor? ¿Pasarás directamente a la siguiente lección? ¿O simplemente se irá decepcionado? ¿Es posible, analizando este mapa, identificar patrones que conducen a la finalización exitosa del curso o, por el contrario, al “abandono” del estudiante?

Cómo utilizamos las cadenas de Markov para evaluar soluciones y encontrar errores. Con un script en Python

Normalmente, se utilizan herramientas de código cerrado especializadas y muy costosas para construir CJM. Pero queríamos crear algo simple, que requiriera un esfuerzo mínimo y, si fuera posible, de código abierto. Entonces surgió la idea de utilizar cadenas de Markov y lo logramos. Construimos un mapa, interpretamos datos sobre el comportamiento de los estudiantes en forma de gráfico, vimos respuestas completamente no obvias a problemas comerciales globales e incluso encontramos errores profundamente ocultos. Hicimos todo esto utilizando soluciones de script Python de código abierto. En este artículo hablaré de dos casos con resultados poco obvios y compartiré el guión con todos.

Entonces, las cadenas de Markov muestran la probabilidad de transiciones entre eventos. Aquí hay un ejemplo primitivo de Wikipedia:

Cómo utilizamos las cadenas de Markov para evaluar soluciones y encontrar errores. Con un script en Python

Aquí “E” y “A” son eventos, las flechas son transiciones entre ellos (incluida la transición de un evento al mismo) y los pesos de las flechas son la probabilidad de transición (“gráfico dirigido ponderado”).

¿Que usaste?

El circuito se entrenó con la funcionalidad estándar de Python, que se alimentó con registros de actividad de los estudiantes. El gráfico de la matriz resultante fue construido por la biblioteca NetworkX.

El registro se ve así:

Cómo utilizamos las cadenas de Markov para evaluar soluciones y encontrar errores. Con un script en Python

Este es un archivo csv que contiene una tabla de tres columnas: identificación del estudiante, nombre del evento y hora en que ocurrió. Estos tres campos son suficientes para rastrear los movimientos del cliente, construir un mapa y, en última instancia, obtener una cadena de Markov.

La biblioteca devuelve los gráficos construidos en formato .dot o .gexf. Para visualizar el primero, puedes utilizar el paquete gratuito Graphviz (herramienta gvedit), nosotros trabajamos con .gexf y Gephi, también gratuito.

A continuación me gustaría dar dos ejemplos del uso de cadenas de Markov, que nos permitieron echar una nueva mirada a nuestros objetivos, procesos educativos y el propio ecosistema de Skyeng. Bueno, arregla los errores.

Primer caso: aplicación móvil

Para empezar, exploramos el recorrido de los estudiantes a través de nuestro producto más popular: el curso General. En ese momento yo estaba trabajando en el departamento infantil de Skyeng y queríamos ver con qué eficacia funcionaba la aplicación móvil con nuestra audiencia infantil.

Tomando los registros y ejecutándolos a través del script, obtuve algo como esto:

Cómo utilizamos las cadenas de Markov para evaluar soluciones y encontrar errores. Con un script en Python

El nodo de inicio es Inicio General, y en la parte inferior hay tres nodos de salida: el estudiante “se quedó dormido”, cambió de curso y terminó el curso.

  • Se quedó dormido, "Se quedó dormido": esto significa que ya no está tomando clases, lo más probable es que se haya caído. Con optimismo llamamos a este estado "dormido", porque... En teoría, todavía tiene la oportunidad de continuar sus estudios. El peor resultado para nosotros.
  • Dejé de general, cambié de rumbo: cambié de General a otra cosa y me perdí en nuestra cadena de Markov.
  • Curso terminado, Curso terminado: condición ideal, la persona ha completado el 80% de las lecciones (no todas las lecciones son obligatorias).

Entrar al nodo de clase exitosa significa completar exitosamente la lección en nuestra plataforma junto con el maestro. Registra el progreso a lo largo del curso y el acercamiento al resultado deseado: "Completó el curso". Es importante para nosotros que los estudiantes asistan tanto como sea posible.

Para obtener conclusiones cuantitativas más precisas para la aplicación móvil (nodo de sesión de la aplicación), construimos cadenas separadas para cada uno de los nodos finales y luego comparamos los pesos de los bordes por pares:

  • desde la sesión de la aplicación hasta ella;
  • de la sesión de aplicación a la clase exitosa;
  • de una clase exitosa a una sesión de aplicación.

Cómo utilizamos las cadenas de Markov para evaluar soluciones y encontrar errores. Con un script en Python
A la izquierda están los estudiantes que completaron el curso, a la derecha están los que “se quedaron dormidos”

Estas tres aristas muestran la relación entre el éxito de un estudiante y su uso de la aplicación móvil. Esperábamos ver que los estudiantes que completaron el curso tendrían una conexión más fuerte con la aplicación que los estudiantes que se quedaron dormidos. Sin embargo, en realidad obtuvimos exactamente los resultados opuestos:

  • nos aseguramos de que diferentes grupos de usuarios interactúen con la aplicación móvil de manera diferente;
  • los estudiantes exitosos usan la aplicación móvil con menos intensidad;
  • Los estudiantes que se quedan dormidos utilizan la aplicación móvil de forma más activa.

Esto hace que los alumnos que se quedan dormidos empiecen a pasar cada vez más tiempo en la aplicación móvil y, al final, permanezcan en ella para siempre.

Cómo utilizamos las cadenas de Markov para evaluar soluciones y encontrar errores. Con un script en Python

Al principio nos sorprendió, pero después de pensarlo nos dimos cuenta de que se trataba de un efecto completamente natural. Hubo un tiempo en que estudiaba francés por mi cuenta utilizando dos herramientas: una aplicación móvil y lecciones de gramática en YouTube. Al principio dividí el tiempo entre ellos en una proporción de 50 a 50. Pero la aplicación es más divertida, hay gamificación, todo es sencillo, rápido y claro, pero en la conferencia hay que profundizar en ello, escribir algo. , practica en un cuaderno. Poco a poco comencé a pasar más tiempo en mi teléfono inteligente, hasta que su participación creció al 100%: si pasas tres horas en él, creas una falsa sensación de trabajo terminado, por lo que no tienes ganas de ir a escuchar nada. .

¿Pero como puede ser ésto? Después de todo, creamos especialmente una aplicación móvil, construido en él la curva de Ebbinghaus, lo gamificó, lo hizo atractivo para que la gente pasara tiempo en él, pero ¿resulta que solo los distrae? De hecho, la razón es que el equipo de la aplicación móvil hizo frente demasiado bien a sus tareas, por lo que se convirtió en un producto genial, autosuficiente y comenzó a salir de nuestro ecosistema.

Como resultado de la investigación, quedó claro que era necesario cambiar la aplicación móvil de alguna manera para que distrajera menos del curso principal de estudio. Y tanto niños como adultos. Este trabajo está actualmente en marcha.

Segundo caso: errores de incorporación

La incorporación es un procedimiento adicional opcional al registrar un nuevo estudiante, eliminando posibles problemas técnicos en el futuro. El escenario básico supone que una persona se registró en la página de destino, obtuvo acceso a su cuenta personal, fue contactada y recibió una lección introductoria. Al mismo tiempo, notamos un gran porcentaje de dificultades técnicas durante la lección introductoria: la versión incorrecta del navegador, el micrófono o el sonido no funcionan, el profesor no puede sugerir una solución de inmediato, y todo esto es especialmente difícil cuando se trata para niños. Por eso, hemos desarrollado una aplicación adicional en tu cuenta personal, donde podrás completar cuatro simples pasos: revisa tu navegador, cámara, micrófono y confirma que los padres estarán cerca durante la lección introductoria (después de todo, son ellos quienes pagan la educación de sus hijos).

Estas pocas páginas de incorporación mostraban un embudo como este:

Cómo utilizamos las cadenas de Markov para evaluar soluciones y encontrar errores. Con un script en Python
1: bloque inicial con tres formularios de entrada de inicio de sesión y contraseña ligeramente diferentes (según el cliente).
2: casilla de verificación que acepta el procedimiento de incorporación adicional.
2.1-2.3: Verifique la presencia de los padres, la versión de Chrome y el sonido.
3: bloque final.

Parece muy natural: en los dos primeros pasos, la mayoría de los visitantes se van y se dan cuenta de que hay algo que completar, verificar, pero no hay tiempo. Si el cliente ha llegado al tercer paso, es casi seguro que llegará al final. No hay una sola razón para sospechar algo en el embudo.

Sin embargo, decidimos analizar nuestro onboarding no en un embudo unidimensional clásico, sino utilizando una cadena de Markov. Activamos un poco más de eventos, ejecutamos el script y obtuvimos esto:

Cómo utilizamos las cadenas de Markov para evaluar soluciones y encontrar errores. Con un script en Python

En este caos sólo se puede entender claramente una cosa: algo salió mal. El proceso de incorporación es lineal, esto es inherente al diseño, no debería haber tal red de conexiones en él. Y aquí queda inmediatamente claro que el usuario se encuentra entre pasos, entre los cuales no debería haber ninguna transición.

Cómo utilizamos las cadenas de Markov para evaluar soluciones y encontrar errores. Con un script en Python

Puede haber dos razones para esta extraña imagen:

  • los bancos de arena se infiltraron en la base de datos de registros;
  • Hay errores en el producto en sí: la incorporación.

Lo más probable es que la primera razón sea cierta, pero probarlo requiere bastante mano de obra y corregir los registros no ayudará a mejorar la UX. Pero con el segundo, si existe, había que hacer algo urgentemente. Por lo tanto, fuimos a observar los nodos, identificar los bordes que no deberían existir y buscar las razones de su aparición. Vimos que algunos usuarios se atascaban y caminaban en círculos, otros se caían del medio al principio y otros, en principio, no podían salir de los dos primeros pasos. Transferimos los datos al control de calidad y sí, resultó que había suficientes errores en la incorporación: este es un subproducto, una especie de muleta, no se probó lo suficientemente profundo, porque... No esperábamos ningún problema. Ahora todo el proceso de grabación ha cambiado.

Esta historia nos mostró una aplicación inesperada de las cadenas de Markov en el campo del control de calidad.

¡Inténtalo tú mismo!

yo publiqué el mío Script Python para entrenar cadenas de Markov en el dominio público: úselo para su salud. Documentación en GitHub, se pueden hacer preguntas aquí, intentaré responder todo.

Bueno, enlaces útiles: Biblioteca NetworkX, visualizador Graphviz. Y aquí hay un artículo sobre Habré sobre las cadenas de Markov. Los gráficos del artículo están hechos usando Gephi.

Fuente: habr.com

Añadir un comentario