Calibração
O que é calibração?
No aprendizado de máquina probabilístico (probabilistic machine learning), calibração (calibration) significa que as probabilidades previstas do modelo (predicted probabilities) correspondem às frequências do mundo real.
De forma informal:
- Se um classificador (classifier) produz 0.80 para muitos exemplos, então cerca de 80% desses exemplos deveriam de fato pertencer à classe positiva.
Formalmente (caso binário), um modelo que produz uma pontuação de probabilidade (probability score) (\hat{p}(x)\in[0,1]) é perfeitamente calibrado (perfectly calibrated) se:
[ \Pr(Y=1 \mid \hat{p}(X)=p) = p \quad \text{for all } p \in [0,1] ]
A calibração é uma parte fundamental da confiabilidade (reliability) do modelo: ela determina se você pode tratar as saídas do modelo como probabilidades significativas para tomada de decisão (decision-making), estimativa de risco (risk estimation) e otimização a jusante (downstream optimization).
A calibração se encaixa naturalmente ao lado de outros tópicos de avaliação como Métricas (Metrics) (acurácia (accuracy), AUC, perda logarítmica (log loss)), Estimativa de Incerteza (Uncertainty Estimation) (o que incerteza significa) e Validação e Validação Cruzada (Validation & Cross-Validation) (como medir calibração sem vazamento (leakage)).
Calibração vs. discriminação (uma confusão comum)
Dois modelos podem ranquear exemplos de forma semelhante, mas ter qualidade de probabilidade muito diferente.
- Discriminação (discrimination) (ou capacidade de ranqueamento (ranking ability)): o modelo atribui pontuações maiores para positivos do que para negativos? Métricas como área sob a curva ROC (AUC-ROC) e Precisão Média (Average Precision) enfatizam isso.
- Calibração: as probabilidades previstas correspondem a frequências empíricas? Isso afeta decisões como “tratar se risco ≥ 10%”.
Um modelo pode ter:
- AUC alta, mas calibração ruim (comum com redes neurais profundas (deep nets) modernas, árvores com boosting (boosted trees) e dados desbalanceados (imbalanced data))
- Boa calibração, mas discriminação medíocre (as probabilidades são honestas, mas pouco informativas)
Na prática, você frequentemente quer ambas: bom ranqueamento e probabilidades significativas.
Por que a calibração importa
A calibração se torna importante sempre que as probabilidades são usadas diretamente, e não apenas para ranqueamento:
- Medicina: “Este paciente tem 3% de risco de sepse.” Decisões de tratamento e alocação de recursos dependem de limiares de risco.
- Finanças: probabilidades de inadimplência orientam precificação, reservas e conformidade regulatória.
- Moderação de conteúdo: decidir se enviar para revisão humana com base na “probabilidade de violação de política”.
- Previsão do tempo: exemplo clássico de calibração — se “20% de chuva” acontece em ~20% desses dias, as previsões estão calibradas.
Mesmo que você acabe escolhendo um limiar (threshold), a calibração ajuda a escolher esse limiar de forma racional (via custos/benefícios esperados), em vez de ajustar às cegas.
Tipos e níveis de calibração
Calibração binária
O cenário padrão: prever (\Pr(Y=1\mid X)). A calibração é avaliada comparando probabilidades previstas com frequências observadas.
Calibração multiclasse
Para (K) classes, o modelo produz um vetor de probabilidades (\hat{\mathbf{p}}(x)). Uma definição natural é:
[ \Pr(Y=k \mid \hat{p}_k(X)=p) = p \quad \text{for each class } k ]
A calibração multiclasse é mais complexa porque a calibração pode falhar de maneiras que não ficam visíveis em gráficos um-contra-o-resto (one-vs-rest).
Calibração do rótulo principal (top-label calibration)
Às vezes, você só se importa se o modelo está calibrado na confiança da classe predita (por exemplo, “o modelo está 90% confiante no rótulo escolhido”). Isso é comum em aprendizado profundo (deep learning).
Calibração sob mudança de distribuição do conjunto de dados (dataset shift)
A calibração é dependente da distribuição. Um modelo calibrado em uma população pode ficar mal calibrado quando:
- a prevalência de classe muda (mudança de priori (prior shift))
- a distribuição das características muda (mudança de covariáveis (covariate shift))
- os padrões de rotulagem sofrem deriva
Esse é um dos principais motivos pelos quais a calibração deve ser monitorada em produção.
Como avaliar calibração
Diagramas de confiabilidade (reliability diagrams) (curvas de calibração)
Um diagrama de confiabilidade (reliability diagram) agrupa previsões em bins (bins) e compara:
- probabilidade prevista média no bin
- fração observada de positivos no bin
Passos típicos:
- Agrupar (\hat{p}) em intervalos (por exemplo, 10 bins).
- Para cada bin (b), calcular:
- (\text{conf}(b) = \frac{1}{|b|}\sum_{i\in b} \hat{p}_i)
- (\text{acc}(b) = \frac{1}{|b|}\sum_{i\in b} y_i)
- Plotar (\text{acc}(b)) vs (\text{conf}(b)). Calibração perfeita fica na diagonal.
Nota prática: Com bins demais e dados de menos, a curva fica ruidosa. Com bins de menos, você pode perder estrutura importante.
Erro de Calibração Esperado (Expected Calibration Error, ECE)
O ECE resume a má calibração como uma média ponderada dos “gaps” por bin:
[ \mathrm{ECE} = \sum_{b=1}^B \frac{|b|}{n}\left|\text{acc}(b) - \text{conf}(b)\right| ]
Variantes incluem:
- MCE (Erro Máximo de Calibração (Maximum Calibration Error, MCE)): pior gap de bin
- ECE Adaptativo (Adaptive ECE): bins têm contagens iguais em vez de larguras iguais
Ressalva: O ECE depende fortemente da escolha de binning e pode ser enviesado. Ele é útil operacionalmente, mas deve ser interpretado com cuidado.
Pontuação de Brier (Brier score) e decomposição
A pontuação de Brier (Brier score) (binária) é:
[ \mathrm{BS} = \frac{1}{n}\sum_{i=1}^n (\hat{p}_i - y_i)^2 ]
Quanto menor, melhor. Ela mede tanto calibração quanto “nitidez (sharpness)” (quão próximas as probabilidades ficam de 0/1 quando apropriado). A decomposição clássica a separa em:
- Confiabilidade (erro de calibração)
- Resolução (resolution) (capacidade de separar grupos com riscos verdadeiros diferentes)
- Incerteza (uncertainty) (ruído intrínseco nos rótulos / taxa base (base rate))
Assim, Brier costuma ser uma boa métrica complementar aos diagramas de confiabilidade.
Perda logarítmica (log loss) (entropia cruzada (cross-entropy)) e regras de pontuação próprias
A perda logarítmica é uma regra de pontuação estritamente própria (strictly proper scoring rule): em expectativa, ela é minimizada quando (\hat{p}(x)) é igual à verdadeira probabilidade condicional. Isso significa que otimizar a perda logarítmica incentiva probabilidades calibradas em teoria.
Na prática, dados finitos, regularização (regularization), ruído nos rótulos e especificação incorreta do modelo (model misspecification) ainda podem produzir má calibração — especialmente em modelos de alta capacidade (high-capacity models) que se tornam excessivamente confiantes (overconfident).
Fatiamento da calibração (slicing calibration) (muito importante)
A calibração global pode esconder problemas graves em subpopulações. Combine a avaliação de calibração com Análise de Erros (Fatiamento) (Error Analysis (Slicing)):
- Calibração por faixa etária, região, tipo de dispositivo, idioma
- Calibração sob diferentes regimes de prevalência
- Calibração para coortes (cohorts) raras, porém de alto impacto
Exemplo prático: como a má calibração aparece
Suponha que um modelo seja usado para triagem (triage) e produza estas probabilidades:
- 1000 casos com risco previsto em torno de 0.10
- Apenas 4% deles realmente têm a condição
Então o modelo está excessivamente confiante nessa região: 10% previsto, 4% observado.
Por outro lado, se:
- previsto ~0.10
- observado ~0.18
o modelo está pouco confiante (underconfident) (conservador demais).
Ambos os erros podem ser custosos, dependendo da regra de decisão a jusante.
Causas comuns de má calibração
- Sobreajuste (overfitting) / modelos de alta capacidade: redes neurais profundas e árvores com boosting frequentemente se tornam excessivamente confiantes.
- Desbalanceamento de classes (class imbalance): estimativas de probabilidade podem ser enviesadas; veja Desbalanceamento de Classes para armadilhas de avaliação.
- Ruído nos rótulos: pode distorcer a relação entre pontuações e probabilidades verdadeiras.
- Escolhas de regularização e parada antecipada (early stopping): podem ajudar ou prejudicar a calibração dependendo da configuração.
- Mudança de distribuição: a calibração pode degradar significativamente após a implantação.
- Vazamento de treino/teste na etapa de calibração: calibrar com os mesmos dados usados para ajustar o modelo pode produzir uma calibração otimista demais.
Como melhorar calibração (métodos)
A calibração pode ser melhorada por:
- Mudanças durante o treinamento (training-time changes) (arquitetura (architecture), função de perda (loss), regularização, combinação de modelos (ensembling))
- Calibração pós-hoc (post-hoc calibration) (ajustar um mapeamento (mapping) de pontuações para probabilidades em dados separados (held-out data))
A maioria dos fluxos de trabalho práticos usa calibração pós-hoc porque ela é fácil de aplicar a qualquer modelo.
Calibração pós-hoc: a ideia central
Você começa com uma pontuação não calibrada (s(x)) (frequentemente já parecida com uma probabilidade). Aprende uma função (g) tal que:
[ \hat{p}_{\text{cal}}(x) = g(s(x)) ]
Você ajusta (g) em um conjunto de calibração (calibration set) (dados de validação não usados para treinar o modelo base).
Escalonamento de Platt (Platt scaling) (calibração logística (logistic calibration))
O escalonamento de Platt ajusta uma regressão logística (logistic regression) sobre as pontuações do modelo:
[ g(s) = \sigma(as + b) ]
Prós:
- Simples, baixa variância
- Funciona bem quando a má calibração tem formato aproximadamente sigmoidal
Contras:
- Pode subajustar formatos de calibração mais complexos
Regressão isotônica (isotonic regression)
A regressão isotônica ajusta uma função (g) em degraus não decrescente.
Prós:
- Flexível; pode capturar má calibração complexa
Contras:
- Precisa de mais dados; pode sobreajustar com conjuntos de calibração pequenos
Escalonamento de temperatura (temperature scaling) (especialmente para aprendizado profundo)
Para classificação com logits (logits) (\mathbf{z}), o escalonamento de temperatura divide os logits por (T>0):
[ \hat{p}_{\text{cal}}(y=k\mid x)= \text{softmax}(\mathbf{z}/T)_k ]
- (T>1) normalmente reduz excesso de confiança.
- É muito comum para Redes Neurais (Neural Networks) porque é simples e funciona surpreendentemente bem.
O escalonamento de temperatura é um caso especial de métodos mais gerais de calibração multiclasse.
Outros métodos (brevemente)
- Binning por histograma (histogram binning): mapeamento simples baseado em bins; pode ser grosseiro
- Calibração beta (beta calibration): alternativa paramétrica que pode superar Platt em alguns cenários
- Calibração de Dirichlet (Dirichlet calibration): generalização multiclasse com mais flexibilidade
Fluxo de trabalho prático: calibrando com scikit-learn
Abaixo está um padrão típico: treinar um modelo e, em seguida, calibrá-lo usando validação cruzada ou um conjunto separado.
import numpy as np
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.calibration import CalibratedClassifierCV, calibration_curve
from sklearn.metrics import brier_score_loss, log_loss
X, y = make_classification(n_samples=5000, weights=[0.9, 0.1], random_state=0)
X_train, X_tmp, y_train, y_tmp = train_test_split(X, y, test_size=0.4, random_state=0)
X_cal, X_test, y_cal, y_test = train_test_split(X_tmp, y_tmp, test_size=0.5, random_state=0)
# Base model (often miscalibrated)
base = RandomForestClassifier(n_estimators=300, random_state=0)
base.fit(X_train, y_train)
p_base = base.predict_proba(X_test)[:, 1]
print("Base Brier:", brier_score_loss(y_test, p_base))
print("Base LogLoss:", log_loss(y_test, p_base))
# Post-hoc calibration on held-out calibration set
cal = CalibratedClassifierCV(base, method="isotonic", cv="prefit")
cal.fit(X_cal, y_cal)
p_cal = cal.predict_proba(X_test)[:, 1]
print("Cal Brier:", brier_score_loss(y_test, p_cal))
print("Cal LogLoss:", log_loss(y_test, p_cal))
# Reliability curve data (for plotting elsewhere)
frac_pos, mean_pred = calibration_curve(y_test, p_cal, n_bins=10, strategy="quantile")
print(list(zip(mean_pred, frac_pos)))
Notas:
cv="prefit"significa que o modelo base já está treinado; a calibração usaX_cal, y_cal.- Alternativamente,
CalibratedClassifierCV(..., cv=5)fará calibração interna via validação cruzada (útil quando os dados são limitados). - Sempre avalie calibração em um conjunto de teste separado para evitar estimativas otimistas — veja Validação e Validação Cruzada (Validation & Cross-Validation).
Calibração e tomada de decisão
A calibração é mais valiosa quando probabilidades alimentam decisões de utilidade esperada (expected-utility decisions).
Exemplo: Suponha que você aja quando o benefício esperado excede o custo:
- Benefício de agir em um verdadeiro positivo: (B)
- Custo de agir em um falso positivo: (C)
Aja se: [ \hat{p}(x)\cdot B - (1-\hat{p}(x))\cdot C > 0 \quad\Rightarrow\quad \hat{p}(x) > \frac{C}{B+C} ]
Esse limiar só faz sentido se (\hat{p}(x)) for uma probabilidade significativa. Se o modelo for excessivamente confiante, você pode agir com frequência demais; se for pouco confiante, pode deixar passar positivos.
Isso conecta a calibração fortemente ao desenho da avaliação, especialmente online: quando limiares mudam os resultados para usuários, você pode precisar de um cuidadoso Desenho de Experimentos e Poder Estatístico (Experiment Design & Power).
Calibração multiclasse na prática
Para modelos multiclasse, abordagens comuns de avaliação incluem:
- Diagramas de confiabilidade por classe (um-contra-o-resto por classe)
- Calibração do rótulo principal (agrupar pela probabilidade máxima e verificar a frequência de acerto)
- Variantes de ECE multiclasse (existem diferentes definições; seja explícito)
Métodos de calibração:
- Escalonamento de temperatura é uma forte linha de base (baseline) para redes neurais.
- Métodos mais expressivos (por exemplo, calibração de Dirichlet) podem ajudar, mas são mais fáceis de sobreajustar.
Se você só precisa de “confiança de correção” bem calibrada, a calibração do rótulo principal pode ser suficiente. Se você precisa de probabilidades confiáveis por classe (por exemplo, custos esperados diferem por classe), use um método projetado para vetores de probabilidade multiclasse.
Calibração sob desbalanceamento de classes e prevalência variável
Um problema operacional comum: os dados de treinamento têm um balanço de classes, mas a implantação tem outro.
Se apenas a taxa base muda (mudança na probabilidade a priori), às vezes você consegue corrigir probabilidades via regra de Bayes (Bayes rule) (ajuste de priori) se tiver boas estimativas da nova prevalência. Mas, em muitos cenários reais, as mudanças são mais complexas (características e distribuições condicionais também mudam).
Orientação prática:
- Monitore a calibração ao longo do tempo e entre coortes.
- Recalibre periodicamente com novos dados rotulados.
- Evite assumir que um único mapeamento de calibração vai se manter válido indefinidamente.
Boas práticas e armadilhas
Boas práticas
- Mantenha um conjunto dedicado de calibração (ou faça calibração via validação cruzada) e um conjunto de teste separado.
- Relate tanto métricas de ranqueamento (AUC/PR) quanto métricas de calibração (ECE, pontuação de Brier, perda logarítmica) para uma visão completa.
- Use diagramas de confiabilidade junto com uma métrica escalar; os diagramas revelam onde os erros ocorrem.
- Faça fatiamento da calibração por coortes importantes; combine com Análise de Erros (Fatiamento).
- Prefira calibradores mais simples (Platt/temperatura) quando os dados de calibração forem limitados.
Armadilhas
- Calibrar no conjunto de teste (vazamento) torna os resultados inválidos.
- Usar apenas ECE: pode esconder falhas localizadas e depende do binning.
- Sobreajustar regressão isotônica com poucos dados de calibração.
- Ignorar mudança de distribuição: um modelo calibrado hoje pode não estar calibrado no mês que vem.
- Confundir “confiança” com “incerteza”: calibração trata da correção probabilística; conceitos mais amplos de incerteza são cobertos em Estimativa de Incerteza (Uncertainty Estimation).
Resumo
Calibração é a propriedade de que probabilidades previstas correspondem a frequências observadas. Ela é essencial quando as saídas do modelo guiam decisões reais, estimativas de risco ou alocação de recursos. Você avalia calibração com diagramas de confiabilidade e métricas como ECE e pontuação de Brier, e frequentemente pode melhorá-la usando métodos pós-hoc como escalonamento de Platt, regressão isotônica e escalonamento de temperatura. Como a calibração é sensível à distribuição dos dados e pode variar entre subgrupos, ela deve ser validada com cuidado e monitorada ao longo do tempo em produção.