Аналитика12 октября 2026 г.

Матрица ошибок: как вручную проверить precision и recall

Автор
Ненашев А.
На чтение
5 мин
Дата обновления
12.10.2026
Старт:С 8 сентября
Срок обучения:24 часа
Машинное обучение для анализа естественного языка (NLP)
Научитесь применять машинное обучение для анализа текстов и решения реальных задач NLP. Курс сочетает теорию и практику: от предобработки текстов до работы с BERT и GPT. Освойте современные методы обработки естественного языка (NLP) и научитесь применять их в проектах. Уникальность — акцент на практику с использованием Python и предобученных моделей. Тренинг по обработке естественного языка с помощью машинного обучения предназначен для тех, кто хочет познакомиться со сложными методами обработки текстовых данных. Он включает в себя необходимый минимум теории и большой объем практических занятий, позволяющих участникам овладеть необходимыми навыками для работы в области анализа данных. К каждому модулю предлагаются задания для самостоятельного выполнения - домашние работы. В рамках тренинга участники изучат методы преобразования текстовых данных, такие как стемминг, лемматизация и векторизация, а также базовые задачи, которые могут быть решены с помощью методов машинного обучения, такие как классификация, суммаризация текстов, выделение имен и другие. Будет уделено особое внимание практическому применению методов машинного обучения на языке Python с использованием современных нейросетей, таких как FastText, BERT и GPT-2.
Подробнее
42 000 ₽42 900 ₽
#COURSE##INNER#

Матрица ошибок: как вручную проверить precision и recall

Если в отчете по классификатору вы видите только два числа — precision и recall — их полезно хотя бы один раз проверить вручную. Так быстрее становится понятно, где именно ошибается модель: она слишком часто кричит «спам» или, наоборот, пропускает нежелательные сообщения. На маленьком наборе это делается без формул на полстраницы: нужно заранее выбрать положительный класс, разложить ответы по четырем ячейкам матрицы ошибок и только потом считать доли.

Сначала задайте положительный класс

В бинарной классификации метрики precision и recall считаются не «вообще», а относительно положительного класса. В задаче фильтрации писем им обычно делают спам. Это удобно: тогда обе метрики отвечают на вопрос, насколько хорошо модель находит именно спам, а не обычные сообщения.

Это не формальность. Если поменять положительный класс на «не спам», те же восемь ответов дадут другие TP, FP, FN и TN. Формулы не изменятся, но смысл чисел станет другим. Поэтому первое действие перед ручной проверкой простое: на листе или в таблице явно записать положительный класс = спам. Если вы пользуетесь библиотекой, там тоже важно понимать, какой класс она считает положительным по умолчанию.

Подготовьте восемь ответов для сверки

Учебный пример. Возьмем восемь коротких сообщений. У каждого есть истинная метка от человека и предсказание модели. Нам не нужны вероятности, только итоговый ответ: «спам» или «не спам».

№СообщениеИстинная меткаПредсказание модели
1Купон на скидку, только сегодняспамспам
2Созвон перенесен на 16:00не спамне спам
3Вы выиграли подарок, подтвердите номерспамспам
4Счет за март готовне спамспам
5Фото с командной встречине спамне спам
6Последний день акции, откройте ссылкуспамне спам
7Бесплатная доставка без условийспамне спам
8Заберите приз до полуночиспамспам

Здесь уже видно, что модель ошибается в обе стороны. Она один раз назвала обычное письмо спамом и дважды пропустила реальный спам. Но для метрик этого наблюдения мало: нужно точно разнести все восемь сообщений по четырем категориям.

Заполните матрицу ошибок вручную

У матрицы ошибок всего четыре ячейки. Так как положительный класс у нас — спам, читаем каждое сообщение так:

  1. TP — реальный спам, и модель сказала «спам».
  2. FP — на самом деле не спам, но модель сказала «спам».
  3. FN — на самом деле спам, но модель сказала «не спам».
  4. TN — на самом деле не спам, и модель сказала «не спам».

Теперь пройдемся по примеру. Сообщения 1, 3 и 8 — это TP. Сообщение 4 — FP. Сообщения 6 и 7 — FN. Сообщения 2 и 5 — TN. Получаем такую матрицу:

Предсказано: спамПредсказано: не спам
На самом деле: спамTP = 3FN = 2
На самом деле: не спамFP = 1TN = 2

Полезная проверка: сумма всех ячеек должна совпасть с числом объектов. Здесь 3 + 2 + 1 + 2 = 8, значит, мы никого не потеряли. Еще одна практическая мелочь: в разных инструментах строки и столбцы матрицы могут идти в разном порядке. При ручной проверке смотрите не на позицию ячейки, а на подписи осей.

Посчитайте precision и recall без путаницы

Когда TP, FP, FN и TN готовы, сами формулы короткие:

  • precision = TP / (TP + FP)
  • recall = TP / (TP + FN)

Подставим наши числа. Precision = 3 / (3 + 1) = 3 / 4 = 0,75. Recall = 3 / (3 + 2) = 3 / 5 = 0,6. Эти доли похожи по виду, поэтому их часто путают, но знаменатели у них разные.

Проще запомнить смысл, а не форму записи. Precision отвечает на вопрос: «Из всех сообщений, которые модель назвала спамом, какая доля действительно была спамом?» У нас модель пометила спамом 4 сообщения: 1, 3, 4 и 8. Из них настоящего спама было 3, значит точность срабатывания на положительном классе — 0,75.

Recall отвечает на другой вопрос: «Из всех реальных спам-сообщений какую долю модель вообще нашла?» Настоящего спама здесь 5 сообщений: 1, 3, 6, 7 и 8. Модель поймала только 3 из них, поэтому полнота — 0,6. Полезная шпаргалка такая: precision смотрит на предсказанные “плюсы”, recall — на реальные “плюсы”.

Отдельно важно понять случаи деления на ноль. Если модель вообще ни разу не предсказала спам, то TP + FP = 0, и precision на этой выборке не определяется. Если в проверочном наборе не было ни одного реального спама, то TP + FN = 0, и уже recall не определяется. Некоторые библиотеки в таких ситуациях возвращают 0 или предупреждение по настройкам, но для ручной проверки полезнее писать словами: «метрика не определяется на этой выборке», а рядом оставлять сами счетчики.

Почему эти числа не обещают качество на новых данных

Матрица ошибок честно описывает только то, что произошло на этих восьми сообщениях. Она не обещает, что на следующей неделе модель даст те же 0,75 и 0,6. Выборка маленькая, поэтому одна-две записи заметно меняют итог. Например, если бы сообщение 6 модель распознала как спам, получилось бы TP = 4, FN = 1, и recall вырос бы с 0,6 до 0,8. А если бы сообщение 4 не было ложной тревогой, precision стал бы 3 / 3 = 1,0.

Есть и вторая причина не переоценивать метрики: состав данных меняется. На одном наборе может быть много рекламных сообщений, на другом — почти одни обычные письма. Тогда даже похожее поведение модели даст другие доли. Поэтому ручной расчет полезен не как «финальная правда о модели», а как способ проверить логику оценки: правильно ли выбран положительный класс, не перепутаны ли знаменатели, есть ли у вас вообще достаточный и отдельно проверочный набор.

Практический вывод простой. Если вы хотите проверить precision и recall без калькулятора ошибок, действуйте в одном порядке: сначала задайте положительный класс, затем вручную соберите TP/FP/FN/TN, проверьте сумму объектов и только после этого считайте доли. На маленьком примере это занимает несколько минут и быстро показывает, где именно вы перепутали смысл метрик.

Если хотите потренировать этот навык на задачах обработки текста, в карточке курса по NLP указано, что программа включает валидацию данных, оценку качества алгоритмов, метрики качества, разделение набора данных и задачи классификации текстов со Scikit-learn. При выборе обучения полезно проверить для себя три вещи: есть ли в программе отдельный блок про метрики, будет ли самостоятельная практика на размеченных текстах и сможете ли вы по итогам сами объяснить расхождение между precision и recall на конкретном наборе.

Курсы

147504
0,0
0 отзывов
Машинное обучение для анализа естественного языка (NLP)
  • С 8 сентября
  • 24 часа
  • с преподавателем
  • сертификат
42 000 ₽42 900 ₽
-2%
Перейти на сайт