Может ли AUC-ROC быть между 0-0,5?

16

Могут ли значения AUC-ROC находиться в диапазоне 0-0,5? Модель когда-нибудь выводит значения между 0 и 0,5?

Мужчина
источник

Ответы:

19

Идеальный предиктор дает оценку AUC-ROC, равную 1, предиктор, который делает случайные предположения, имеет оценку AUC-ROC, равную 0,5.

Если вы получаете оценку 0, что означает, что классификатор совершенно неверен, он прогнозирует неправильный выбор в 100% случаев. Если вы только что изменили прогноз этого классификатора на противоположный, то он мог бы предсказать идеально и иметь оценку AUC-ROC, равную 1.

Таким образом, на практике, если вы получаете оценку AUC-ROC от 0 до 0,5, вы можете ошибиться в том, как вы пометили свои цели классификатора, или у вас может быть плохой алгоритм обучения. Если вы получили оценку 0,2, это показывает, что данные содержат достаточно информации, чтобы получить оценку 0,8, но что-то пошло не так.

Хью
источник
Я думаю, что в этом ответе пропускается вероятность того, что модель имеет перегруженность, например, получение AUC 0,8 на тренировочных данных, но AUC 0,35 на удерживающих данных.
Sycorax говорит восстановить Monica
1
@Sycorax: Хм, я вижу, как переоснащение, очевидно, может привести AUC к тому, что он находится на уровне шансов (если вы настолько далеки от истинной модели, что ваши прогнозы просто мусор), но как это пойдет (значительно) ниже шансов ?
Рубен ван Берген
1
Вы будете иметь AUC ниже 0,5 всякий раз, когда ранжирование в некотором наборе ближе к тому, чтобы быть отсталым, чем правильным. Это ничем не отличается от переоснащения в любом другом контексте.
Sycorax сообщает, что восстановит Монику
14

Они могут, если система, которую вы анализируете, работает ниже уровня вероятности. Тривиально, вы могли бы легко построить классификатор с 0 AUC, если бы он всегда отвечал противоположно истине.

На практике, конечно, вы обучаете свой классификатор некоторым данным, поэтому значения, намного меньшие 0,5, обычно указывают на ошибку в вашем алгоритме, метках данных или выборе данных поезда / теста. Например, если вы ошибочно поменяли метки классов в данных поезда, ваш ожидаемый AUC будет равен 1 минус «истинный» AUC (с учетом правильных меток). AUC также может быть <0,5, если вы разбиваете свои данные на обучающие и тестовые разделы таким образом, чтобы классифицируемые шаблоны систематически отличались. Это может произойти (например), если один класс был более распространенным в сравнении набора тестов или если шаблоны в каждом наборе имели систематически разные перехваты, которые вы не исправляли.

Наконец, это также может произойти случайным образом, потому что ваш классификатор в долгосрочной перспективе находится на случайном уровне, но в вашем тестовом образце «повезло» (т. Е. Получите несколько ошибок больше, чем успехов). Но в этом случае значения все равно должны быть относительно близки к 0,5 (насколько близко зависит от количества точек данных).

Рубен ван Берген
источник
1

Извините, но эти ответы опасно неправильны. Нет, вы не можете просто перевернуть AUC после просмотра данных. Представьте, что вы покупаете акции, и вы всегда покупали не ту, но вы сказали себе, тогда все в порядке, потому что, если вы покупаете противоположность тому, что предсказывала ваша модель, вы бы зарабатывали деньги.

Дело в том, что есть много, часто неочевидных причин, по которым вы можете смещать свои результаты и постоянно получать результаты ниже среднего. Если вы сейчас перевернете свой AUC, вы можете подумать, что вы лучший моделист в мире, хотя в данных никогда не было никакого сигнала.

Вот пример симуляции. Обратите внимание, что предиктор - это просто случайная переменная, не имеющая отношения к цели. Также обратите внимание, что средний AUC составляет около 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')

Результаты

введите описание изображения здесь

Конечно, классификатор никак не может узнать что-либо из данных, поскольку данные случайны. Ниже представлен шанс AUC, потому что LOOCV создает необъективный, несбалансированный тренировочный набор. Однако это не означает, что если вы не используете LOOCV, вы в безопасности. Суть этой истории заключается в том, что существуют способы, многие из которых могут привести к тому, что результаты будут ниже средней производительности, даже если в данных ничего нет, и поэтому вам не следует менять прогнозы, если вы не знаете, что делаете. А поскольку у вас ниже среднего уровня производительности, вы не видите, что делаете :)

Вот пара статей, которые касались этой проблемы, но я уверен, что и другие тоже

Джамалабади и др. 2016 https://onlinelibrary.wiley.com/doi/full/10.1002/hbm.23140

Snoek и др. 2019 https://www.ncbi.nlm.nih.gov/pubmed/30268846

rep_ho
источник
Это должен быть принятый ответ!
TDC