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

> Числовые меры качества классификаторов — accuracy, precision, recall, F1, ROC AUC, PR AUC, log loss — и правила выбора метрики под задачу.

Источник: https://llmdocs.ru/wiki/classification-metrics/ · обновлено 2026-11-09 · лицензия CC BY-SA 4.0

- **Основа**: матрица ошибок (TP, FP, FN, TN)
- **Пороговые метрики**: accuracy, precision, recall, F1
- **Беспороговые метрики**: ROC AUC, PR AUC (average precision)
- **Вероятностные метрики**: log loss, Brier score
- **Реализация**: sklearn.metrics
**Метрики качества классификации** — числовые показатели, по которым оценивают и сравнивают модели, предсказывающие класс объекта: «спам / не спам», «уйдёт клиент / останется», диагноз по снимку. Единой лучшей метрики нет: выбор зависит от того, какие ошибки дороже в конкретной задаче и насколько несбалансированы классы. Метрики считают на отложенных данных, которых модель не видела, — иначе оценка будет завышена из-за [переобучения](https://llmdocs.ru/wiki/overfitting-regularization.md).[1]

## Матрица ошибок

Для бинарной задачи все предсказания делятся на четыре группы:

| | Предсказано «да» | Предсказано «нет» |
|---|---|---|
| **На самом деле «да»** | TP — верно найден | FN — пропуск (ошибка II рода) |
| **На самом деле «нет»** | FP — ложная тревога (ошибка I рода) | TN — верно отклонён |

Из этих четырёх чисел строятся почти все пороговые метрики.

## Основные метрики

- **Accuracy** (доля правильных ответов) $= \frac{TP+TN}{\text{всего}}$. Понятна, но обманчива при дисбалансе: если мошеннических транзакций 0,5%, модель «всегда нет» даёт 99,5% accuracy и бесполезна.
- **Precision** (точность) $= \frac{TP}{TP+FP}$ — какая доля найденного действительно нужного класса. Важна, когда дорого ложное срабатывание: блокировка честного пользователя, ложное обвинение.
- **Recall** (полнота, чувствительность, TPR) $= \frac{TP}{TP+FN}$ — какую долю нужного класса модель нашла. Важна, когда дорог пропуск: болезнь, мошенничество, дефект.
- **F1-мера** — гармоническое среднее precision и recall: $F_1 = \frac{2PR}{P+R}$. Обобщение $F_\beta$ позволяет придать полноте больший ($\beta>1$) или меньший вес.
- **Специфичность** (TNR) $= \frac{TN}{TN+FP}$ — парная к полноте в медицине.
- **Коэффициент корреляции Мэттьюса** (MCC) учитывает все четыре клетки матрицы и устойчив к дисбалансу.[6]

Precision и recall конфликтуют: снижая порог срабатывания, модель находит больше (recall растёт), но и ошибается чаще (precision падает).[4]

## Порог и кривые

Большинство моделей выдают не класс, а оценку вероятности; класс получается сравнением с **порогом** (по умолчанию 0,5, что часто неоптимально). Беспороговые метрики оценивают качество ранжирования сразу для всех порогов:

- **ROC-кривая** — зависимость TPR от FPR при изменении порога; **ROC AUC** — площадь под ней. Равна вероятности того, что случайный положительный объект получит оценку выше случайного отрицательного: 0,5 — случайное угадывание, 1,0 — идеал.[2]
- **PR-кривая** — зависимость precision от recall; площадь под ней — **PR AUC** (average precision). При сильном дисбалансе она информативнее ROC: ROC AUC может выглядеть высоким за счёт огромного числа легко отсекаемых отрицательных примеров.[3]

```python
from sklearn.metrics import (classification_report, roc_auc_score,
                             average_precision_score, confusion_matrix)

proba = model.predict_proba(X_test)[:, 1]
pred = (proba >= 0.3).astype(int)          # порог под задачу, а не 0.5

print(confusion_matrix(y_test, pred))
print(classification_report(y_test, pred, digits=3))
print("ROC AUC", roc_auc_score(y_test, proba))
print("PR AUC ", average_precision_score(y_test, proba))
```

## Вероятностные метрики и калибровка

Если важны сами вероятности (расчёт ожидаемых потерь, ставки, медицинский риск), используют **log loss** (перекрёстную энтропию) и **Brier score**. Модель может хорошо ранжировать, но выдавать смещённые вероятности; **калибровка** (Platt scaling, изотоническая регрессия) это исправляет.[5] [Бустинг](https://llmdocs.ru/wiki/gradient-boosting.md) и нейросети часто нуждаются в калибровке.

## Многоклассовый случай

Метрики считаются для каждого класса «один против остальных» и усредняются: **macro** (простое среднее — все классы равноправны), **weighted** (с весами по частоте), **micro** (суммирование TP/FP/FN по всем классам — для однометочной задачи совпадает с accuracy).

## Как выбрать

1. Начать с бизнес-вопроса: что стоит пропуск и что стоит ложная тревога.
2. Для ранжирования и сравнения моделей — ROC AUC или PR AUC (при дисбалансе — PR AUC).
3. Для принятия решений — подобрать порог на валидации под нужный precision или recall, затем отчитаться на тесте.
4. Смотреть на матрицу ошибок, а не только на одно число, и оценивать разброс метрики по фолдам [кросс-валидации](https://llmdocs.ru/wiki/cross-validation.md).

Для [языковых моделей](https://llmdocs.ru/wiki/llm.md) классические метрики применяются, когда задача сводится к классификации; более общие подходы описаны в статье [Оценка LLM (evals)](https://llmdocs.ru/wiki/llm-evals.md).

## См. также

- [scikit-learn](https://llmdocs.ru/wiki/scikit-learn.md)
- [Кросс-валидация](https://llmdocs.ru/wiki/cross-validation.md)
- [Обучение с учителем и без](https://llmdocs.ru/wiki/supervised-unsupervised.md)
- [Оценка LLM (evals)](https://llmdocs.ru/wiki/llm-evals.md)
- [Дрейф данных](https://llmdocs.ru/wiki/data-drift.md)

## Источники

1. [scikit-learn — Metrics and scoring: quantifying the quality of predictions](https://scikit-learn.org/stable/modules/model_evaluation.html)
2. [Fawcett — An introduction to ROC analysis (2006)](https://doi.org/10.1016/j.patrec.2005.10.010)
3. [Saito, Rehmsmeier — The Precision-Recall Plot Is More Informative than the ROC Plot on Imbalanced Datasets (2015)](https://doi.org/10.1371/journal.pone.0118432)
4. [Google — Machine Learning Crash Course: Classification](https://developers.google.com/machine-learning/crash-course/classification)
5. [scikit-learn — Probability calibration](https://scikit-learn.org/stable/modules/calibration.html)
6. [Chicco, Jurman — The advantages of the Matthews correlation coefficient (2020)](https://doi.org/10.1186/s12864-019-6413-7)
