Acurácia
O que é acurácia?
Acurácia (accuracy) é uma das métricas de avaliação (evaluation metrics) mais simples e mais frequentemente reportadas para modelos de classificação (classification). Ela mede a fração global de previsões que estão corretas:
[ \text{Acurácia} = \frac{#\text{previsões corretas}}{#\text{previsões totais}} ]
A acurácia é fácil de calcular e fácil de explicar, o que a torna uma métrica “padrão” comum. No entanto, ela pode ser enganosa em muitos cenários do mundo real (especialmente com desbalanceamento de classes (class imbalance), custos de erro desiguais (unequal error costs) ou modelos dependentes de limiar (threshold-dependent)). Este artigo explica como a acurácia se relaciona com a matriz de confusão (confusion matrix), quando ela falha e variantes comuns como acurácia balanceada (balanced accuracy), acurácia top-k (top-k accuracy) e média micro/macro (micro/macro averaging).
Acurácia e a matriz de confusão (classificação binária (binary classification))
Para classificação binária, as previsões se enquadram em quatro categorias resumidas por uma matriz de confusão:
- TP (verdadeiros positivos (true positives)): previsto positivo, realmente positivo
- TN (verdadeiros negativos (true negatives)): previsto negativo, realmente negativo
- FP (falsos positivos (false positives)): previsto positivo, realmente negativo
- FN (falsos negativos (false negatives)): previsto negativo, realmente positivo
A acurácia é:
[ \text{Acurácia} = \frac{TP + TN}{TP + TN + FP + FN} ]
Essa fórmula destaca uma propriedade importante: a acurácia trata todas as previsões corretas igualmente e todos os erros igualmente (um FP “conta” o mesmo que um FN).
Exemplo prático (binário)
Suponha que um modelo faça 100 previsões:
- TP = 30
- TN = 50
- FP = 10
- FN = 10
Então:
[ \text{Acurácia} = \frac{30 + 50}{100} = 0.80 ]
Assim, o modelo acerta 80% do tempo. Se isso é “bom” depende da aplicação e da distribuição das classes.
Para obter mais insight sobre tipos de erro, combine acurácia com métricas derivadas da mesma matriz de confusão, como Precisão e Revocação e Pontuação F1.
Acurácia para classificação multiclasse (multiclass classification)
Em classificação multiclasse, cada exemplo pertence a uma de (K) classes. A acurácia ainda significa “fração correta”:
[ \text{Acurácia} = \frac{1}{N}\sum_{i=1}^{N}\mathbb{1}{\hat{y}_i = y_i} ]
onde (\mathbb{1}{\cdot}) é uma função indicadora (indicator function) (1 se correto, 0 caso contrário).
Uma matriz de confusão multiclasse se generaliza naturalmente: ela se torna uma matriz (K \times K) em que as entradas na diagonal são previsões corretas e as fora da diagonal são classificações incorretas.
Quando a acurácia multiclasse esconde erros importantes
Em problemas multiclasse, a acurácia pode esconder quais classes estão falhando. Por exemplo:
- 90% de acurácia pode ser obtida ao ir bem nas classes comuns
- enquanto confunde consistentemente duas classes raras, porém críticas
Inspecionar a matriz de confusão (ou métricas por classe (per-class metrics)) geralmente é necessário. (Veja Matriz de Confusão.)
Quando a acurácia é enganosa
A acurácia é uma média global. Ela pode parecer boa mesmo quando o modelo é inutilizável para o objetivo real. Três modos de falha comuns são desbalanceamento de classes, custos de erro desiguais e efeitos de limiarização.
1) Desbalanceamento de classes (a “armadilha da classe majoritária”)
Se uma classe domina, um modelo trivial pode atingir alta acurácia ao sempre prever a classe majoritária.
Exemplo: 99% “saudável”, 1% “doença”
Imagine um conjunto de dados de triagem médica:
- 10.000 pacientes
- 9.900 saudáveis (negativo)
- 100 doentes (positivo)
Um modelo que sempre prevê “saudável” obtém:
- TN = 9.900
- FN = 100
- TP = 0
- FP = 0
Acurácia:
[ \text{Acurácia} = \frac{TN}{N} = \frac{9900}{10000} = 99% ]
99% de acurácia parece excelente, mas o modelo detecta zero pacientes doentes. Nesses cenários, considere métricas que foquem na classe positiva (por exemplo, revocação) e diagnósticos como a Curva Precisão–Revocação (Curva PR).
2) Custos de erro desiguais (falsos positivos vs falsos negativos)
A acurácia assume implicitamente que todos os erros têm o mesmo custo. Muitos domínios violam isso:
- Detecção de fraude (fraud detection): um falso negativo (fraude não detectada) pode ser muito mais custoso do que um falso positivo (revisão manual).
- Diagnóstico médico: deixar passar uma doença grave pode ser bem pior do que um falso alarme.
- Moderação de conteúdo (content moderation): falsos positivos podem prejudicar a experiência do usuário; falsos negativos podem permitir conteúdo nocivo.
Dois modelos podem ter a mesma acurácia, mas perfis de erro muito diferentes:
- Modelo A: muitos falsos positivos, poucos falsos negativos
- Modelo B: poucos falsos positivos, muitos falsos negativos
A acurácia, sozinha, não dirá qual deles se alinha aos objetivos de negócio ou de segurança. Use avaliação sensível a custos (cost-aware evaluation) (por exemplo, métricas ponderadas (weighted metrics)) e métricas específicas por classe como precisão/revocação.
3) Limiarização (a acurácia depende do limiar de decisão)
Muitos classificadores produzem uma pontuação (score) ou probabilidade (por exemplo, regressão logística (logistic regression), redes neurais (neural nets)). Para converter pontuações em rótulos de classe, você escolhe um limiar (frequentemente 0,5). A acurácia depende desse limiar.
Exemplo: mudar o limiar muda a acurácia
Suponha que um modelo gere probabilidades de “positivo”. Se você aumenta o limiar:
- você normalmente prevê menos positivos
- falsos positivos podem cair
- mas falsos negativos podem aumentar
A acurácia pode subir ou descer dependendo da prevalência e das trocas entre erros. Por isso, a seleção do limiar deve ser guiada pela aplicação (e frequentemente por trocas entre precisão/revocação, análise ROC (ROC analysis) ou custo esperado), e não apenas pela acurácia.
Se você se importa com a qualidade de ranqueamento (ranking quality) independente de um único limiar, considere métricas varridas por limiar (por exemplo, AUC-ROC (ROC-AUC)) e visualize as trocas.
Acurácia na prática: para o que ela serve bem
A acurácia é mais apropriada quando:
- As classes estão razoavelmente balanceadas
- Os custos de erro são semelhantes entre classes
- Você precisa de um resumo simples (por exemplo, iterações iniciais do modelo)
- Você está comparando modelos sob a mesma distribuição de dados e política de limiar
Mesmo assim, a acurácia funciona melhor quando acompanhada de:
- uma matriz de confusão
- métricas por classe (precisão/revocação/F1)
- verificações de sanidade (sanity checks) sobre mudança no conjunto de dados (dataset shift) e ruído de rótulo (label noise)
Variantes e extensões comuns da acurácia
Acurácia balanceada (lida melhor com desbalanceamento de classes)
Acurácia balanceada foi projetada para reduzir o domínio da classe majoritária ao dar a cada classe peso igual.
Para classificação binária, ela é a média entre sensibilidade (sensitivity) (TPR/revocação) e especificidade (specificity) (TNR):
[ \text{Acurácia Balanceada} = \frac{1}{2}\left(\frac{TP}{TP+FN} + \frac{TN}{TN+FP}\right) ]
- (\frac{TP}{TP+FN}) é revocação para a classe positiva
- (\frac{TN}{TN+FP}) é revocação para a classe negativa (especificidade)
Exemplo de acurácia balanceada (modelo da classe majoritária)
Usando o modelo médico “sempre saudável”:
- Revocação positiva (= TP/(TP+FN) = 0/100 = 0)
- Revocação negativa (= TN/(TN+FP) = 9900/9900 = 1)
Então:
[ \text{Acurácia Balanceada} = \frac{0 + 1}{2} = 0.5 ]
Uma acurácia balanceada de 0,5 indica desempenho “em nível de acaso” para uma tarefa binária, o que é muito mais honesto do que 99% de acurácia nesse cenário.
Para classificação multiclasse, a acurácia balanceada é comumente calculada como a média da revocação por classe:
[ \text{Acurácia Balanceada} = \frac{1}{K}\sum_{c=1}^{K}\frac{TP_c}{TP_c + FN_c} ]
Acurácia top-k (comum em multiclasse, especialmente em visão)
Em tarefas com muitas classes (por exemplo, ImageNet), os modelos frequentemente produzem uma lista ranqueada de probabilidades por classe. Acurácia top-k considera uma previsão correta se o rótulo verdadeiro aparece entre as (k) principais opções do modelo.
[ \text{Acurácia Top-}k = \frac{1}{N}\sum_{i=1}^{N}\mathbb{1}{y_i \in \text{TopK}(\hat{p}_i)} ]
- Acurácia top-1 é a acurácia padrão
- Acurácia top-5 é comumente reportada em classificação de imagens em larga escala
Exemplo
Se as top-5 previsões de um classificador para uma imagem são:
- tiger cat
- tabby cat
- Egyptian cat
- lynx
- cougar
e o rótulo verdadeiro é “Egyptian cat”, então:
- Top-1 está incorreto
- Top-5 está correto
A acurácia top-k é útil quando:
- múltiplas classes são visual/semanticamente semelhantes
- o modelo é usado como um gerador de candidatos (candidate generator) para uma etapa posterior (downstream step)
- você quer saber “incluímos a resposta certa em uma lista curta?”
Média micro vs macro (como agregar entre classes)
Ao ir além da classificação binária, você frequentemente calcula métricas por classe e depois as agrega. Embora a acurácia já seja um único número, a ideia de médias micro/macro se torna importante em métricas relacionadas e em resumos “tipo acurácia”.
Ainda assim, é útil entender esses esquemas de média, porque eles refletem prioridades diferentes:
Média macro (trata cada classe igualmente)
Média macro calcula uma métrica independentemente por classe e depois tira a média:
- Enfatiza desempenho em classes raras
- Útil quando toda classe é igualmente importante
Por exemplo, a “revocação macro” é:
[ \text{Revocação Macro} = \frac{1}{K}\sum_{c=1}^{K}\text{Revocação}_c ]
A acurácia balanceada para classificação multiclasse é efetivamente revocação com média macro.
Média micro (pondera cada exemplo igualmente)
Média micro agrega contribuições entre classes antes de calcular a métrica:
- É dominada por classes comuns
- Útil quando o desempenho global por exemplo é o que importa
Para classificação multiclasse de rótulo único, precisão/revocação com média micro frequentemente se alinha de perto ao comportamento da acurácia global, porque cada exemplo contribui com exatamente uma previsão.
Média macro ponderada (meio-termo)
Um compromisso comum é uma média macro ponderada, em que cada métrica por classe é ponderada pela frequência da classe (“suporte (support)”):
[ \text{Métrica Macro Ponderada} = \sum_{c=1}^{K} w_c \cdot \text{Métrica}_c,\quad w_c=\frac{n_c}{N} ]
Isso fica mais próximo do comportamento micro, mas ainda é calculado a partir de métricas por classe.
Acurácia sob mudanças no conjunto de dados e na implantação (deployment)
A acurácia medida em um conjunto de teste (test set) assume:
- Que a distribuição dos dados de teste corresponde à da implantação (hipótese i.i.d. (i.i.d. assumption) — independentes e identicamente distribuídos)
- Que os rótulos estão corretos e representam o objetivo real
Em produção, a acurácia pode degradar devido a:
- mudança de distribuição (distribution shift) (novo comportamento de usuários, novo sensor, novas demografias)
- deriva de rótulo (label drift) (o que conta como “spam” muda)
- ciclos de realimentação (feedback loops) (decisões do modelo influenciam dados futuros)
O monitoramento prático pode acompanhar:
- acurácia móvel (rolling accuracy) em dados recém-rotulados
- métricas proxy (proxy metrics) (por exemplo, taxas de concordância, resultados de revisão humana)
- recortes (slices) (acurácia por região, tipo de dispositivo etc.)
Como calcular acurácia (código de exemplo)
Python / NumPy
import numpy as np
y_true = np.array([1, 0, 1, 1, 0, 0])
y_pred = np.array([1, 0, 0, 1, 0, 1])
accuracy = (y_true == y_pred).mean()
print(accuracy) # 0.666...
Scikit-learn
from sklearn.metrics import accuracy_score, balanced_accuracy_score
accuracy = accuracy_score(y_true, y_pred)
bal_acc = balanced_accuracy_score(y_true, y_pred)
Para acurácia top-k em frameworks de aprendizado profundo (deep learning), você normalmente compara se o índice da classe verdadeira está entre os top-k logits (logits)/probabilidades previstos.
Armadilhas e boas práticas
Armadilhas comuns
- Reportar apenas acurácia em conjuntos de dados desbalanceados
- Comparar acurácias entre conjuntos de dados com prevalências de classe diferentes
- Ignorar a escolha do limiar ao converter probabilidades em rótulos duros (hard labels)
- Sobreajustar (overfitting) à acurácia em um conjunto de validação (validation set) (especialmente com muitos testes de hiperparâmetros (hyperparameter trials))
- Não estratificar (stratifying) as divisões (treino/validação/teste) em classificação desbalanceada
Boas práticas
- Sempre acompanhe acurácia com uma matriz de confusão e/ou resultados por classe
- Para problemas desbalanceados, reporte acurácia balanceada e métricas específicas por classe como Precisão e Revocação
- Para classificadores com limiar, avalie ao longo de diferentes limiares e considere avaliação baseada em PR como a Curva Precisão–Revocação (Curva PR)
- Escolha métricas alinhadas aos custos reais; se os custos diferem, a acurácia raramente é suficiente
Resumo
- Acurácia é a fração de previsões corretas; em classificação binária ela é igual a ((TP + TN)/N).
- A acurácia é intuitiva e útil quando as classes estão balanceadas e os custos de erro são semelhantes.
- A acurácia pode ser enganosa sob desbalanceamento de classes, custos de erro desiguais e limiarização.
- Variantes comuns:
- Acurácia balanceada: faz a média da revocação por classe (ajuda com desbalanceamento)
- Acurácia top-k: conta uma previsão como correta se o rótulo verdadeiro está entre os (k) primeiros
- Média micro/macro: diferentes formas de agregar desempenho por classe, refletindo prioridades diferentes
Em muitos sistemas reais, a acurácia deve ser tratada como um ponto de partida, e não como uma resposta final — use-a junto com métricas mais diagnósticas e uma avaliação sensível ao contexto da aplicação.