Как интерпретировать почти идеальную точность и AUC-ROC, но нулевой показатель f1, точность и отзывчивость

Я обучаю логистический классификатор ML для классификации двух классов с помощью python scikit-learn. Они находятся в крайне несбалансированных данных (около 14300: 1). Я получаю почти 100% точность и ROC-AUC, но 0% по точности, отзыву и баллу f1. Я понимаю, что точность обычно бесполезна для очень несбалансированных данных, но почему показатель ROC-AUC также близок к идеальному?

from sklearn.metrics import roc_curve, auc

# Get ROC 
y_score = classifierUsed2.decision_function(X_test)
false_positive_rate, true_positive_rate, thresholds = roc_curve(y_test, y_score)
roc_auc = auc(false_positive_rate, true_positive_rate)
print 'AUC-'+'=',roc_auc

1= class1
0= class2
Class count:
0    199979
1        21

Accuracy: 0.99992
Classification report:
             precision    recall  f1-score   support

          0       1.00      1.00      1.00     99993
          1       0.00      0.00      0.00         7

avg / total       1.00      1.00      1.00    100000

Confusion matrix:
[[99992     1]
 [    7     0]]
AUC= 0.977116255281

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

1= class1
0= class2
Class count:
0    199979
1        21
Accuracy: 0.99987
Classification report:
             precision    recall  f1-score   support

          0       1.00      1.00      1.00     99989
          1       0.00      0.00      0.00        11

avg / total       1.00      1.00      1.00    100000

Confusion matrix:
[[99987     2]
 [   11     0]]
AUC= 0.4999899989

person KubiK888    schedule 09.01.2016    source источник
comment
вы можете дать нам матрицу путаницы. Интуитивно я бы предположил, что это невозможно, но сейчас у меня нет времени заниматься математикой.   -  person cel    schedule 09.01.2016
comment
Спасибо за предложения, я добавил коды и результаты   -  person KubiK888    schedule 09.01.2016
comment
Толкование: у вас нет предсказуемости. У вас практически нет примеров для класса 1, и вы все предсказываете неверно. Лучше просто все время прогнозировать 0.   -  person cel    schedule 09.01.2016
comment
Да, я понимаю, но влияет ли это как на точность, так и на показатели AUC-ROC? Или мой расчет AUC-ROC неверен?   -  person KubiK888    schedule 09.01.2016
comment
Да, ваша модель имеет высокую точность и высокий AUC, это то, о чем вы спрашиваете? Но это потому, что почти все данные в вашем тестовом наборе равны 0, и вы в основном предсказываете только нули. Нет, это не означает, что ваша модель полезна. Я пытался дать вам интуитивное представление об этом. Сравните AUC и точность для модели, которая всегда предсказывает 0. Очевидно, что это бесполезная модель. Но забьет лучше. Это связано со структурой набора тестов. Получите сбалансированный набор тестов, и все станет намного яснее.   -  person cel    schedule 09.01.2016
comment
Я пробовал тестировать с использованием другого классификатора, и, используя классификатор решений, матрица путаницы выглядит почти так же, но на этот раз AUC намного ниже (см. Редакцию).   -  person KubiK888    schedule 09.01.2016
comment
Вот почему я перестал использовать «roc_auc» в качестве функции оценки для моих оптимизаторов и обратился к «f_1» (да, мои наборы данных часто несбалансированы). Но в настоящее время я думаю о пользовательском счетчике, который представляет собой смесь roc_auc и f1 в том смысле, что стандартный roc_auc сильно наказывается, когда хотя бы один из классов имеет ноль f1.   -  person Anatoly Alekseev    schedule 28.10.2017


Ответы (1)


Необходимо понимать принципиальное различие между AUC ROC и «точечными» показателями, такими как точность / точность и т. Д. ROC - это функция порогового значения. Учитывая модель (классификатор), которая выводит вероятность принадлежности к каждому классу, мы прогнозируем класс, который имеет самую высокую вероятность (поддержку). Однако иногда мы можем получить лучшие результаты, изменив это правило и потребовав, чтобы одна опора была в 2 раза больше, чем другая, чтобы фактически классифицировать как данный класс. Это часто верно для несбалансированных наборов данных. Таким образом, вы фактически изменяете изученные предыдущие классы, чтобы они лучше соответствовали вашим данным. ROC смотрит, «что произойдет, если я изменю этот порог на все возможные значения», а затем AUC ROC вычисляет интеграл такой кривой.

Как следствие:

  • высокий AUC ROC по сравнению с низким f1 или другим «точечным» показателем означает, что ваш классификатор в настоящее время работает плохо, однако вы можете найти порог, для которого его оценка на самом деле довольно приличная
  • низкий показатель AUC ROC и низкий f1 или другой "точечный" показатель означает, что ваш классификатор в настоящее время работает плохо, и даже установка порогового значения не изменит его
  • высокий AUC ROC и высокий f1 или другой "точечный" показатель означает, что ваш классификатор в настоящее время выполняет достойную работу, и для многих других значений порога он будет делать то же самое
  • низкий AUC ROC по сравнению с высоким f1 или другим «точечным» показателем означает, что ваш классификатор в настоящее время выполняет достойную работу, однако для многих других значений порога - это довольно плохо
person lejlot    schedule 09.01.2016
comment
Что считается высоким или низким показателем f-1? 50% - это хорошо или плохо? - person KubiK888; 10.01.2016
comment
зависит от решаемой проблемы, но это не кажется хорошим. f1 - это гармоническое среднее между точностью и отзывом, поэтому оно более или менее соответствует шкале обоих (поскольку всегда находится между этими двумя значениями). Я бы сказал, что оценка ниже 0,6 редко бывает приемлемой. - person lejlot; 11.01.2016
comment
Я сделал некоторую недостаточную выборку, так как (соотношение 1: 1) показатели точности, отзыва и f-показателя резко улучшились (например, f1 с 0,44 до 0,93). Интересно, на какой результат мне следует больше полагаться? Исходное распределение больше похоже на реальное распределение, в то время как недостаточная выборка имеет смысл, но не становится ли оно настолько далеким от исходного распределения, что становится нерепрезентативным? - person KubiK888; 11.01.2016
comment
вы не можете измерить показатель для данных с недостаточной выборкой. Вы тренируетесь только на передискретизированном - вам нужно тестировать на реальных (с фактическими априорными) - person lejlot; 11.01.2016
comment
Я вижу, что это имеет смысл, но, допустим, он работает намного лучше в тестовом наборе (который является исходным распределением), могу ли я сказать, что это хороший классификатор и что я должен полагаться на свои результаты на этот классификатор с недостаточной выборкой? - person KubiK888; 11.01.2016
comment
Пока ваш набор тестов достаточно велик для представления реальных данных - да, не имеет значения, как вы построили классификатор. Если тестовые данные никак не использовались для этого, и они были достаточно большими - это свидетельство силы классификатора. - person lejlot; 11.01.2016
comment
Я столкнулся со случаем, когда Classifier1 сообщает F1 = 80 и AUC-ROC = 70. Classifier2 сообщает F1 = 77 и AUC-ROC = 71. Какая модель лучше? Спасибо! - person Mohammadreza; 06.07.2018
comment
Отличное объяснение, престиж - person Jjang; 30.04.2020
comment
@lejlot, если AUC не показывает хорошую точку отсечения, лучше использовать F1 и веса для настройки? - person xm1; 23.11.2020