Bisakah AUC-ROC berada di antara 0-0.5?

16

Bisakah nilai AUC-ROC antara 0-0,5? Apakah model pernah menampilkan nilai antara 0 dan 0,5?

Seorang pria
sumber

Jawaban:

19

Prediktor sempurna memberikan skor AUC-ROC 1, prediktor yang membuat tebakan acak memiliki skor AUC-ROC 0,5.

Jika Anda mendapatkan skor 0 yang berarti bahwa penggolongnya benar-benar salah, itu memprediksi pilihan yang salah 100% dari waktu. Jika Anda baru saja mengubah prediksi pengelompokan ini ke pilihan yang berlawanan, maka prediksi tersebut dapat diprediksi dengan sempurna dan memiliki skor AUC-ROC 1.

Jadi dalam praktiknya jika Anda mendapatkan skor AUC-ROC antara 0 dan 0,5, Anda mungkin memiliki kesalahan dalam cara Anda memberi label target klasifikasi Anda atau Anda mungkin memiliki algoritma pelatihan yang buruk. Jika Anda mendapatkan skor 0,2 ini menunjukkan bahwa data tersebut berisi informasi yang cukup untuk mendapatkan skor 0,8 tetapi ada yang salah.

Hugh
sumber
Saya pikir jawaban ini melompati kemungkinan bahwa model memiliki pakaian berlebihan, misalnya mendapatkan AUC 0,8 pada data pelatihan tetapi AUC 0,35 pada data penahanan.
Sycorax berkata Reinstate Monica
1
@ Scorax: Hmm, saya bisa melihat bagaimana overfitting jelas bisa mendorong AUC ke tempat itu pada tingkat kebetulan (jika Anda jauh dari model sebenarnya bahwa prediksi Anda hanya sampah), tetapi bagaimana hasilnya (secara signifikan) di bawah kebetulan ?
Ruben van Bergen
1
Anda akan memiliki AUC di bawah 0,5 setiap kali peringkat pada beberapa set lebih dekat untuk menjadi mundur daripada yang benar. Ini tidak berbeda dengan overfitting dalam konteks lainnya.
Sycorax berkata Reinstate Monica
14

Mereka bisa, jika sistem yang Anda analisis berkinerja di bawah tingkat peluang. Secara sepele, Anda dapat dengan mudah membuat classifier dengan 0 AUC dengan selalu menjawab berlawanan dengan kebenaran.

Dalam praktiknya tentu saja Anda melatih classifier Anda pada beberapa data sehingga nilainya jauh lebih kecil dari 0,5 biasanya akan menunjukkan kesalahan dalam algoritma Anda, label data, atau pilihan data train / test. Misalnya jika Anda secara keliru mengganti label kelas dalam data kereta Anda, AUC yang Anda harapkan akan menjadi 1 dikurangi AUC "benar" (diberi label yang benar). AUC juga bisa <0,5 jika Anda membagi data Anda menjadi partisi train & test sedemikian rupa sehingga pola yang akan diklasifikasikan berbeda secara sistematis. Ini mungkin terjadi (misalnya) jika satu kelas lebih umum di kereta vs set tes, atau jika pola di setiap set secara sistematis berbeda intersep yang tidak Anda perbaiki.

Terakhir, itu juga bisa terjadi secara acak karena classifier Anda berada pada level kebetulan dalam jangka panjang tetapi kebetulan mendapatkan "sial" dalam sampel pengujian Anda (yaitu mendapatkan beberapa kesalahan lebih banyak daripada keberhasilan). Tetapi dalam hal ini nilainya harus relatif mendekati 0,5 (seberapa dekat tergantung pada jumlah titik data).

Ruben van Bergen
sumber
1

Maaf, tapi jawaban ini salah besar. Tidak, Anda tidak bisa langsung membalik AUC setelah melihat data. Bayangkan Anda membeli saham, dan Anda selalu membeli yang salah, tetapi Anda berkata pada diri sendiri, maka tidak apa-apa, karena jika Anda membeli kebalikan dari apa yang diprediksi model Anda, maka Anda akan menghasilkan uang.

Masalahnya adalah bahwa ada banyak, seringkali alasan yang tidak jelas bagaimana Anda dapat membiasakan hasil Anda dan mendapatkan kinerja yang di bawah rata-rata secara konsisten. Jika sekarang Anda membalik AUC Anda, Anda mungkin berpikir Anda adalah pemodel terbaik di dunia, meskipun tidak pernah ada sinyal dalam data.

Ini adalah contoh simulasi. Perhatikan bahwa prediktor hanyalah variabel acak tanpa hubungan dengan target. Juga, perhatikan bahwa rata-rata AUC sekitar 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')

Hasil

masukkan deskripsi gambar di sini

Tentu saja, tidak mungkin classifier dapat belajar apa pun dari data karena data tersebut acak. Peluang bawah AUC ada di sana karena LOOCV menciptakan set pelatihan yang bias dan tidak seimbang. Namun, itu tidak berarti bahwa jika Anda tidak menggunakan LOOCV, Anda aman. Inti dari cerita ini adalah bahwa ada cara, banyak cara bagaimana hasilnya dapat memiliki kinerja rata-rata di bawah bahkan jika tidak ada dalam data, dan oleh karena itu Anda tidak boleh membalikkan prediksi kecuali Anda tahu apa yang Anda lakukan. Dan karena Anda memiliki kinerja di bawah rata-rata, Anda tidak melihat apa yang Anda lakukan :)

Berikut adalah beberapa makalah yang menyentuh masalah ini, tetapi saya yakin orang lain juga melakukannya

Jamalabadi et al 2016 https://onlinelibrary.wiley.com/doi/full/10.1002/hbm.23140

Snoek et al 2019 https://www.ncbi.nlm.nih.gov/pubmed/30268846

rep_ho
sumber
Ini harus menjadi jawaban yang diterima!
tdc