Pular para conteúdo

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:

  1. Preparação dos Dados (TopicAnalysisService): O sistema coleta e prepara as métricas necessárias para o cálculo.
  2. 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:

score = 1000 / (1 + z)

Onde:

  • z = (frequency + 1) ** exponent
  • exponent = 0.5 * performance_gap * frequency
  • performance_gap = success_rate - reference_success_rate

Análise da Fórmula

  1. 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.
  2. exponent:

    • O performance_gap é multiplicado por um fator de 0.5 e também pela frequency para amplificar o efeito com base na exposição do aluno ao tópico.
  3. 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_gap negativo), o exponent se torna negativo. Isso faz com que z seja um número muito pequeno (próximo de 0), pois (base)^(-expoente) = 1 / (base)^(expoente).
    • Se o desempenho é bom (performance_gap positivo), o exponent é positivo, resultando em um valor de z grande.
  4. score:

    • Quando z é próximo de 0 (desempenho ruim), o score se aproxima de 1000 / (1 + 0) = 1000, indicando alta prioridade.
    • Quando z é um número grande (desempenho bom), o score se aproxima de 0, indicando baixa prioridade.

Exemplo Prático

Vamos usar um exemplo para ilustrar:

  • frequency = 10
  • success_rate (aluno) = 0.4 (40%)
  • reference_success_rate (referência) = 0.7 (70%)

Cálculo:

  1. performance_gap = 0.4 - 0.7 = -0.3
  2. exponent = 0.5 * (-0.3) * 10 = -1.5
  3. z = (10 + 1) ** (-1.5) ≈ 0.027
  4. score = 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:

  1. Os scores são calculados para cada assunto usando a fórmula score = 1000 / (1 + z).
  2. Os assuntos são ordenados do maior para o menor score.
  3. 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.