Собесов

Сценарий ML: F-beta vs F1 при асимметрии

ML / Data ScienceМетрики и оценкаЛёгкаяMiddle

Условие

В медицинском скрининге пропуск больного критичнее ложной тревоги. Какую метрику использовать вместо F1?

Решение

Подход

F1 даёт равный вес precision и recall: F1 = 2·P·R/(P+R).

F-beta даёт β² раз больший вес recall:

F_β = (1+β²)·P·R / (β²·P + R)

  • β=1: F1, симметрично.
  • β=2: F2, recall в 4 раза важнее. Подходит для медскрининга, fraud.
  • β=0.5: F0.5, precision в 4 раза важнее. Подходит для спам-фильтра (не хочется блокировать ham).

Реализация

from sklearn.metrics import fbeta_score, precision_recall_fscore_support
 
f2 = fbeta_score(y_true, y_pred, beta=2)
f05 = fbeta_score(y_true, y_pred, beta=0.5)
 
# Threshold optimization по F-beta
import numpy as np
def best_threshold_fbeta(y_true, y_prob, beta=2):
    thresholds = np.linspace(0.01, 0.99, 99)
    best_t, best_f = 0, 0
    for t in thresholds:
        pred = (y_prob >= t).astype(int)
        f = fbeta_score(y_true, pred, beta=beta)
        if f > best_f:
            best_t, best_f = t, f
    return best_t, best_f

Связь с cost matrix

F_β неявно предполагает, что cost FN = β² · cost FP (грубо). Это приближение реального cost-sensitive criteria. Точнее — expected cost минимизация (см. отдельную задачу).

Альтернативы

  • Recall@fixed precision: «recall при precision ≥ 0.8».
  • Precision@k: «precision среди top-k предсказаний».
  • PR-AUC: площадь под precision-recall кривой; лучше чем ROC при сильном дисбалансе.
  • MCC (Matthews correlation coefficient): балансирует все четыре класса confusion matrix.

Подводные камни

  1. F_β — это не cost matrix, это лишь reweighting. Для буквальных бизнес-costs лучше expected cost.
  2. F1 на сильно imbalanced (1%) почти всегда мал из-за низкого precision — это не значит, что модель плохая.
  3. F-beta не учитывает true negatives — может казаться, что модель плохая, хотя она хорошо отбирает negatives.
  4. Выбор β часто субъективен. Лучше: договориться с бизнесом про cost matrix → вывести threshold из неё, F-beta — fallback.
  5. Сравнение моделей по F1 на разных порогах — невалидно. Сравнивайте на edинном threshold-policy.

Эталонный ответ

F_β = (1+β²)·P·R/(β²·P+R), β>1 повышает вес recall, β<1 — precision. Для медскрининга F2 или F3. Лучше использовать expected cost matrix; F-beta — приближение через β² ≈ cost_FN/cost_FP.

Хочешь увидеть разбор?

Зарегистрируйся бесплатно — откроется развёрнутое решение этой задачи и ещё 4 на выбор.

Зарегистрироваться и увидеть разбор
Уже есть аккаунт? Войти