Контрольная диагональная линия имеет значение (модель, которая делает предположения случайным образом), поэтому вам аналогичным образом необходимо определить модель, связанную с вашей контрольной кривой AUC 0,8. Разные модели будут связаны с разными эталонными кривыми.
Например, можно определить модель, для которой предсказанные вероятности равномерно распределены между 0 и 1, а для точки с предсказанной вероятностью p вероятность истинного результата равна p ^ k для некоторого постоянного k. Оказывается, для этой модели k = 2 дает график с AUC 0,8.
library(pROC)
set.seed(144)
probs <- seq(0, 1, length.out=10000)
truth <- runif(10000)^2 < probs
plot.roc(truth, probs)
# Call:
# plot.roc.default(x = truth, predictor = probs)
#
# Data: probs in 3326 controls (truth FALSE) < 6674 cases (truth TRUE).
# Area under the curve: 0.7977
Некоторые алгебры показывают, что это конкретное семейство моделей имеет AUC (2 + 3k) / (2 + 4k), что означает, что оно может генерировать кривые с AUC от 0,75 до 1 в зависимости от значения k.
Другой подход, который вы могли бы использовать, связан с логистической регрессией. Если бы у вас было значение функции линейного предиктора логистической регрессии p, иначе говоря, вы бы предсказали вероятность 1 / (1 + exp (-p)), тогда вы могли бы пометить истинный результат как истинный, если p плюс некоторый нормально распределенный шум превышает 0, и в противном случае обозначьте истинный результат как ложный. Если нормально распределенный шум имеет дисперсию 0, ваша модель будет иметь AUC 1, а если нормально распределенный шум имеет дисперсию, приближающуюся к бесконечности, ваша модель будет иметь AUC 0,5.
Если я предполагаю, что исходные прогнозы взяты из стандартного нормального распределения, похоже, что нормально распределенный шум со стандартным отклонением 1,2 дает AUC 0,8 (хотя я не мог придумать красивую закрытую форму для AUC):
set.seed(144)
pred.fxn <- rnorm(10000)
truth <- (pred.fxn + rnorm(10000, 0, 1.2)) >= 0
plot.roc(truth, pred.fxn)
# Call:
# plot.roc.default(x = truth, predictor = pred.fxn)
#
# Data: pred.fxn in 5025 controls (truth FALSE) < 4975 cases (truth TRUE).
# Area under the curve: 0.7987
person
josliber♦
schedule
17.04.2015