Что такое precision и recall
Метрики в машинном обучении: precision, recall и не только
Почему я это написал. Долгое время я был бэкэнд разработчиком. Вращался среди коллег и прекрасно их понимал. Но бэкенд нужен и людям, занимающимся машинным обучением. В какой-то момент я попал в их логово. И вот тут я поднял, что вообще не понимаю их язык. Думаю, что не только я оказывался в такой ситуации, поэтому сейчас расскажу всё понятными словами для нормальных людей.
Немного про машинное обучение
ML работает всего с несколькими вещами:
Приведу пример. Допустим у вас есть яблоня. Каждый год вы ломаете голову, опрыскивать ли её от долгоносика. Решили обучить модель, что она вам предсказывала нашествия долгоносика.
Данные: Допустим, вы знаете только весенние температуры в виде одного числа. (Не важно, что это, допустим, просто средняя температура.) То есть у вас есть одна фича — температура.
Разметка У вас есть журнал по годам, где отмечено, был долгоносик или нет. То есть каждой температуре вы можете сопоставить «правильный» ответ. Обратите внимание, что одной и той же температуре могут соответствовать несколько ответов, они могут быть разными (за разные годы).
Модель Пусть у нас будет модель с одним параметром: пограничной температурой. Модель будет просто говорить «да», если температура выше какой-то черты и «нет» — если ниже. Можно было бы придумать модель с двумя параметрами (она бы смотрела на интервал), или ещё сложнее, но мы сейчас возьмём самую простую, для наглядности.
Предсказания Если применить модель к температурам (фичам), то получим предсказания.
Немного кода
Чтобы было с чем играть, вот вам код. Тут есть и данные, и модель, и всё о чём мы будем говорить.
Если это запустить, то мы получим метрики для разных моделей:
T — это параметр модели. То есть мы получили метрики, фактически, для 10 разных моделей.
Если раскомментировать dump() то будет видна детальная информация.
Сейчас мы со всем разберёмся.
TP, TN, FP, FN и друге буквы
Когда люди начинают жонглировать этими буквами, с непривычки, можно очень легко запутаться и потерять нить. Чтобы всё встало на свои места, нам понадобится ещё несколько букв и пара полезных соотношений.
Давайте посмотрим на входные данные (разметку, фактические наблюдения). Введём две буквы:
Теперь посмотрим на прогнозы модели. Здесь тоже есть positive и negative, но их сразу же делят на четыре группы:
Тут важно проникнуться простыми соотношениями:
Остановитесь тут и подумайте минуту.
Ну и, конечно, ясно что такое TP+FP (это все ответы «да», полученные от модели) и NT+FN (все ответы «нет»).
Ценность метрик
У нас появились первые метрики. Давайте посмотрим, на сколько они полезны.
Аналогично не работают и другие три метрики. Нужно что-то получше.
Accuracy
Первое, что приходит в голову: давайте поделим все правильные ответы на все вообще ответы.
Такая метрика уже лучше, чем ничего, но всё же, она очень плоха. Даже в моём примере (хотя я не подгонял специально числа) видно, что, с одной стороны, разумные модели имеют высокую точность, однако, побеждает по точности просто самая пессимистичная модель.
Вы можете поиграться с данными и посмотреть, как это происходит. Но понять смысл очень просто на другом примере. Допустим вы хотите предсказывать землетрясения (какое-то очень редкое явление). Ясно, что по этой метрике всегда будет побеждать модель, которая даже не пытается ничего предсказывать, а просто говорит всегда «нет». Те же модели, которые будут пытаться говорить когда-то «да», будут иногда ошибаться в позитивных прогнозах и сразу же терять очки.
Поэтому, про эту метрику вы, скорее всего, даже не услышите никогда. Я тут её упомянул только чтобы показать её неэффективность при, кажущейся, логичности.
Precision, recall и их друзья
Лично я чаще всего сталкивался именно с этими словами. При том, что, как мне кажется, это самые неудачные варианты. Я буду приводить альтернативные называния, которые, как мне кажется, на много лучше отражают суть.
Recall aka sensitivity, hit rate, or true positive rate (TPR)
Мне кажется, hit rate и TPR лучше всего отражают суть. В этой метрике мы рассматриваем только P-случаи: когда в реальных наблюдениях было «да». И считаем, какую долю из этих случаев модель предсказала правильно.
Все случаи «нет» мы отбрасываем.
У recall есть брат-близнец:
Specificity, selectivity or true negative rate (TNR)
Важно, так же, заметить, что если T и P сильно отличаются (как в примере с землетрясениями), то сравнивать recall и специфичность надо очень осторожно.
Precision aka positive predictive value (PPV)
Какая часть наших предсказаний «да» действительно сбылась:
Недостатки этой метрики аналогичны: она вообще никак не учитывает предсказания «нет». Из наших результатов видно, что побеждает модель, которая почти всегда говорить «нет». Она как бы снижает риск проиграть, выводя большую часть своих ответ за рамки рассмотрения.
У этой метрики есть аналогичный близнец
Negative predictive value (NPV)
Какая часть «нет»-предсказаний сбылась.
И ещё немного метрик
Перечислю кратко и другие метрики. Это далеко не все существующие, а просто аналоги вышеперечисленных, только относительно отрицательных прогнозов.
Miss rate aka false negative rate (FNR)
Fall-out aka false positive rate (FPR)
False discovery rate (FDR)
False omission rate (FOR)
И что же со всем этим делать
Как вы уже видели, каждая из этих метрик рассматривает только какое-то подмножество предсказаний. Поэтому их эффективность очень сомнительна.
Однако, их очень часто используют для двух вещей:
На втором я хотел бы остановиться в некотором философском ключе.
Давайте задумаемся, а что значит «одна модель лучше другой»? Единого ответа тут нет.
В нашем примере с долгоносиком всё зависит от наших приоритетов.
Если мы хотим ни в коем случае не потерять урожай, то нам надо максимизировать TP любой ценой. Фактически, в предельном случае, мы можем выкинуть любые модели и просто опрыскивать дерево химикатами всегда.
В реальной же жизни, мы ищем некоторый компромисс. Во многих случаях он может быть совершенно чётко сформулирован, с учётом цен на химикаты, стоимости урожая, репутационных потерь и прочего.
Не редко, люди придумывают собственные метрики. Но есть и готовые, пригодные во многих случаях.
F1-score
Это комбинация recall и precision:
Но мне кажется, поведение этой функции становится гораздо понятней, если записать её так:
То есть, это гармоническое среднее.
Максимальный F1-score мы получим, если и recall, и precision достаточно далеки от нуля. Он позволяет найти некое компромиссное решение, фактически, между максимизацией TP по разным шкалам.
Это не единственная возможная метрика. И у неё, как вы видите, тоже есть чёткий фокус, а значит и недостатки. Однако, даже её достаточно, чтобы среди наших моделей выиграла та, у которой пограничная температура равна 4. Давайте ещё раз взглянем на сравнение всех моделей:
И вот детализация по этой конкретной модели (с T=4):
Вы можете взять мой код, раскомментировать функцию dump() и посмотреть детализацию по всем моделям.
Надеюсь, я пролил некоторый свет на вопрос.
Основные метрики задач классификации в машинном обучении
Абрамов Роман,
Data Scientist
В каждой задаче машинного обучения ставится вопрос оценки результатов моделей.
Без введенных критериев, невозможно будет ни оценить “успешность” модели, ни сравнить между собой два различных алгоритма. Именно поэтому важно учесть правильный выбор метрик для поставленной задачи, хотя множество существующих метрик может запутать и, в конечном счете, привести к неоптимальному решению.
Несмотря на популярность машинного обучения, во многих её сферах до сих пор не сформировалась единая теоретическая концепция. Исключением не стала и рассматриваемая область. Хоть и существуют некоторые общие рекомендации к применению метрик для некоторых задач, конечное решение лежит на плечах аналитика.
Бинарная классификация
Возьмём к примеру задачу выявления подозрения на определенное заболевание. Если у пациента оно есть, то это будет положительным классом. Если нет – отрицательным. Результатом работы модели может быть определение – следует ли «заподозрить» у пациента какой-то определенный диагноз (тогда результат = true) или нет (тогда результат = false).
Пусть какой-то набор медицинских данных характерен для данного диагноза. Если наша модель верно определила и поставила положительный класс, тогда это истинно положительный исход, если же модель ставит отрицательную метку класса, тогда это ложно отрицательный исход. В случае отсутствия диагноза у рассматриваемого набора данных исходы модели остаются аналогичными. Тогда если модель относит запись к классу положительную, то мы говорим о ложно положительном исходе (модель «сказала» что диагноз есть, но на самом деле его нет), и наоборот, если модель определят запись как отрицательный класс, то это — истинно отрицательный исход.
Рисунок 1: Матрица сопряженности возможных результатов бинарной классификации
Accuracy
Одной из наиболее простых, а поэтому и распространенной метрикой является точность. Она показывает количество правильно проставленных меток класса (истинно положительных и истинно отрицательных) от общего количества данных и считается следующим образом [Evaluation: from precision, recall and F-measure to ROC, informedness, markedness and correlation]:
Однако, эта простота является также и причиной, почему её часто критикуют и почему она может абсолютно не подойти под решаемую задачу. Она не учитывает соотношения ложных срабатываний модели, что может быть критическим, особенно в медицинской сфере, когда стоит задача распознать все истинные случаи диагноза.
Вернемся к примеру с подозрением на заболевание. Если наша точность равна 80%, то можно сказать, что в среднем из 100 человек она правильно определит наличие или отсутствие диагноза лишь у 80 человек, тогда как ещё 20 будут либо ложно отрицательными, либо ложно положительными.
Стоит обратить внимание на то, что в некоторых задачах необходимо определить всех пациентов с диагнозом и можно даже пренебречь ложно положительными исходами, так как они могут отсеяться на следующих стадиях исследования (например, после контрольной сдачи анализов), тогда необходимо добавить к этой метрике ещё одну, которая могла бы оценить требуемый приоритет.
Precision
Несмотря на различные английские названия и разные формулы подсчета, русский перевод этой метрики также закрепился как «точность», что может вызвать недоумение и конфуз, поэтому следует уточнять, о чем именно вы говорите. Эта точность показывает количество истинно положительных исходов из всего набора положительных меток и считается по следующей формуле [Evaluation: from precision, recall and F-measure to ROC, informedness, markedness and correlation]:
Важность этой метрики определяется тем, насколько высока для рассматриваемой задачи «цена» ложно положительного результата. Если, например, стоимость дальнейшей проверки наличия заболевания у пациента высока и мы просто не можем проверить все ложно положительные результаты, то стоит максимизировать данную метрику, ведь при Precision = 50% из 100 положительно определенных больных диагноз будут иметь лишь 50 из них.
Recall (true positive rate)
В русском языке для этого термина используется слово «полнота» или «чувствительность». Эта метрика определяет количество истинно положительных среди всех меток класса, которые были определены как «положительный» и вычисляется по следующей формуле [The relationship between Precision-Recall and ROC curves ].
Необходимо уделить особое внимание этой оценке, когда в поставленной задаче ошибка нераспознания положительного класса высока, например, при выставлении диагноза какой-либо смертельной болезни.
F1-Score
В том случае, если Precision и Recall являются одинаково значимыми, можно использовать их среднее гармоническое для получения оценки результатов [On extending f-measure and g-mean metrics to multi-class problems]:
Помимо точечных оценок, существует целый ряд графических методов, способных оценить качество классификации.
ROC (receiver operating characteristic) – график, показывающий зависимость верно классифицируемых объектов положительного класса от ложно положительно классифицируемых объектов негативного класса. Иными словами, соотношение True Positive Rate (Recall) и False Positive Rate (Рисунок 2). При этом, False Positive Rate (FPR) рассчитывается по следующей формуле [Evaluation: from precision, recall and F-measure to ROC, informedness, markedness and correlation]:
Рисунок 2: ROC кривая
Рисунок 2 содержит пример двух ROC – кривых. Идеальное значение графика находится в верхней левой точке (TPR = 1, a FPR = 0). При этом, кривая, соответствующая FPR = TPR является случайным гаданием, а если график кривой модели или точка находятся ниже этого минимума, то это говорит лишь о том, что лучше подбрасывать монетку, чем использовать эту модель. При этом говорят, что кривая X доминирует над другой кривой Y, если X в любом точке находится левее и выше Y [Using AUC and accuracy in evaluating learning algorithms ], что означает превосходство первого классификатора над вторым.
С помощью ROC — кривой, можно сравнить модели, а также их параметры для поиска наиболее оптимальной (с точки зрения tpr и fpr) комбинации. В этом случае ищется компромисс между количеством больных, метка которых была правильно определена как положительная и количеством больных, метка которых была неправильно определена как положительная.
AUC (Area Under Curve)
В качестве численной оценки ROC кривой принято брать площадь под этой кривой, которая является неплохим «итогом» для кривой. Если между кривыми X и Y существует доминирование первой над второй, то AUC (X) > AUC (Y), обратное не всегда верно. Но AUC обладает так же и статистическим смыслом: она показывает вероятность того, что случайно выбранный экземпляр негативного класса будет иметь меньше вероятность быть распознанным как позитивный класс, чем случайно выбранный позитивный класс [Using AUC and accuracy in evaluating learning algorithms].
Рисунок 3.Два классификатора имеют одинаковую точность, но разный AUC
Мульти-классификация
Все рассмотренные выше метрики относились лишь к бинарной задаче, но, зачастую, классов больше, чем два. Это обуславливает необходимость в обобщении рассмотренных метрик. Одним из возможных способов является вычисление среднего метрики по всем классам [On extending f-measure and g-mean metrics to multi-class problems]. Тогда в качестве «положительного» класса берется вычисляемый, а все остальные — в качестве «отрицательного».
В этом случае формулы для метрик будут выглядеть следующим образом:
Применение в предиктивной аналитике для здравоохранения
Изученную теорию всегда следует подкрепить практикой. В данном случае, можно рассмотреть применение тех или иных метрик для реальных задач, связанных с использованием моделей машинного обучения в здравоохранении. В большинстве случаев рекомендуется использовать метрики AUC и F-Score, потому что они включают в себя широкий список возможных исходов и, как было замечено ранее, AUC превосходит метрику Accuracy, но спор насчет этого ведётся до сих пор.
Основной задачей предиктивной аналитики для здравоохранения является предсказание различных событий. Эта тема довольно неплохо изучена для различных заболеваний и сценариев использования, поэтому существует множество возможных методов её решения. Данный тип задач оценивается всеми рассмотренными метриками для классификации, но чаще остальных можно заметить Accuracy благодаря её простоте. Например, в Disease prediction by machine learning over big data from healthcare communities авторы анализируют медицинские записи с целью предсказания возможности появления какого-либо заболевания и у них получается это на уровне 70% для Accuracy, Precision, Recall и F1. В Intelligent heart disease prediction system using data mining techniques и Heart disease prediction system using naive Bayes метрика Accuracy достигает приблизительно 90-95%, но на это сказывается размер набора данных, который был использован для исследования.
Среди всего списка заболеваний особую актуальность имеют сердечно сосудистые заболевания (ССЗ). Множество исследований, посвященных предсказанию ССЗ демонстрируют то, чего можно достичь в этой области благодаря машинному обучению. Зачастую здесь используется метрика AUC для сравнения качества моделей. Например в A data-driven approach to predicting diabetes and cardiovascular disease with machine learning авторы работали с базой, которая собиралась в течение 20 лет, содержащей более ста признаков. Целью являлось предсказание ранних стадий ССЗ, предиабета и диабета, они добились показателей равных 0.957, 0.802 и 0.839 площади под кривой. В Development and verification of prediction models for preventing cardiovascular diseases авторы исследовали возможность различных исходов (смерть, госпитализация и другие), связанных с ССЗ. Наилучший показатель AUC был равен 0.96. В Перспективы использования методов машинного обучения для предсказания сердечно-сосудистых заболеваний исследуется возможность предсказания ССЗ с помощью методов машинного обучения и некоторых медицинских данных. Для Accuracy, Precision, Recall и AUC были получены результаты 78%, 0.79, 0.67 и 0.84 соответственно.
Заключение
Рассмотренные метрики являются лишь основными и только для задачи классификации. Существует ещё множество различных областей, в которых они будут разными, потому что каждая задача имеют свою специфику и приоритеты. Невозможно дать каких-то четких гарантий и определить, какая из метрик лучше, выбирать и отдавать предпочтение стоит лишь исходя из опыта своего и других исследователей.
Метрики оценивания моделей с sklearn
Добрый день, уважаемые читатели. Порой перед инженерами моделей машинного обучения встаёт проблема: как правильно оценить, какую модель выбрать. В этом нам помогут метрики оценивания — способы оценить способность модели предсказывать результат.
Accuracy
Первая метрика для классификации — accuracy (точность). Я предоставлю две формулы: нормализированную и ненормализированую версию.
Нормализированная версия представляет собой соотношение кол-ва корректных предсказаний и общего кол-ва меток.
Ненормализированная версия представляет собой просто кол-во верных предсказаний. Разберём небольшой пример:
Данный пример показывает нам, что из 4-ех меток мы правильно «предсказали» 3. Ну и соответственно точность предсказания — 75%.
Precision & Recall
Далее рассмотрим такие две метрики, так precision и recall, которые очень похожи. Конкретнее речь будет идти о их вариации для бинарной классификации.
Рассмотрим практический пример использования этих метрик оценивания с помощью sklearn.metrics :
F1 score
Опять же разберём реализацию F1-score в sklearn для бинарной классификатора:
Далее мы приступим к разбору метрик оценивания регрессионных моделей.
Mean Absolute Error
MAE (Mean Absolute Error, Средняя Абсолютная Ошибка (рус.)) — мера схожести предсказаний и правильных значений для каких-либо наблюдений. Имеет следующую формулу:
Здесь — предсказанные значения,
— правильные значения для
наблюдений. Использование MAE в sklearn выглядит следующим образом:
Стоит помнить, что значение функции ошибки точно не говорит нам о точности модели, т. к. мы не знаем, какое значение дисперсии является для нас критическим. Если принять за единицу тысячу долларов при условии, что мы предсказываем цену на товар, то 100 долларов — это довольно серьезная погрешность. Однако если же мы предсказываем индекс благополучия, то 0.1 — не есть столь великой потерей (пример условный).
Mean Squared Error
MSE (Mean Squared Error, Средняя Квадратическая Ошибка (рус.)) использует похожий принцип сравнения. Эта метрика имеет следующую формулу:
Использовать её с помощью sklearn также просто, как и MAE:
Root Mean Squared Deviation
RMSD напрямую связана с MSE — значение этой меры равно корню квадратному из значения MSE для заданных наборов:
R2 score
score — последняя мера оценки регрессионных моделей в этой статье, которая от перечисленных выше двух отличается тем, что может принимать отрицательное значение при плохой обобщающей способности модели.
Чем ближе к 1, тем лучше обобщающая способность модели.
Заключение
В этой статье мы разобрали метрики оценивания для классификаторов и регрессоров, ограничившись в основном бинарной классификацией для классификации.
Чтобы ещё лучше запомнить себе материал, приведенный в этой статье, можете сохранить и изменить на своё усмотрение этот документ.
А также подписывайтесь на группу ВКонтакте, Telegram и YouTube-канал. Там еще больше полезного и интересного для программистов.