Привет, Хабр! Меня зовут Александр Троицкий, я автор канала AI для чайников, и я расскажу про метрики классификации! Само собой, в интернете очень много материала про эти метрики, но я попробую описать их максимально простым языком с простыми примерами.
Зачем вообще нужны метрики в моделях ИИ? Чаще всего их используют, чтобы сравнивать модели между собой, абстрагируясь от бизнес метрик. Если вы будете смотреть только на бизнес-метрики (например, NPS клиентов или выручка), то можете упустить из-за чего реально произошло снижение или повышение показателей вашего бизнеса. Например, вы сделали новую версию модели лучше предыдущей (метрики модели лучше), но в то же самое время пришёл экономический кризис и люди перестали покупать ваш продукт (упала выручка). Если бы в этой ситуации вы не замеряли показатели модели, то могли бы подумать, что из-за новой версии модели упала выручка, хотя упала она не из-за модели. Пример довольно простой, но хорошо описывает почему нужно разделять метрики модели и бизнеса.
Для начала надо сказать, что метрики моделей бывают двух типов в зависимости от решаемой задачи:
1. Классификации - это когда вы предсказываете к чему именно относится то или иное наблюдение. Например, перед вами картинка и вы должны понять, что на ней, а ответа может быть три: это либо собачка, либо кошечка, либо мышка.
К одному из под-методов классификации относится бинарная классификация: либо единичка, либо нолик. То есть мы предсказываем либо перед нами кошечка, либо это не кошечка.
2. Регрессии - это когда вы предсказываете какую-то величину на основании предыдущего опыта. Например, вчера цена биткоина была на уровне 72.000 долларов, а на завтра вы прогнозируете ее на уровне 74.533 доллара. То есть вы ищете какое-то число.
Соответственно метрики, на которые смотрят при работе с моделями тоже разные. В этом посте я расскажу именно про классификацию.
Для начала надо усвоить таблицу снизу. Она называется confusion matrix (матрица ошибок). Допустим, наша модель предсказывает купят ли некие люди слона. Потом мы пошли продавать им слона и оказалось, что часть людей слона купили, а часть - не купили.
Так вот результаты такого исследования можно разбить на четыре группы:
Модель сказала, что человек купит слона и он купил слона! -> True Positive (TP)
Модель сказала, что человек не купит слона, а он взял и купил слона! -> False Negative (FN)
Модель сказала, что человек купит слона, но он не купил его, когда ему предложили -> False Positive (FP)
Модель сказала, что человек не купит слона. И он действительно его не купил -> True Negative (TN)
Теперь давайте разберем самую простую и базовую метрику качества, про которую чаще всего говорят заказчики, не понимающие в ML. Называется она accuracy или точность. Смотрим выше на confusion matrix и запоминаем как считается точность модели:
Accuracy = (TP+TN)/(TP+TN+FP+FN)
Accuracy используют редко, потому что она дает плохое представление о качестве модели, если у нас не сбалансированны классы. Например, у нас есть 100 картинок котиков и 10 картинок собачек. Пускай для упрощения скажем, что котики - это 0, а собачки - это 1 (перейдем к бинарной классификации). В данном примере котики и собаки - это два класса. Собак меньше, чем котиков в 10 раз - значит выборка из картинок не сбалансирована.
Например, наша модель правильно определила 90 котиков из 100. Получается True Negative = 90, False Negative = 10.
Еще наша модель определила правильно 5 собачек из 10. Получается True Positive = 5, False Positive = 5.
Подставив данные в нашу формулу получим, что accuracy тут равен 86,4. Однако если бы мы просто сказали, что на всех картинках котики, то получили бы accuracy 90, хотя для этого и никакой модели и не нужно. И вот казалось бы, угадывая достаточно много картинок (аж 86%!) наша модель на самом деле плохая.
Precision = TP / (TP + FP) и показывает долю объектов, названных нашей моделью положительными и при этом действительно являющимися положительными.
Recall = TP / (TP + FN) и показывает нам какую долю объектов положительного класса из всех объектов положительного класса нашел алгоритм.
Эти метрики адекватнее показывают качество модели, чем Accuracy, но имеют ряд недостатков. Например, вы можете изменять результат обоих меток просто двигая уровень отсечения по вероятности отношения к классу.
Если вы любите покопаться в Excel таблице, то вот Excel с формулами и примерами.
Иногда во всех этих метриках можно запутаться, а алгоритмы машинного обучения устроены таким образом, что чаще всего умеют оптимизировать какую-то одну метрику качества. Именно поэтому стали придумывать показатели, которые характеризуют одновременно и Precision и Recall, и называются эти показатели F-скором. F-скоров бывает несколько типов, я вам расскажу про самый базовый расчет, который называется F1-скор:
F1 = 2 * (Precision * Recall) / (Precision + Recall)
Таким образом F1 показывает одновременно насколько хорошо модель находит объекты положительного класса из всех объектов положительного класса и какая доля из тех, кого алгоритм назвал положительным классом, действительно являются положительным классом.
Пожалуй, самой популярной метрикой для бинарной классификации все же является ROC-AUC. Она не требует настройки с уровнем отсечения и хорошо подходит для несбалансированной выборки. Предлагаю разобраться с ее расчетом пошагово на примере с покупкой слона.
Например, у нас есть 10 человек, из них купит слона 4 человека, соответственно 6 человек слона не купят. Мы нашей моделью определяем вероятность покупки слона каждым из этих людей.
Итак, у нас есть вероятность покупки слона и исход события (таблица выше).
Посчитав количество положительных исходов (а их тут 4) и отрицательных исходов (их тут 6 штук), нарисуем табличку высотой 4 и шириной 6. Площадь таблички получается 24.
Расположим вероятность покупки слона от самой большой до самой маленькой. Будем идти сверху вниз по вероятности: если купил слона, то ставим 1 на клеточку выше (начинаем с точки 0,0), если не купил, то ставим 1 на клеточку правее. Правее всех полученных единичек ставим 1 до конца матрицы. Итак наши шаги будут выглядеть следующим образом:
Давай попробуем сделать первый шаг вверх:
Делаем второй шаг снова вверх, потому что мы угадали с нашим предсказанием снова. Получаем:
На третий раз мы не угадали с предсказанием, поэтому идем вправо, получаем матрицу:
На четвертый раз снова угадываем! Идем единичкой наверх.
Используя дальше такую логику получаем матрицу:
Ставим ниже единичек - единички, получаем:%:
Суммируя единички, мы получаем 19. Делим 19 на общее количество ячеек в матрице (4 * 6), получается:
ROC-AUC = 19 / 24 = 79%
В следующей статье я продолжу рассказывать про метрики ИИ, в том числе коснусь метрик регрессии: MSE, RMSE, MAR, R-квадрат, MAPE, SMAPE.
Если вам интересно знать про ИИ и машинное обучение больше, чем рядовой человек, но меньше, чем data scientist, то подписывайтесь на мой канал в Телеграм. Я пишу редко, но по делу: AI для чайников. Подписывайтесь!