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

Какие знаешь метрики оценки классификаций?

2.3 Middle🔥 171 комментариев
#Machine Learning

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

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

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

Метрики оценки качества классификационных моделей

Матрица ошибок (Confusion Matrix)

Базовое понятие — матрица 2×2 (для бинарной классификации):

Предсказано PositiveПредсказано Negative
На самом деле PositiveTP (True Positive)FN (False Negative)
На самом деле NegativeFP (False Positive)TN (True Negative)

TP (True Positive) — правильно классифицировано как 1 FP (False Positive) — ошибочно классифицировано как 1 (ошибка Type I) FN (False Negative) — ошибочно классифицировано как 0 (ошибка Type II) TN (True Negative) — правильно классифицировано как 0

1. Точность (Accuracy)

Определение: доля правильных предсказаний.

Accuracy = (TP + TN) / (TP + FP + FN + TN)

Когда использовать: когда классы сбалансированы.

Когда НЕ использовать: когда классы дисбалансированы (например, 95% класс 0, 5% класс 1).

from sklearn.metrics import accuracy_score
y_true = [1, 0, 1, 1, 0, 1, 0, 0]
y_pred = [1, 0, 1, 0, 0, 1, 0, 1]
print(f"Accuracy: {accuracy_score(y_true, y_pred):.2%}")  # 75%

2. Precision (Точность предсказаний класса 1)

Определение: из предсказанных как 1, сколько на самом деле 1?

Precision = TP / (TP + FP)

Когда использовать: когда важно минимизировать ложные положительные (например, спам-фильтр, диагностика болезни).

Интерпретация: если precision = 0.8, то 80% писем, отнесённых в спам, действительно спам.

from sklearn.metrics import precision_score
y_true = [1, 0, 1, 1, 0, 1, 0, 0]
y_pred = [1, 0, 1, 0, 0, 1, 0, 1]
print(f"Precision: {precision_score(y_true, y_pred):.2%}")  # 67%

3. Recall (Полнота / Чувствительность)

Определение: из всех настоящих 1, сколько мы правильно предсказали?

Recall = TP / (TP + FN)

Синонимы: Sensitivity, True Positive Rate (TPR)

Когда использовать: когда важно не пропустить положительные случаи (например, поиск болезней, мошенничество).

Интерпретация: если recall = 0.9, то модель находит 90% всех положительных случаев.

from sklearn.metrics import recall_score
y_true = [1, 0, 1, 1, 0, 1, 0, 0]
y_pred = [1, 0, 1, 0, 0, 1, 0, 1]
print(f"Recall: {recall_score(y_true, y_pred):.2%}")  # 67%

4. F1-Score

Определение: гармоническое среднее Precision и Recall.

F1 = 2 × (Precision × Recall) / (Precision + Recall)

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

Особенность: F1 < min(Precision, Recall) при дисбалансе.

from sklearn.metrics import f1_score
y_true = [1, 0, 1, 1, 0, 1, 0, 0]
y_pred = [1, 0, 1, 0, 0, 1, 0, 1]
print(f"F1-Score: {f1_score(y_true, y_pred):.2%}")  # 67%

5. ROC-AUC (Area Under Curve)

Определение: площадь под кривой ROC, которая показывает trade-off между TPR и FPR.

Формулы:

  • TPR (True Positive Rate) = TP / (TP + FN) = Recall
  • FPR (False Positive Rate) = FP / (FP + TN)

Интерпретация:

  • AUC = 1.0 — идеальная классификация
  • AUC = 0.5 — случайное предсказание
  • AUC < 0.5 — хуже, чем случайное
from sklearn.metrics import roc_auc_score, roc_curve
import matplotlib.pyplot as plt

y_true = [1, 0, 1, 1, 0, 1, 0, 0]
y_pred_proba = [0.9, 0.1, 0.8, 0.3, 0.2, 0.7, 0.4, 0.1]

auc = roc_auc_score(y_true, y_pred_proba)
print(f"ROC-AUC: {auc:.2%}")

fpr, tpr, _ = roc_curve(y_true, y_pred_proba)
plt.plot(fpr, tpr, label=f'AUC = {auc:.2f}')
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.legend()
plt.show()

6. Precision-Recall AUC

Когда использовать: при высоком дисбалансе классов (например, 99% класс 0, 1% класс 1).

Преимущество: более чувствительна к меньшинству класса, чем ROC-AUC.

from sklearn.metrics import precision_recall_curve, auc

y_true = [1, 0, 1, 1, 0, 1, 0, 0]
y_pred_proba = [0.9, 0.1, 0.8, 0.3, 0.2, 0.7, 0.4, 0.1]

precision, recall, _ = precision_recall_curve(y_true, y_pred_proba)
pr_auc = auc(recall, precision)
print(f"PR-AUC: {pr_auc:.2%}")

7. Matthews Correlation Coefficient (MCC)

Формула:

MCC = (TP×TN - FP×FN) / √((TP+FP)(TP+FN)(TN+FP)(TN+FN))

Особенность: учитывает все четыре элемента матрицы ошибок, хорошо работает при дисбалансе.

Диапазон: от -1 (полное несовпадение) до +1 (идеальное совпадение).

from sklearn.metrics import matthews_corrcoef

y_true = [1, 0, 1, 1, 0, 1, 0, 0]
y_pred = [1, 0, 1, 0, 0, 1, 0, 1]
print(f"MCC: {matthews_corrcoef(y_true, y_pred):.3f}")

8. Specificity (Специфичность)

Определение: из всех настоящих 0, сколько мы правильно предсказали?

Specificity = TN / (TN + FP) = 1 - FPR

Когда использовать: когда важно минимизировать false alarms.

9. Logarithmic Loss (Log-Loss / Кросс-энтропия)

Формула: Log-Loss = -1/n × Σ [y_i × log(p_i) + (1 - y_i) × log(1 - p_i)]

Когда использовать: когда нужно оценить вероятностные предсказания (не только класс).

Интерпретация: чем меньше, тем лучше. Штрафует за уверенные неправильные предсказания.

from sklearn.metrics import log_loss

y_true = [1, 0, 1, 1, 0]
y_pred_proba = [0.9, 0.1, 0.8, 0.3, 0.2]
print(f"Log-Loss: {log_loss(y_true, y_pred_proba):.3f}")

10. Cohen's Kappa

Определение: мера согласия, с учётом вероятности случайного совпадения.

Kappa = (Accuracy - Expected Accuracy) / (1 - Expected Accuracy)

Когда использовать: для оценки согласия между аннотаторами или классификаторами.

from sklearn.metrics import cohen_kappa_score

y_true = [1, 0, 1, 1, 0, 1, 0, 0]
y_pred = [1, 0, 1, 0, 0, 1, 0, 1]
print(f"Cohen's Kappa: {cohen_kappa_score(y_true, y_pred):.3f}")

Полный пример с выводом всех метрик

from sklearn.metrics import classification_report, confusion_matrix
import numpy as np

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

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

# Подробный отчёт
print("\nОтчёт по метрикам:")
print(classification_report(y_true, y_pred))

Output:

Матрица ошибок:
[[4 1]
 [2 3]]

Отчёт по метрикам:
           precision    recall  f1-score   support
      0       0.67      0.80      0.73         5
      1       0.75      0.60      0.67         5
  accuracy                       0.70        10

Когда какую метрику выбирать?

СценарийМетрикаПричина
Сбалансированные классыAccuracyПростая интерпретация
Дисбаланс, важен минус ПОPrecision, F1Минимизируем false alarms
Дисбаланс, важен минус ООRecall, F1Не пропускаем положительные
Вероятностные предсказанияROC-AUC, Log-LossОцениваем калибровку
Очень высокий дисбалансPR-AUC, MCCЧувствительнее к меньшинству
Согласие аннотаторовCohen's KappaУчитываем случайность

Выбор метрики зависит от бизнес-целей, а не только от качества модели.

Какие знаешь метрики оценки классификаций? | PrepBro