ikili sınıflandırma problemlerinde auc ve logloss optimizasyonu


12

Sonuç olasılığının oldukça düşük olduğu bir ikili sınıflandırma görevi yapıyorum (yaklaşık% 3). AUC veya log-loss ile optimize olup olmadığına karar vermeye çalışıyorum. Anladığım kadarıyla, AUC, modelin sınıflar arasında ayrım yapma yeteneğini en üst düzeye çıkarırken, mantık gerçek ve tahmini olasılıklar arasındaki farklılığı cezalandırıyor. Benim görevimde hassas doğruluğu kalibre etmek son derece önemlidir. Bu yüzden logloss'u seçerdim, ama en iyi log-loss modelinin de en iyi AUC / GINI modelleri olup olmadığını merak ediyorum.

Yanıtlar:


12

Bahsettiğiniz gibi, AUC bir sıralama istatistiğidir (yani ölçek değişmez) ve log kaybı bir kalibrasyon istatistiğidir. Önemsiz olarak aynı AUC'ye sahip olan ancak öngörülen değerleri ölçekleyerek başka bir modelle günlük kaybını en aza indirmeyen bir model oluşturulabilir. Düşünmek:

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

Bu nedenle, AUC'yi en üst düzeye çıkaran bir modelin en aza indirilmiş günlük kaybı anlamına geldiğini söyleyemeyiz. Günlük kaybını en aza indiren bir modelin maksimum AUC'ye karşılık gelip gelmediği bağlama büyük ölçüde güvenir; sınıfta ayrılabilirlik, model yanlılığı, vb. Uygulamada, kişi zayıf bir ilişki düşünebilir, ancak genel olarak bunlar sadece farklı hedeflerdir. Sınıf ayrılabilirliğini (öngörücümüzün etki büyüklüğü) artıran aşağıdaki örneği düşünün:

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()
}

effect_1

resim açıklamasını buraya girin


Çok bilgilendirici cevap. Cevapta, aynı AUC ancak çok farklı günlük kaybı olan iki tahmin vardır. Bu soruya geliyorum: AUC'yi optimize etmek için bir model geliştirdim. Ama daha sonra günlük kaybına gitmem gerektiğini fark ettim. Log kaybı için modeli yeniden eğitmeyi göze alamıyorum (bu ideal bir durum olmalı). Tahminlerde herhangi bir dönüşüm uygulayabilir miyim, böylece en iyi günlük kaybına sahip olur. (Burada dikkate alınan günlük kaybı ikili anlamdır, referans olasılığı 1 veya 0'dır).
Rajesh Dachiraju

1
Modeliniz ne tahmin ediyor? Günlük kaybı, yalnızca AUC için optimize edilmiş bir model için olası olmayan arka olasılıklar üretiyorsanız mantıklıdır. AUC gibi sıralama istatistikleri yalnızca tahminlerin göreli sırasını dikkate alır, bu nedenle tahminler arasındaki boşlukların büyüklüğü önemsizdir; açıkça bu olasılıklar için geçerli değildir. AUC için optimize edilmiş tahminlerinizde yaptığınız herhangi bir ölçeklendirmenin bu sorunu ele alması gerekecektir. Dahası, bu, bu yayında belirtildiği gibi, öngörülerinizin LL'nin küresel düzeyde minimize edilmesine değil makul bir posterior tahminine yönelik kalibrasyonunu ele alır.
khol

1
Başlangıç ​​noktası olarak platt ölçeklendirmesiyle ilgilenebilirsiniz .
khol

Küresel olmadığını anlıyorum. Ben sadece bir parametre olabilir ve daha sonra onunla oynamak bir dönüşüm kurmak istiyorum.
Rajesh Dachiraju

1

Dengesiz etiketler için, hassas geri çağırma eğrisinin altındaki alan AUC'ye tercih edilir ( https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4349800/ veya python scikit-learn dokümanlar )

Ayrıca, hedefiniz hassasiyeti en üst düzeye çıkarmaksa, performans metriği olarak "hassasiyet" kullanarak en iyi modeli (algoritma + hiperparametreler) seçmek için çapraz doğrulama yapmayı düşünebilirsiniz.


2
Burada birkaç nedenden dolayı reddedildim. 1) İlk ifadeniz için bir kaynak veya bir neden belirtmelisiniz. 2) Hassasiyeti tam olarak nasıl optimize edersiniz? Bu yozlaşmış bir model yaratmaz mı?
Matthew Drury

2
Tamam, daha iyi bir cevap vermeme yardımcı olduğun için teşekkürler. 2 referans ekledim. ve hassasiyeti nasıl optimize edersiniz? tıpkı diğer tüm metrikler gibi. Örneğin scikit-learn'da puanlama işleviniz olarak yalnızca "kesinlik" değerini belirtirsiniz. Hassasiyet, doğruluk, AUC
Paul

Ahh, tabi. Ancak insanlar "optimize" okuduklarında, modelinizin eğitimi sırasında bunu kabul edeceklerini düşünüyorum. Bence sklearn bunu oldukça yanlış anlıyor, çünkü sabit bir sınıflandırma eşiği kullanıyor ve bunu gerçekten çapraz doğrulama ile ayarlamalısınız.
Matthew Drury

1
Evet, şimdi "optimize et" in nasıl kafa karıştırıcı olabileceğini görüyorum. OP'nin ne anlama geldiğinden emin değilim. Benim için söylediğiniz gibi: hiperparametreleri CV ile ayarlayın, böylece hassasiyet en üst düzeye çıkarılır. Ve bence bunu sklearn'de de böyle uyguluyorsunuz.
Paul

Elbette, bu açıklamayı eklerseniz cevabınızın burada geliştirileceğini düşünüyorum. Biraz konu dışı, ama aslında sklearn bunu destekleme konusunda oldukça zayıf olduğunu düşünüyorum, çünkü sabit bir sınıflandırma eşiğine göre ayarlandığından, oldukça kötü bir uygulama olduğunu iddia ediyorum.
Matthew Drury
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.