Visualization for Machine Learning

Autumn 2025

Model Assessment

Agenda

  1. Confusion Matrices e ROC Curves

  2. Sistemas de Visual Analytics para Model Performance

  3. Calibration

Confusion Matrices, ROC Curves

Cenário: Previsão de Doença

  • Considere um modelo de previsão de doença. Suponha que a hipotética doença tenha uma prevalência de 5% na população

  • O modelo dado converge para a solução de prever que ninguém tem a doença (ou seja, o modelo prediz “0” para cada observação)

  • Nosso modelo tem accuracy de 95%

  • Ainda assim, os funcionários de saúde pública ficam intrigados

Cenário: Dígitos Manuscritos

  • Considere um modelo para identificar dígitos manuscritos. Todos os dígitos são igualmente prováveis e igualmente representados nos training e test datasets.

  • O modelo identifica corretamente todos os dígitos, exceto o dígito \(5\), classificando metade das amostras de \(5\) como \(6\), sendo a outra metade identificada corretamente

  • O accuracy deste modelo é \(95\%\). Essa informação é suficiente para determinar se o modelo é bom ou não?

Extended Confusion Matrix

Confusion Matrices no sklearn

import matplotlib.pyplot as plt
from sklearn.metrics import ConfusionMatrixDisplay

clf.fit(X_train, y_train)

ConfusionMatrixDisplay.from_estimator(clf, X_test, y_test, cmap=plt.cm.Blues)
plt.show()

Confusion Matrices

Prós

  • Muitas métricas derivadas
  • Fácil de implementar
  • O resumo dos erros do modelo é claro

Contras

  • Difícil de escalar
  • Difícil de avaliar o output probabilístico
  • Difícil de ver erros individuais

Neo: Hierarchical Confusion Matrix

Receiver Operating Characteristic (ROC)

  • A análise ROC é outra forma de avaliar o output de um classifier

  • A análise ROC surgiu da operação de radar na Segunda Guerra Mundial, onde os operadores estavam interessados em detectar sinal (aviões inimigos) versus ruído

  • Criamos uma ROC curve plotando o true positive rate (TPR) contra o false positive rate (FPR) em vários thresholds

ROC Curve

ROC Curve

ROC Curve

Area under an ROC curve (AUC)

ROC curve no sklearn

import matplotlib.pyplot as plt
from sklearn.metrics import RocCurveDisplay

clf.fit(X_train, y_train)

RocCurveDisplay.from_estimator(clf, X_test, y_test, plot_chance_level=True)
plt.show()

Multiclass ROC curve

Micro-average: Agrega as contribuições de todas as classes para calcular a métrica. Útil quando há class imbalance.

Macro-average: Calcula a métrica para cada class separadamente, e depois tira a média (trata todas as classes igualmente)

Sistemas de Visual Analytics para Model Performance

Squares (2016)

Alsallakh et. al. (2014)

Alsallakh et. al. (2014)

Beauxis-Aussalet and Hardman (2014)

Beauxis-Aussalet and Hardman (2014)

EnsembleMatrix (2009)

Calibration

O que é calibration?

  • Ao fazer classification, frequentemente estamos interessados não só em prever a class label, mas também na probability do output

  • Essa probability nos dá uma espécie de confidence score sobre a predição

  • No entanto, um modelo pode separar bem as classes (tendo um bom accuracy/AUC), mas estar mal calibrated. Nesse caso, as estimated class probabilities estão longe das true class probabilities

  • Podemos calibrar o modelo, mudando a scale das predicted probabilities

Calibration - Exemplo de Previsão do Tempo

Os meteorologistas começaram a pensar em calibration há muito tempo (Brier, 1950): uma previsão de “70% de chance de chuva” deveria ser seguida por chuva 70% das vezes. Vamos considerar um pequeno exemplo:

Veja como essa previsão se saiu ao prever a chuva:

  • “10% de chance de chuva” foi uma leve superestimativa: \((\bar{y} = 0/2 = 0\%)\)
  • “40% de chance de chuva” foi uma leve subestimativa: \((\bar{y} = 1/2 = 50\%)\)
  • “70% de chance de chuva” foi uma leve superestimativa: \((\bar{y} = 2/3 = 67\%)\)
  • “90% de chance de chuva” foi uma leve subestimativa: \((\bar{y} = 1/1 = 100\%)\)

Visualizando previsões - O Reliability Diagram

Reliability diagram - Mudando valores

Reliability diagram - Mudando o agrupamento

Reliability Diagram no sklearn

from sklearn.calibration import CalibrationDisplay

fig = plt.figure()
ax = fig.add_subplot(111)

CalibrationDisplay.from_estimator(lg, X_test, y_test, n_bins=10, ax=ax,
                                  label='Logistic Regression')
CalibrationDisplay.from_estimator(nb, X_test, y_test, n_bins=10, ax=ax,
                                  label='Naive Bayes')

Fontes comuns de miscalibration

  • Underconfidence: um classifier pensa que é pior separando classes do que realmente é.

    • Underconfidence tipicamente gera distorções sigmoidais
    • Calibrar isso significa afastar as predicted probabilities do centro
  • Overconfidence: um classifier pensa que é melhor separando classes do que realmente é

    • Aqui, as distorções são inverse-sigmoidal
    • Calibrar isso significa empurrar as predicted probabilities em direção ao centro

Um classifier pode ser overconfident para uma class e underconfident para a outra

Reliability Diagram no sklearn

Métricas de calibration

Seja \(N\) o total de samples, \(B\) o número de bins, \(n^b\) os samples no bin \(b\), e \(conf(b)\) o average predicted probability no bin \(b\).

  • Expected Calibration Error:

\[ECE = \sum_{b=1}^B \frac{n^b}{N}|acc(b) - conf(b)|\]

  • Maximum Calibration Error:

\[MCE = \underset{m \in \{1,2,\dots,|B|\}}{\text{max}} |acc(b) - conf(b)|\]

Calibration de modelos modernos

Calibration de modelos modernos

Proper Scoring Rules

  • As proper scoring rules são calculadas no nível da observação, enquanto ECE é feita em bins

  • Pense nisso como colocar cada item em seu próprio bin, e então calcular a média de alguma loss para cada predicted probability e sua corresponding observed label

Proper Scoring Rules

  • Brier Score/Quadratic error/Euclidean distance:

\[BS = \frac{1}{N} \sum_{i=1}^N (\hat{y}_i - y_i)^2\]

  • Log-loss/Cross entropy:

    • Frequentemente usada como a training loss de métodos de machine learning, como as neural networks

    • Penaliza apenas a probability dada à true class

\[LL = -\frac{1}{N} \sum_{i=1}^N [y_i \text{log}(\hat{y}_i) + (1-y_i)\text{log}( 1 - \hat{y}_i)]\]

Proper Scoring Rules

Uma forma intuitiva de decompor as proper scoring rules é em refinement loss e calibration loss

  • Refinement loss: é a loss devida a produzir a mesma probability para instances de classes diferentes

  • Calibration loss: é a loss devida à diferença entre as probabilities preditas pelo modelo e a proporção de positives entre instances com o mesmo output

Calibration Techniques

A calibration Parametric envolve modelar as score distributions dentro de cada class

  • Platt scaling: A calibration logistic pode ser derivada assumindo que os scores dentro de ambas as classes são normalmente distribuídos com a mesma variance (Platt, 2000)

  • Beta calibration: emprega Beta distributions em vez disso, para lidar com scores que já estão em uma scale [0, 1] (Kull et al., 2017)

  • Dirichlet calibration para mais de duas classes (Kull et al., 2019)

A calibration Non-parametric frequentemente ignora os scores e emprega ranks

  • Isotonic regression ajusta um non-parametric isotonic regressor, que produz uma função step-wise não decrescente

Platt scaling

  • Assume que a calibration curve pode ser corrigida aplicando uma sigmoid às raw predictions. Isso significa encontrar \(\mathbf{A}\) e \(\mathbf{b}\) via MLE:

\[p(y_i = 1 | \hat{y}_i) = \frac{1}{1 + exp(\mathbf{A}\hat{y}_i + \mathbf{b})}\]

  • Funciona melhor se o calibration error for simétrico (o output do classifier para cada binary class é normalmente distribuído com a mesma variance)

  • Isso pode ser um problema para problemas de classification altamente imbalanced, onde os outputs não têm variance igual

  • Em geral é mais eficaz quando o modelo não calibrado é underconfident e tem calibration errors semelhantes tanto para outputs altos quanto baixos

Isotonic regression

  • Ajusta um non-parametric isotonic regressor, que produz uma função step-wise não decrescente

  • Isotonic regression é mais geral quando comparada ao Platt scaling, já que a única restrição é que a mapping function seja monotonicamente crescente

  • É mais powerful pois pode corrigir qualquer distorção monotônica do modelo não calibrado

  • No entanto, é mais propensa a overfitting, especialmente em small datasets

Calibration no sklearn

Calibration no sklearn

Calibration Takeaways

  • Reliability diagrams são uma forma padrão de visualizar calibration

  • ECE é um resumo do que os reliability diagrams mostram

  • As proper scoring rules (Log loss, Brier score) medem diferentes aspectos da probability correctness

  • No entanto, as proper scoring rules não conseguem dizer onde um modelo está miscalibrated

Hyperparameters dos reliability diagrams

Calibrate (2023)

Calibrate (2023) - Learned Reliability Diagram

Calibrate (2023)

Smooth ECE (2023)

Smooth ECE (2023)

Visualizando Calibration para Multi-Class Problems

Literatura Sugerida sobre Calibration

Literatura Sugerida sobre Calibration