Característica de Operação do Receptor (Receiver Operating Characteristic, ROC)

Visão geral

Uma curva Característica de Operação do Receptor (Receiver Operating Characteristic, ROC) é uma forma padrão de avaliar classificadores binários (binary classifiers) que produzem uma pontuação (score) (frequentemente uma probabilidade) em vez de uma decisão rígida de sim/não. Em vez de escolher um único limiar de classificação (por exemplo, “prever positivo se pontuação ≥ 0,5”), a curva ROC mostra como o desempenho muda ao longo de todos os limiares possíveis.

Concretamente, a curva ROC plota:

  • Taxa de Verdadeiros Positivos (True Positive Rate, TPR) (também conhecida como revocação (recall) ou sensibilidade (sensitivity)) no eixo y
  • Taxa de Falsos Positivos (False Positive Rate, FPR) (também conhecida como taxa de falsos alarmes (fall-out)) no eixo x

à medida que você varre o limiar de decisão de muito rígido para muito permissivo.

A análise ROC é amplamente usada em domínios como diagnóstico médico, detecção de fraude e recuperação de informação porque separa duas propriedades-chave:

  • Quão bem o modelo detecta positivos (alta TPR)
  • Com que frequência ele gera falsos alarmes (baixa FPR)

Ela também está intimamente ligada à qualidade de ranqueamento (ranking quality), e a área sob a curva ROC (AUC ROC (ROC AUC)) é um resumo escalar comum da discriminação (discrimination) do modelo.

Contexto relacionado: a curva ROC é construída a partir da Matriz de Confusão (Confusion Matrix) e se insere entre as Métricas (Metrics) gerais usadas para avaliação de modelos.

Fundamentos da matriz de confusão

Para classificação binária, cada previsão cai em uma de quatro categorias:

  • TP: verdadeiros positivos (previsto positivo, de fato positivo)
  • FP: falsos positivos (previsto positivo, de fato negativo)
  • TN: verdadeiros negativos (previsto negativo, de fato negativo)
  • FN: falsos negativos (previsto negativo, de fato positivo)

A partir dessas contagens definimos:

  • Taxa de Verdadeiros Positivos (TPR): [ \text{TPR} = \frac{TP}{TP + FN} ] “De todos os positivos reais, que fração capturamos?”

  • Taxa de Falsos Positivos (FPR): [ \text{FPR} = \frac{FP}{FP + TN} ] “De todos os negativos reais, que fração sinalizamos incorretamente?”

A ROC usa taxas condicionadas à classe verdadeira (positivos vs. negativos), o que é uma das razões pelas quais a ROC se comporta de forma diferente de métricas como precisão sob Desbalanceamento de Classes (Class Imbalance).

Como a curva ROC é construída

Pontuações e limiares

A maioria dos classificadores pode produzir uma pontuação contínua:

  • Regressão logística: probabilidade prevista P(y=1 | x)
  • Árvores com boosting de gradiente / florestas aleatórias: probabilidade ou pontuação de margem
  • Redes neurais: saída sigmoide ou logit
  • Detectores de anomalia: pontuação de anomalia

Para converter uma pontuação em um rótulo de classe, você escolhe um limiar (threshold) (t):

  • Prever positivo se score ≥ t, caso contrário negativo

À medida que você varia (t), você troca TPR e FPR:

  • Limiar muito alto: poucos positivos previstos → baixa FPR, mas frequentemente baixa TPR
  • Limiar muito baixo: muitos positivos previstos → alta TPR, mas também alta FPR

Algoritmo passo a passo (conceitual)

Dadas pontuações s_i e rótulos verdadeiros y_i ∈ {0,1}:

  1. Ordene os exemplos por pontuação em ordem decrescente.
  2. Comece com um limiar acima da pontuação máxima → todos previstos como negativos:
    • (FPR, TPR) = (0, 0)
  3. Abaixe o limiar, alternando previsões de negativo para positivo na ordem das pontuações.
  4. Após cada alternância (ou após cada pontuação distinta), recalcule (FPR, TPR).
  5. Termine com um limiar abaixo da pontuação mínima → todos previstos como positivos:
    • (FPR, TPR) = (1, 1)

Plote os pontos resultantes com FPR no x e TPR no y.

O que um ponto significa

Cada ponto na curva ROC corresponde a um limiar específico, isto é, um modo de operação específico do classificador.

  • Um ponto próximo de (0, 1) é ideal: poucos falsos positivos, muitos verdadeiros positivos.
  • Um ponto próximo de (0, 0) é conservador demais (raramente prevê positivo).
  • Um ponto próximo de (1, 1) é agressivo demais (prevê quase tudo como positivo).

Interpretando o formato da curva ROC

Formatos de referência principais

  1. Chute aleatório (linha diagonal)
    A linha de (0,0) a (1,1) representa um classificador sem poder discriminativo. Intuitivamente, à medida que você prevê mais positivos, TPR e FPR aumentam na mesma taxa.

  2. Classificador perfeito
    Um classificador perfeito sobe direto pelo eixo y até (0,1) e então segue até (1,1). Ele atinge TPR=1 com FPR=0 em algum limiar.

  3. Curvas “melhores” se arqueiam em direção ao canto superior esquerdo
    Quanto mais a curva se dobra em direção a (0,1), melhor o modelo separa positivos de negativos.

AUC ROC (Área Sob a Curva)

A Área Sob a Curva ROC (AUC) comprime toda a curva ROC em um único número entre 0 e 1:

  • AUC = 0.5: aleatório
  • AUC = 1.0: separação perfeita
  • AUC < 0.5: pior do que aleatório (frequentemente indica inversão de rótulos ou um erro de sinal; inverter as pontuações produz AUC > 0.5)

Uma interpretação útil:

A AUC ROC é igual à probabilidade de que um exemplo positivo escolhido aleatoriamente receba uma pontuação maior do que um exemplo negativo escolhido aleatoriamente.

Isso torna a AUC uma medida de qualidade de ranqueamento: ela avalia quão bem o modelo ordena positivos à frente de negativos, independentemente de qualquer limiar específico.

Quando as curvas se cruzam

Dois modelos podem ter curvas ROC que se cruzam, o que significa:

  • O Modelo A é melhor em alguma faixa de FPR (por exemplo, FPR muito baixa)
  • O Modelo B é melhor em outra faixa

Nesses casos, um único valor de AUC pode esconder diferenças importantes. Se sua aplicação exige operar com taxas de falsos positivos muito baixas (comum em sistemas de triagem ou de alertas), você pode se importar mais com o desempenho nessa região do que com a AUC global.

Uma correção comum é a AUC parcial (partial AUC) (ver Extensões).

Exemplo prático: computando e plotando ROC

Abaixo está um exemplo mínimo usando scikit-learn.

import numpy as np
from sklearn.metrics import roc_curve, roc_auc_score
import matplotlib.pyplot as plt

# Example: true labels and model scores (probabilities or any monotonic score)
y_true = np.array([0, 0, 1, 1, 0, 1, 0, 1])
y_score = np.array([0.05, 0.20, 0.70, 0.90, 0.10, 0.65, 0.30, 0.80])

fpr, tpr, thresholds = roc_curve(y_true, y_score)
auc = roc_auc_score(y_true, y_score)

print("AUC:", auc)
print("Thresholds:", thresholds)

plt.plot(fpr, tpr, label=f"ROC (AUC={auc:.3f})")
plt.plot([0, 1], [0, 1], linestyle="--", label="Random")
plt.xlabel("False Positive Rate (FPR)")
plt.ylabel("True Positive Rate (TPR)")
plt.title("ROC Curve")
plt.legend()
plt.show()

Para escolher um limiar para implantação, em geral você não usaria apenas a curva ROC; você incorporaria custos, restrições e a prevalência esperada (mais sobre isso abaixo).

Quando a avaliação baseada em ROC é apropriada

Curvas ROC e AUC ROC são especialmente apropriadas quando:

  1. Você tem um modelo de pontuação e se importa com ranqueamento/discriminação
    Se a pergunta principal é “O modelo atribui pontuações mais altas a positivos do que a negativos?”, a AUC ROC é uma métrica forte, independente de limiar.

  2. Você quer comparar classificadores ao longo de muitos limiares possíveis
    A ROC facilita visualizar trade-offs sem se comprometer cedo com um único ponto de operação.

  3. Falsos positivos e falsos negativos são relevantes, mas os custos ainda não estão fixos
    No início do desenvolvimento do modelo (experimentos offline), a ROC fornece um panorama amplo antes que os requisitos do produto definam um limiar.

  4. As probabilidades a priori das classes podem diferir entre conjuntos, mas você quer uma visão insensível ao prior
    Como TPR e FPR são condicionadas aos rótulos de classe, a curva ROC é matematicamente invariável à prevalência de classe (class prevalence) no conjunto de avaliação (embora isso possa ser uma faca de dois gumes — ver ressalvas).

Em um fluxo de avaliação mais amplo, a ROC frequentemente é combinada com:

Ressalvas e armadilhas comuns

1) A ROC pode parecer “boa” sob desbalanceamento severo de classes

A ROC usa:

  • TPR = TP/(TP+FN)
  • FPR = FP/(FP+TN)

Se os negativos superam vastamente os positivos, uma FPR aparentemente pequena ainda pode produzir um número inaceitavelmente grande de falsos positivos em termos absolutos.

Exemplo (cenário de triagem):

  • 1.000.000 de casos no total
  • 0,1% positivos → 1.000 positivos e 999.000 negativos
  • Suponha que em um determinado limiar:
    • TPR = 0,90 → captura 900 verdadeiros positivos
    • FPR = 0,01 → sinaliza 1% dos negativos → 9.990 falsos positivos

Você obtém 900 verdadeiros positivos mas quase 10.000 falsos alarmes. O ponto na ROC pode parecer razoável, mas operacionalmente o volume de alertas pode ser alto demais.

Para problemas desbalanceados em que você se importa com “entre os positivos previstos, quantos são realmente positivos?”, uma curva Precisão–Revocação (Precision–Recall, PR) costuma ser mais informativa. (Muitos wikis cobrem isso em Métricas e Desbalanceamento de Classes.)

2) A ROC não escolhe um ponto de operação para você

Uma curva ROC descreve trade-offs, mas a implantação exige escolher um limiar.

A escolha do limiar depende de:

  • Custo relativo de FP vs. FN (risco, dinheiro, dano ao usuário)
  • Restrições de capacidade (por exemplo, apenas N alertas/dia podem ser revisados)
  • Requisitos regulatórios (por exemplo, sensibilidade mínima)
  • Taxa-base esperada em produção (a prevalência pode diferir dos dados de teste)

Uma heurística comum, mas frequentemente injustificada, é escolher o limiar que maximiza o J de Youden (Youden’s J):

[ J = \text{TPR} - \text{FPR} ]

Isso escolhe o ponto mais distante acima da diagonal, mas implicitamente assume pesos iguais para os erros e não incorpora restrições operacionais. Uma abordagem melhor é modelar explicitamente custos ou restrições e então escolher o limiar de acordo.

3) AUC alta não implica probabilidades bem calibradas

A ROC avalia ranqueamento, não a acurácia das probabilidades. Dois modelos podem ter curvas ROC idênticas, mas calibração de probabilidades diferente.

  • Um modelo pode ter excelente AUC ROC, mas produzir probabilidades sistematicamente altas/baixas demais.
  • Se você usa probabilidades para decisões, cálculos de valor esperado ou estimativas de risco a jusante, você deve avaliar Calibração (Calibration) separadamente.

4) A AUC pode ocultar desempenho na região que importa para você

Se sua aplicação opera com FPR muito baixa (por exemplo, 0,001), a AUC global pode ser dominada por regiões da curva ROC que você nunca usará.

Nesses casos, considere:

  • AUC parcial em uma faixa relevante de FPR
  • Reportar TPR em uma FPR fixa (por exemplo, “TPR @ FPR=0,001”)
  • Comparar modelos em pontos de operação específicos

5) A ROC pressupõe direção de pontuação estável e condições de avaliação comparáveis

Comparações de ROC/AUC podem ser enganosas se:

  • O conjunto de teste difere da produção (mudança de distribuição (dataset shift))
  • As amostras são correlacionadas (por exemplo, muitos eventos por usuário, medidas repetidas), inflando a confiança aparente
  • Os rótulos são ruidosos ou atrasados (comum em fraude/abuso)

Uma avaliação robusta frequentemente exige estratégias cuidadosas de separação (Divisão Treino–Teste (Train-Test Split), Validação Cruzada em Séries Temporais (Time Series Cross-Validation)) e estimativas de incerteza para métricas (intervalos de confiança, reamostragem bootstrap (bootstrap)).

Seleção do ponto de operação na prática

Um fluxo de trabalho prático:

  1. Decida o que importa operacionalmente

    • Taxa máxima aceitável de falsos alarmes (FPR) ou contagem de alertas
    • Taxa mínima aceitável de detecção (TPR)
    • Razão de custo de FP vs. FN
  2. Use a curva ROC para encontrar limiares viáveis

    • Filtre limiares que atendam às restrições (por exemplo, FPR ≤ 0,01)
    • Compare modelos candidatos dentro dessa região
  3. Valide com métricas adicionais

    • Precisão/revocação, alertas esperados/dia, utilidade ponderada por custo
    • Calibração se probabilidades forem consumidas a jusante
  4. Fixe um limiar e monitore

Definição de limiar baseada em custos (conceitual)

Se você tem custos (C_{FP}) e (C_{FN}), você pode escolher um limiar que minimize o custo esperado. A curva ROC ajuda a visualizar quais combinações de (TPR, FPR) são alcançáveis, mas você ainda precisa de:

  • A prevalência (P(y=1)) em produção
  • A razão de custos

Essa é uma das razões pelas quais a ROC, sozinha, não é suficiente para decisões de implantação.

Extensões e conceitos relacionados

AUC parcial e “TPR em FPR fixa”

Se apenas uma parte da curva ROC é relevante (por exemplo, região de baixa FPR), use:

  • AUC parcial em ([0, \alpha]) de FPR
  • TPR @ FPR=α

Isso é comum em sistemas críticos de segurança ou de alto volume, em que mesmo valores pequenos de FPR produzem muitos falsos positivos.

Fecho convexo ROC

Em teoria da decisão, o fecho convexo (convex hull) dos pontos ROC identifica pontos de operação potencialmente ótimos quando você pode randomizar entre classificadores ou limiares. Na prática, isso é menos usado no dia a dia, mas explica por que certos limiares são dominados (TPR pior com a mesma ou maior FPR) e, portanto, nunca são ótimos.

ROC multiclasse

A ROC é fundamentalmente um conceito binário. Para problemas multiclasse, adaptações comuns incluem:

  • ROC um-contra-o-resto (one-vs-rest) para cada classe
  • AUC com média macro ou micro (macro- or micro-averaged)

Cuidado: médias podem esconder baixo desempenho em classes minoritárias. Combine com métricas por classe e fatiamento (Análise de Erros (Fatiamento)).

ROC vs Precisão–Revocação (PR)

Uma regra prática útil:

  • Use ROC quando você se importa com qualidade de ranqueamento e quer uma visão insensível à prevalência.
  • Use PR quando a classe positiva é rara e você se importa com a qualidade das previsões positivas (precisão).

Ambas podem ser reportadas em conjunto; nenhuma substitui a necessidade de selecionar um ponto de operação.

Checklist de boas práticas

  • Plote curvas ROC, não apenas AUC, especialmente se os modelos puderem se cruzar.
  • Reporte métricas no ponto de operação (por exemplo, TPR sob uma FPR restrita) que correspondam a restrições reais.
  • Sob forte Desbalanceamento de Classes, também reporte precisão/revocação ou curvas PR.
  • Trate a AUC ROC como uma métrica de discriminação, não de calibração; avalie Calibração se probabilidades importarem.
  • Use separações robustas de avaliação (Validação e Validação Cruzada) e evite vazamento.
  • Se decisões afetam usuários, faça análise por subgrupos (Análise de Erros (Fatiamento)) — uma curva ROC forte no geral pode mascarar danos em coortes específicas.

Resumo

A curva ROC avalia classificadores binários ao plotar TPR vs. FPR ao longo dos limiares, revelando o trade-off entre capturar positivos e disparar falsos alarmes. Curvas mais próximas do canto superior esquerdo indicam melhor discriminação, e a AUC ROC resume o desempenho de ranqueamento como a probabilidade de um positivo aleatório receber uma pontuação acima de um negativo aleatório.

A ROC é mais útil para comparar modelos de pontuação independentemente de um limiar específico, mas tem ressalvas importantes: pode ser otimista demais sob desbalanceamento severo de classes, não escolhe um limiar de implantação e não mede calibração de probabilidades. Em sistemas práticos de aprendizado de máquina, a análise ROC funciona melhor quando combinada com seleção de ponto de operação específica da aplicação, métricas complementares (frequentemente precisão/revocação) e validação cuidadosa.