Какие знаешь метрики оценки классификаций?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Метрики оценки качества классификационных моделей
Матрица ошибок (Confusion Matrix)
Базовое понятие — матрица 2×2 (для бинарной классификации):
| Предсказано Positive | Предсказано Negative | |
|---|---|---|
| На самом деле Positive | TP (True Positive) | FN (False Negative) |
| На самом деле Negative | FP (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 | Учитываем случайность |
Выбор метрики зависит от бизнес-целей, а не только от качества модели.