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
- Curva ROCcada limiar é um ponto: doentes pegos contra saudáveis alarmados
- Um número: AUCAUC (área sob a curva) = a fração de pares (doente, saudável) na ordem certa
- Curva precisão–recallprecisão média; por que ela mostra uma classe rara que a ROC esconde
- 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
| paciente | escore | doente | TP | FP | TPR | FPR |
| P01 | 0,95 | 1 | 1 | 0 | 0,1 | 0,0 |
| P04 | 0,80 | 1 | 4 | 0 | 0,4 | 0,0 |
| P05 | 0,75 | 0 | 4 | 1 | 0,4 | 0,1 |
| P09 | 0,55 | 1 | 7 | 2 | 0,7 | 0,2 |
| … | … | … | … | … | … | … |
| P20 | 0,02 | 0 | 10 | 10 | 1,0 | 1,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
- (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
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 escores | AUC |
score | 0,86 |
score ** 2 | 0,86 |
log(score) | 0,86 |
100 * score - 7 | 0,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 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álculo | valor |
| 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_score | 0,8685 |
auc(recall, precision) — área dos trapézios | 0,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ência | AUC | AP | TPR | FPR | precisão |
| 50% | 0,921 | 0,922 | 0,80 | 0,12 | 0,87 |
| 10% | 0,922 | 0,666 | 0,80 | 0,12 | 0,42 |
| 1% | 0,914 | 0,252 | 0,79 | 0,12 | 0,06 |
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ão | quantos 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áximo | 0,35 |
| J de Youden = TPR − FPR | 0,45 ou 0,35 |
| recall ≥ 0,9, melhor precisão | 0,35 |
| custo mínimo, FN = 10 FP | 0,20 |
F1: média harmônica de precisão e recall. O padrão 0,5 custa 32; o mínimo custa 5.
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
| ROC | precisão–recall |
| eixos | FPR × TPR | recall × precisão |
| denominadores | cada classe separadamente | a coluna dos sinalizados |
| linha "sem habilidade" | a diagonal | horizontal na prevalência |
| resumo | AUC = P(doente acima de saudável) | AP = média da precisão nos positivos |
| muda com a prevalência? | não | sim |
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.