Sobes.tech
Назад к вопросам
Middle
11

Какие метрики качества классификации существуют?

Компании, где спрашивали
СБЕРСБЕР
филиппинский банк Salmon
AvitoAvito
ЯндексЯндекс
OZONOZON
ГазпромбанкГазпромбанк

Ответ от нейросети

sobes.tech AI

Что хотят услышать интервьюеры:

Для классификации обычно называют accuracy, precision, recall, F1-score, ROC-AUC и confusion matrix. Важно понимать, что не все метрики одинаково полезны при дисбалансе классов: accuracy может быть обманчивой, а precision и recall лучше отражают качество по каждому классу. Также важно уметь выбрать метрику под бизнес-задачу.

Определение:

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

Основные метрики для бинарной классификации:

  • Accuracy — доля правильных ответов среди всех объектов.
  • Precision — доля истинно положительных среди всех предсказанных положительных.
  • Recall — доля истинно положительных среди всех реально положительных.
  • F1-score — гармоническое среднее precision и recall.
  • ROC-AUC — качество ранжирования: насколько модель отделяет классы по скору.
  • Confusion matrix — таблица TP, FP, TN, FN, на основе которой строятся многие метрики.

Пример использования:

Для задачи спам-фильтра важно не пропускать спам, но и не удалять нормальные письма.
Если модель слишком часто помечает обычные письма как спам, precision будет низким. Если она пропускает много спама, recall будет низким. В таком случае часто смотрят на F1-score и confusion matrix, а не только на accuracy.

from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score, roc_auc_score, confusion_matrix

y_true = [1, 0, 1, 1, 0, 0, 1]
y_pred = [1, 0, 1, 0, 0, 1, 1]
y_proba = [0.9, 0.2, 0.8, 0.4, 0.1, 0.7, 0.95]

print("accuracy:", accuracy_score(y_true, y_pred))
print("precision:", precision_score(y_true, y_pred))
print("recall:", recall_score(y_true, y_pred))
print("f1:", f1_score(y_true, y_pred))
print("roc_auc:", roc_auc_score(y_true, y_proba))
print("confusion matrix:\n", confusion_matrix(y_true, y_pred))

Пояснение кода:

В этом примере:

  • y_true — реальные метки классов.
  • y_pred — предсказанные классы.
  • y_proba — вероятности положительного класса, нужны для ROC-AUC.
  • accuracy_score показывает общую долю верных ответов.
  • precision_score отвечает на вопрос: из всех предсказанных положительных сколько верны.
  • recall_score отвечает на вопрос: из всех реальных положительных сколько найдено.
  • f1_score балансирует precision и recall.
  • roc_auc_score оценивает, насколько хорошо модель ранжирует объекты.
  • confusion_matrix показывает количество TP, FP, TN, FN и помогает понять ошибки модели.

Ключевые моменты:

  • Accuracy полезна, но при дисбалансе классов может вводить в заблуждение.
  • Precision важна, когда дорогие ложноположительные срабатывания.
  • Recall важна, когда критично не пропустить положительный класс.
  • F1-score удобна, когда нужен баланс между precision и recall.
  • ROC-AUC хорошо подходит для оценки качества ранжирования по вероятностям.
  • Confusion matrix — базовый инструмент для интерпретации всех остальных метрик.