Решён
Для чего используются метрики в машинном обучении?

Начинаю разбираться с ML, прохожу курс на Stepik. Дошел до раздела про оценку моделей и там куча метрик: accuracy, precision, recall, F1, ROC-AUC и еще штук десять.

В курсе объясняют что считает каждая, но не очень понятно почему их так много и когда какую использовать. Для чего вообще нужны метрики в машинном обучении - разве нельзя смотреть просто на точность (accuracy)?

Решение
76
Эксперт • 4 ответа

Accuracy - ловушка. Объясню на примере.

Представь что делаешь модель для обнаружения рака по анализу крови. В датасете 1000 человек, из них 10 больны. Модель которая просто говорит "все здоровы" - тупая модель без единой строки логики - получает accuracy 99%. Потому что 990 из 1000 она угадала правильно.

Но она пропустила всех 10 больных. Эта модель убивает людей, и при этом accuracy у нее почти идеальная.

Вот тут и нужны recall (как много реальных больных ты нашел) и precision (сколько из тех кого ты назвал больными реально больны). F1 их балансирует. ROC-AUC показывает насколько хорошо модель ранжирует вероятности вне зависимости от порога.

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

Аватар Рустам Алиев

Вот это объяснение! Сразу все встало на место. Спасибо большое.

26
Участник • 3 ответа

Кратко: accuracy работает только на сбалансированных классах. Если классы несбалансированы - смотри на F1 или Matthews Correlation Coefficient. Для ранжирования - ROC-AUC. Для регрессии - MAE/RMSE/R2.

Правило: перед выбором метрики спроси себя что именно тебе важно минимизировать - ложноположительные или ложноотрицательные ответы.

36
Эксперт • 1 ответ

Добавлю код который я сам держу под рукой для быстрого расчета основных метрик классификации:

from sklearn.metrics import (
    accuracy_score,
    precision_score,
    recall_score,
    f1_score,
    roc_auc_score,
    classification_report
)

def evaluate_classifier(y_true, y_pred, y_prob=None):
    print(f"Accuracy:  {accuracy_score(y_true, y_pred):.4f}")
    print(f"Precision: {precision_score(y_true, y_pred):.4f}")
    print(f"Recall:    {recall_score(y_true, y_pred):.4f}")
    print(f"F1-score:  {f1_score(y_true, y_pred):.4f}")
    if y_prob is not None:
        print(f"ROC-AUC:   {roc_auc_score(y_true, y_prob):.4f}")
    print("n" + classification_report(y_true, y_pred))

classification_report кстати выдает precision/recall/f1 по каждому классу отдельно - очень удобно когда классов больше двух.

23
Эксперт • 1 ответ

Метрики - это функция потерь для людей, грубо говоря. Loss функция оптимизируется во время обучения, но она абстрактная - binary crossentropy не очень понятна менеджеру. Метрики переводят качество модели в человеческие единицы.

Еще один важный момент которого не хватает в курсах: метрику выбирают под бизнес-задачу ДО обучения модели, а не после. Иначе можно подобрать метрику под результат, что является читерством и прямой дорогой к деплою плохой модели в прод.

1
Участник • 2 ответа

ну вроде как accuracy это процент правильных ответов, а остальные метрики смотрят на ошибки по-разному... precision это когда модель говорит "да" а recall когда правильно ловит все "да" в данных, что ли? не уверен что точно объяснил

11
Участник • 4 ответа

Для задач с несбалансированными классами рекомендую также смотреть на PR-curve (precision-recall curve), а не только ROC-AUC. ROC-AUC оптимистично завышается при сильном дисбалансе классов потому что учитывает большое количество истинно-отрицательных примеров. PR-curve честнее показывает реальное качество на редком классе.

7
Участник • 1 ответ

Та же история была когда начинал. Потом написал себе шпаргалку которую до сих пор открываю:

  • Классы примерно равные + важна общая точность: accuracy
  • Классы неравные: F1 или balanced accuracy
  • Важно не пропустить ни одного позитивного: recall (диагностика болезней, мошенничество)
  • Важно не ловить лишний раз ложную тревогу: precision (спам-фильтр)
  • Нужна общая картина по порогам: ROC-AUC
  • Редкий класс очень важен: PR-AUC

Написать ответ

Премодерация гостей

Вы отвечаете как гость. Ваш ответ будет скрыт до проверки модератором. Чтобы ответ появился сразу и вы получали репутацию — войдите в аккаунт.

Будьте вежливы и соблюдайте правила платформы.