Sobes.tech
Back to questions
Middle — Senior
13

Почему нельзя напрямую оптимизировать accuracy?

Companies where asked
СБЕРСБЕР

Answer from AI

sobes.tech AI

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

Accuracy неудобно напрямую оптимизировать, потому что это дискретная и недифференцируемая метрика. Обычно модель обучают минимизировать гладкую surrogate-loss, например log loss или hinge loss, а accuracy используют уже для оценки качества. Кроме того, accuracy плохо работает на несбалансированных данных, поэтому может вводить в заблуждение.

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

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

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

В задаче спама 99% писем — обычные, 1% — спам. Если модель всегда предсказывает «не спам», accuracy будет 99%, хотя полезность такой модели почти нулевая.

from sklearn.metrics import accuracy_score, log_loss

y_true = [0, 0, 0, 0, 1]
y_pred = [0, 0, 0, 0, 0]  # всегда предсказываем majority class
y_prob = [0.95, 0.9, 0.92, 0.97, 0.1]

print("accuracy:", accuracy_score(y_true, y_pred))
print("logloss:", log_loss(y_true, y_prob))

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

Код показывает, что accuracy может быть высокой даже у бесполезного классификатора. В примере модель всегда выбирает класс 0, и по accuracy она ошибается только на одном объекте из пяти. Но по log loss видно, что вероятности на позитивном классе плохие, и такая модель не умеет уверенно отличать спам от обычных писем. Именно поэтому при обучении обычно оптимизируют loss, а accuracy считают отдельно на валидации.

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

  • Accuracy — это метрика качества, а не удобная цель для градиентной оптимизации.
  • Она недифференцируема и меняется скачками, поэтому по ней сложно строить обучение.
  • Для обучения используют гладкие функции потерь: log loss, cross-entropy, hinge loss и т. п.
  • На несбалансированных данных accuracy может быть обманчиво высокой.
  • Для выбора модели лучше смотреть на набор метрик: precision, recall, F1, ROC-AUC, PR-AUC.