Нахождение нижнего порога с РПЦ - PullRequest
0 голосов
/ 23 мая 2019

Я пытаюсь найти оптимальный порог T для X, чтобы предсказать Y. Обычно я использовал бы J Юдена в этой настройке, однако, когда порог является нижней границей (в случае, когда Y изменяется обратно пропорционально X), классический реализация, кажется, не имеет места.

В следующем посте есть некоторые частичные ответы (первые ответы дают лучшие результаты), но этот метод не является надежным в соответствии с комментариями, и ни одна статья не цитируется: Кривая Roc и точка отсечки. Python

def cutoff_youdens_j(fpr, tpr, thresholds):
    j_scores = tpr-fpr # J = sensivity (=tpr) + specificity (=1-fpr) - 1
    j_ordered = sorted(zip(j_scores, thresholds))
    return j_ordered[-1][1]

import numpy as np
from sklearn.metrics import roc_curve

X = np.arange(1, 10)
# Y is an example of a binary dependent variable that varies inversely to the predictor X
Y = X < 5

fpr, tpr, thresholds = roc_curve(Y, X)
T = cutoff_youdens_j(fpr, tpr, thresholds)
print(T) 
# OUTPUT: 10

Ожидаемый результат будет 5, однако я получаю 10.
Есть ли лучшие методы для выбора оптимального порога и есть ли документ, демонстрирующий это? Было бы также интересно получить, если это на самом деле нижняя или верхняя граница.

EDIT: Возможно, будет заранее обратный X, а затем обратный T.

X = np.arange(1, 10)
Y = X < 5
X = -X
fpr, tpr, thresholds = roc_curve(Y, X)
T = cutoff_youdens_j(fpr, tpr, thresholds)
T = -T
print(T) #OUTPUT 4 

Это работает, но направление ассоциации должно быть определено заранее. Существуют ли другие методы, которые работают как с положительными, так и с отрицательными ассоциациями между X и Y?

1 Ответ

1 голос
/ 23 мая 2019

Ваша проблема в том, что положительный класс имеет более низкие значения X. Sklearn принимает более высокие значения для положительного класса, в противном случае кривая ROC инвертируется, здесь с AUC 0,0:

from sklearn.metrics import roc_auc_score
print(roc_auc_score(Y, X))
# OUTPUT: 0.0

Анализ ROC происходит из области обнаружения сигнала, и он критически зависит от определения положительного сигнала, то есть направления сравнения. Некоторые библиотеки могут автоматически определить это для вас, некоторые нет, но в конце концов это всегда нужно делать.

И поэтому все остальное правильно, «лучший» порог в этом случае является одним из углов кривой.

Просто убедитесь, что ваш положительный класс установлен правильно, и вы готовы идти:

Y = X > 5
...