Метрики качества классификаторов

Что измеряет

Definition

Метрики качества классификаторов измеряют, насколько хорошо модель относит объекты к классам и какие типы ошибок она совершает.

В классификации недостаточно знать только долю правильных ответов. Важно понимать:

  • какие классы модель путает;
  • сколько положительных объектов она находит;
  • сколько ложных срабатываний допускает;
  • насколько хорошо ранжирует объекты по вероятности класса;
  • как качество меняется при разных thresholds;
  • что важнее в задаче: пропустить positive или ошибочно поднять negative.

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

Формула

Базовые метрики строятся через confusion matrix.

Для бинарной классификации:

ОбозначениеЗначение
TPTrue Positive: модель предсказала positive, и это действительно positive
TNTrue Negative: модель предсказала negative, и это действительно negative
FPFalse Positive: модель предсказала positive, но это negative
FNFalse Negative: модель предсказала negative, но это positive

Accuracy

Accuracy — доля правильных ответов среди всех объектов:

Accuracy легко понимать, но она может быть плохой метрикой при дисбалансе классов.

Precision

Precision показывает, какая доля объектов, предсказанных как positive, действительно positive:

Precision важна, когда ложные срабатывания дорогие.

Например:

  • отправить здорового пациента на дорогую процедуру;
  • ошибочно заблокировать нормальную транзакцию;
  • показать пользователю нерелевантный alert.

Recall

Recall, или полнота, показывает, какую долю настоящих positive объектов модель нашла:

Recall важен, когда пропуск positive дорогой.

Например:

  • пропустить болезнь;
  • не заметить мошенничество;
  • не обнаружить дефект;
  • пропустить опасный материал.

Specificity

Specificity, или избирательность, показывает, какую долю настоящих negative объектов модель правильно определила как negative:

False Positive Rate связан со specificity:

F1-score

F1-score — гармоническое среднее precision и recall:

где:

  • — precision;
  • — recall.

F1 полезна, когда нужно сбалансировать precision и recall.

F-beta

-мера позволяет сделать precision или recall важнее:

Если:

  • — важнее recall;
  • — важнее precision;
  • — получается F1-score.

ROC-AUC

ROC-AUC измеряет, насколько хорошо модель ранжирует positive объекты выше negative объектов.

ROC-кривая строится по:

и:

Подробнее: ROC-кривая.

Интуиция

Разные метрики отвечают на разные вопросы.

ВопросПодходящая метрика
Как часто модель права в целом?Accuracy
Насколько можно доверять positive-предсказаниям?Precision
Какую долю настоящих positives модель находит?Recall
Как сбалансировать precision и recall?F1-score
Насколько модель хорошо ранжирует объекты?ROC-AUC
Что именно модель путает?Confusion matrix
Как модель работает с редким positive-классом?Precision, recall, PR-AUC

Пример:

Если модель ищет редкое заболевание, высокая accuracy может быть бесполезна. Если болезнь есть только у 1% пациентов, модель, которая всегда говорит «здоров», получит 99% accuracy, но не найдёт ни одного больного.

В такой задаче важнее смотреть recall, precision и confusion matrix.

Как интерпретировать

Accuracy

Accuracy хороша, если:

  • классы примерно сбалансированы;
  • все ошибки имеют примерно одинаковую цену;
  • нужна простая общая оценка.

Accuracy плоха, если:

  • есть сильный дисбаланс классов;
  • один тип ошибки намного дороже другого;
  • важен редкий positive-класс.

Precision

Высокая precision означает:

Если модель сказала positive, ей часто можно верить.

Но высокая precision не гарантирует, что модель нашла все positives. Модель может быть очень осторожной и находить только малую часть настоящих positives.

Recall

Высокий recall означает:

Модель находит большую часть настоящих positives.

Но высокий recall не гарантирует, что positive-предсказания точны. Модель может находить почти всё, но давать много ложных срабатываний.

F1-score

F1-score полезна, когда нужен баланс между precision и recall.

Но F1 не учитывает TN. Поэтому она не всегда подходит, если качество определения negative-класса тоже важно.

ROC-AUC

ROC-AUC показывает качество ранжирования при разных thresholds.

Но ROC-AUC не говорит, какой threshold выбрать, и может быть слишком оптимистичной при сильном дисбалансе классов.

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

Метрики классификации используют всегда, когда модель решает задачу классификации.

Практический выбор:

СитуацияЧто смотреть
Классы сбалансированыAccuracy, F1, confusion matrix
Positive-класс редкийPrecision, recall, PR-AUC
Пропуск positive дорогойRecall
Ложное срабатывание дорогоеPrecision
Нужно выбрать thresholdPrecision-recall trade-off, ROC-кривая, confusion matrix
Нужно сравнить ranking моделейROC-AUC или PR-AUC
Многоклассовая классификацияMacro/micro/weighted F1, confusion matrix
Нужны вероятностиLog loss, calibration metrics

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

Когда метрика обманывает

Accuracy при дисбалансе

Если 99% объектов относятся к классу 0, модель может всегда предсказывать 0 и получить 99% accuracy. Но она полностью провалит поиск класса 1.

ROC-AUC при редком positive-классе

Представим задачу:

  • positive объектов: 10;
  • negative объектов: 1 000 000.

Модель при некотором threshold дала:

  • TP = 9;
  • FP = 100 000.

Тогда:

С точки зрения ROC-пространства точка может выглядеть неплохо.

Но precision:

То есть почти все positive-предсказания ложные.

В таких задачах ROC-AUC может выглядеть приемлемо, хотя практическое качество плохое. Поэтому при редком positive-классе особенно важно смотреть precision, recall и PR-AUC.

F1-score без учёта цены ошибок

F1 балансирует precision и recall, но не знает реальную стоимость ошибок. Иногда recall намного важнее precision или наоборот. Тогда лучше использовать или задавать threshold под бизнес-ограничение.

Метрики без проверки threshold

Модель может иметь хороший ROC-AUC, но плохой выбранный threshold. Поэтому после оценки ranking-качества нужно отдельно выбирать рабочий порог.

Связанные метрики

МетрикаЧто показываетКогда полезна
AccuracyОбщую долю правильных ответовСбалансированные классы
PrecisionЧистоту positive-предсказанийКогда FP дорогие
RecallПолноту поиска positive-классаКогда FN дорогие
SpecificityКачество определения negative-классаКогда важно избегать FP
F1-scoreБаланс precision и recallНесбалансированные задачи
ROC-AUCКачество ранжирования positives выше negativesСравнение моделей по score
PR-AUCКачество precision-recall trade-offРедкий positive-класс
Log lossКачество вероятностейВероятностные классификаторы
Confusion matrixТипы ошибокДиагностика модели

Связанная отдельная заметка: ROC-кривая.

Минимальный пример

from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score
 
y_true = [0, 0, 1, 1, 1, 0]
y_pred = [0, 1, 1, 1, 0, 0]
 
print("accuracy:", accuracy_score(y_true, y_pred))
print("precision:", precision_score(y_true, y_pred))
print("recall:", recall_score(y_true, y_pred))
print("f1:", f1_score(y_true, y_pred))

Пример с ROC-AUC:

from sklearn.metrics import roc_auc_score
 
y_true = [0, 0, 1, 1]
y_score = [0.1, 0.4, 0.35, 0.8]
 
print("roc_auc:", roc_auc_score(y_true, y_score))

Важно: для ROC-AUC нужны scores или вероятности, а не только итоговые классы.

Связанные понятия

Что знать перед этим

Связанные заметки