ROC-кривая и AUC
В прошлом уроке мы двигали порог и видели: precision и recall обмениваются. Но порогов бесконечно много, и привязываться к одному не хочется. ROC-кривая показывает поведение классификатора сразу при всех порогах, а AUC сводит его качество в одно число. Двигайте порог и разделимость классов — кривая и точка живут вживую.
Порог двигает жёлтую точку по кривой. Разделимость лучше — кривая жмётся к левому верхнему углу, площадь под ней (AUC) растёт. AUC = 0.5 (диагональ) — модель не лучше монетки.
Кривую строят так: перебирают все пороги от самого строгого к самому мягкому и для каждого считают две доли из матрицы ошибок — FPR (доля ложных срабатываний, по горизонтали) и TPR (доля пойманного спама, по вертикали). Каждый порог даёт одну точку; соединённые, они и образуют ROC-кривую. Жёлтая точка — текущий порог; двигайте ползунок и смотрите, как она едет по кривой.
AUC — стандартная метрика сравнения классификаторов: по ней выбирают модели в кредитном скоринге, медицине, антифроде. Удобно, что AUC не зависит ни от порога, ни от того, насколько класс редкий, — поэтому она честнее «доли верных ответов», которая обманывает на дисбалансе.
Но AUC — это про ранжирование в целом, а не про конкретное решение. Выбрав модель по AUC, рабочую точку (порог) всё равно ставят отдельно: по тому, что дороже — пропуск или ложное срабатывание. На сильно несбалансированных задачах вдобавок смотрят PR-кривую (precision против recall).
Из радаров ROC перекочевала в медицину (насколько тест отличает больных от здоровых), а оттуда — во всё машинное обучение: детекторы болезней, антифрод, рекомендательные системы, кредитные модели.
Когда в статье или дашборде пишут «AUC 0.87», читают это так: возьми случайного «положительного» и случайного «отрицательного» — в 87% случаев модель поставит первому счёт выше. Удобный единый язык для качества классификаторов.