← Назад к вопросам

Как рассчитать точность прогноза, используя матрицу ошибок?

1.3 Junior🔥 232 комментариев
#Метрики и оценка моделей

Комментарии (2)

🐱
claude-haiku-4.5PrepBro AI30 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Матрица ошибок (Confusion Matrix) и расчёт метрик точности

Матрица ошибок — это таблица, которая показывает, как хорошо модель классификации работает. Она содержит информацию о правильных и неправильных предсказаниях, разделённые по классам.

Структура матрицы ошибок (бинарная классификация)

Для задачи с двумя классами (позитивный/негативный):

                  Предсказано
              Положит.  Отрицат.
  Положит.      TP        FN
  Реально
  Отрицат.      FP        TN

Обозначения:

  • TP (True Positive) — корректно предсказано положительное (привычно говорить: истинно положительное)
  • FP (False Positive) — неверно предсказано положительное (ложные срабатывания)
  • TN (True Negative) — корректно предсказано отрицательное
  • FN (False Negative) — неверно предсказано отрицательное (пропуски)

Пример с реальными числами

Предположим, модель классифицирует 100 писем как спам или не спам:

                Предсказано
            Спам    Не спам
  Спам       50        5      (55 спамных писем)
Реально
  Не спам     3       42      (45 легитимных)

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

1. Accuracy (Точность) — доля правильных предсказаний

Accuracy = (TP + TN) / (TP + TN + FP + FN)
Accuracy = (50 + 42) / (50 + 42 + 3 + 5) = 92 / 100 = 0.92

Это самая простая метрика, но может быть обманчивой при дисбалансе классов.

2. Precision (Точность класса) — доля правильных предсказаний положительного класса

Precision = TP / (TP + FP)
Precision = 50 / (50 + 3) = 50 / 53 ≈ 0.94

Отвечает на вопрос: "Из всех предсказанных спамов, сколько на самом деле спам?"

Важно при: когда ошибочное предсказание положительного класса дорого стоит (например, отклонить хорошего клиента).

3. Recall (Полнота) — доля обнаруженных положительных примеров

Recall = TP / (TP + FN)
Recall = 50 / (50 + 5) = 50 / 55 ≈ 0.91

Отвечает на вопрос: "Из всех спамных писем, сколько модель обнаружила?"

Важно при: когда пропустить положительный класс дорого стоит (например, пропустить спам).

4. F1-Score — гармоническое среднее Precision и Recall

F1 = 2 * (Precision * Recall) / (Precision + Recall)
F1 = 2 * (0.94 * 0.91) / (0.94 + 0.91) ≈ 0.92

Объединяет обе метрики в одно число, полезна при дисбалансе классов.

5. Specificity (Специфичность) — доля корректно классифицированных отрицательных

Specificity = TN / (TN + FP)
Specificity = 42 / (42 + 3) = 42 / 45 ≈ 0.93

Реализация на Python

from sklearn.metrics import confusion_matrix, accuracy_score
from sklearn.metrics import precision_score, recall_score, f1_score
import numpy as np

y_true = [0, 1, 1, 0, 1, 1, 0, 0, 1, 0]
y_pred = [0, 1, 0, 0, 1, 1, 0, 1, 1, 0]

# Матрица ошибок
cm = confusion_matrix(y_true, y_pred)
print("Матрица ошибок:")
print(cm)

# Метрики
acc = accuracy_score(y_true, y_pred)
prec = precision_score(y_true, y_pred)
rec = recall_score(y_true, y_pred)
f1 = f1_score(y_true, y_pred)

print(f"Accuracy:  {acc:.3f}")
print(f"Precision: {prec:.3f}")
print(f"Recall:    {rec:.3f}")
print(f"F1-Score:  {f1:.3f}")

Расчёт вручную из матрицы

from sklearn.metrics import confusion_matrix

y_true = [0, 1, 1, 0, 1, 1, 0, 0, 1, 0]
y_pred = [0, 1, 0, 0, 1, 1, 0, 1, 1, 0]

tn, fp, fn, tp = confusion_matrix(y_true, y_pred).ravel()

accuracy = (tp + tn) / (tp + tn + fp + fn)
precision = tp / (tp + fp) if (tp + fp) > 0 else 0
recall = tp / (tp + fn) if (tp + fn) > 0 else 0
f1 = 2 * (precision * recall) / (precision + recall) if (precision + recall) > 0 else 0

print(f"Accuracy:  {accuracy:.3f}")
print(f"Precision: {precision:.3f}")
print(f"Recall:    {recall:.3f}")
print(f"F1-Score:  {f1:.3f}")

Когда использовать какую метрику

Accuracy:

  • Когда классы сбалансированы
  • Когда оба типа ошибок одинаково важны

Precision:

  • Когда важно избежать ложных срабатываний (spam detection, fraud)
  • Медицина: диагностика редкого заболевания

Recall:

  • Когда важно не пропустить положительные примеры
  • Безопасность: обнаружение угроз
  • Медицина: скрининг болезней

F1-Score:

  • Когда нужен баланс между Precision и Recall
  • При дисбалансе классов
  • Общая оценка производительности

Многоклассовая классификация

Для более чем 2 классов матрица становится NxN, и метрики рассчитываются усреднением:

# Micro: усредняем результаты по всем классам
f1_micro = f1_score(y_true, y_pred, average='micro')

# Macro: усредняем метрики каждого класса
f1_macro = f1_score(y_true, y_pred, average='macro')

# Weighted: усредняем с учётом количества примеров
f1_weighted = f1_score(y_true, y_pred, average='weighted')

Матрица ошибок и соответствующие метрики — фундамент для оценки качества модели классификации.