Avaliação

O que “Avaliação (Evaluation)” Significa no Aprendizado de Máquina (Machine Learning)

No aprendizado de máquina (machine learning), avaliação é a prática de medir o quão bem um modelo funciona, quão confiavelmente (reliably) ele se comporta e quanta incerteza (uncertainty) devemos atribuir às suas previsões. Uma boa avaliação não é apenas escolher um número como acurácia — é projetar um processo que responda a perguntas como:

  • Desempenho (performance): O modelo atende ao objetivo da tarefa (por exemplo, alta revocação (recall) para fraude, baixo erro para previsão (forecasting))?
  • Confiabilidade: Ele se comporta de forma consistente entre fatias de dados, ao longo do tempo e em diferentes ambientes?
  • Incerteza: Quando o modelo não tem certeza, ele sinaliza isso — e essas estimativas de incerteza são significativas?

A avaliação fica no centro de fluxos de trabalho práticos de aprendizado de máquina. Ela informa a Seleção de Modelos (Model Selection), orienta melhorias nos dados (frequentemente via IA Centrada em Dados (Data-Centric AI)) e reduz o risco de implantar (deployment) um modelo que falha de maneiras sutis, porém caras.

Por que a Avaliação é Mais Difícil do que Parece

Um modelo pode “parecer bom” por métricas padrão e ainda assim ser inadequado para uso. Armadilhas comuns incluem:

  • Vazamento de dados (data leakage): O modelo, indiretamente, vê informações do futuro ou dos rótulos-alvo.
  • Conjuntos de teste não representativos: A distribuição do teste difere da produção.
  • Desalinhamento de métrica (metric mismatch): Otimizar acurácia quando o negócio se importa com erros ponderados por custo.
  • Modos de falha ocultos (hidden failure modes): Métricas gerais fortes, mas desempenho ruim em coortes minoritárias.
  • Sobreajuste ao benchmark (overfitting to the benchmark): Ajustes repetidos no conjunto de teste inflacionam os resultados.
  • Cegueira de incerteza (uncertainty blindness): Saídas de probabilidade estão mal calibradas, ou o modelo fica confiante demais sob mudança de distribuição.

Por causa desses problemas, a avaliação deve cobrir protocolo + métricas (metrics) + diagnósticos (diagnostics) + incerteza + estatística, e não apenas uma pontuação.

As Bases: O que Você Está Realmente Estimando

Em alto nível, a avaliação estima o desempenho esperado de generalização (expected generalization performance):

[ \mathbb{E}{(x,y)\sim \mathcal{D}{\text{target}}}[\ell(f(x), y)] ]

Onde:

  • ( \mathcal{D}_{\text{target}} ) é a distribuição real com a qual você se importa (muitas vezes, “produção”),
  • ( f ) é o seu modelo,
  • ( \ell ) é uma função de perda (loss function) (perda 0/1, erro quadrático, perda logarítmica, etc.).

Na prática, você não tem acesso direto a ( \mathcal{D}_{\text{target}} ). Você a aproxima usando conjuntos de dados e divisões, introduzindo incerteza decorrente de amostragem finita, mudança de distribuição, ruído de rotulagem e ciclos de retroalimentação.

É por isso que a avaliação é tanto um problema de estimação estatística (statistical estimation problem) quanto um problema de sistemas/medição (systems/measurement problem).

Protocolos de Avaliação: Divisões, Vazamento e Reprodutibilidade (Reproducibility)

Treino/validação/teste e por que “teste” deve ser sagrado

Uma configuração padrão é:

  • Conjunto de treino (train set): ajustar os parâmetros do modelo
  • Conjunto de validação (validation set): escolher hiperparâmetros (hyperparameters), limiares, atributos (features)
  • Conjunto de teste (test set): estimativa final e não enviesada após as decisões serem travadas

Testar repetidamente ideias com base no desempenho no teste efetivamente torna o conjunto de teste parte do treino, enviesando os resultados para cima. Para procedimentos robustos, veja Validação e Validação Cruzada (Validation & Cross-Validation).

Validação cruzada (cross-validation, CV) na prática

A validação cruzada reduz a variância nas estimativas quando os dados são limitados, mas precisa respeitar a estrutura:

  • Séries temporais (time series): dividir por tempo (sem vazamento do futuro)
  • Dados agrupados (grouped data) (usuários/pacientes): divisões conscientes de grupo para evitar vazamento de identidade (identity leakage)
  • Dados espaciais (spatial data): divisões espaciais para evitar vazamento por proximidade (proximity leakage)

Exemplo (validação cruzada por grupos com scikit-learn):

from sklearn.model_selection import GroupKFold, cross_val_score
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import roc_auc_score, make_scorer

X, y, groups = ...  # groups could be user_id, patient_id, etc.

model = LogisticRegression(max_iter=200)
cv = GroupKFold(n_splits=5)
auc_scorer = make_scorer(roc_auc_score, needs_proba=True)

scores = cross_val_score(model, X, y, cv=cv, groups=groups, scoring=auc_scorer)
print(scores.mean(), scores.std())

Evitando vazamento: um checklist rápido

  • Não compute normalização/estatísticas no conjunto de dados inteiro (ajuste transformações apenas no treino).
  • Não use atributos pós-evento (por exemplo, “número de chargebacks” para prever fraude no momento da compra).
  • Não deixe quase-duplicatas cruzarem as divisões (mesmo cliente, mesmo documento, mesma imagem).
  • Para processamento de linguagem natural (NLP)/modelos de linguagem grandes (LLMs), cuidado com contaminação de conjuntos de avaliação nos dados de pré-treinamento (difícil de evitar completamente; meça e documente).

Escolhendo Métricas: Alinhe ao Objetivo, Não à Conveniência

Métricas são uma linguagem: elas codificam o que “bom” significa. Uma boa avaliação usa métricas que refletem:

  • custos operacionais (falsos positivos vs falsos negativos),
  • restrições de experiência do usuário,
  • qualidade de ranqueamento (ranking),
  • necessidades de calibração e tomada de decisão.

Para uma cobertura detalhada, veja Métricas (Metrics). A seguir, estão princípios-chave.

Classificação (classification): além da acurácia

  • Acurácia (accuracy) pode ser enganosa com classes desbalanceadas (imbalanced classes).
  • Precisão (precision)/revocação/F1 refletem trade-offs entre falsos positivos e falsos negativos.
  • AUC-ROC (ROC-AUC) mede a qualidade de ranqueamento ao longo de limiares, mas pode parecer boa sob desbalanceamento extremo.
  • AUC-PR (PR-AUC) costuma ser mais informativa com positivos raros (veja Desbalanceamento de Classes (Class Imbalance) e Modelagem de Eventos Desbalanceados / Raros (Imbalanced / Rare Event Modeling)).
  • Perda logarítmica (log loss, cross-entropy) avalia a correção probabilística e é sensível a excesso de confiança.

Exemplo prático: detecção de fraude (fraud detection)
Se positivos são 0,1%, um modelo com 99,9% de acurácia ainda pode ser inútil. Provavelmente você se importa com revocação com precisão restrita, ou com perda esperada ponderada por custo.

Regressão (regression): acurácia pontual vs qualidade da decisão

  • Erro absoluto médio (MAE) (robusto a outliers), erro quadrático médio (MSE)/raiz do erro quadrático médio (RMSE) (penalizam erros grandes), coeficiente de determinação (R²) (variância explicada).
  • Considere intervalos de previsão (prediction intervals) e comportamento de cauda se decisões dependem de risco.
  • Para previsão temporal, avalie por tempo, horizonte e sazonalidade, não apenas por erro global.

Ranqueamento e recuperação (retrieval)

Para busca, sistemas de recomendação (recommenders) e recuperação em perguntas e respostas (QA):

  • NDCG@k, MAP, MRR, Recall@k medem a utilidade top-k.
  • Métricas offline de ranqueamento podem divergir do engajamento online; trate métricas offline como proxies.

Modelos generativos (generative models) e modelos de linguagem grandes (LLMs)

A avaliação frequentemente mistura:

  • Métricas automáticas (automatic metrics) (BLEU/ROUGE, perplexidade (perplexity)), que podem ser proxies fracas,
  • Métricas baseadas na tarefa (task-based metrics) (correspondência exata (exact match), pass@k para código),
  • Avaliação humana (human evaluation) (preferência, utilidade (helpfulness), factualidade (factuality)),
  • Métricas de segurança (safety metrics) (toxicidade (toxicity), violações de política (policy violations)),
  • Calibração/incerteza para comportamento de recusa/abstenção (refusal/abstention behavior).

O ponto-chave é ancorar a avaliação em casos de uso e modos de falha (failure modes), e não apenas em similaridade de texto.

Confiabilidade: o Modelo se Comporta de Forma Dependável?

Confiabilidade amplia a avaliação para além do desempenho médio.

Avaliação baseada em fatias (slice-based evaluation) (análise de erros)

Um modelo pode ter métricas gerais fortes, mas falhar em coortes específicas (por exemplo, certos idiomas, tipos de dispositivo, categorias raras). Isso motiva fatiamento sistemático e investigação; veja Análise de Erros (Fatiamento) (Error Analysis (Slicing)).

Exemplos de fatias:

  • demografia (quando apropriado e legal),
  • geografia, tipo de dispositivo, idioma,
  • entidades head vs tail,
  • imagens com pouca luz vs iluminação normal,
  • usuários novos vs recorrentes.

Um fluxo de trabalho prático:

  1. Defina fatias com base em conhecimento do domínio.
  2. Compute métricas por fatia com intervalos de confiança.
  3. Ranqueie fatias por impacto (gravidade × prevalência × custo de negócio).
  4. Melhore dados e modelo de forma direcionada para essas fatias.

Robustez (robustness) e mudança de distribuição

Sistemas reais enfrentam:

  • Mudança de covariáveis (covariate shift): entradas mudam (novos dispositivos, novas gírias)
  • Mudança de rótulos (label shift): proporções de classes mudam
  • Deriva de conceito (concept drift): a relação entre x e y muda (fraude se adapta)

A avaliação offline deve incluir:

  • retroteste (backtesting) baseado em tempo,
  • testes de estresse (stress tests) (ruído, corrupções),
  • verificações fora da distribuição (out-of-distribution, OOD) quando viável.

Mesmo que você não consiga simular totalmente a produção, você pode medir sensibilidade e detectar fragilidade (fragility).

Estabilidade entre sementes aleatórias (random seeds) e re-treinamentos

Para muitos modelos, os resultados podem variar com inicialização e ordem dos dados. Uma avaliação orientada à confiabilidade frequentemente reporta:

  • média ± desvio padrão em múltiplos treinos,
  • sensibilidade a hiperparâmetros,
  • intervalos de confiança das métricas.

Isso importa especialmente quando as diferenças são pequenas (por exemplo, +0,2% de AUC), onde o ruído pode exceder a melhoria.

Incerteza: Quantificando “Eu Não Sei”

A incerteza é essencial quando decisões têm alto impacto ou quando o modelo pode encontrar entradas desconhecidas. Para aprofundar, veja Estimação de Incerteza (Uncertainty Estimation).

Tipos de incerteza

  • Incerteza aleatória (aleatoric uncertainty): ruído irredutível nos dados (por exemplo, imagem borrada).
  • Incerteza epistêmica (epistemic uncertainty): incerteza sobre o modelo devido a conhecimento limitado (por exemplo, entradas OOD).

A incerteza epistêmica é particularmente valiosa para detectar quando o modelo provavelmente está errado sob mudança de distribuição.

Probabilidades não são automaticamente confiáveis

Muitos classificadores geram probabilidades (por exemplo, softmax), mas elas frequentemente estão mal calibradas (miscalibrated) — confiantes demais ou de menos. Assim, calibração é uma dimensão central da avaliação; veja Calibração (Calibration).

Diagnósticos comuns de calibração:

  • Diagramas de confiabilidade (reliability diagrams) (probabilidade prevista vs frequência observada)
  • Erro de Calibração Esperado (Expected Calibration Error, ECE) (medida resumo; tem ressalvas)
  • Pontuação de Brier (Brier score) (regra de pontuação adequada para previsões probabilísticas)

Exemplo prático: calibração e ECE

Conceitualmente, o ECE agrupa previsões por confiança e compara a confiança média com a acurácia empírica em cada grupo.

import numpy as np

def ece(probs, labels, n_bins=10):
    probs = np.asarray(probs)
    labels = np.asarray(labels)
    bins = np.linspace(0.0, 1.0, n_bins + 1)
    ece_val = 0.0
    for i in range(n_bins):
        mask = (probs > bins[i]) & (probs <= bins[i+1])
        if mask.sum() == 0:
            continue
        avg_conf = probs[mask].mean()
        avg_acc = labels[mask].mean()
        ece_val += (mask.mean()) * abs(avg_conf - avg_acc)
    return ece_val

Se o ECE for grande, considere métodos de calibração como escalonamento por temperatura (temperature scaling), escalonamento de Platt (Platt scaling) ou regressão isotônica (isotonic regression) — e reavalie.

Intervalos de previsão e predição conformal (conformal prediction)

Para regressão (e, às vezes, classificação), você pode querer intervalos em vez de estimativas pontuais. A predição conformal é popular porque pode fornecer garantias de cobertura em amostras finitas (finite-sample coverage guarantees) sob suposições de permutabilidade (exchangeability):

  • Construir um intervalo ([L(x), U(x)]) tal que (P(y \in [L(x),U(x)]) \approx 1 - \alpha).

Na prática, você:

  1. Treina um modelo no treino.
  2. Usa um conjunto de calibração para computar escores de não conformidade (nonconformity scores) (medidas semelhantes a resíduos).
  3. Usa quantis desses escores para formar intervalos no teste.

Isso é especialmente útil em sistemas de decisão que exigem limites de risco.

Rigor Estatístico: Intervalos de Confiança, Significância e Poder Estatístico (Power)

Resultados de avaliação são estimativas, e estimativas têm incerteza. Dois modelos com AUC 0,812 vs 0,815 podem não ser significativamente diferentes.

Intervalos de confiança via reamostragem por bootstrap (bootstrap resampling)

Reamostragem bootstrap é uma forma flexível de obter estimativas de incerteza para métricas.

import numpy as np
from sklearn.metrics import roc_auc_score

def bootstrap_ci(y_true, y_score, metric_fn, n=2000, alpha=0.05, seed=0):
    rng = np.random.default_rng(seed)
    y_true = np.asarray(y_true)
    y_score = np.asarray(y_score)
    m = len(y_true)
    stats = []
    for _ in range(n):
        idx = rng.integers(0, m, size=m)
        stats.append(metric_fn(y_true[idx], y_score[idx]))
    lo = np.quantile(stats, alpha/2)
    hi = np.quantile(stats, 1-alpha/2)
    return float(lo), float(hi)

lo, hi = bootstrap_ci(y_test, p_test, roc_auc_score)
print("AUC 95% CI:", lo, hi)

Comparando modelos de forma justa

Ao comparar modelos, use testes pareados (paired tests) quando apropriado (os mesmos exemplos avaliados por ambos os modelos) para reduzir variância, e pré-defina:

  • qual métrica importa,
  • qual tamanho mínimo de efeito é significativo,
  • quantos experimentos você fará.

Para comparações online (testes A/B), design cuidadoso e análise de poder estatístico são essenciais; veja Desenho de Experimentos e Poder Estatístico (Experiment Design & Power).

Avaliação Offline vs Online

Avaliação offline (offline evaluation)

Prós:

  • iteração rápida
  • controlada e reprodutível
  • segura (sem impacto em usuários)

Contras:

  • pode não corresponder a ciclos de retroalimentação do mundo real
  • pode não capturar mudanças de distribuição e efeitos de UX

A avaliação offline deve incorporar:

  • conjuntos de teste representativos,
  • análise por fatias,
  • verificações de incerteza/calibração,
  • testes de robustez.

Avaliação online (online evaluation)

Frequentemente feita via testes A/B, interleaving (interleaving) ou implantações sombra (shadow deployments). Prós:

  • mede resultados reais (conversão, satisfação, retenção)
  • captura efeitos em nível de sistema

Contras:

  • cara, mais lenta
  • exige restrições éticas/de segurança cuidadosas
  • pode ser ruidosa e confundida por fatores externos

Um fluxo de trabalho maduro usa avaliação offline como um gate e, em seguida, avaliação online como o árbitro final — enquanto monitora incerteza, deriva e segurança.

Definição de Limiar (Thresholding), Custos e Avaliação Consciente da Decisão

Muitos modelos produzem uma pontuação (s(x)) ou probabilidade (p(y=1|x)), mas a implantação exige uma regra de decisão (decision rule):

  • aprovar/negar,
  • escalar para revisão humana,
  • abster-se quando incerto.

A avaliação deve refletir essas decisões:

  • escolher limiares com base em trade-offs de custo,
  • computar métricas em pontos de operação (por exemplo, revocação a 99% de precisão),
  • avaliar políticas de abstenção (cobertura vs acurácia).

Exemplo: humano no loop (human-in-the-loop)
Se o modelo pode abster-se quando a incerteza é alta, avalie:

  • acurácia nos casos não abstidos,
  • taxa de abstenção,
  • carga de trabalho humana a jusante,
  • redução de erro vs custo.

Monitoramento Após a Implantação: A Avaliação Não Termina

A avaliação em produção inclui:

  • monitoramento de deriva de dados (data drift) (distribuições de atributos),
  • deriva de desempenho (performance drift) (requer rótulos; podem chegar com atraso),
  • deriva de calibração (calibration drift) (confiança torna-se pouco confiável),
  • monitoramento por fatias (slice monitoring) (coortes importantes),
  • critérios de alerta e reversão (rollback).

Como rótulos podem atrasar ou faltar, equipes frequentemente acompanham indicadores antecedentes (deriva de entrada, picos de incerteza) e usam rotulagem periódica para reestimar desempenho.

Antipadrões Comuns (Anti-Patterns) (e Como Evitá-los)

  • Obsessão por um único número (single-number obsession): Sempre combine métricas globais com fatias, intervalos de confiança e calibração.
  • Ajustar no conjunto de teste: Mantenha um conjunto final de retenção (holdout) e documente decisões.
  • Ignorar desbalanceamento: Use métricas e estratégias de amostragem adequadas; veja Desbalanceamento de Classes.
  • Sem medição de incerteza: Adicione verificações de calibração e estimação de incerteza para cenários sensíveis a risco.
  • Sobreajuste ao benchmark (benchmark overfitting): Iterar repetidamente contra o mesmo conjunto público pode inflar resultados.
  • Sem análise de erros: Use Análise de Erros (Fatiamento) para descobrir falhas acionáveis.

Checklist Prático de Avaliação

  • Defina a distribuição-alvo e critérios de sucesso (incluindo custos e restrições).
  • Escolha uma estratégia de divisão que corresponda ao processo gerador de dados (sensível a tempo/grupo).
  • Selecione métricas alinhadas à decisão real (e reporte métricas no ponto de operação).
  • Quantifique incerteza tanto nas previsões (calibração/intervalos) quanto nas métricas (intervalos de confiança).
  • Faça checagens de confiabilidade por fatias em coortes-chave e casos raros.
  • Faça testes de estresse de robustez (mudança de distribuição, corrupção, casos extremos).
  • Compare modelos estatisticamente e evite exagerar ganhos pequenos.
  • Planeje validação online e monitoramento pós-implantação.

Como Este Artigo se Conecta a Tópicos Relacionados

Avaliação é um tópico guarda-chuva. Na prática, você frequentemente irá mais a fundo em:

Em conjunto, esses itens formam um kit completo de avaliação: medir desempenho, verificar confiabilidade, quantificar incerteza e tomar decisões com disciplina estatística.