Метрики качества
Модель обучена — но хороша ли она? Ответ целиком зависит от того, чем мерить. Неправильная метрика — самый дешёвый способ построить бесполезную модель с «отличными» цифрами, и на собеседовании это проверяют почти всегда.
Интуиция: почему accuracy обманывает
Доля правильных ответов (accuracy) — самая понятная метрика, и именно поэтому она опасна. Представь скрининг редкой болезни: болен 1 человек из 100. Модель, которая всегда отвечает «здоров», угадывает в 99% случаев — accuracy 0.99 при полной бесполезности: ни одного больного она не нашла. Это классическая ловушка дисбаланса классов (class imbalance): когда классы неравны, accuracy отражает в основном размер большинства, а не качество модели.
Матрица ошибок: четыре исхода
Бинарный классификатор может ошибаться двумя разными способами, и цена этих ошибок разная. Все исходы собирают в матрицу ошибок (confusion matrix):
- TP (true positive) — больной, названный больным. Попадание.
- FN (false negative) — больной, названный здоровым. Пропуск, часто самая дорогая ошибка.
- FP (false positive) — здоровый, названный больным. Ложная тревога.
- TN (true negative) — здоровый, названный здоровым.
Из этих четырёх чисел собираются главные метрики:
Точность (precision) отвечает на вопрос «из тех, кого мы назвали больными, сколько действительно больны?». Полнота (recall) — «из всех настоящих больных скольких мы нашли?». Между ними — фундаментальный компромисс (trade-off): модель обычно выдаёт не класс, а скор (score) — число от 0 до 1, и мы сами выбираем порог (threshold). Понизишь порог — поймаешь больше больных (recall растёт), но нахватаешь ложных тревог (precision падает). Повысишь — наоборот.
Чтобы сравнивать модели одним числом, precision и recall сворачивают в F1 — их гармоническое среднее:
Гармоническое, а не арифметическое, потому что оно жёстко штрафует перекос: при precision = 1 и recall = 0.01 среднее арифметическое даёт обнадёживающие 0.5, а F1 честно покажет ≈ 0.02.
ROC-кривая и AUC
Чтобы оценить модель сразу при всех порогах, строят ROC-кривую (receiver operating characteristic): для каждого порога откладывают долю пойманных больных TPR = recall по вертикали против доли ложных тревог FPR = FP / (FP + TN) по горизонтали. Идеальная модель прижимается к левому верхнему углу; случайная идёт по диагонали. Площадь под кривой — AUC (area under curve) — сворачивает всё в одно число с красивой интерпретацией: это вероятность того, что случайно взятый больной получит скор выше, чем случайно взятый здоровый. AUC = 0.5 — монетка, AUC = 1 — идеальное ранжирование.
Но у ROC есть слабость: FPR делится на число здоровых, и при дисбалансе 1:20 даже тысячи ложных тревог дают маленький FPR — кривая выглядит прекрасно, а precision в это время может быть 0.2. Поэтому при сильном дисбалансе смотрят на PR-кривую (precision–recall) и PR-AUC: precision реагирует на каждый лишний FP независимо от того, сколько всего негативов. Переключи режим в интерактиве: ROC почти не изменится, а precision при том же пороге рухнет.
Метрики регрессии — кратко
Когда предсказываем число, а не класс: MAE (mean absolute error) — средний модуль ошибки, устойчив к выбросам и читается «в среднем ошибаемся на N единиц»; RMSE (root mean squared error) — корень из среднего квадрата, сильнее штрафует большие промахи; R² — доля объяснённой дисперсии, «насколько мы лучше, чем предсказывать среднее». Подробнее о квадратичных потерях — в теме про линейную регрессию.
Метрику выбирает бизнес, а не датасаентист
Спам-фильтр: FP — важное письмо уехало в спам, катастрофа для пользователя; FN — один спам проскочил, мелочь. Значит, приоритет — precision, порог повыше. Скрининг рака: FN — пропущенный больной, это цена жизни; FP — лишнее обследование. Приоритет — recall, порог пониже. Одна и та же модель, противоположные настройки. Прежде чем считать метрики, спроси: какая ошибка дороже и во сколько раз?
- «Классы 1:100, accuracy 0.99 — модель хорошая?» — нет: столько же даёт константа «все здоровы». Смотри precision/recall, PR-AUC.
- «Что произойдёт с precision и recall при повышении порога?» — precision обычно растёт, recall падает: ловим меньше, но увереннее.
- «Как объяснить AUC?» — вероятность, что случайный позитив отранжирован выше случайного негатива; про конкретный порог AUC ничего не говорит.
- «Какую метрику взять для X?» — начни с цены ошибок FP и FN в деньгах/рисках, потом называй метрику, а не наоборот.