Machine Learning · Insper

ROC e PR

Abordagem fundamental

Avaliar um modelo em todos os limiares e depois escolher um

Um modelo de escores é uma família de classificadores

Escolha um limiar \(t\), sinalize todo mundo com escore \(\geq t\) e você tem uma matriz de confusão. Duas taxas a resumem:

\[ \text{TPR} = \text{recall} = \frac{TP}{TP + FN} \qquad \text{FPR} = \frac{FP}{FP + TN} \]
  • a TPR (true positive rate, taxa de verdadeiros positivos) é a fração dos doentes que pegamos;
  • a FPR (false positive rate, taxa de falsos positivos) é a fração dos saudáveis que alarmamos.

TP, FN, FP e TN: verdadeiros positivos, falsos negativos, falsos positivos e verdadeiros negativos.

Nos 20 pacientes com \(t = 0{,}5\): TPR = 7/10, FPR = 2/10, um ponto \((0{,}2;\ 0{,}7)\). Mude o limiar e o ponto se move — esse caminho é a curva ROC (receiver operating characteristic).

O caminho desta parte

  1. Curva ROCcada limiar é um ponto: doentes pegos contra saudáveis alarmados
  2. Um número: AUCAUC (área sob a curva) = a fração de pares (doente, saudável) na ordem certa
  3. Curva precisão–recallprecisão média; por que ela mostra uma classe rara que a ROC esconde
  4. Escolher o limiarquatro critérios, decididos na validação; uma fórmula quando os escores são calibrados
Cada etapa responde a uma pergunta: como o modelo se sai em cada limiar? → quão boa é a ordenação como um todo? → o que muda quando a classe positiva é rara? → qual limiar vai para produção?
Etapa 1 · Como o modelo se sai em cada limiar?

Cada linha da tabela é um limiar

pacienteescoredoenteTPFPTPRFPR
P010,951100,10,0
P040,801400,40,0
P050,750410,40,1
P090,551720,70,2
…………………
P200,02010101,01,0
A regra é mecânica: passar por um doente anda para cima 1/10; passar por um saudável anda para a direita 1/10.

A escada ROC

Escada ROC dos 20 pacientes, com o ponto do limiar 0,5 e a área sombreada 0,86
  • (0, 0): ninguém sinalizado;
  • (1, 1): todo mundo sinalizado;
  • a diagonal: escores aleatórios — sinaliza doentes e saudáveis na mesma taxa.
Um bom modelo sobe cedo: encontra os doentes primeiro. Um perfeito sobe até (0, 1) e só então vai para a direita.

Simulador: deslize o limiar

Preveja. A mesma ideia em 600 escores simulados (500 negativos, 100 positivos). Baixe o limiar a partir de 0,5: para onde vai o ponto ROC e o que acontece com a precisão?

Etapa 2 · Quão boa é a ordenação como um todo?

AUC, de duas maneiras

Como área

A AUC (area under the curve) é a área sob a escada. Cada saudável acrescenta um retângulo de largura 1/10 e altura igual à TPR do momento:

\[ \begin{aligned} \tfrac{1}{10}\,(&0{,}4 + 0{,}6 + 0{,}8 + 0{,}9 + 0{,}9 \\ &+ 5 \times 1{,}0) = 0{,}86 \end{aligned} \]

Como pares

Dos 10 × 10 = 100 pares (doente, saudável), em quantos o doente tem o escore maior?

\[ \begin{aligned} \tfrac{1}{100}\,(&4 + 6 + 8 + 9 + 9 \\ &+ 5 \times 10) = \tfrac{86}{100} = 0{,}86 \end{aligned} \]
Não é coincidência: \(\text{AUC} = P(\text{escore de um doente} > \text{escore de um saudável})\), com empates valendo meio. É a leitura mais útil de uma AUC.

A AUC mede a separação entre as classes

Histogramas de escores de saudáveis N(0, 1) e doentes N(d, 1) para d = 0,5, 1,5 e 3, e a curva ROC de cada caso, com AUC 0,641, 0,850 e 0,984
Quanto menos as distribuições se sobrepõem, maior a AUC: aqui, \(\text{AUC} = \Phi(d/\sqrt{2})\). Nenhum limiar separa classes sobrepostas; mover o limiar só escolhe um ponto da mesma curva.

Só a ordem importa

transformação dos escoresAUC
score0,86
score ** 20,86
log(score)0,86
100 * score - 70,86
1 - score (inverte a ordem)0,14
A AUC não diz nada sobre calibração: escores todos entre 0,40 e 0,41 podem dar AUC 0,99.
A AUC não diz nada sobre um limiar: ela faz média sobre todos, inclusive os que você nunca usaria.

AUC 0,14 não é um modelo ruim: é um bom modelo com os rótulos trocados.

Escores, não rótulos


# errado: rótulos previstos (saída de predict)
labels = (score >= 0.5).astype(int)
roc_auc_score(sick, labels)             # 0.75  ← NÃO é a AUC do modelo
balanced_accuracy_score(sick, labels)   # 0.75  ← é isto que você calculou

# certo: escores (predict_proba(X)[:, 1])
roc_auc_score(sick, score)              # 0.86  ← a AUC do modelo
  
  • Com só dois valores distintos, a "curva" tem um ponto, ligado aos cantos por retas.
  • A área vira \((\text{TPR} + \text{TNR})/2\), com TNR = taxa de verdadeiros negativos (especificidade), que é a acurácia balanceada em 0,5.
Passe sempre predict_proba(X)[:, 1] ou decision_function(X). O erro não dispara exceção nenhuma.
Etapa 3 · O que muda quando a classe positiva é rara?

A curva precisão–recall (PR)

A curva PR dos 20 pacientes, um dente de serra, com a linha de base na prevalência 0,5

A ROC olha as duas classes separadamente. O médico pergunta outra coisa: dos pacientes que eu sinalizo, quantos estão mesmo doentes?

  • cada doente: recall sobe e a precisão sobe um pouco;
  • cada saudável: recall fica e a precisão cai.
A linha "sem habilidade" é uma horizontal na prevalência (aqui 0,5), não a diagonal.

Precisão média (AP, average precision)

\[ \text{AP} = \sum_k (R_k - R_{k-1})\,P_k = \text{a média da precisão na posição de cada doente} \]
cálculovalor
AP à mão (média de 1, 1, 1, 1, 0,833, 0,857, 0,778, 0,8, 0,75, 0,667)0,8685
average_precision_score0,8685
auc(recall, precision) — área dos trapézios0,8608
Entre dois pontos PR a precisão não varia linearmente com o recall: a reta descreve classificadores que não existem e o trapézio pode ser otimista (Davis & Goadrich, 2006). Reporte a AP.

Quando a classe positiva é rara

O mesmo escorador, mudando só quantos doentes existem:

prevalênciaAUCAPTPRFPRprecisão
50%0,9210,9220,800,120,87
10%0,9220,6660,800,120,42
1%0,9140,2520,790,120,06
As três curvas ROC coincidem enquanto as curvas PR afundam conforme a prevalência cai

A precisão em termos da prevalência

Precisão: dos pacientes sinalizados, a fração que está mesmo doente, \(TP/(TP + FP)\). Prevalência \(\pi\): a fração de doentes na população. Em \(N\) pessoas:

quantos sãoquantos o modelo sinaliza
doentes\(\pi N\)\(TP = \text{TPR} \cdot \pi N\)
saudáveis\((1-\pi) N\)\(FP = \text{FPR} \cdot (1-\pi) N\)
\[ \text{precisão} = \frac{TP}{TP + FP} = \frac{\pi \cdot \text{TPR}}{\pi \cdot \text{TPR} + (1-\pi)\cdot \text{FPR}} \qquad (\text{o } N \text{ cancela}) \]
Mesmo modelo, TPR 0,80 e FPR 0,12:
\(\pi = 0{,}5 \;\Rightarrow\; 0{,}40/(0{,}40 + 0{,}06) = \mathbf{0{,}87}\)
\(\pi = 0{,}01 \;\Rightarrow\; 0{,}008/(0{,}008 + 0{,}119) = \mathbf{0{,}06}\)

Por quê: olhe os denominadores

  • a FPR divide pelo número de saudáveis: é uma propriedade do modelo dentro de uma classe, cega para quantos doentes existem;
  • a precisão divide pelos sinalizados, que mistura as duas classes na proporção de seus tamanhos.
12% de alarmes falsos parece pouco, mas 12% de 100.000 saudáveis são 12.000 alarmes falsos contra cerca de 800 verdadeiros.
ROC / AUC: as duas classes importam ou a prevalência vai mudar. Livre de prevalência.
PR / AP: a classe positiva é rara e você paga pelos casos sinalizados. Leia a AP contra a prevalência.
Etapa 4 · Qual limiar vai para produção?

Escolhendo o limiar: quatro critérios

critério\(t\)
F1 máximo0,35
J de Youden = TPR − FPR0,45 ou 0,35
recall ≥ 0,9, melhor precisão0,35
custo mínimo, FN = 10 FP0,20

F1: média harmônica de precisão e recall. O padrão 0,5 custa 32; o mínimo custa 5.

Recall, precisão, F1 e J de Youden em função do limiar; a curva de custo
Os critérios não concordam porque declaram custos diferentes. A escolha é da aplicação e é feita na validação.

Quando os escores são calibrados, há fórmula

\[ p > t^* = \frac{c_{FP}}{c_{FP} + c_{FN}} = \frac{1}{1 + 10} \approx 0{,}09 \]
  • sinalizar um paciente com probabilidade \(p\) custa \((1-p)\,c_{FP}\) em média; não sinalizar custa \(p\,c_{FN}\);
  • sinalize quando o segundo for maior (Elkan, 2001).
Nos 20 pacientes, \(t = 0{,}10\) custa 7, perto do mínimo empírico de 5 mas não igual: os escores não são perfeitamente calibrados. A fórmula diz onde procurar; a validação diz onde parar.

0,5 só é o limiar certo quando os dois erros custam o mesmo e os escores são calibrados.

Resumo

ROCprecisão–recall
eixosFPR × TPRrecall × precisão
denominadorescada classe separadamentea coluna dos sinalizados
linha "sem habilidade"a diagonalhorizontal na prevalência
resumoAUC = P(doente acima de saudável)AP = média da precisão nos positivos
muda com a prevalência?nãosim
A curva é o modelo; o ponto sobre ela é a sua decisão e pode mudar depois sem retreinar nada.
Lab fundamental · cerca de 35 min, em duplas

Mamografias: as curvas, passos 1 a 5

  • 11.183 regiões, 2,3% malignas; a tarefa é sinalizá-las para um radiologista.
  • Notebook no Colab: nada para baixar. Salve uma cópia no seu Drive.
  • Em cada passo, responda o Preveja antes de rodar.
  • Simulações: a AUC só enxerga a ordem (passo 4) e o preço de cada ponto de recall (passo 5).

Ritmo: passos 1 a 3 em 10 min; passo 4 e a simulação em 12 min; passo 5 e a simulação em 13 min.