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
- Quantidade: Ler o inteiro \(N\) (número de peças inspecionadas).
- 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\}\)).
- 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\).
- 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}. \]
- Casos degenerados: Se \(VP+FP=0\) (nenhuma predição positiva), imprima
Precisao: indefinida. Se \(VP+FN=0\) (nenhum caso positivo real), imprimaRevocacao: indefinida. - 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. |
%%writefile EP07_03.py
# Código PythonWriting 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.