AUC-ROC pode estar entre 0-0,5?

16

Os valores da AUC-ROC podem estar entre 0-0,5? O modelo produz valores entre 0 e 0,5?

Um homem
fonte

Respostas:

19

Um preditor perfeito fornece uma pontuação na AUC-ROC igual a 1, um preditor que faz suposições aleatórias tem uma pontuação na AUC-ROC igual a 0,5.

Se você obtiver uma pontuação 0, o que significa que o classificador está perfeitamente incorreto, está prevendo a escolha incorreta 100% do tempo. Se você acabou de alterar a previsão deste classificador para a opção oposta, ele pode prever perfeitamente e ter uma pontuação AUC-ROC de 1.

Portanto, na prática, se você obtiver uma pontuação AUC-ROC entre 0 e 0,5, poderá ter um erro na maneira como rotulou os alvos do classificador ou um algoritmo de treinamento ruim. Se você obtiver uma pontuação de 0,2, isso mostra que os dados contêm informações suficientes para obter uma pontuação de 0,8, mas algo deu errado.

Hugh
fonte
Penso que esta resposta ignora a possibilidade de o modelo ter super ajuste, por exemplo, obtendo AUC de 0,8 nos dados de treinamento, mas AUC de 0,35 nos dados de validação.
Sycorax diz Restabelecer Monica
1
@ Sycorax: Hmm, eu posso ver como a adaptação excessiva poderia obviamente levar a AUC para onde ela está no nível de chance (se você está tão longe do modelo verdadeiro que suas previsões são apenas lixo), mas como seria (significativamente) abaixo da chance ?
Ruben van Bergen
1
Você terá uma AUC abaixo de 0,5 sempre que o ranking em algum conjunto é mais perto de ser para trás do que correto. Não é diferente de sobreajuste em qualquer outro contexto.
Sycorax diz Restabelecer Monica
14

Eles podem, se o sistema que você está analisando tiver um desempenho abaixo do nível de chance. Trivialmente, você pode facilmente construir um classificador com 0 AUC, sempre respondendo oposto à verdade.

Na prática, é claro que você treina seu classificador em alguns dados, para que valores muito menores que 0,5 normalmente indiquem um erro em seu algoritmo, rótulos de dados ou escolha de dados de treinamento / teste. Por exemplo, se você trocou erroneamente os rótulos das classes nos dados de seu trem, sua AUC esperada seria 1 menos a AUC "verdadeira" (dadas as etiquetas corretas). A AUC também pode ser <0,5 se você dividir seus dados em partições de treinamento e teste de forma que os padrões a serem classificados sejam sistematicamente diferentes. Isso pode acontecer (por exemplo) se uma classe for mais comum no trem versus o conjunto de testes ou se os padrões em cada conjunto tiverem interceptações sistematicamente diferentes que você não corrigiu.

Por fim, isso também pode acontecer aleatoriamente porque seu classificador está no nível de chance a longo prazo, mas teve "azar" em sua amostra de teste (ou seja, obteve mais alguns erros do que sucessos). Mas, nesse caso, os valores ainda devem estar relativamente próximos de 0,5 (a distância depende do número de pontos de dados).

Ruben van Bergen
fonte
1

Sinto muito, mas essas respostas estão perigosamente erradas. Não, você não pode simplesmente virar AUC depois de ver os dados. Imagine que você está comprando ações e sempre comprou a errada, mas disse a si mesmo: tudo bem, porque se você estivesse comprando o oposto do que o seu modelo previa, você ganharia dinheiro.

O fato é que existem muitas razões, muitas vezes não óbvias, de como você pode influenciar seus resultados e obter um desempenho consistentemente abaixo da média. Se você agora alterar sua AUC, poderá pensar que é o melhor modelador do mundo, embora nunca tenha havido nenhum sinal nos dados.

Aqui está um exemplo de simulação. Observe que o preditor é apenas uma variável aleatória sem relação com o alvo. Observe também que a AUC média é de cerca de 0,3.

library(MLmetrics)
aucs <- list()
for (sim in seq_len(100)){
  n <- 100
  df <- data.frame(x=rnorm(n),
               y=c(rep(0, n/2), rep(1, n/2)))

  predictions <- list()
  for(i in seq_len(n)){
    train <- df[-i,]
    test <- df[i,]

    glm_fit <- glm(y ~ x, family = 'binomial', data = train)
    predictions[[i]] <- predict(glm_fit, newdata = test, type = 'response')
  }
  predictions <- unlist(predictions)
  aucs[[sim]] <- MLmetrics::AUC(predictions, df$y)
}
aucs <- unlist(aucs)
plot(aucs); abline(h=mean(aucs), col='red')

Resultados

insira a descrição da imagem aqui

Obviamente, não há como um classificador aprender alguma coisa com os dados, pois eles são aleatórios. A chance abaixo da AUC existe porque o LOOCV cria um conjunto de treinamento tendencioso e desequilibrado. No entanto, isso não significa que, se você não usar o LOOCV, estará seguro. O objetivo desta história é que existem maneiras, de várias maneiras, como os resultados podem ter um desempenho médio abaixo de zero, mesmo se não houver nada nos dados e, portanto, você não deve inverter as previsões, a menos que saiba o que está fazendo. E como você tem um desempenho médio abaixo, você não vê o que está fazendo :)

Aqui estão alguns documentos que abordaram esse problema, mas tenho certeza que outros também o fizeram

Jamalabadi et al 2016 https://onlinelibrary.wiley.com/doi/full/10.1002/hbm.23140

Snoek et al 2019 https://www.ncbi.nlm.nih.gov/pubmed/30268846

rep_ho
fonte
Essa deve ser a resposta aceita!
tdc