EssayAI
Блог
Блог
Математика и алгоритмы

Матрица ошибок (confusion matrix): формула и пример

11 июня 2026Время чтения: 8 минут
#матрица ошибок#confusion matrix#precision recall#метрики классификации#машинное обучение
Матрица ошибок (confusion matrix): формула и пример

Матрица ошибок, она же confusion matrix, - это таблица, в которую сводят предсказания классификатора против реальных меток класса. Она устроена просто: строки - фактический класс объекта, столбцы - то, что предсказала модель (или наоборот, в зависимости от источника). На пересечении строк и столбцов оказываются четыре числа: верно найденные положительные объекты, верно найденные отрицательные, и два вида ошибок - ложные тревоги и пропуски. Из этих четырёх чисел выводятся почти все метрики качества классификации, которые встречаются в курсах машинного обучения: accuracy, precision, recall, специфичность и F1-score. Ниже разберём саму таблицу, формулы метрик и то, где студенты чаще всего путаются. Чтобы сразу увидеть, как числа матрицы превращаются в проценты качества, покрутите калькулятор ниже - он пересчитывает все метрики и перерисовывает саму матрицу.

Что стоит в клетках матрицы ошибок

Для задачи бинарной классификации (два класса: «положительный» и «отрицательный») матрица ошибок - это таблица 2×2 из четырёх величин:

  • True Positive (TPTP) - модель предсказала «положительный», и объект действительно положительный;
  • True Negative (TNTN) - модель предсказала «отрицательный», и объект действительно отрицательный;
  • False Positive (FPFP) - модель предсказала «положительный», а объект на самом деле отрицательный (ложная тревога, ошибка I рода);
  • False Negative (FNFN) - модель предсказала «отрицательный», а объект на самом деле положительный (пропуск, ошибка II рода).

Первая буква в названии (TT или FF) говорит, угадала модель или ошиблась; вторая буква (PP или NN) - что именно она предсказала. Общее число объектов в выборке - это сумма всех четырёх клеток: N=TP+FP+FN+TNN = TP + FP + FN + TN. Если сложить TPTP и FNFN, получится реальное число положительных объектов в выборке; если сложить FPFP и TNTN - реальное число отрицательных.

Accuracy, precision и recall через матрицу

Самая грубая метрика - accuracy (доля верных ответов среди всех предсказаний):

Accuracy=TP+TNTP+FP+FN+TN.\text{Accuracy} = \frac{TP + TN}{TP + FP + FN + TN}.

Она интуитивна, но обманчива при дисбалансе классов: если положительных объектов всего 1% выборки, модель, которая вообще ничего не находит и всегда отвечает «отрицательный», получит accuracy 99%, оставаясь при этом бесполезной. Поэтому для несбалансированных задач (спам, редкие заболевания, брак на производстве) accuracy почти никогда не используют в одиночку - вместе с ней смотрят precision и recall.

Precision (точность) отвечает на вопрос «из всех объектов, которые модель назвала положительными, сколько действительно положительные»:

Precision=TPTP+FP.\text{Precision} = \frac{TP}{TP + FP}.

Recall (полнота, чувствительность) отвечает на другой вопрос - «из всех реально положительных объектов сколько модель нашла»:

Recall=TPTP+FN.\text{Recall} = \frac{TP}{TP + FN}.

Precision наказывает модель за ложные тревоги (FPFP в знаменателе), recall - за пропуски (FNFN в знаменателе). Эти два показателя обычно конфликтуют: если сдвинуть модель в сторону «находить как можно больше», она начнёт чаще ошибаться ложными срабатываниями, и наоборот.

Матрица ошибок с фигурными скобками: столбец «предсказан положительный» размечен как precision = TP / (TP + FP), строка «факт положительный» - как recall = TP / (TP + FN)
Матрица ошибок с фигурными скобками: столбец «предсказан положительный» размечен как precision = TP / (TP + FP), строка «факт положительный» - как recall = TP / (TP + FN)

F1-score: как объединить precision и recall в одно число

Когда нужен единственный показатель, а не пара конфликтующих чисел, считают F1-score - гармоническое среднее precision и recall:

F1=2PrecisionRecallPrecision+Recall.F_1 = 2 \cdot \frac{\text{Precision} \cdot \text{Recall}}{\text{Precision} + \text{Recall}}.

Гармоническое среднее выбрано не случайно: в отличие от обычного среднего арифметического, оно резко штрафует ситуацию, когда один из показателей близок к нулю. Модель с precision = 1 и recall = 0,01 получит арифметическое среднее около 0,5, что выглядит неплохо, но F1 в этом случае окажется около 0,02 - почти ноль, и это куда честнее описывает бесполезную модель. Если точность и полнота важны не в равной степени, используют обобщение - FβF_\beta-меру, где параметр β\beta задаёт, во сколько раз recall весомее precision.

Порог классификации и как он меняет матрицу

Большинство классификаторов на выходе выдают не метку класса, а число - вероятность или «уверенность» принадлежности к положительному классу. Метку получают, сравнивая это число с порогом отсечения (обычно 0,5): выше порога - «положительный», ниже - «отрицательный». Порог не задан природой задачи, это настраиваемый параметр, и от него напрямую зависит вся матрица ошибок.

Два перекрывающихся распределения оценок классификатора - для настоящих положительных и настоящих отрицательных объектов; порог скользит между ними, и области TP/FP/FN/TN под кривыми меняются вместе со счётчиками в матрице

Если сдвинуть порог вверх (модель должна быть увереннее, чтобы назвать объект положительным), FPFP уменьшается, но вместе с ним растёт FNFN - часть настоящих положительных объектов больше не проходит порог. Значит, precision растёт, а recall падает. Если сдвинуть порог вниз - эффект обратный: recall растёт, precision падает. Именно поэтому precision и recall нельзя увеличивать одновременно простым сдвигом порога - компромисс всегда есть, и место, где его остановить, зависит от цены ошибок в конкретной задаче.

Чувствительность и специфичность в медицинских тестах

В медицинской и биологической литературе те же величины часто называют другими именами. Recall в этом контексте - это чувствительность теста (sensitivity): доля больных, которых тест правильно определил как больных. Ему в пару идёт специфичность (specificity) - доля здоровых, которых тест правильно определил как здоровых:

Specificity=TNTN+FP.\text{Specificity} = \frac{TN}{TN + FP}.

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

Матрица ошибок для многоклассовой задачи

Если классов больше двух, матрица ошибок превращается в таблицу k×kk \times k, где kk - число классов: строка ii, столбец jj показывает, сколько объектов истинного класса ii модель отнесла к классу jj. Диагональ таблицы - верные предсказания, всё, что вне диагонали, - ошибки, причём видно не только сам факт ошибки, но и то, с каким классом объект чаще всего путают. Precision и recall для многоклассовой задачи считают отдельно для каждого класса по схеме «один против всех» (one-vs-rest): для класса ii его TPTP - это диагональный элемент, FPFP - сумма остальных элементов его столбца, FNFN - сумма остальных элементов его строки. Получившиеся значения по классам затем усредняют - как простое среднее (macro-average) или взвешенное по размеру класса (weighted-average).

Частые ошибки

  • Перепутать строки и столбцы. В одних источниках строки - это факт, столбцы - предсказание, в других наоборот. Перед тем как считать TP/FP/FN/TN по чужой таблице, явно проверяйте подпись осей.
  • Судить о модели только по accuracy при дисбалансе классов. Классификатор, который всегда отвечает «отрицательный», может дать accuracy 95% и выше на редком положительном классе, оставаясь бесполезным.
  • Путать precision и recall местами. Precision - про качество положительных ответов модели (FPFP в знаменателе), recall - про полноту охвата реальных положительных объектов (FNFN в знаменателе). Перепутанные формулы - самая частая ошибка в задачах.
  • Забыть, что F1 - гармоническое, а не арифметическое среднее. Подстановка обычного среднего (Precision+Recall)/2(\text{Precision} + \text{Recall})/2 вместо формулы через произведение даёт завышенный и неверный результат.
  • Считать специфичность через recall положительного класса. Специфичность - это recall для отрицательного класса (TN/(TN+FP)TN/(TN+FP)), а не то же самое число, что и обычный recall.

FAQ

Что означает True Positive в матрице ошибок? Это объект, который модель верно отнесла к положительному классу: предсказание «положительный» совпало с реальной меткой. Такие объекты стоят в числителе и precision, и recall.

Чем матрица ошибок отличается от accuracy? Accuracy - это одно число, доля верных ответов. Матрица ошибок - таблица из четырёх (или больше, для многоклассовой задачи) чисел, из которой accuracy можно получить, но которая дополнительно показывает, какого рода ошибки совершает модель - ложные тревоги или пропуски.

Как посчитать precision и recall, если известна только матрица ошибок? Найдите в таблице TPTP, FPFP и FNFN: precision = TP/(TP+FP)TP/(TP+FP) (доля верных среди предсказанных положительными), recall = TP/(TP+FN)TP/(TP+FN) (доля найденных среди всех реально положительных).

Коротко

Матрица ошибок сводит предсказания классификатора в четыре числа - TPTP, TNTN, FPFP, FNFN, - из которых считаются все ключевые метрики: accuracy = (TP+TN)/N(TP+TN)/N, precision = TP/(TP+FP)TP/(TP+FP), recall = TP/(TP+FN)TP/(TP+FN), специфичность = TN/(TN+FP)TN/(TN+FP) и F1 = 2PrecisionRecall/(Precision+Recall)2\,\text{Precision}\cdot\text{Recall}/(\text{Precision}+\text{Recall}). Порог классификации сдвигает баланс между precision и recall в противоположные стороны, а для многоклассовых задач те же формулы применяют отдельно к каждому классу по схеме «один против всех».

Доверьте текст нейросети EssayAI

Открыть EssayAI

Бесплатно, на русском языке и без VPN

Читайте также

Алгоритм AdaBoost: как слабые классификаторы дают сильный

Алгоритм AdaBoost: как слабые классификаторы дают сильный

Алгоритм AdaBoost простыми словами: адаптивный бустинг, перевзвешивание объектов, формула веса классификатора, итоговый ансамбль и разбор шага на примере с формулами.

20 июня 20267 минут
Алгоритм CatBoost: бустинг с обработкой категорий

Алгоритм CatBoost: бустинг с обработкой категорий

Алгоритм CatBoost простыми словами: упорядоченный бустинг против сдвига прогноза, кодирование категориальных признаков через ordered target statistics, симметричные деревья и разбор типовых задач.

20 июня 20268 минут
Алгоритм LightGBM: быстрый градиентный бустинг

Алгоритм LightGBM: быстрый градиентный бустинг

Алгоритм LightGBM простыми словами: рост дерева по листьям против роста по уровням, гистограммы признаков, GOSS и EFB, настройка num_leaves и learning rate, борьба с переобучением и разбор задач.

20 июня 20268 минут
Алгоритм policy gradient: как обучают стратегию напрямую

Алгоритм policy gradient: как обучают стратегию напрямую

Разбираем алгоритм policy gradient: теорема о градиенте, формула REINFORCE, роль baseline и log-производной. С примерами вывода, типовыми ошибками и интерактивным расчётом сходимости.

20 июня 20267 минут
Алгоритм UMAP: как работает снижение размерности

Алгоритм UMAP: как работает снижение размерности

Алгоритм UMAP простыми словами: как метод строит граф ближайших соседей, оптимизирует низкоразмерное вложение, чем отличается от t-SNE и как подобрать n_neighbors и min_dist для визуализации данных.

20 июня 20268 минут
Алгоритм XGBoost: как работает градиентный бустинг

Алгоритм XGBoost: как работает градиентный бустинг

Алгоритм XGBoost простыми словами: градиентный бустинг над деревьями решений, формула аддитивной модели, learning rate, регуляризация, ранняя остановка и разбор типовых задач.

19 июня 20268 минут