tối ưu hóa auc vs logloss trong các vấn đề phân loại nhị phân


12

Tôi đang thực hiện một nhiệm vụ phân loại nhị phân trong đó xác suất kết quả là khá thấp (chiếm 3%). Tôi đang cố gắng quyết định nên tối ưu hóa bằng AUC hay mất log. Theo như tôi đã hiểu, AUC tối đa hóa khả năng phân biệt giữa các lớp trong khi các logloss xử phạt sự khác biệt giữa xác suất thực tế và ước tính. Trong nhiệm vụ của tôi là cực kỳ quan trọng để hiệu chỉnh độ chính xác chính xác. Vì vậy, tôi sẽ chọn logloss, nhưng tôi tự hỏi liệu mô hình log-loss tốt nhất cũng nên là mô hình AUC / GINI tốt nhất.

Câu trả lời:


12

Như bạn đã đề cập, AUC là một thống kê xếp hạng (tức là bất biến tỷ lệ) & mất log là một thống kê hiệu chuẩn. Người ta có thể xây dựng một mô hình có AUC tương tự nhưng không giảm thiểu mất log ghi lại một số mô hình khác bằng cách nhân rộng các giá trị dự đoán. Xem xét:

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

Vì vậy, chúng ta không thể nói rằng một mô hình tối đa hóa AUC có nghĩa là giảm thiểu mất log. Việc một mô hình giảm thiểu mất log có tương ứng với AUC tối đa hóa hay không sẽ phụ thuộc rất nhiều vào bối cảnh; phân tách lớp, thiên vị mô hình, v.v. Trong thực tế, người ta có thể xem xét một mối quan hệ yếu, nhưng nói chung chúng chỉ đơn giản là các mục tiêu khác nhau. Xem xét ví dụ sau đây làm tăng khả năng phân tách lớp (kích thước hiệu ứng của công cụ dự đoán của chúng tôi):

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

hiệu ứng_1

nhập mô tả hình ảnh ở đây


Câu trả lời rất nhiều thông tin. Trong câu trả lời của bạn có hai dự đoán, với AUC giống nhau nhưng mất log rất khác nhau. Vì vậy, tôi đi đến câu hỏi này: Tôi đã đào tạo một mô hình để tối ưu hóa AUC. Nhưng sau đó tôi nhận ra rằng tôi cần phải mất log. Tôi không đủ khả năng để đào tạo lại mô hình cho mất log (đó là trường hợp lý tưởng). Tôi có thể áp dụng bất kỳ chuyển đổi nào trên các dự đoán để nó có mức giảm log tốt nhất không. (Mất log được xem xét ở đây là ý nghĩa nhị phân, xác suất tham chiếu là 1 hoặc 0).
Rajesh Dachiraju

1
Mô hình của bạn ước tính gì? Mất nhật ký chỉ có ý nghĩa nếu bạn tạo ra xác suất sau, điều không thể xảy ra đối với mô hình được tối ưu hóa AUC. Thống kê xếp hạng như AUC chỉ xem xét thứ tự tương đối của các dự đoán, vì vậy mức độ chênh lệch giữa các dự đoán là không liên quan; rõ ràng đây không phải là trường hợp xác suất. Bất kỳ tỷ lệ nào bạn thực hiện trên các dự đoán được tối ưu hóa AUC của bạn sẽ phải giải quyết vấn đề này. Hơn nữa, điều này chỉ giải quyết việc hiệu chỉnh các dự đoán của bạn đối với ước tính sau hợp lý, chứ không phải tối thiểu hóa toàn cầu LL, như được nêu trong bài đăng này.
khol

1
Bạn có thể quan tâm đến việc mở rộng quy mô như một điểm khởi đầu.
khol

Tôi hiểu nó không phải là toàn cầu. Tôi chỉ muốn thiết lập một biến đổi có thể có một tham số và sau đó chơi xung quanh nó.
Rajesh Dachiraju

1

Đối với các nhãn không cân bằng, khu vực dưới đường cong thu hồi chính xác được ưu tiên hơn AUC ( https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4349800/ hoặc python scikit-learn docs )

Ngoài ra, nếu mục tiêu của bạn là tối đa hóa độ chính xác, bạn có thể xem xét thực hiện xác thực chéo để chọn mô hình tốt nhất (thuật toán + siêu âm) sử dụng "độ chính xác" làm chỉ số hiệu suất.


2
Tôi downvote vì một vài lý do ở đây. 1) Bạn nên trích dẫn một nguồn hoặc một lý do cho tuyên bố đầu tiên của bạn. 2) Làm thế nào chính xác để bạn tối ưu hóa cho chính xác? Điều đó sẽ không tạo ra một mô hình thoái hóa?
Matthew Drury

2
ok cảm ơn vì đã giúp tôi trả lời tốt hơn Tôi đã thêm 2 tài liệu tham khảo. và làm thế nào để bạn tối ưu hóa cho chính xác? giống như bất kỳ số liệu khác. Bạn chỉ cần xác định "độ chính xác" là chức năng cho điểm của mình, ví dụ như trong scikit-learn. Độ chính xác là một số liệu như độ chính xác, AUC, v.v.
Paul

À, chắc chắn rồi. Nhưng tôi nghĩ khi mọi người đọc "tối ưu hóa", họ sẽ cho rằng đó là trong quá trình đào tạo mô hình của bạn. Tôi nghĩ sklearn nhận ra điều này khá sai, vì nó sử dụng ngưỡng phân loại cố định và bạn thực sự nên điều chỉnh nó với xác nhận chéo.
Matthew Drury

1
Đúng, bây giờ tôi thấy cách "tối ưu hóa" có thể gây nhầm lẫn. Không chắc OP có ý nghĩa như thế nào. Đối với tôi, nó giống như bạn nói: điều chỉnh siêu âm thông qua CV để độ chính xác được tối đa hóa. Và tôi nghĩ đó là cách bạn áp dụng nó trong sklearn.
Paul

Chắc chắn, tôi nghĩ rằng câu trả lời của bạn sẽ được cải thiện ở đây nếu bạn thêm vào đó làm rõ. Hơi lạc đề một chút, nhưng tôi thực sự nghĩ rằng sklearn khá kém trong việc hỗ trợ điều đó, vì nó điều chỉnh dựa trên ngưỡng phân loại cố định, mà tôi cho rằng đó là một thực tế khá tệ.
Matthew Drury
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.