Метрики классификации: accuracy, precision, recall, F1 и ROC-AUC
Одна доля правильных ответов редко описывает классификатор полностью. Accuracy, precision, recall, F1 и ROC-AUC по-разному учитывают ошибки и пороги. Чтобы выбрать метрику, сначала определяют положительный класс и последствия ложного срабатывания и пропуска.
Матрица ошибок как основа
Для бинарной задачи прогнозы образуют четыре группы:
| Результат | Что произошло |
|---|---|
| TP | положительный объект найден |
| FP | отрицательный объект ошибочно отмечен |
| FN | положительный объект пропущен |
| TN | отрицательный объект правильно отклонён |
Слова «положительный» и «отрицательный» не означают хороший и плохой. Положительным называют класс, обнаружение которого анализируется, например дефект или нужное письмо.
Accuracy
Accuracy — доля всех правильных прогнозов. Она понятна при сопоставимых классах и примерно одинаковой цене ошибок. Если дефекты составляют 1%, правило «дефектов нет» получает 99% accuracy, хотя не находит ни одного важного случая.
Поэтому вместе с общей точностью всегда смотрите распределение классов и матрицу ошибок. Для многоклассовой задачи полезны метрики по каждому классу, а не только одно среднее.
Precision и recall
Precision отвечает: «Какая доля отмеченных моделью положительных объектов действительно положительна?» Высокая precision важна, когда ложная тревога дорога.
Recall отвечает: «Какую долю всех настоящих положительных объектов модель нашла?» Высокая полнота нужна, когда пропуск опасен. Снижение порога обычно повышает recall, но может уменьшить precision.
F1 — гармоническое среднее precision и recall. Оно становится высоким, только если обе величины достаточно велики, однако скрывает выбранный компромисс и не учитывает TN напрямую.
ROC-AUC и пороги
ROC-кривая рассматривает пары true positive rate и false positive rate при разных порогах. Площадь ROC-AUC измеряет способность ранжировать случайный положительный объект выше случайного отрицательного. Она не выбирает рабочий порог и может выглядеть оптимистично при сильном дисбалансе.
Для редкого положительного класса дополнительно полезна precision-recall кривая: она показывает именно качество положительных решений при изменении порога.
Расчёт в коде
import numpy as np
from sklearn.metrics import (
accuracy_score,
confusion_matrix,
f1_score,
precision_score,
recall_score,
roc_auc_score,
)
y_test = np.array([0, 0, 1, 1, 1, 0, 1, 0])
probabilities = np.array([0.10, 0.45, 0.80, 0.34, 0.75, 0.20, 0.60, 0.55])
predictions = probabilities >= 0.35
print('accuracy', accuracy_score(y_test, predictions))
print('precision', precision_score(y_test, predictions))
print('recall', recall_score(y_test, predictions))
print('f1', f1_score(y_test, predictions))
print('roc_auc', roc_auc_score(y_test, probabilities))
print(confusion_matrix(y_test, predictions))ROC-AUC получает непрерывные оценки, а пороговые метрики — готовые классы. Перед вычислением проверьте, какой класс закодирован единицей.
Практика: выберите метрику по последствиям
Рассмотрите фильтр спама, поиск опасного дефекта и отбор ста заявок для ручной проверки. Для каждого случая назовите более дорогую ошибку, основную метрику и возможное ограничение второй метрики. Затем объясните, почему одинаковый F1 не гарантирует одинакового пользовательского результата.
Что важно запомнить
- Матрица ошибок показывает четыре исхода классификации.
- Accuracy опасна как единственный показатель при редком классе.
- Precision измеряет чистоту срабатываний, recall — полноту обнаружения.
- AUC оценивает ранжирование, но не заменяет выбор рабочего порога.