Como usamos as cadeias de Markov na avaliação de soluções e na descoberta de bugs. Com script Python

É importante entendermos o que acontece com nossos alunos durante o treinamento e como esses eventos afetam o resultado, para criarmos um Mapa de Jornada do Cliente - um mapa da experiência do cliente. Afinal, o processo de aprendizagem não é algo contínuo e integral, é uma cadeia de eventos inter-relacionados e ações dos alunos, e essas ações podem variar bastante entre os diferentes alunos. Então ele passou por uma lição: o que ele fará a seguir? Ir para a lição de casa? Lançar um aplicativo móvel? Mudar de curso, pedir para mudar de professor? Ir direto para a próxima lição? Ou apenas deixar decepcionado? É possível, analisando este cartão, identificar padrões que levem à conclusão bem-sucedida do curso, ou vice-versa, o “lançamento” do aluno?



Geralmente, ferramentas especializadas, caras e de código fechado são usadas para criar CJMs. Mas queríamos criar algo simples, exigindo esforço mínimo e possivelmente código aberto. Então surgiu a ideia de usar as cadeias de Markov - e conseguimos. Criamos um mapa, interpretamos os dados de comportamento dos alunos como um gráfico, vimos respostas completamente óbvias para perguntas de negócios globais e até encontramos bugs profundamente ocultos. Fizemos tudo isso com a ajuda de soluções de script Python de código aberto. Neste artigo, vou falar sobre dois casos com resultados muito óbvios e compartilhar o script com todos.

Assim, as cadeias de Markov mostram a probabilidade de transições entre eventos. Aqui está um exemplo primitivo da Wikipedia:



Aqui, "E" e "A" são eventos, as setas são transições entre eles (incluindo a transição de um evento para ele) e os pesos das setas são a probabilidade de transição ("gráfico orientado ponderado").

O que usado


A cadeia foi treinada pela funcionalidade padrão do Python, alimentada pelos logs de atividades dos alunos. O gráfico na matriz resultante foi construído pela biblioteca NetworkX.

O log fica assim:



Este é um arquivo CSV que contém uma tabela de três colunas: ID do aluno, nome do evento, horário em que ocorreu. Esses três campos são suficientes para rastrear os movimentos do cliente, construir um mapa e finalmente obter uma cadeia de Markov.

A biblioteca retorna os gráficos construídos no formato .dot ou .gexf. Para visualizar o primeiro, você pode usar o pacote Graphviz gratuito (a ferramenta gvedit), trabalhamos com .gexf e Gephi, também gratuitos.

Em seguida, quero dar dois exemplos do uso das cadeias de Markov, que nos permitiram dar uma nova olhada em nossos objetivos, processos educacionais e no próprio ecossistema Skyeng. Bem, corrija bugs.

Primeiro Caso: Aplicativo Móvel


Para começar, exploramos o caminho do aluno por meio de nosso produto mais popular, o General. Naquele momento, eu trabalhava no Departamento Infantil Skyeng e queríamos ver com que eficiência o aplicativo móvel funciona com o público infantil.

Tomando os logs e executando-os através do script, obtive algo parecido com isto:



O nó inicial é Iniciar Geral, e abaixo estão três nós de saída: o aluno “adormeceu”, mudou de curso e concluiu o curso.

  • Adormeceu, “Adormeceu” - significa que as aulas não estão mais ocorrendo, provavelmente ele caiu. Chamamos otimisticamente essa condição de "adormecido", porque em teoria, ele ainda tem a oportunidade de continuar seus estudos. Pior resultado para nós.
  • Deixou o curso geral e mudou de curso - passou de geral para outra e se perdeu na nossa cadeia de Markov.
  • Curso concluído, me formei no curso - em perfeitas condições, a pessoa completou 80% das aulas (nem todas as aulas são necessárias).

Entrar no nó da turma com sucesso significa concluir com êxito a lição em nossa plataforma com o professor. Ele captura o progresso do curso e a aproximação ao resultado desejado - "Concluído o curso". É importante para nós que os alunos participem o máximo possível.

Para obter conclusões quantitativas mais precisas para um aplicativo móvel (nó da sessão do aplicativo), construímos cadeias separadas para cada um dos nós finais e comparamos o peso das arestas em pares:

  • da sessão do aplicativo para ele;
  • da sessão do aplicativo para a aula de sucesso;
  • da aula bem-sucedida à sessão do aplicativo.


À esquerda - alunos que concluíram o curso, à direita - "adormecidos"

Essas três costelas mostram a relação entre o sucesso do aluno e o uso de um aplicativo móvel. Esperamos ver que os alunos que concluíram o curso terão uma conexão mais forte com a inscrição do que aqueles que “adormeceram”. No entanto, de fato, eles receberam exatamente os resultados opostos:

  • garantimos que diferentes grupos de usuários interajam de maneira diferente com o aplicativo móvel;
  • alunos bem-sucedidos usam o aplicativo móvel com menos intensidade;
  • estudantes que dormem estão mais ativamente usando o aplicativo móvel.

Isso significa que os alunos “adormecem” começam a gastar cada vez mais tempo em um aplicativo móvel e, no final, permanecem nele para sempre.



A princípio, ficamos surpresos, mas, pensando, percebemos que esse é um efeito completamente natural. Ao mesmo tempo, estudei francês de forma independente usando duas ferramentas: um aplicativo móvel e palestras sobre gramática no YouTube. Inicialmente, dividi o tempo entre eles em uma proporção de 50 a 50. Mas o aplicativo é mais divertido, existe gamificação, tudo é simples, rápido e compreensível, mas você precisa se aprofundar na palestra, escrever algo, praticar em um notebook. Gradualmente, comecei a dedicar mais tempo ao smartphone até que sua participação aumentasse para 100%: se ele travar por três horas, cria um falso senso de trabalho realizado, pelo qual não há desejo de ouvir algo.

Mas como assim? Afinal, criamos especialmente um aplicativo móvel, construído na curva de Ebbinghaus , gamificado e atraente, para que as pessoas passassem algum tempo nele, mas acontece que isso apenas as distrai? De fato, a razão é que a equipe de aplicativos móveis se saiu muito bem com suas tarefas, como resultado, tornou-se um produto autossuficiente e começou a cair fora do nosso ecossistema.

Como resultado do estudo, ele entendeu que o aplicativo móvel precisa ser alterado de alguma forma, para que ele se afaste menos do curso principal do estudo. Além disso, crianças e adultos. Agora este trabalho está em andamento.

Caso dois: erros integrados


A integração é um procedimento adicional opcional ao registrar um novo aluno, eliminando possíveis problemas técnicos no futuro. O cenário básico implica que uma pessoa registrada em uma página de destino, tenha acesso à sua conta pessoal, entre em contato com ele e conduza uma lição introdutória. Ao mesmo tempo, notamos uma grande porcentagem de dificuldades técnicas durante a lição introdutória: a versão errada do navegador, o microfone ou o som não funciona, o professor não pode sugerir imediatamente uma solução e tudo isso é especialmente difícil quando se trata de crianças. Portanto, desenvolvemos um aplicativo adicional em sua conta pessoal, onde você pode executar quatro etapas simples: verifique seu navegador, câmera, microfone e confirme que os pais estarão lá durante a aula introdutória (afinal, eles pagam pela educação dos filhos).

Estas poucas páginas de integração mostraram este funil:


1: inicie o bloco com três formulários de login / senha ligeiramente diferentes (dependendo do cliente).
2: Jackdaw concorda com um procedimento adicional de integração.
2.1-2.3: verificação da presença dos pais, versão do Chrome e som.
3: bloco final.

Parece muito natural: nas duas primeiras etapas, a maioria dos visitantes se mescla, percebendo que há algo a ser preenchido, verifique, mas não há tempo. Se o cliente alcançou o terceiro passo, ele quase certamente alcançará a final. Não há um único motivo visível no funil para suspeitar de algo.

No entanto, decidimos analisar nossa integração não no funil unidimensional clássico, mas usando a cadeia de Markov. Ativamos um pouco mais de eventos, executamos o script e obtivemos o seguinte:



Há apenas uma coisa que pode ser claramente entendida nesse caos: algo deu errado. O processo de integração é linear, é inerente ao design, não deve ter essa rede de links. E aqui você pode ver imediatamente que o usuário lança entre etapas, entre as quais não deve haver nenhuma transição.



Pode haver duas razões para uma imagem tão estranha:

  • os batentes rastejaram para a base de toras;
  • Os cardumes estão presentes no próprio produto - onboarding.

O primeiro motivo, provavelmente, ocorre, mas a verificação é bastante demorada e a correção dos logs não ajudará a melhorar o UX. Mas com o segundo, se houver, era urgente fazer alguma coisa. Portanto, fomos examinar os nós, identificar as arestas, o que não deveria ser, procurar as causas de sua ocorrência. Vimos que alguns usuários andavam de bicicleta e andavam em círculos, outros caíam do meio para o começo e o terceiro, em princípio, não conseguia sair dos dois primeiros passos. Os dados foram transferidos para o controle de qualidade - e sim, constatou-se que havia erros suficientes na integração: esse é um subproduto, um pouco de muleta, não foi testado profundamente, porque não esperava nenhum problema. Agora todo o processo de gravação mudou.

Essa história nos mostrou a aplicação inesperada das cadeias de Markov no campo do controle de qualidade.

Tente você mesmo!


Publiquei meu script Python para aprender as cadeias de Markov em domínio público - use-o para a saúde. Documentação no GitHub, perguntas podem ser feitas aqui, vou tentar responder a tudo.

Links úteis e úteis: biblioteca NetworkX , visualizador de Graphviz . E aqui em Habré há um artigo sobre cadeias de Markov. Os gráficos do artigo são feitos usando Gephi .

Source: https://habr.com/ru/post/pt473124/


All Articles