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;