Метрики качества классификаторов
Что измеряет
Definition
Метрики качества классификаторов измеряют, насколько хорошо модель относит объекты к классам и какие типы ошибок она совершает.
В классификации недостаточно знать только долю правильных ответов. Важно понимать:
- какие классы модель путает;
- сколько положительных объектов она находит;
- сколько ложных срабатываний допускает;
- насколько хорошо ранжирует объекты по вероятности класса;
- как качество меняется при разных thresholds;
- что важнее в задаче: пропустить positive или ошибочно поднять negative.
Особенно важно выбирать метрику под задачу, если классы несбалансированы или ошибки имеют разную цену.
Формула
Базовые метрики строятся через confusion matrix.
Для бинарной классификации:
| Обозначение | Значение |
|---|---|
| TP | True Positive: модель предсказала positive, и это действительно positive |
| TN | True Negative: модель предсказала negative, и это действительно negative |
| FP | False Positive: модель предсказала positive, но это negative |
| FN | False 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 |
| Нужно выбрать threshold | Precision-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 или вероятности, а не только итоговые классы.
Связанные понятия
Что знать перед этим
- Задачи классификации
- TP, FP, TN, FN
- Вероятность класса
- Threshold