ค่า AUC-ROC อยู่ระหว่าง 0-0.5 หรือไม่ รุ่นส่งออกค่าระหว่าง 0 ถึง 0.5 หรือไม่?
ค่า AUC-ROC อยู่ระหว่าง 0-0.5 หรือไม่ รุ่นส่งออกค่าระหว่าง 0 ถึง 0.5 หรือไม่?
คำตอบ:
ตัวทำนายที่สมบูรณ์แบบให้คะแนน AUC-ROC ที่ 1 ซึ่งเป็นตัวทำนายที่ทำให้การเดาแบบสุ่มมีคะแนน AUC-ROC 0.5
หากคุณได้รับคะแนนเป็น 0 นั่นหมายความว่าตัวจําแนกไม่ถูกต้องสมบูรณ์มันเป็นการทำนายตัวเลือกที่ไม่ถูกต้อง 100% ของเวลา หากคุณเพิ่งเปลี่ยนการทำนายของตัวจําแนกนี้เป็นตัวเลือกที่ตรงกันข้ามจะสามารถทำนายได้อย่างสมบูรณ์และมีคะแนน AUC-ROC เท่ากับ 1
ดังนั้นในทางปฏิบัติหากคุณได้รับคะแนน AUC-ROC ระหว่าง 0 ถึง 0.5 คุณอาจมีข้อผิดพลาดในวิธีที่คุณระบุเป้าหมายตัวจําแนกของคุณหรือคุณอาจมีอัลกอริทึมการฝึกอบรมที่ไม่ดี หากคุณได้รับคะแนน 0.2 แสดงว่าข้อมูลมีข้อมูลเพียงพอที่จะได้รับคะแนน 0.8 แต่มีบางอย่างผิดพลาด
พวกเขาสามารถทำได้หากระบบที่คุณกำลังวิเคราะห์ทำงานต่ำกว่าระดับโอกาส คุณสามารถสร้างลักษณนามได้ง่าย ๆ ด้วย 0 AUC โดยให้มันตอบตรงข้ามกับความจริงเสมอ
ในทางปฏิบัติแน่นอนคุณฝึกตัวจําแนกของคุณกับข้อมูลบางอย่างดังนั้นค่าที่น้อยกว่า 0.5 มากโดยทั่วไปจะบ่งบอกถึงข้อผิดพลาดในอัลกอริทึมฉลากข้อมูลหรือตัวเลือกข้อมูลการรถไฟ / การทดสอบ ตัวอย่างเช่นหากคุณเปลี่ยนป้ายชื่อคลาสในข้อมูลรถไฟของคุณโดยไม่ได้ตั้งใจ AUC ที่คุณคาดหวังจะเป็น 1 ลบด้วย "AUC" ที่แท้จริง "(รับป้ายกำกับที่ถูกต้อง) AUC อาจเป็น <0.5 หากคุณแบ่งข้อมูลของคุณออกเป็นส่วนย่อยของรถไฟและทดสอบด้วยวิธีที่รูปแบบที่จะจำแนกนั้นแตกต่างกันอย่างเป็นระบบ สิ่งนี้อาจเกิดขึ้น (ตัวอย่าง) ถ้ามีหนึ่งคลาสที่พบได้ทั่วไปในรถไฟเทียบกับชุดทดสอบหรือถ้ารูปแบบในแต่ละชุดมีการดักที่แตกต่างกันอย่างเป็นระบบที่คุณไม่ได้แก้ไข
ท้ายที่สุดมันอาจเกิดขึ้นแบบสุ่มได้เนื่องจากตัวจําแนกของคุณอยู่ในระดับโอกาสในระยะยาว แต่เกิดขึ้นเพื่อให้ "โชคร้าย" ในตัวอย่างทดสอบของคุณ (เช่นได้รับข้อผิดพลาดมากกว่าความสำเร็จเล็กน้อย) แต่ในกรณีนั้นค่าควรจะยังคงอยู่ใกล้กับ 0.5 (วิธีการปิดขึ้นอยู่กับจำนวนของจุดข้อมูล)
ฉันขอโทษ แต่คำตอบเหล่านี้ผิดพลาด ไม่คุณไม่สามารถพลิก AUC หลังจากที่คุณเห็นข้อมูล ลองนึกภาพคุณกำลังซื้อหุ้นและคุณมักจะซื้อสิ่งที่ผิด แต่คุณพูดกับตัวเองมันก็โอเคเพราะถ้าคุณซื้อสิ่งที่ตรงข้ามกับที่แบบจำลองของคุณทำนายไว้คุณก็จะทำเงินได้
เหตุผลก็คือมีหลายเหตุผลที่ไม่ชัดเจนว่าคุณสามารถตั้งค่าผลลัพธ์ของคุณได้อย่างไรและรับประสิทธิภาพต่ำกว่าค่าเฉลี่ยอย่างสม่ำเสมอ หากคุณพลิก AUC ของคุณคุณอาจคิดว่าคุณเป็นนักสร้างโมเดลที่ดีที่สุดในโลกแม้ว่าจะไม่มีสัญญาณใด ๆ ในข้อมูล
นี่คือตัวอย่างการจำลอง โปรดสังเกตว่าตัวทำนายนั้นเป็นเพียงตัวแปรสุ่มที่ไม่มีความสัมพันธ์กับเป้าหมาย นอกจากนี้โปรดสังเกตว่า AUC เฉลี่ยอยู่ที่ประมาณ 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')
ผล
แน่นอนว่าไม่มีทางที่ตัวแยกแยะสามารถเรียนรู้อะไรจากข้อมูลเนื่องจากข้อมูลเป็นแบบสุ่ม โอกาสที่ AUC อยู่ที่นั่นเพราะ LOOCV สร้างชุดการฝึกแบบเอนเอียงและไม่สมดุล อย่างไรก็ตามนั่นไม่ได้หมายความว่าหากคุณไม่ได้ใช้ LOOCV คุณจะปลอดภัย ประเด็นของเรื่องนี้ก็คือมีหลายวิธีที่ผลลัพธ์จะมีประสิทธิภาพการทำงานต่ำกว่ามาตรฐานแม้ว่าจะไม่มีข้อมูลอยู่ในนั้นดังนั้นคุณไม่ควรพลิกการคาดการณ์เว้นแต่คุณจะรู้ว่าคุณกำลังทำอะไรอยู่ และเนื่องจากคุณมีประสิทธิภาพโดยเฉลี่ยที่ต่ำคุณไม่เห็นสิ่งที่คุณกำลังทำ :)
นี่คือเอกสารสองสามฉบับที่สัมผัสกับปัญหานี้ แต่ฉันแน่ใจว่าคนอื่นทำได้เช่นกัน
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