Análise Detalhada do Algoritmo de Cálculo de Performance
Este documento fornece uma análise completa e precisa do algoritmo de cálculo de performance utilizado no sistema, com base na implementação de código atual. O objetivo é substituir documentações anteriores que continham imprecisões.
Visão Geral
O algoritmo tem como objetivo principal calcular uma pontuação (score) para cada tópico de estudo, indicando sua prioridade para um determinado aluno. Uma pontuação alta (próxima de 1000) significa que o tópico é problemático e deve ser priorizado, enquanto uma pontuação baixa (próxima de 0) indica que o aluno domina o assunto.
O cálculo é dividido em duas etapas principais:
- Preparação dos Dados (
TopicAnalysisService): O sistema coleta e prepara as métricas necessárias para o cálculo. - Cálculo da Pontuação (
PerformanceCalculationService): O sistema aplica a fórmula matemática para determinar a pontuação de cada tópico.
1. Preparação dos Dados (TopicAnalysisService)
O serviço TopicAnalysisService é responsável por preparar os três parâmetros essenciais que alimentam o cálculo da pontuação: frequency, success_rate e reference_success_rate.
A lógica de preparação varia dependendo da disponibilidade de dados de desempenho do aluno (student_questions).
Cenário 1: Com Dados de Desempenho do Aluno
Quando o sistema possui o histórico de questões respondidas pelo aluno:
frequency(Frequência): É o número de questões que o aluno respondeu para um tópico específico. Reflete a exposição do aluno ao assunto.success_rate(Taxa de Sucesso do Aluno): É a taxa de acerto do aluno no tópico específico (questões corretas / total de questões).reference_success_rate(Taxa de Sucesso de Referência): É a taxa de acerto média de todos os alunos para aquele tópico específico (taxa do segmento). Caso não haja dados para o segmento, o sistema utiliza uma taxa de sucesso geral como fallback.
Cenário 2: Sem Dados de Desempenho do Aluno
Quando não há dados sobre as questões respondidas pelo aluno para um determinado tópico:
frequency: É sempre 0, pois não há registro de exposição do aluno ao tópico.success_rate: Assume o valor da taxa de sucesso de referência do tópico, uma vez que não há dados específicos do aluno.reference_success_rate: Utiliza a taxa de sucesso de referência geral, calculada a partir da média de todos os tópicos.
2. Cálculo da Pontuação (PerformanceCalculationService)
Com os dados preparados, o PerformanceCalculationService aplica a fórmula para calcular o score.
Fórmula Matemática Corrigida
A fórmula implementada no código é a seguinte:
Onde:
z = (frequency + 1) ** exponentexponent = 0.5 * performance_gap * frequencyperformance_gap = success_rate - reference_success_rate
Análise da Fórmula
-
performance_gap:- Mede a diferença entre o desempenho do aluno (
success_rate) e a performance de referência (reference_success_rate). - Um gap negativo indica que o aluno está com desempenho abaixo do esperado, o que aumenta a prioridade do tópico.
- Mede a diferença entre o desempenho do aluno (
-
exponent:- O
performance_gapé multiplicado por um fator de0.5e também pelafrequencypara amplificar o efeito com base na exposição do aluno ao tópico.
- O
-
z:- É o coração do cálculo. A
frequency(mais 1, para evitar base zero) serve como a base da potência. - Se o desempenho do aluno é ruim (
performance_gapnegativo), oexponentse torna negativo. Isso faz com quezseja um número muito pequeno (próximo de 0), pois(base)^(-expoente) = 1 / (base)^(expoente). - Se o desempenho é bom (
performance_gappositivo), oexponenté positivo, resultando em um valor dezgrande.
- É o coração do cálculo. A
-
score:- Quando
zé próximo de 0 (desempenho ruim), oscorese aproxima de1000 / (1 + 0) = 1000, indicando alta prioridade. - Quando
zé um número grande (desempenho bom), oscorese aproxima de 0, indicando baixa prioridade.
- Quando
Exemplo Prático
Vamos usar um exemplo para ilustrar:
frequency= 10success_rate(aluno) = 0.4 (40%)reference_success_rate(referência) = 0.7 (70%)
Cálculo:
performance_gap= 0.4 - 0.7 = -0.3exponent= 0.5 * (-0.3) * 10 = -1.5z= (10 + 1) ** (-1.5) ≈ 0.027score= 1000 / (1 + 0.027) ≈ 973
Neste caso, a pontuação de 973 indica uma prioridade muito alta para este tópico, refletindo o impacto amplificado da frequência.
Exemplos de Priorização de Assuntos
Para ilustrar como o sistema escolhe os assuntos a serem priorizados, vamos analisar dois cenários com diferentes componentes curriculares. O objetivo é sempre selecionar os dois piores assuntos (maior score) de cada componente.
Cenário 1: Componente "Matemática" (5 Assuntos)
Neste cenário, um aluno tem o seguinte desempenho em 5 assuntos de Matemática:
| Assunto | Frequência (f) | Acerto Aluno (r) | Acerto Referência (r_m) | Score Calculado |
|---|---|---|---|---|
| Funções | 6 | 0.50 | 0.80 | 854 |
| Álgebra | 5 | 0.40 | 0.70 | 793 |
| Geometria | 3 | 0.25 | 0.60 | 675 |
| Estatística | 2 | 0.10 | 0.50 | 608 |
| Trigonometria | 8 | 0.80 | 0.75 | 392 |
Análise e Priorização:
- Os scores são calculados para cada assunto usando a fórmula
score = 1000 / (1 + z). - Os assuntos são ordenados do maior para o menor score.
- O sistema seleciona os dois primeiros da lista.
Resultado: Os assuntos a serem priorizados para o componente "Matemática" são: 1. Funções (Score: 854) 2. Álgebra (Score: 793)
Cenário 2: Componente "História" (10 Assuntos)
Agora, um cenário mais complexo com 10 assuntos dentro do componente de História. Após o cálculo, os scores são os seguintes (já ordenados do maior para o menor para clareza):
| Assunto | Frequência (f) | Acerto Aluno (r) | Acerto Referência (r_m) | Score Calculado |
|---|---|---|---|---|
| Guerra Fria | 5 | 0.25 | 0.75 | 917 |
| Brasil Colônia | 4 | 0.30 | 0.60 | 795 |
| Era Vargas | 2 | 0.00 | 0.50 | 756 |
| Ditadura Militar | 4 | 0.40 | 0.70 | 721 |
| Grécia Antiga | 1 | 0.00 | 0.60 | 692 |
| República Velha | 3 | 0.20 | 0.55 | 675 |
| Roma Antiga | 2 | 0.50 | 0.65 | 588 |
| Idade Média | 3 | 0.60 | 0.60 | 500 |
| Renascimento | 1 | 1.00 | 0.70 | 308 |
| Brasil Império | 5 | 0.90 | 0.80 | 200 |
Análise e Priorização:
Com a lista já ordenada pelo score, o sistema simplesmente seleciona os dois primeiros.
Resultado: Os assuntos a serem priorizados para o componente "História" são: 1. Guerra Fria (Score: 917) 2. Brasil Colônia (Score: 795)
Estes exemplos demonstram como a combinação de baixo desempenho do aluno (r muito menor que r_m) e uma frequência f razoável resulta nos scores mais altos, sinalizando as áreas de maior necessidade de reforço.