Classification
在二元分類問題中優化 auc 與 logloss
我正在執行一個二元分類任務,其中結果概率相當低(大約 3%)。我正在嘗試決定是通過 AUC 還是對數損失進行優化。據我所知,AUC 最大化了模型區分類別的能力,而對數損失懲罰了實際概率和估計概率之間的差異。在我的任務中,校準精度非常重要。所以我會選擇logloss,但我想知道最好的log-loss模型是否也應該是最好的AUC / GINI模型。
正如您所提到的,AUC 是一個等級統計量(即尺度不變),而對數損失是一個校準統計量。可以簡單地構建一個具有相同 AUC 但無法通過縮放預測值來最小化其他模型的對數損失的模型。考慮:
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() }