Ir para o conteúdo

Recomendação de Desafios

A recomendação é baseado nos assuntos de questões que o usuário mais errou. A premissa é que, o usuário deve resolver mais questões dos assuntos que teve mais dificuldade para conseguir evoluir e conseguir atingir seus objetivos.

Iniciamos o processo de evolução com a recomendação e o próximo passo será metrificar essa evolução do aluno com mais dados.

Arquivos relacionados a essa feature estão em:

domain/desafios/*

Contexto

No dia 02/11/2022 foi lançado a v1.24.0 do aplicativo com uma refatoração na forma de listar os desafios.

Antes cada section era uma query distinta. Temos um Array formatado no Remote Config SECTION_DESAFIOS com filtros e outros detalhes de section.

Ler documentação Bibliotecas de Desafios

Recomendação de desafios (templates)

Na lista de sections da home de desafios há o user-recommendation. Se tiver isso na lista, irar gerar a recomendação a partir dos assuntos retornados e buscar por desafios baseados nos campo topAssuntos.

Há dois templates:

  • desafio
  • consulta a collection desafioResultado
  • aproveitamento
  • consulta na collection user.historicoAproveitamento

O template desafio foi definido como template default de recomendação.

domain/desafios/recommendation

A função abaixo na class DesafiosRecommendation serve para normalizar o template que vai ser usado nas regras de consulta.

DesafiosRecommendation.getTemplateDefault(template?: string)
DesafiosRecommendation.getTemplateDefault(template?: string)

enum DesafioTemplateRecommendation {
  Aproveitamento = 'aproveitamento',
  Desafio = 'desafio',
}

Consulta

É realizado uma consulta aggregate nas collection que sempre o retorno é

interface Result {
  _id: string; // userId
  assuntos: string[];
}

Desafio - Template

domain/desafios/recommendation/utils/aggregate-desatio.ts

Regras dos assuntos coletados;

Filtra o resultados de desafios finalizados que:

  • Desafios que teve mais erros do que acertos;
  • Questões com respostas incorretas;

Depois é feito um concat dos:

  • topAssuntos dos Desafios
  • Assuntos das questões;

Retornando assim um array de assuntos ordenados do que mais errou para menor.

User History - Template

domain/desafios/recommendation/utils/aggregate-historico-aproveitamento.ts

Regras dos assuntos coletados;

Filtra assuntos que:

  • Teve mais erros do que acertos;

Retornando assim um array de assuntos ordenados do que mais errou para menor.

Query

Arquivo

domain/meus-objetivos/meus_objetivos.resolver.ts

Para a query myGoalsWidgets, foi utilizado uma função chamada de generateWeeklyDesafioRecommendationWidget, no qual é feito uma verificação para saber se a versão atual do aplicativo do usuário é igual ou superior a v1.25.0, visto que, para essa funcionalidade específica, o usuário precisa obrigatoriamente ter uma versão maior ou igual a mencionada.

Teste A/B

No App na v1.24.0 foi configurado uma variavél do remote config DESAFIO_LIBRARY_TEMPLATE que por padrão está enviado para o backend default;

Com essa varivavél vai ser possivél aplicar testes A/B para:

  • numéros de desafios finalizados;
  • conversão para premium;
  • performance de consulta;
  • melhorias de recomendação;