Coleção modelos
Curva precisão-revocação
Precisão × revocação em todos os cortes, com a precisão média (AP).
O que o bloco faz
Ordena as linhas pela probabilidade da classe positiva e mostra, em cada corte, a precisão (dos previstos positivos, quantos são) contra a revocação (dos positivos, quantos foram achados). Calcula a precisão média (AP) e desenha a prevalência como a linha do acaso.
Antes de continuar
Termos que esta página usa, em poucas palavras. As definições completas estão no glossário.
- População
- O conjunto completo de unidades sobre o qual se quer concluir algo: todas as propriedades de uma região, todos os alunos de uma escola. Em geral não é possível medir todas, e por isso se mede uma amostra.
- Amostra
- A parte da população que é de fato observada. Quando é sorteada com probabilidades conhecidas, permite estimar características da população e medir a incerteza dessa estimativa.
- 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.
- Treino e teste
- Dividir os dados em uma parte para ajustar o modelo (treino) e outra, guardada, para medir o desempenho (teste). O teste só é honesto se o modelo nunca o viu durante o ajuste.
- 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
Quando a classe de interesse é rara. A ROC não muda com o desequilíbrio e pode parecer boa enquanto quase todos os alarmes são falsos; a curva precisão-revocação mostra isso diretamente (Saito & Rehmsmeier 2015).
Pressupostos
A medida que interessa é a fora da amostra: com o teste separado (
ml/split) emdados, ou pela validaçãocruzadaquando só o modelo está ligado. A resubstituição sai otimista, e mais ainda com muitos preditores e poucos casos. Previsões do treino marcado peloml/splitsão recusadas, salvopermitir_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/splitemdados, ou deixe avalidacaoemcruzada; se o teste já foi usado para escolher, reporte a medida como otimista.A probabilidade é a da classe positiva** — a classe de interesse, em geral a rara; com três ou mais classes, ela contra as outras. Com
positivavazia: no modo tabela a classe vem do nome da coluna (prob_<classe>), e com coluna de nome livre o bloco pedepositiva; com modelo, é o segundo nível.Se falhar: Preencha
positivacom a classe cuja probabilidade a coluna contém.A referência do acaso é a prevalência da classe positiva, não 0,5: a AP só diz algo comparada a ela, e a curva de um conjunto com outra prevalência não é comparável (Saito & Rehmsmeier 2015).
Verificar:Agrupar e resumir
Se falhar: Compare modelos no mesmo teste; para comparar populações diferentes, leia a ROC.
A AP (soma de ganho de revocação × precisão) e a área interpolada de Davis & Goadrich são estimativas diferentes da mesma área; ligar os pontos por reta superestima a área e não é usado (Davis & Goadrich 2006).
Se falhar: Reporte uma delas nomeada; a AP é a do
yardsticke do scikit-learn, a área é a doPRROC.Com poucos positivos a curva tem poucos degraus e a AP varia muito de um teste para outro.
Se falhar: Leia a quantidade de positivos (
prevalencia× n) e repita a divisão com outras sementes.
Configuração
Como a models/roc, tem três modos: ligue só um modelo (a curva sai da validação, cruzada ou resubstituição), um modelo e uma tabela de teste em dados, ou só uma tabela com a classe e a probabilidade. No modo tabela, resposta é a classe observada e probabilidade a coluna prob_<classe> (de models/predict). positiva escolhe a classe de interesse: vazia, no modo tabela é a do nome da coluna (com coluna de nome livre o bloco pede positiva); com modelo, o segundo nível. Com três ou mais classes é obrigatória, e a curva é ela contra as outras.
Com três ou mais classes e Classe positiva vazia, sai uma curva por classe contra as outras, com a AP e o acaso (a prevalência) de cada uma na legenda.
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
d <- data.frame(y = c("sim", "nao", "sim", "nao", "sim"), prob_sim = c(.9, .8, .7, .6, .2))
p <- trama.models::tr_models_pr_curve(dados = d, resposta = "y", probabilidade = "prob_sim")
p$data
Como interpretar
No exemplo, os cortes dão (revocação, precisão) = (0,33; 1), (0,33; 0,5), (0,67; 0,67), (0,67; 0,5) e (1; 0,6). A AP soma ganho de revocação × precisão: (1 + 0,667 + 0,6)/3 = 0,756. A area, com a interpolação de Davis & Goadrich (2006), é 0,716 — menor porque entre dois cortes a precisão não varia em linha reta. Compare as duas com a prevalência, 0,6 aqui: um classificador ao acaso fica nessa linha.
Previsões do treino
Se as linhas vierem do treino marcado pelo ml/split, o bloco recusa por padrão (tr_ml_error_train_eval): a avaliação no treino é otimista e não mede generalização. Para medir o ajuste no treino de propósito (por exemplo, comparar com o teste e ver o sobreajuste), ligue permitir_treino; o resultado vem com um aviso e a nota de otimismo. O mesmo vale para uma tabela marcada como teste que traz linhas de fora dele (previsões do treino juntadas às do teste). Tabelas sem a marca do ml/split são avaliadas como chegam.
Implementação
trama.models::tr_models_pr_curve()versão 0.6.6Cálculo próprio (porte daml/pr_curveda main): um ponto por limiar distinto (empates num degrau); AP = Σ ΔR·P; área com a interpolação de Davis & Goadrich integrada em forma fechada. Conferido contrayardstick::average_precisionePRROC::pr.curve(auc.integral).
No código O bloco chama trama.models::tr_models_pr_curve(), em trama.models/R/avaliar.R:400.
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 (16)
stats::complete.cases(par$prob)ggplot2::ggplot(d, ggplot2::aes(x = .data[["recall"]], y = .data[["precision"]], colour = .data[["grupo"]], group = .data[["grupo"]]))ggplot2::aes(x = .data[["recall"]], y = .data[["precision"]], colour = .data[["grupo"]], group = .data[["grupo"]])ggplot2::geom_step(direction = "vh", linewidth = 0.8)ggplot2::coord_cartesian(xlim = c(0, 1), ylim = c(0, 1))ggplot2::labs(colour = par$resposta, x = "Revocação", y = "Precisão", subtitle = sprintf("Cada classe contra as outras · %s", par$origem), caption = if (nzch...trama.view::tr_view_finish(p, aspecto, tema, titulo, rotulo_x, rotulo_y, legenda)ggplot2::ggplot(d, ggplot2::aes(x = .data$recall, y = .data$precision))ggplot2::aes(x = .data$recall, y = .data$precision)ggplot2::geom_hline(yintercept = d$prevalencia[[1]], linetype = 2, colour = "#94a3b8")ggplot2::geom_step(direction = "vh", linewidth = 1, colour = .TR_MODELS_COR)ggplot2::geom_point(size = 1.6, colour = .TR_MODELS_COR)ggplot2::coord_cartesian(xlim = c(0, 1), ylim = c(0, 1))ggplot2::annotate("text", x = 0.3, y = 0.08, label = sprintf("AP = %.3f (acaso = %.3f)", d$ap[[1]], d$prevalencia[[1]]))ggplot2::labs(x = "Revocação", y = "Precisão", subtitle = sprintf("AP %s · acaso %s · área (Davis & Goadrich) %s · %s · positivo: %s", .tr_models_virgula(d$a...trama.view::tr_view_finish(p, aspecto, tema, titulo, rotulo_x, rotulo_y, legenda)
Referências
Teoria
- 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
- Davis, J.; Goadrich, M. (2006). The relationship between Precision-Recall and ROC curves. Proceedings of the 23rd International Conference on Machine Learning (ICML), 233-240. doi:10.1145/1143844.1143874
Complementar
- Keilwagen, J.; Grosse, I.; Grau, J. (2014). Area under Precision-Recall Curves for Weighted and Unweighted Data. PLoS ONE, 9(3), e92209. doi:10.1371/journal.pone.0092209
- Su, W.; Yuan, Y.; Zhu, M. (2015). A Relationship between the Average Precision and the Area Under the ROC Curve. Proceedings of the 2015 International Conference on the Theory of Information Retrieval (ICTIR), 349-352. doi:10.1145/2808194.2809481