Добавление произвольной кривой с AUC 0,8 к графику ROC

У меня есть простой график ROC, который я создаю с помощью пакета pROC:

plot.roc(response, predictor)

Как и ожидалось, он работает нормально, но я хотел бы добавить эталонную кривую «идеальной» формы с AUC 0,8 для сравнения (AUC моего графика ROC составляет 0,66).

Есть предположения?

Чтобы уточнить, я не пытаюсь сгладить свой график ROC, а пытаюсь добавить контрольную кривую, которая будет представлять AUC 0,8 (аналогично контрольной диагональной линии, представляющей AUC 0,5).


person Oposum    schedule 16.04.2015    source источник
comment
так что (четверть) окружность с радиусом 1?   -  person rawr    schedule 17.04.2015


Ответы (2)


Контрольная диагональная линия имеет значение (модель, которая делает предположения случайным образом), поэтому вам аналогичным образом необходимо определить модель, связанную с вашей контрольной кривой 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
comment
Выглядит так, как должно выглядеть, за исключением того, что он почему-то не на 100% гладкий. В остальном это то, о чем я говорил. Спасибо. - person Oposum; 18.04.2015
comment
@Oposum отсутствие гладкости, вероятно, просто потому, что он не был построен с достаточным количеством образцов. Вы можете попробовать 100 000 образцов вместо 10 000, которые я разместил здесь. - person josliber♦; 18.04.2015

Быстрый / грубый способ - добавить на график круг радиуса 1, который будет иметь AUC pi / 4 = 0,7853982.

library(pROC)
library(car)

n <- 100L

x1 <- rnorm(n, 2.0, 0.5)
x2 <- rnorm(n, -1.0, 2)
y <- rbinom(n, 1L, plogis(-0.4 + 0.5 * x1 + 0.1 * x2))

mod <- glm(y ~ x1 + x2, "binomial")
probs <- predict(mod, type = "response")

plot(roc(y, probs))
ellipse(c(0, 0), matrix(c(1,0,0,1), 2, 2), radius = 1, center.pch = FALSE, col = "blue")

roc

person Jeff    schedule 17.04.2015
comment
Изгибы Roc редко бывают круглыми (если вообще) круглыми. Мне нравится, насколько он гладкий, но я представлял себе больше похожего на этот рисунок gim.unmc.edu/dxtests /roccomp.jpg что-то среднее между желтой и розовой кривыми. С уверенностью можно сказать, что ни один из них не является кругом (особенно желтый). - person Oposum; 18.04.2015