Метрики и оценка качества
Учимся честно измерять качество модели и не обманываться одной метрикой.
Метрика — число, которое измеряет, насколько хорошо модель решает задачу на отложенных данных.
Зачем нужны метрики
Без измерения нельзя понять, стало ли лучше после дообучения. Метрики считают на валидации или тесте — данных, которые модель не видела при обучении. Иначе оценка будет завышенной (модель просто запомнила обучающую выборку).
Основные метрики классификации
| Метрика | Смысл |
| accuracy | доля верных ответов от всех |
| precision | из помеченных «да» — сколько действительно «да» |
| recall | из всех настоящих «да» — сколько нашли |
| F1 | баланс precision и recall |
Почему accuracy обманчива
Если 95% писем — не спам, модель, которая всегда отвечает «не спам», даст accuracy 95% — и при этом бесполезна. Посчитаем метрики честно на чистом Python (реально запускается):
y_true = [1, 0, 1, 1, 0, 0, 1, 0]
y_pred = [1, 0, 0, 1, 0, 1, 1, 0]
tp = sum(t == 1 and p == 1 for t, p in zip(y_true, y_pred))
fp = sum(t == 0 and p == 1 for t, p in zip(y_true, y_pred))
fn = sum(t == 1 and p == 0 for t, p in zip(y_true, y_pred))
tn = sum(t == 0 and p == 0 for t, p in zip(y_true, y_pred))
acc = (tp + tn) / len(y_true)
prec = tp / (tp + fp)
rec = tp / (tp + fn)
f1 = 2 * prec * rec / (prec + rec)
print("accuracy :", round(acc, 2))
print("precision:", round(prec, 2))
print("recall :", round(rec, 2))
print("F1 :", round(f1, 2))Вывод:
accuracy : 0.75 precision: 0.75 recall : 0.75 F1 : 0.75
Как работает под капотом
В transformers метрики подключают к Trainer через функцию compute_metrics, которая получает предсказания и истинные метки и возвращает словарь чисел. Часто используют библиотеку evaluate от Hugging Face — в ней десятки готовых метрик (accuracy, f1, BLEU для перевода, ROUGE для суммаризации). Trainer вызывает compute_metrics на каждой оценке и логирует результат, чтобы вы видели прогресс по эпохам.
Частые ошибки
- Оценивать на обучающей выборке. Это даёт ложно высокие числа; нужен отдельный тест.
- Смотреть только на accuracy при дисбалансе. При редком классе важнее precision/recall/F1.
- Путать метрику с loss. Loss оптимизируют при обучении, метрики — для понятной оценки качества.
Итог
- Метрики считают на отложенных данных, а не на обучающих.
- accuracy обманчива при дисбалансе классов.
- precision, recall и F1 дают более полную картину.
- В Trainer метрики подключают через
compute_metrics; готовые есть вevaluate.