Coleção modelos

Curva ROC

Sensibilidade × especificidade em todos os cortes, com a AUC.

O que o bloco faz

models/roc desenha, para cada corte de probabilidade, a sensibilidade contra 1 − especificidade, com a área sob a curva (AUC) no subtítulo. A saída é view/plot.

Antes de continuar

Termos que esta página usa, em poucas palavras. As definições completas estão no glossário.

Intervalo de confiança
Uma faixa de valores calculada a partir da amostra. Com 95% de confiança, o procedimento produz intervalos que contêm o valor verdadeiro em 95% das amostras possíveis; não quer dizer que um intervalo específico tenha 95% de probabilidade de acertar.
Variância
A média dos quadrados das distâncias de cada valor à média: mede o quanto os dados se espalham. O desvio padrão é a raiz quadrada da variância e fica na mesma unidade dos dados.
Nível
Cada valor que um fator assume no estudo: as doses 0, 50 e 100 kg/ha são três níveis do fator dose.
Normalidade
Pressuposto de que os erros do modelo seguem a distribuição normal (em forma de sino). Em modelos lineares ele se confere nos resíduos, não nos dados brutos; desvios leves pesam pouco em amostras grandes.
Matriz de confusão
A tabela que cruza a classe verdadeira com a classe prevista. Dela saem acurácia, sensibilidade, especificidade e precisão, que podem contar histórias diferentes quando as classes têm tamanhos muito diferentes.

Quando usar

Use para comparar classificadores sem fixar um corte, sobretudo com classes desbalanceadas, em que a taxa de acerto engana.

Pressupostos

  • A medida que interessa é a fora da amostra: com o teste separado (ml/split) em dados, ou pela validação cruzada quando só o modelo está ligado. A resubstituição sai otimista, e mais ainda com muitos preditores e poucos casos. Previsões do treino marcado pelo ml/split são recusadas, salvo permitir_treino (que acrescenta a nota de otimismo); tabelas sem essa marca (divisão feita por fora, treino e teste juntados) são medidas como chegam, e num teste já usado para decidir a medida também sai otimista — isso nenhuma marca detecta.

    Se falhar: Ligue a saída teste do ml/split em dados, ou deixe a validacao em cruzada; se o teste já foi usado para escolher, reporte a medida como otimista.

  • A probabilidade é a da classe positiva. Com positiva vazia, na binária ela é o segundo nível; no modo tabela, com a coluna probabilidade informada, a classe é deduzida do nome prob_<classe>, e o bloco pede positiva se o nome não indicar uma classe observada. Classe e coluna trocadas espelham a curva (AUC = 1 − AUC).

    Se falhar: Com uma coluna de nome livre, preencha positiva com a classe cuja probabilidade ela contém.

  • A AUC resume todos os cortes, inclusive os que ninguém usaria, e não muda com o desequilíbrio das classes — por isso mesmo pode parecer boa quando a classe rara é mal prevista.

    Verificar:Matriz de confusãoAgrupar e resumir

    Se falhar: Leia junto a matriz de confusão, a acurácia balanceada no models/evaluate e, com classe rara, a models/pr_curve.

  • Com três ou mais classes, cada curva é uma classe contra as outras: a AUC de cada uma não soma nem resume o classificador inteiro. O resumo é a AUC multiclasse M de Hand & Till (2001), no subtítulo (sem positiva): média, sobre os pares de classes, da AUC do par; não depende das proporções das classes, mas pondera todos os pares igualmente e não tem intervalo.

    Se falhar: Para saber qual par se confunde, leia a matriz de confusão (models/confusion).

  • O intervalo de DeLong é assintótico (normal): com poucos positivos ou negativos, ou AUC perto de 1, a cobertura fica abaixo do nominal; o bloco corta os limites em [0, 1]. Com AUC = 0 ou 1 (variância zero) ou menos de duas linhas numa classe, o IC sai indisponível (NA), com a nota em auc_nota e na legenda; a curva e a AUC continuam.

    Se falhar: Leia o intervalo como aproximado e a largura como sinal de pouca informação; aumente a amostra da classe rara ou repita a divisão com outras sementes.

  • Com validação cruzada, as probabilidades vêm de n ajustes, e o intervalo as trata como um escore fixo: a incerteza de ter estimado o modelo não entra.

  • O corte de Youden é escolhido nas mesmas linhas em que é lido: a sensibilidade e a especificidade nele são otimistas, e J pesa igualmente falso positivo e falso negativo, o que raramente reflete os custos reais.

    Se falhar: Escolha o corte num conjunto de validação (ou pelos custos do problema) e leia o desempenho dele no teste, com o models/confusion.

Configuração

Mesmas entradas opcionais da matriz de confusão (só modelo, modelo e dados, ou só dados). Classe positiva vazia é o segundo nível; com três ou mais classes sai uma curva por classe, contra as outras. No modo tabela, Probabilidade vazia lê prob_<positiva>, a coluna que models/predict escreve.

Confiança do IC da AUC — cada AUC sai com o intervalo de DeLong, DeLong & Clarke-Pearson (1988), no nível pedido (padrão 0,95): assintótico, cortado em [0, 1]. Com AUC 0 ou 1 (variância zero) ou menos de duas linhas numa classe, o intervalo sai indisponível e a legenda explica, sem recusar a curva. Na curva de uma classe, o círculo vazio marca o corte de Youden (1950), que maximiza sensibilidade + especificidade − 1. Com três ou mais classes e positiva vazia, o subtítulo traz a AUC multiclasse M de Hand & Till (2001), a média das AUCs dos pares de classes, que não depende das proporções.

Permitir avaliar o treino — com dados vindos do ml/split (a tabela leva a marca de treino/teste), previsões das linhas de treino são recusadas (tr_ml_error_train_eval): a medida no treino é otimista. Ligado, avalia assim mesmo e acrescenta a nota de otimismo. Tabela sem a marca é avaliada como chega.

Exemplo

Exemplo de modelos
Modelo linear generalizado
Curva ROC
library(trama)

reg <- tr_registry()
tr_use("trama.models", registry = reg)

tr_flow(reg) |>
  tr_add("dados", "models/example", dataset = "mtcars") |>
  tr_add("logit", "models/glm", formula = "am ~ wt", familia = "binomial", from = "dados") |>
  tr_add("roc", "models/roc", validacao = "cruzada", from = "logit")

Como interpretar

A diagonal tracejada é o acaso (AUC 0,5); quanto mais a curva sobe para o canto superior esquerdo, melhor. O ponto marca o corte do modelo (0,5, ou o corte da logística multivariada).

Implementação

  • trama.models::tr_models_roc() versão 0.6.6Cálculo próprio: um ponto por escore distinto (empates andam na diagonal) e AUC de Mann-Whitney com meio ponto por empate, igual à área trapezoidal da curva; IC de DeLong pelas componentes estruturais (normal, cortado em [0, 1]), conferido contra pROC::ci.auc(method = "delong") a 1e-8; corte de Youden = máximo de sensibilidade + especificidade − 1 (empate: maior limiar), conferido contra pROC::coords(best.method = "youden"); M de Hand & Till conferido contra pROC::multiclass.roc a 1e-10. Portes da ml/roc e da multi/roc da main.

No código O bloco chama trama.models::tr_models_roc(), em trama.models/R/avaliar.R:345.

A conta é implementada pelo próprio trama, sem um pacote R de referência por trás.

Outras funções de pacotes que o bloco usa (20)

Referências

Teoria

Complementar

  • Saito, T.; Rehmsmeier, M. (2015). The Precision-Recall Plot Is More Informative than the ROC Plot When Evaluating Binary Classifiers on Imbalanced Datasets. PLOS ONE, 10(3), e0118432. doi:10.1371/journal.pone.0118432
  • Robin, X.; Turck, N.; Hainard, A.; Tiberti, N.; Lisacek, F.; Sanchez, J.-C.; Müller, M. (2011). pROC: an open-source package for R and S+ to analyze and compare ROC curves. BMC Bioinformatics, 12, 77. doi:10.1186/1471-2105-12-77

Ver a bibliografia completa do trama