PDI+VC · Exercício de Programação

EP07_03 — 🟡 Avaliação por Matriz de Confusão

7.18.3 EP07_03 🟡 Avaliação por Matriz de Confusão

Um classificador binário de qualidade de solda foi treinado e testado em uma linha de produção. Para cada peça inspecionada, o sistema registrou o rótulo real (obtido por um especialista) e o rótulo previsto pelo classificador, em que 1 representa “defeituosa” e 0 representa “conforme”.

A gerência de qualidade quer saber não apenas a acurácia do sistema, mas também sua precisão (quando o sistema aponta defeito, com que frequência ele está certo?) e sua revocação (de todas as peças realmente defeituosas, quantas o sistema conseguiu identificar?) — a distinção discutida na seção de avaliação de classificadores do capítulo.

7.18.3.1 📋 Diretrizes de Implementação

  1. Quantidade: Ler o inteiro \(N\) (número de peças inspecionadas).
  2. Dados de cada peça: Para cada uma das \(N\) peças, ler dois inteiros — o rótulo real \(y\) e o rótulo previsto \(\hat y\) (ambos \(\in \{0, 1\}\)).
  3. Matriz de confusão: Considerando a classe 1 (defeituosa) como positiva, contar:
    • \(VP\) (Verdadeiro Positivo): \(y=1\) e \(\hat y=1\);
    • \(FP\) (Falso Positivo): \(y=0\) e \(\hat y=1\);
    • \(FN\) (Falso Negativo): \(y=1\) e \(\hat y=0\);
    • \(VN\) (Verdadeiro Negativo): \(y=0\) e \(\hat y=0\).
  4. Métricas: Calcular \[ \text{Acurácia} = \frac{VP+VN}{N}, \quad \text{Precisão} = \frac{VP}{VP+FP}, \quad \text{Revocação} = \frac{VP}{VP+FN}. \]
  5. Casos degenerados: Se \(VP+FP=0\) (nenhuma predição positiva), imprima Precisao: indefinida. Se \(VP+FN=0\) (nenhum caso positivo real), imprima Revocacao: indefinida.
  6. Arredondamento: Todas as métricas numéricas devem ser arredondadas para 4 casas decimais (round half away from zero) apenas na exibição.

7.18.3.2 📌 Restrições Computacionais

  • Convenção de classe positiva fixa: a classe 1 é sempre a classe positiva neste exercício, independentemente de sua frequência relativa.
  • Proteção de divisão por zero: implemente os casos degenerados do item 5 antes de realizar a divisão.
  • Ordem de saída: siga exatamente a ordem especificada na seção de saída, mesmo nos casos degenerados.

7.18.3.3 🧠 Fundamentação Teórica

Métrica Pergunta que responde Sensível a desbalanceamento?
Acurácia Qual fração das peças foi classificada corretamente? Sim — pode mascarar erros na classe minoritária
Precisão Das peças apontadas como defeituosas, quantas realmente são? Penaliza falsos positivos
Revocação Das peças realmente defeituosas, quantas foram detectadas? Penaliza falsos negativos

Em um contexto industrial, uma revocação baixa é frequentemente mais grave do que uma precisão baixa: deixar passar uma peça defeituosa (falso negativo) tende a ser mais custoso do que inspecionar manualmente uma peça boa apontada por engano (falso positivo).

7.18.3.4 📦 Especificação de Entrada e Saída (VPL)

Entrada:

  • Linha 1: Inteiro \(N\).
  • Próximas \(N\) linhas: dois inteiros por linha — \(y\) e \(\hat y\), separados por espaço.

Saída (nesta ordem exata):

VP=<int> FP=<int> FN=<int> VN=<int>
Acuracia: <valor ou métrica indefinida>
Precisao: <valor ou indefinida>
Revocacao: <valor ou indefinida>

7.18.3.5 📌 Exemplos

Entrada Saída Observação
4
1 1
0 1
1 0
0 0
VP=1 FP=1 FN=1 VN=1
Acuracia: 0.5000
Precisao: 0.5000
Revocacao: 0.5000
Um erro de cada tipo.
3
0 0
0 0
0 0
VP=0 FP=0 FN=0 VN=3
Acuracia: 1.0000
Precisao: indefinida
Revocacao: indefinida
Nenhum caso positivo real nem previsto.
🎮 Simulador EP07_03: Precisão x Revocação Linha de Produção
Escolha um cenário de inspeção e observe como Acurácia, Precisão e Revocação reagem de forma diferente.
–
Figura 7.23: Simulador EP07_03: Precisão x Revocação
%%writefile EP07_03.py
# Código Python
Writing EP07_03.py
TestSuite("EP07_03.py").run()
✔️ EP07_03.cases já existe em casos/
📋 5 caso(s) carregado(s) de casos/EP07_03.cases

🔍 Testando Python: EP07_03.py
⚠️ EP07_03.py: Arquivo sem conteúdo (menos de 3 linhas). Testes ignorados.