Матрица неточностей, ROC-AUC, оценка F1, потеря журнала

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

В Интернете есть множество статей о выборе показателей классификации, и здесь я просто использую свои слова, чтобы объяснить 5 моих основных важных показателей, которые вы должны учитывать и знать, прежде чем оценивать свою модель классификации.

1. Матрица неточностей

2. Точность, отзыв, точность

3. Оценка F1

4. Получение рабочих характеристик (ROC), площадь под кривой (AUC)

5. Потеря журнала

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

1. Матрица неточностей

Что такое матрица путаницы?

Судя по названию, вывод Confusion Matrix представляет собой матрицу, и это довольно «запутанно»? Однако на самом деле это довольно интуитивно понятно, если вы понимаете логику. Матрица неточностей - это таблица 2 * 2 (для классификации двоичных классов), которая является основой многих других показателей. Предположим, что ваша классификация имеет только две категории результатов (1 или 0), матрица путаницы - это комбинация вашего прогноза (1 или 0) и фактического значения (1 или 0).

Истинно-положительный: случай, когда вы правильно предсказываете положительный результат.

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

Ложноотрицательный: в этом случае вы прогнозируете, что результат будет отрицательным, но на самом деле он положительный.

Верно-отрицательный: случай, когда вы правильно предсказываете отрицательный результат.

Среди четырех разделов первое слово указывает, верен ли ваш прогноз, а второе слово указывает значение вашего прогноза. Очень полезно увидеть, как ваша модель классификации работает с различными категориями значений. Матрица не ограничивается только размером 2 * 2, и вы можете увидеть матрицу большего размера, если результат вашей классификации имеет больше, чем 2 категории.

"Пример"

#Calculate confusion matrix
from sklearn.metrics import confusion_matrix
matrix=confusion_matrix(y_test, y_predicted,labels=['high','low'])
cm=pd.DataFrame(matrix,index=['high','low'],columns=['high','low'])
print(cm)

Здесь я разделил цены на жилье на высокие и низкие, и вы можете увидеть общие классифицированные результаты по различным категориям. Обратите внимание, что в пакете sklearn ось y представляет собой истинное значение, поэтому значение x является прогнозируемым значением, которое отличается от обычного соглашения. Вы можете увидеть только абсолютное число, а процентные показатели здесь нет.

2. Точность, отзыв, точность

Три метрики рассчитываются непосредственно из результата матрицы неточностей и представляют собой процентные метрики, основанные на абсолютном числе, которое вы видите из матрицы неточностей.

"Точность"

Точность - это просто процент случаев, которые вы в целом правильно спрогнозировали.

Точность = (TP + TN) / (TP + TN + FP + FN)

Когда использовать точность?

Точность - хороший показатель того, как работает модель в целом. Однако он не сообщает вам производительность в каждой категории, и поэтому вы можете упустить важную информацию, если будете просто смотреть на точность. Лучше всего использовать , когда несколько случаев в разных категориях похожи или используются вместе с другими показателями.

"Отзывать"

Напомним, измеряется, какой процент реальных положительных случаев правильно идентифицирован.

Напомним = TP / (TP + FN)

Когда использовать отзыв?

Отзыв используется, когда цель состоит в том, чтобы зафиксировать максимальное количество положительных случаев. Например, во время недавней ситуации с Covid-19 правительство хочет отслеживать все зараженные случаи в сообществе. Если вы построили модель, позволяющую предсказать, инфицирован ли человек Covid-19, на основе симптомов, отзыв будет важным показателем, который необходимо измерить.

"Точность"

Точные измерения, которые среди предсказанных случаев будут положительными, сколько процентов из них действительно положительные.

Точность = TP / (TP + FP)

Когда использовать точность?

Точность используется, когда вы хотите быть очень точным при измерении положительных случаев. Он всегда конфликтует с Отзывом, потому что чем больше положительных случаев вы хотите зафиксировать, тем ниже стандарт, который вы ставите для классификации как положительные. В примере случаев Covid-19, если вы хотите зафиксировать больше зараженных случаев, вы можете включить все случаи, у которых есть легкие симптомы, которые могут быть вызваны обычным гриппом.

Пример

#Calculate Accuracy
from sklearn.metrics import accuracy_score
accuracy_score(y_test,y_predicted)
# Accuracy is 0.88124999999999998
#Calculate Recall
from sklearn.metrics import recall_score
recall_score(y_test, y_predicted)
#Recall is 0.84109589041095889
#Calculate Precision
from sklearn.metrics import precision_score
precision_score(y_test, y_predicted)
# Precision is 0.84573002754820936

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

3. Оценка F1

Что такое F1 Score?

Учитывая противоречие между точностью и отзывчивостью, оценка F1 создается для того, чтобы иметь сбалансированную метрику между отзывом и точностью. Это гармоническое средство отзыва и точности.

Зачем нам нужен счет F1?

Вы можете спросить: почему мы не просто усредняем точность и отзывчивость? Что ж, если распределение положительных и отрицательных случаев очень неравномерно, среднее значение не может быть хорошим представлением производительности модели.

В приведенном выше примере есть только 1 реальный положительный случай, и модель отражает его. Однако из 100 случаев, признанных положительными, только 1 действительно положительный. Таким образом, отзыв = 1 и точность = 0,01. Среднее значение между ними составляет 0,505, что явно не является хорошим показателем того, насколько плоха модель. Оценка F1 = 2 * (1 * 0,01) / (1 + 0,01) = 0,0198, и это дает лучшее представление о том, как работает модель.

"Пример"

#calculate F1 score
from sklearn.metrics import f1_score
f1_score(y_test,y_predicted)
# F1 score is 0.84340659340659341

4. Получение рабочих характеристик (ROC), площадь под кривой (AUC)

AUC - это площадь под кривой ROC, и это хороший показатель для двух вещей:

  1. Насколько хорошо модель может разделять два класса (положительный и отрицательный)
  2. Насколько точна модель для различных категорий (например, правильно ли она идентифицирует группу А как положительную)?

Что же тогда такое кривая ROC?

Здесь нам сначала нужно понять две метрики:

  1. Истинный положительный коэффициент (TPR): TPR фактически равен отзыву, который является одним из действительно положительных случаев, какой процент из них правильно отражен в модели
  2. Уровень ложноположительных результатов (NPR): измеряет среди действительно отрицательных случаев, какой процент из них на самом деле является ложноположительным.

TPR и NPR положительно коррелируют. Это связано с тем, что, когда вы хотите зафиксировать больше положительных случаев в своей модели классификации, вы неизбежно неверно классифицируете некоторые из них, и NPR возрастет. Кривая ROC представляет собой отношение TPR к NPR, и чем больше площадь под кривой, тем лучше разделение между различными группами.

Пример

#Calculate AUC 
from sklearn.metrics import roc_curve, auc
fpr, tpr, treshold = roc_curve(y_test, y_score_new)
roc_auc = auc(fpr, tpr)
#auc is 0.96

Для задач классификации по 2 классам (1 или 0) вероятность того, что вы угадаете вслепую, составляет 50%. Синяя пунктирная линия показывает TPR и FPR кривой, когда вы слепо угадываете категорию, и для этой диагональной линии площадь под кривой (AUC) равна 0,5.

Каждая точка на кривой представляет собой отдельную точку отсечения между TPR и FPR. Например, если я не могу мириться с какой-либо частотой ложных срабатываний (

Выбор порога основан на различных бизнес-требованиях, и обычно лучший выбор - максимизировать разницу между TPR и FPR, и на графике он представлен максимальным вертикальным расстоянием между оранжевой и синей пунктирной линией (см. красная линия). Наш пример прогноза имеет довольно хороший AUC (0,96), а оптимизированная точка составляет около (0,1,0,9).

Вы можете найти более подробную информацию о ROC-AUC по ссылке ниже:



5. Потеря журнала / бинарная кросс-энтропия

Функция потери журнала наказывает неправильно классифицированные дела, а также неуверенность в правильно классифицированных случаях. Как и ROC-AUC, он не только учитывает точность или результаты классификации, но также учитывает вероятность, присвоенную каждому из случаев из модели. Чем лучше модель, тем меньше значение потерь журнала.

y - реальный результат (0 или 1), а функция p - это вероятность того, что модель предсказывает результат, равный 1. Таким образом, если реальное значение равно 1, мы хотим максимизировать вероятность, которая присваивается предсказанию 1, которое равно p. (y) в то время как, если реальное значение равно 0, мы хотим максимизировать вероятность предсказания 0, который равен 1-p (y). Это часть после знака суммы, которую мы хотим максимизировать. Функция журнала значений от 0 до 1 отрицательна. Таким образом, чтобы сделать все значение положительным, функция имеет знак минус впереди, и нам нужно минимизировать всю функцию.

Какое приемлемое значение для потери журнала?

Значение Log Loss может варьироваться от 0 до бесконечности. Однако, если вы рассчитываете по формуле, функция потерь журнала будет равна 0,69, если вы просто слепо присвоите 50% каждому случаю. Таким образом, вам определенно следует поддерживать значение потери журнала ниже 0,69 и определять пороговое значение в соответствии с бизнес-требованиями.

"Пример"

#Calculate log loss
from sklearn.metrics import log_loss
log_loss(y_test,y_score)
#log loss is 0.32241485496779987

Рекомендация

В заключение, разные метрики служат разным целям и могут применяться соответственно к разным задачам. Тем не менее, рекомендуется использовать ROC-AOC или потерю журнала в целом, потому что они учитывают вероятность предсказания для каждого класса. Даже если обе модели предсказывают правильно для случая, модель предсказания с достоверностью 90% определенно более предпочтительна, чем модель прогнозирования с достоверностью 51%.

Если вам интересно узнать, какие показатели использовать для модели регрессии, вы можете обратиться к ссылке ниже: