Accuracy vs F1-score
Карьерник — квиз-тренажёр в Telegram с 1500+ вопросами для собесов аналитика. SQL, Python, A/B, метрики. Бесплатно.
Зачем это различать
На собеседовании ML-вопрос уровня middle+: «accuracy 99% — это хорошая модель?». Правильный ответ: «зависит». Если классы сбалансированы — да. Если imbalanced (например, 1% fraud) — accuracy 99% можно получить, просто сказав «всегда 0». Бесполезная модель с идеальной метрикой.
Вот почему нужен F1-score и другие метрики. Они не обманывают на несбалансированных данных. Когда работаете с churn prediction, fraud detection, rare disease — accuracy точно недостаточно.
В статье:
- Формулы и интуиция
- Когда accuracy ок
- Когда F1 нужен
- Precision, recall — из чего F1
- ROC AUC как альтернатива
- Practical trade-offs
Короткий ответ
- Accuracy = (TP + TN) / Total — доля правильных предсказаний
- F1-score = гармоническое среднее precision и recall
Accuracy работает на сбалансированных классах. F1 — когда классы имбалансированы.
Пример когда accuracy обманывает
Классификация fraud:
- 990 legit транзакций
- 10 fraud
Модель, которая всегда говорит «не fraud»:
- Accuracy = 990 / 1000 = 99%
Но модель не поймала ни одной fraud-транзакции. Метрика 99% — обман.
Precision и Recall
Precision
Precision = TP / (TP + FP)«Из предсказанных как fraud — сколько реально fraud?»
Высокая precision → мало false positives.
Recall (sensitivity)
Recall = TP / (TP + FN)«Из реальных fraud — сколько поймали?»
Высокий recall → мало false negatives.
F1-score
F1 = 2 × (Precision × Recall) / (Precision + Recall)Гармоническое среднее. Высокий только если оба высокие.
Для fraud пример:
- Precision = 80% (из предсказанных fraud — 80% настоящие)
- Recall = 60% (поймали 60% реальных fraud)
- F1 = 2 × 0.8 × 0.6 / (0.8 + 0.6) = 0.686
Когда использовать что
Accuracy подходит
- Сбалансированные классы (50/50 или 40/60)
- Все классы одинаково важны
- Простая классификация (кот vs собака)
F1 / precision / recall — для imbalanced
- Fraud detection (1% fraud)
- Rare disease diagnosis (1% positive)
- Churn в стабильном продукте (5% churn)
- Spam filter
Precision важнее
Когда false positives дорого:
- Spam: лучше пропустить spam, чем пометить важное
- Medical: лучше перепроверить, чем ложная тревога
Recall важнее
Когда false negatives дорого:
- Fraud: лучше проверить legit, чем пропустить fraud
- Cancer screening: лучше ложная тревога, чем пропустить рак
F-beta score
Обобщение F1 с весом:
F_beta = (1 + β²) × (Precision × Recall) / (β² × Precision + Recall)- β = 1 → F1 (баланс)
- β = 0.5 → F0.5 (precision важнее)
- β = 2 → F2 (recall важнее)
Confusion matrix
Полная картина:
Predicted
0 1
Actual 0 [ TN | FP ]
1 [ FN | TP ]Из неё выводятся все метрики.
ROC AUC — альтернативная метрика
ROC AUC = площадь под ROC curve (TPR vs FPR).
- AUC = 0.5 → случайная модель
- AUC = 1.0 → идеальная
- AUC = 0.8 → хорошая
Плюс: threshold-independent (F1 зависит от threshold 0.5). Минус: optimistic на imbalanced (лучше PR-AUC).
В Python
from sklearn.metrics import accuracy_score, f1_score, precision_score, recall_score, classification_report
y_true = [0, 0, 1, 1, 0, 1]
y_pred = [0, 1, 1, 1, 0, 0]
accuracy_score(y_true, y_pred) # 0.667
precision_score(y_true, y_pred) # 0.667
recall_score(y_true, y_pred) # 0.667
f1_score(y_true, y_pred) # 0.667
# всё сразу
print(classification_report(y_true, y_pred))На собесе
«Accuracy 99% — хорошо?» Зависит от баланса классов. Check precision + recall.
«Что такое F1?» Гармоническое среднее precision и recall.
«Что важнее в fraud — precision или recall?» Recall обычно (лучше перепроверить, чем пропустить fraud).
«F1 vs ROC AUC?» F1 — threshold-specific. ROC AUC — общая.
Частые ошибки
1. Accuracy на imbalanced
Классический фейл. Всегда смотрите precision/recall на imbalanced.
2. Оптимизировать F1 без context
F1 — компромисс. Иногда нужно только recall (медицина) или только precision (spam).
3. Макро vs Micro F1
Для multi-class:
- Macro: среднее F1 по классам (все равнозначны)
- Micro: per-sample, взвешенное
Выбирайте осознанно.
4. Threshold 0.5 default
Optimize threshold под бизнес-нужды, не брать 0.5 слепо.
Связанные темы
FAQ
F1 всегда лучше accuracy?
На imbalanced — да. На balanced — accuracy тоже ок.
Можно оба?
Конечно. Репортите всё: accuracy, precision, recall, F1, AUC.
Micro или Macro F1?
Macro — когда все классы равнозначны. Micro — когда больший вес большим классам.
F1 для regression?
Нет. F1 для classification. Для regression — RMSE, MAE.
Тренируйте ML — откройте тренажёр с 1500+ вопросами для собесов.