оптимізація auc vs logloss в проблемах бінарної класифікації


12

Я виконую завдання бінарної класифікації, коли ймовірність результату є досить низькою (близько 3%). Я намагаюся вирішити, чи оптимізувати AUC чи втрату журналу. Наскільки я зрозумів, AUC максимізує здатність моделі розрізняти класи, в той час як logloss карає розбіжність між фактичними та оціненими ймовірностями. У моєму завданні надзвичайно важливо відточити точність точності. Тому я б вибрав logloss, але мені цікаво, чи найкраща модель втрат журналу також повинна бути найкращою моделлю AUC / GINI.

Відповіді:


12

Як ви згадували, AUC є ранговою статистикою (тобто інваріантною шкалою), а втрата журналу - це калібрована статистика. Можна тривіально побудувати модель, яка має той самий AUC, але не в змозі мінімізувати втрати журналу wrt деякої іншої моделі шляхом масштабування прогнозованих значень. Поміркуйте:

auc <-  function(prediction, actual) {
  mann_whit <- wilcox.test(prediction~actual)$statistic
  1 - mann_whit / (sum(actual)*as.double(sum(!actual)))
}

log_loss <- function (prediction, actual) {
  -1/length(prediction) * sum(actual * log(prediction) + (1-actual) * log(1-prediction))
}

sampled_data <- function(effect_size, positive_prior = .03, n_obs = 5e3) {
  y <- rbinom(n_obs, size = 1, prob = positive_prior)
  data.frame( y = y,
              x1 =rnorm(n_obs, mean = ifelse(y==1, effect_size, 0)))
}

train_data <- sampled_data(4)
m1 <- glm(y~x1, data = train_data, family = 'binomial')
m2 <- m1
m2$coefficients[2] <- 2 * m2$coefficients[2]

m1_predictions <- predict(m1, newdata = train_data, type= 'response')
m2_predictions <- predict(m2, newdata = train_data, type= 'response')

auc(m1_predictions, train_data$y)
#0.9925867 
auc(m2_predictions, train_data$y)
#0.9925867 

log_loss(m1_predictions, train_data$y)
#0.01985058
log_loss(m2_predictions, train_data$y)
#0.2355433

Отже, ми не можемо сказати, що модель, що збільшує AUC, означає мінімізацію втрат журналу. Чи модель, що мінімізує втрати журналу, відповідає максимізованому AUC, буде сильно залежати від контексту; роздільна здатність класів, упередженість моделі тощо. На практиці можна вважати слабкі взаємозв'язки, але загалом це просто різні цілі. Розглянемо наступний приклад, який збільшує роздільність класу (розмір ефекту нашого прогноктора):

for (effect_size in 1:7) {
  results <- dplyr::bind_rows(lapply(1:100, function(trial) {
                                    train_data <- sampled_data(effect_size)
                                    m <- glm(y~x1, data = train_data, family = 'binomial')
                                    predictions <- predict(m, type = 'response')
                                    list(auc = auc(predictions, train_data$y),
                                         log_loss = log_loss(predictions, train_data$y),
                                         effect_size = effect_size)
                                  }))
  plot(results$auc, results$log_loss, main = paste("Effect size =", effect_size))
  readline()
}

ефект_1

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


Дуже інформативна відповідь. У вашій відповіді є два прогнози, однакові AUC, але дуже різні втрати журналу. Тож я приходжу до цього питання: я навчив модель оптимізації AUC. Але згодом я зрозумів, що мені потрібно йти на втрату журналу. Я не можу дозволити собі перекваліфікувати модель для втрати журналу (що має бути ідеальним випадком). Чи можу я застосувати будь-яке перетворення на прогнозах, щоб воно мало найкращі втрати журналу. (Розглянута тут втрата журналу є двійковим значенням, опорна ймовірність - або 1, або 0).
Раджеш Дачіраджу

1
Що оцінює ваша модель? Втрата журналу має сенс лише в тому випадку, якщо ви створюєте posterior ймовірності, що навряд чи для оптимізованої AUC моделі. Статистика рейтингів, як AUC, враховує лише відносне впорядкування прогнозів, тому величина розривів між прогнозами не має значення; Очевидно, що це не стосується ймовірностей. Будь-яке масштабування, яке ви виконуєте за своїми прогнозованими AUC прогнозами, має вирішити цю проблему. Крім того, це стосується лише калібрування ваших прогнозів до розумної задньої оцінки, а не глобального мінімізації ЛЛ, як зазначено в цьому пості.
хол

1
Можливо, вас зацікавить масштабність платтів як вихідна точка.
хол

Я розумію, що це не глобально. Я просто хочу встановити перетворення, яке може мати параметр, а потім пограти з ним.
Раджеш Дачіраджу

1

Для врівноважених міток область під кривою точності відкликання є кращою перед AUC ( https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4349800/ або документи python scikit-learn )

Крім того, якщо ваша мета - максимальна точність, ви можете розглянути можливість крос-валідації для вибору найкращої моделі (алгоритм + гіперпараметри), використовуючи "точність" як показник продуктивності.


2
Я поступив тут з кількох причин. 1) Вам слід вказати джерело або причину свого першого твердження. 2) Як саме ви оптимізуєте для точності? Хіба це не створило б вироджену модель?
Метью Друрі

2
добре, дякую, що допомогли мені краще відповісти. Я додав 2 посилання. і як оптимізувати для точності? як і будь-який інший показник. Ви просто вказуєте "точність" як свою оцінку, наприклад, у scikit-learn. Точність - це така метрика, як точність, AUC тощо
Пол

Ах, звичайно. Але я думаю, коли люди читають "оптимізувати", вони вважають, що це під час навчання вашої моделі. Я думаю, що sklearn отримує це досить неправильно, оскільки він використовує фіксований поріг класифікації, і вам слід справді налаштовувати це за допомогою перехресної перевірки.
Метью Друрі

1
Так, зараз я бачу, як "оптимізація" може бути заплутаною. Не впевнений, як це означало ОП. Для мене це, як ви кажете: налаштовуйте гіперпараметри за допомогою CV, щоб точність була максимальною. І я думаю, саме так ви застосовуєте його і в sklearn.
Павло

Звичайно, я думаю, що ваша відповідь тут буде покращена, якби ви додали це пояснення. Трохи поза темою, але я дійсно думаю, що склеарн досить поганий у підтримці цього, оскільки він налаштовується на основі фіксованого порогу класифікації, що, я заперечую, є досить поганою практикою.
Метью Друрі
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.