Рабочие характеристики приемника (ROC) — это графический график, используемый для описания диагностических возможностей бинарного классификатора. Он широко используется во многих областях, от научных исследований до промышленных применений, а также в военных целях. Кривая ROC также является стандартным инструментом в статистике и машинном обучении для оценки производительности модели. Он в основном используется для количественной оценки способности бинарного классификатора посредством изменения порога , используемого моделью для различения классов. Для каждой точки кривой ROC пороговое значение определяет, что относится к классу 1, а что к классу 2, определяя соотношение истинно положительных и ложноположительных результатов, отображаемых на графике. Исторические и более формальные технические подробности можно найти на странице Википедии по этой ссылке Рабочие характеристики приемника — Википедия.

Несмотря на широкое использование, кривая ROC часто может вызывать путаницу. В этой статье я пытаюсь зафиксировать ключевые моменты построения ROC-кривой, предоставляя прямое и простое описание каждого шага.

Давайте начнем рассматривать реалистичную задачу классификации, для которой мы могли бы использовать кривую ROC.

Задача: у нас есть продуктовый магазин, и мы хотим каталогизировать все наши блюда на вынос. У нас есть список блюд, содержащий все блюда в магазине. Для каждого из них мы хотим оценить наличие ингредиента, например, глютена.

Мы предполагаем, что наш классификатор, каким бы он ни был, уже обучен. Это означает, что он может делать прогнозы в соответствии с тем, что он узнал раньше. Кривая ROC расскажет нам, насколько хорошо классификатор делает прогнозы. Классификация заключается в маркировке каждого приема пищи с его предсказанием о присутствии или отсутствии глютена, соответственно обозначенном меткой 1 и . 0.

В следующей схеме я разбил процесс построения ROC-кривой на 8 шагов, проиллюстрированных следующей панелью, подробно проанализированных ниже.

Шаг 1: присвоение баллов

Модель оценивает все приемы пищи и присваивает оценку каждому из них, т. е. количественно определяет вероятность наличия/отсутствия целевого ингредиента с номером.

КЛЮЧЕВОЙ МОМЕНТ: в отличие от фазы присвоения класса, которая повторяется для каждого порога (мы увидим это на шаге 4), оценка каждого приема пищи присваивается один и только один раз в течение всего процесса, на этапе 1.

Шаг 2: упорядочивание оценок

Рекорды перечислены по баллам в порядке убывания, от большего к меньшему. В примере с панелью оценка варьируется от -4,2 (минимум) до +3,8 (максимум).

Шаг 3: определение порога

Предположим, нам нужно 30 точек для нашей ROC-кривой. Мы набираем 30 равноудаленных баллов из нашего диапазона оценок (от -4,2 до +3,8). Затем мы перечисляем их в убывающем порядке: эти точки станут нашими пороговыми значениями для тестирования. Один порог для каждой точки ROC… но давайте посмотрим, как это сделать!

КЛЮЧЕВОЙ МОМЕНТ: пороговые значения выбираются из диапазона оценок. Несмотря на эту связь между ними, баллы и порог имеют разные роли и должны быть разделены понятиями.

Баллы присваиваются классификатором каждому приему пищи, чтобы количественно оценить вероятность того, что он будет или не будет равен 1 или 0.

Пороговые значения используются при построении кривой ROC в качестве ограничителей баллов, чтобы определить, как использовать баллы, чтобы определить, какое блюдо относится к классу 1, а какое — к классу 2.

Шаг 4: циклическое превышение порога

Для каждого порога мы выполняем шаги с 5 по 7, генерируя матрицу путаницы для каждого из них. Шаги с 5 по 7 позволяют воспроизвести процедуру классификации (назначив 1 или 0 в соответствии с оценкой) при использовании каждый раз другого порога в качестве значения различения для два класса.

Как мы увидим на следующих шагах, для каждого порога выполняется присвоение классов. Блюда с баллами выше порога классифицируются как единицы, а ниже — как нули. Затем, в соответствии с фактическими этикетками блюд, вычисляются истинные и ложноположительные показатели для конкретного рассматриваемого порога. Процесс повторяется для каждого порога. Давайте посмотрим детали!

Шаг 5: классификация

Во время итеративной фазы (шаги 5–7) один раз используются все пороги, по одному для каждой точки ROC. Затем по каждому баллу классифицируются все блюда. В процессе используются пороговые значения в порядке убывания, начиная с самого высокого и заканчивая самым низким.

Как только порог выбран, список блюд разделяется на 2 части, и все блюда классифицируются:

  • баллы выше порога→ 1
  • баллы ниже порога→ 0

После классификации для каждого приема пищи его прогноз сравнивается с реальной меткой, и алгоритм отслеживает все результаты, подсчитывая появление всех четырех возможных комбинации, разделенные следующим образом:

Правильные прогнозы

  • истинно положительный (TP), прогноз = ярлык и оба 1
  • истинно отрицательное (TN), прогноз = метка и оба 0

Неверные прогнозы

  • ложноположительный результат (FP), прогноз = 1, метка = 0
  • ложноотрицательный (FN), прогноз = 0, метка = 1

Шаг 6: матрица путаницы

После того, как все предсказания еды проверены, их совокупные комбинации могут быть собраны в матрицу путаницы, которая хранится в памяти.

КЛЮЧЕВОЙ МОМЕНТ: каждая матрица путаницы строится с учетом определенного порога. Оценка модели с другим порогом повлияет на характеристики модели/классификатора, а затем и на значения матрицы путаницы! В этом смысле матрица путаницы не является абсолютной метрикой, а зависит от порога, используемого для классификации.

Шаг 7

Прибыв сюда, можно использовать величины, только что полученные для текущего порога, для вычисления величин, фактически нанесенных на кривую ROC, а именно:

  • истинно положительный показатель (tpr)= TP / (TP + FN)
  • коэффициент ложноположительных результатов (fpr) = FP / ( FP + TN )

Доля истинных положительных результатов показывает, насколько хорошо модель выявляет действительно положительные результаты (то есть блюда, которые действительно содержат глютен) и делает точные прогнозы присутствия глютена. Обратите внимание, что это зависит не только от того, сколько попаданий было совершено (TP, числитель), но и от того, сколько TP нормировано проверенными «реальными положительными результатами», содержащими как правильное попадание, так и промахи (TP + FN, знаменатель). .

Аналогично, частота ложных срабатываний описывает, как часто классификатор допускает ошибки при классификации присутствия глютена. Также в этом случае абсолютное значение ошибок (FP, числитель) нормируется на общее количество реальных негативов (FP + TN, знаменатель, т.е. блюда, не содержащие глютен).

КЛЮЧЕВОЙ МОМЕНТ:прибыв сюда, после шага 7 процесс перезапускается с шага 5 для следующего порога и продолжает цикл до тех пор, пока не будет достигнут последний порог. Только после этого переходите к Шагу 8.

Шаг 8: построение кривой ROC

После того, как для всех порогов рассчитаны как истинные, так и ложноположительные показатели, остается только нанести их на график… И вот мы с нашей новой ROC-кривой!

КЛЮЧЕВОЙ МОМЕНТ: порог явно не визуализируется на ROC-кривой. Однако она непосредственно заложена в нем, так как каждая точка кривой вычисляется с использованием определенного порогового значения, определяющего границу разделения оценок на два класса выше и ниже порога.

Выводы

В этой статье я предоставил подробное пошаговое руководство по построению кривой ROC. После общего введения процесс построения был разбит на 8 этапов, каждый из которых был объяснен на упрощенном примере.

Эта процедура для оценки эффективности прогнозирования остается в силе для любого типа бинарного классификатора (например, людей, алгоритмов машинного обучения), способного упорядочивать элементы в соответствии с «критерием вероятности», равным 1 или 0. Независимо от того, была ли задача выполнена алгоритм машинного обучения, сканирующий список ингредиентов или человека, пробующего их с закрытыми глазами: если предметы можно упорядочить по результату прогноза, вы можете использовать тот же процесс построения, который описан в статье.

Если вы хотите увидеть, как кривая ROC используется для интерпретации характеристик двоичных классификаторов, я собираюсь опубликовать в ближайшее время еще одну статью, в которой я покажу, как вычислить кривую ROC «вручную» с пошаговым руководством с кодом Python. выполнение всех 8 шагов, описанных в этой статье. Так что следите за обновлениями!

СТАНЬТЕ ПИСАТЕЛЕМ на MLearning.ai