AUC ROC (площадь под кривой ошибок)

Площадь под ROC-кривой – один из самых популярных функционалов качества в задачах бинарной классификации. На мой взгляд, простых и полных источников информации «что же это такое» нет. Как правило, объяснение начинают с введения разных терминов (FPR, TPR), которые нормальный человек тут же забывает. Также нет разборов каких-то конкретных задач по AUC ROC. В этом посте описано, как я объясняю эту тему студентам и своим сотрудникам…

wallpaper

Допустим, решается задача классификации с двумя классами {0, 1}. Алгоритм выдаёт некоторую оценку (может, но не обязательно, вероятность) принадлежности объекта к классу 1. Можно считать, что оценка принадлежит отрезку [0, 1].

Часто результат работы алгоритма на фиксированной тестовой выборке визуализируют с помощью ROC-кривой (ROC = receiver operating characteristic, иногда говорят «кривая ошибок»), а качество оценивают как площадь под этой кривой – AUC (AUC = area under the curve). Покажем на конкретном примере, как строится кривая.

Пусть алгоритм выдал оценки, как показано в табл. 1. Упорядочим строки табл. 1 по убыванию ответов алгоритма – получим табл. 2. Ясно, что в идеале её столбец «класс» тоже станет упорядочен (сначала идут 1, потом 0); в самом худшем случае – порядок будет обратный (сначала 0, потом 1); в случае «слепого угадывания» будет случайное распределение 0 и 1.

table

Чтобы нарисовать ROC-кривую, надо взять единичный квадрат на координатной плоскости, см. рис. 1, разбить его на m равных частей горизонтальными линиями и на n – вертикальными, где m – число 1 среди правильных меток теста (в нашем примере m=3), n – число нулей (n=4). В результате квадрат разбивается сеткой на m×n блоков.

Теперь будем просматривать строки табл. 2 сверху вниз и прорисовывать на сетке линии, переходя их одного узла в другой. Стартуем из точки (0, 0). Если значение метки класса в просматриваемой строке 1, то делаем шаг вверх; если 0, то делаем шаг вправо. Ясно, что в итоге мы попадём в точку (1, 1), т.к. сделаем в сумме m шагов вверх и n шагов вправо.

pic1
Рис.1. Построение ROC-кривой.

На рис. 1 (справа) показан путь для нашего примера – это и является ROC-кривой. Важный момент: если у нескольких объектов значения оценок равны, то мы делаем шаг в точку, которая на a блоков выше и b блоков правее, где a – число единиц в группе объектов с одним значением метки, b – число нулей в ней. В частности, если все объекты имеют одинаковую метку, то мы сразу шагаем из точки (0, 0) в точку (1, 1).

AUC ROC – площадь под ROC-кривой – часто используют для оценивания качества упорядочивания алгоритмом объектов двух классов. Ясно, что это значение лежит на отрезке [0, 1]. В нашем примере AUC ROC = 9.5 / 12 ~ 0.79.

Выше мы описали случаи идеального, наихудшего и случайного следования меток в упорядоченной таблице. Идеальному соответствует ROC-кривая, проходящая через точку (0, 1), площадь под ней равна 1. Наихудшему – ROC-кривая, проходящая через точку (1, 0), площадь под ней – 0. Случайному – что-то похожее на диагональ квадрата, площадь примерно равна 0.5.

pic2
Рис. 2. ROC-кривые для наилучшего (AUC=1), случайного (AUC=0.5) и наихудшего (AUC=0) алгоритма.

Замечание. ROC-кривая считается неопределённой для тестовой выборки целиком состоящей из объектов только одного класса. Большинство современных реализаций выдают ошибку при попытки построить её в этом случае

Смысл AUC ROC

Сетка на рис. 1 разбила квадрат на m×n блоков. Ровно столько же пар вида (объект класса 1, объект класса 0), составленных из объектов тестовой выборки. Каждый закрашенный блок на рис. 1 соответствует паре (объект класса 1, объект класса 0), для которой наш алгоритм правильно предсказал порядок (объект класса 1 получил оценку выше, чем объект класса 0), незакрашенный блок – паре, на которой ошибся.

pic3.png
Рис. 3. Каждый блок соответствует паре объектов.

Таким образом, AUC ROC равен доле пар объектов вида (объект класса 1, объект класса 0), которые алгоритм верно упорядочил, т.е. первый объект идёт в упорядоченном списке раньше. Численно это можно записать так:

eq.png

Замечание. В формуле (*) все постоянно ошибаются, забывая случай равенства ответов алгоритма на нескольких объектах. Также эту формулу все постоянно переоткрывают. Она хороша тем, что легко обобщается и на другие задачи обучения с учителем.

Принятие решений на основе ROC-кривой

Пока наш алгоритм выдавал оценки принадлежности к классу 1. Ясно, что на практике нам часто надо будет решить: какие объекты отнести к классу 1, а какие к классу 0. Для этого нужно будет выбрать некоторый порог (объекты с оценками выше порога считаем принадлежащими классу 1, остальные – 0).

Выбору порога соответствует выбор точки на ROC-кривой. Например, для порога 0.25 и нашего примера – точка указана на рис. 4 (1/4, 2/3). см. табл. 3

pic4.png
Рис. 4. Выбор порога для бинаризации.

Заметим, что 1/4 – это процент точек класса 0, которые неверно классифицированы нашим алгоритмом (это называется FPR = False Positive Rate), 2/3 – процент точек класса 1, которые верно классифицированы нашим алгоритмом (это называется TPR = True Positive Rate). Именно в этих координатах (FPR, TPR) построена ROC-кривая. Часто в литературе её определяют как кривую зависимости TPR от FPR при варьировании порога для бинаризации.

Кстати, для бинарных ответов алгоритма тоже можно вычислить AUC ROC, правда это практически никогда не делают, поскольку ROC-кривая состоит из трёх точек, соединёнными линиями: (0,0), (FPR, TPR), (1, 1), где FPR и TPR соответствуют любому порогу из интервала (0, 1). На рис. 4 (зелёным) показана ROC-кривая бинаризованного решения, заметим, что AUC после бинаризации уменьшился и стал равным 8.5/12 ~ 0.71.

pic5.png
Рис. 5. Вычисление AUC ROC в случае бинарных ответов.

В общем случае, как видно из рис. 5 AUC ROC для бинарного решения равна

eq2.png

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

Задача

На ответах алгоритма a(x) объекты класса 0 распределены с плотностью p(a)=2-2a, а объекты класса 1 – с плотностью p(a)=2a, см. рис. 6. Интуитивно понятно, что алгоритм обладает некоторой разделяющей способностью (большинство объектов класса 0 имеют оценку меньше 0.5, а большинство объектов класса 1 – больше). Попробуйте угадать, чему здесь равен AUC ROC, а мы покажем как построить ROC-кривую и вычислить площадь под ней. Отметим, что здесь мы не работаем с конкретной тестовой выборкой, а считаем, что знаем распределения объектов всех классов. Такое может быть, например, в модельной задаче, когда объекты лежат в единичном квадрате, объекты выше одной из диагоналей принадлежат классу 0, ниже – классу 1, для решения используется логистическая регрессия (см. рис. 7). В случае, когда решение зависит только от одного признака (при втором коэффициент равен нулю), получаем как раз ситуацию, описанную в нашей задаче.

pic6.png
Рис. 6. Распределения в модельной задаче.
problem_ed.png
Рис. 7. Модельная задача (показана лишь подвыборка).

Значение TPR при выборе порога бинаризации равно площади, изображённой на рис. 6 (центр), а FPR – площади, изображённой на рис. 6 (справа), т.е.

eq3.png
Параметрическое уравнение для ROC-кривой получено, можно уже сразу вычислить площадь под ней:
eq4.png
Но если Вы не любите параметрическую запись, легко получить:

eq5.png
Заметим, что максимальная точность достигается при пороге бинаризации 0.5 (почему?), и она равна 3/4 = 0.75 (что не кажется очень большой). Это частая ситуация: AUC ROC существенно выше максимальной достижимой точности (accuracy)!

Кстати, AUC ROC бинаризованного решения (при пороге бинаризации 0.5) равна 0.75! Подумайте, почему это значение совпало с точностью?

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

eq6.png

Для нашей модельной задачи можно провести несколько экспериментов: взять конечные выборки разной мощности с указанными распределениями. На рис. 8 показаны значения AUC ROC в таких экспериментах: все они распределены около теоретического значения 5/6, но разброс достаточно велик для небольших выборок. Запомните: для оценки AUC ROC выборка в несколько сотен объектов мала!

auc2
Рис. 8. Варьирование AUC ROC в экспериментах.

Также полезно посмотреть, как выглядят ROC-кривые в наших экспериментах. Естественно, при увеличении объёма выборок ROC-кривые, построенные по выборкам, будут сходиться к теоретической кривой (построенной для распределений).

auc3.png
Рис. 9. ROC-кривые в экспериментах.

Замечание
Интересно, что в рассмотренной задаче исходные данные линейны (например, плотности – линейные функции), а ответ (ROC-кривая) нелинейная (и даже неполиномиальная) функция!

Замечание
Почему-то многие считают, что ROC-кривая всегда является ступенчатой функцией – лишь при построении её для конечной выборки, в которой нет объектов с одинаковыми оценками. Полезно посмотреть на интерактивную визуализацию ROC-кривых для нормально распределённых классов.

Максимизация AUC ROC на практике

Оптимизировать AUC ROC напрямую затруднительно по нескольким причинам:

  • эта функция недифференцируема по параметрам алгоритма,
  • она в явном виде не разбивается на отдельные слагаемые, которые зависят от ответа только на одном объекте (как происходит в случае log_loss).

Есть несколько подходов к оптимизации

  • замена в (*) индикаторной функции на похожую дифференцируемую функцию,
  • использование смысла функционала (если это вероятность верного упорядочивания пары объектов, то можно перейти к новой выборке, состоящей из пар),
  • ансамблирование нескольких алгоритмов с преобразованием их оценок в ранги (логика здесь простая: AUC ROC зависит только от порядка объектов, поэтому конкретные оценки не должны существенно влиять на ответ).

Замечания

  • AUC ROC не зависит от строго возрастающего преобразования ответов алгоритма (например, возведения в квадрат), поскольку зависит не от самих ответов, а от меток классов объектов при упорядочивании по этим ответам.
  • Часто используют критерий качества Gini, он принимает значение на отрезке [–1, +1] и линейно выражается через площадь под кривой ошибок:

Gini = 2 ×AUC_ROC – 1

  • AUC ROC можно использовать для оценки качества признаков. Считаем, что значения признака — это ответы нашего алгоритма (не обязательно они должны быть нормированы на отрезок [0, 1], ведь нам важен порядок). Тогда выражение 2×|AUC_ROC — 0.5| вполне подойдёт для оценки качества признака: оно максимально, если по этому признаку 2 класса строго разделяются и минимально, если они «перемешаны».
  • Практически во всех источниках приводится неверный алгоритм построения ROC-кривой и вычисления AUC ROC. По нашему описанию легко эти алгоритмы исправить…
  • Часто утверждается, что AUC ROC не годится для задач с сильным дисбалансом классов. При этом приводятся совершенно некорректные обоснования этого. Рассмотрим одно из них. Пусть в задаче 1 000 000 объектов, при этом только 10 объектов из первого класса. Допустим, что объекты это сайты интернета, а первый класс – сайты, релевантные некоторому запросу. Рассмотрим алгоритм, ранжирующий все сайты в соответствии в эти запросом. Пусть он в начало списка поставил 100 объектов класса 0, потом 10 – класса 1, потом – все остальные класса 0. AUC ROC будет довольно высоким: 0.9999. При этом ответ алгоритма (если, например, это выдача поисковика) нельзя считать хорошей: в верхней части выдачи 100 нерелевантных сайтов. Разумеется, нам не хватит терпения пролистать выдачу и добраться до 10 тех самых релевантных.
    В чём некорректность этого примера?! Главное: в том, что он никак не использует дисбаланс классов. С таким же успехом объектов класса 1 могло быть 500 000 – ровно половина, тогда AUC ROC чуть поменьше: 0.9998, но суть остаётся прежней. Таким образом, этот пример не показывает неприменимость AUC ROC в задачах с дисбалансом классов, а лишь в задачах поиска! Для таких задач есть другие функционалы качества, кроме того, есть специальные вариации AUC, например AUC@k.
  • В банковском скоринге AUC_ROC очень популярный функционал, хотя очевидно, что он также здесь не очень подходит. Банк может выдать ограниченное число кредитов, поэтому главное требование к алгоритму – чтобы среди объектов, которые получили наименьшие оценки были только представители класса 0 («вернёт кредит», если мы считаем, что класс 1 – «не вернёт» и алгоритм оценивает вероятность невозврата). Об этом можно судить по форме ROC-кривой (см. рис. 10).
pic10
Рис. 10. Форма ROC-кривой, которая соответствует случаю, когда группа объектов с самыми низкими оценками имеет метки 0.

П.С.

Если Вы дочитали до конца — можете попробовать пройти тест по AUC ROC (авторский, публикуется впервые). Задачи теста можно обсуждать в комментариях. Любые замечание по тексту — смело пишите!

Что можно ещё почитать…

 

 

Реклама

AUC ROC (площадь под кривой ошибок): 29 комментариев

  1. >Алгоритм выдаёт некоторую оценку (может, но не обязательно, вероятность) принадлежности объекта к классу 1.

    Александр, можно попросить подробнее описать этот момент? При каких условиях допустимо трактовать эти оценки именно как вероятности?

    Например, если в RandomForest Classifier в случае сильного дисбаланса классов мы выставляем class_weight =balanced, то на выходе получаем оценки достаточно далёкие от вероятностей по смыслу?
    Спасибо!

    • В контексте данной статьи (когда мы ориентируемся на функционал AUC ROC), нас вообще не интересует «что именно выдаёт алгоритм», главное, чтобы объекты правильно упорядочивались.

      Если Вам надо, чтобы алгоритм выдавал именно вероятность принадлежности к классу, тогда надо
      1) ориентироваься на другой функционал качества, например, log_loss,
      2) соответствующим образом обрабатывать ответы алгоритма, см. например http://scikit-learn.org/stable/modules/calibration.html

      • Подскажите, пжл, как можно красиво (если вообще можно) расширить использование д. метода для оценки совокупности признаков (речь об обзаце «AUC ROC можно использовать для оценки качества признаков….»), т.е. если нужно оценить результат по матрице N*5 (5 признаков).
        Понятно, что, например, можно посчитать 5 таких оценок, соответственно взять ср., макс. и .т.д.
        (И тут, имхо, еще важно учесть, чтобы все 5 были «в одну сторону», т.к. по всем 5 могут быть высокие оценки, но по 2 с «одним знаком», а по 3 с другим)
        Но м.б. существуют более красивые решения?

      • Здравствуйте! Извините, что поздно отвечаю… всё не доходили руки (хотя Ваш вопрос видел). Если я правильно понял, то вы хотите оценивать важность некоторого подмножества признаков, а не признаков по отдельности. Если при этом хотите использовать AUC ROC, то лучше делать так.

        Рассмотрим задачу классификации на два класса: 0 и 1.

        1) Выберите какую-нибудь ПРОСТУЮ модель классификации/ регрессии (если классификации, то она должна получать также вероятности принадлежности к классу 1)

        В зависимости от природы данных подойдёт линейная модель или RF с небольшой глубиной деревьев

        2) Обучите модель используя только подмножество признаков

        3) AUC ROC ответов модели (вероятностей или регрессионных меток) и будет качеством признакового подпространства

        Тут тонкий вопрос, где его считать: на отложенном контроле или на обучении. Во многих случаях можно и на обучении (у нас простая модель, нас интересует только возможность настройки на данном подмножестве признаков и т.п.).

  2. Александр, добрый день! У меня возник вопрос по первому заданию в тесте: «в тестовой выборке 10 объектов…». Не очень понятно, почему максимальный auc_roc тот, что указан в ответе?
    Я рассуждал вот как: у нас 10 объектов, значит вопрос, как сделать площадь квадрата максимальной, если мы можем двигаться вверх и вправо на единички (движение вверх -> класс 1, движение вправо -> класс 0).
    Максимум, который можно получить — это пять шагов вверх, пять вправо, площадь квадрата 25. Ошиблись один раз в самом конце -> max auc_roc = 24/25.

    Где же ошибка?

    И спасибо огромное за этот пост, я теперь понимаю гораздо лучше, что такое auc_roc.

    • Здравствуйте! Еще раз перечитайте пост. ROC-кривая не обязательно ступенчатая, она может на некоторых участках идти «по диагонали’ и ошибаться мы можем «на половину»… Такой подсказки достаточно?

  3. «…Практически во всех источниках приводится неверный алгоритм построения ROC-кривой и вычисления AUC ROC…»
    Пжл, приведите примеры верных и неверных на Ваш взгляд реализаций алогитмов со ссылкой на библиотеки или гитхаб.
    sklearn.metrics.roc_auc_score — в числе каких?

    • Я писал не про реализации, а про описания алгоритма. Почти все — неверные. Например, я набираю в гугле «AUC ROC», иду по первой же ссылке
      http://www.machinelearning.ru/wiki/index.php?title=ROC-%D0%BA%D1%80%D0%B8%D0%B2%D0%B0%D1%8F
      и там алгоритм неверный. Почему — читайте пост.

      Алгоритм здесь
      https://basegroup.ru/community/articles/logistic
      тоже не совсем хороший — он даёт правильный результат лишь при удачном выборе шага.

      Что касается sklearn.metrics.roc_auc_score, то там всё в порядке. В библиотеке, которой пользуется такое огромное сообщество, иначе и быть не может. Для проверки можно использовать пример из поста:

      from sklearn.metrics import roc_auc_score
      roc_auc_score([0, 0, 0, 1, 1, 1, 0], [0.5, 0.1, 0.2, 0.6, 0.2, 0.3, 0.0]) # 0.79166666666666663

  4. Здравствуйте! Кажется, у вас опечатка «Интуитивно понятно, что алгоритм обладает некоторой разделяющей способностью (большинство объектов класса 1 имеют оценку меньше 0.5, а большинство объектов класса 1 – больше).»
    Наверное все же большинство объектов класса 0 имеют оценку меньше 0.5

  5. Спасибо за статью!
    Возможно, для лучшего понимая можно заменить «Важный момент: если у нескольких объектов значения МЕТОК -> ОЦЕНОК (2-я колонка) равны …»

  6. […] Для понимания доказательства необходимо базовое понимание метрики ROC-AUC — что это вообще такое, как строится график и в каких осях. Рекомендую статью из блога Александра Дьяконова «AUC ROC (площадь под кривой ошибок)» […]

  7. […] Для понимания доказательства необходимо базовое понимание метрики ROC-AUC — что это вообще такое, как строится график и в каких осях. Рекомендую статью из блога Александра Дьяконова «AUC ROC (площадь под кривой ошибок)» […]

  8. Можно ли сказать, AUC ROC=1-sum(penalty), где penalty — это массив штрафов за ошибочную классификацию каждого объекта. penalty(i) — зависит от уверености в результатах классификатора. Штрафы объектов с соседними уверенностями (соседними рангами) отличаются на одинаковую величину. Штрафы за ошибки 1->0 возрастают слева направо, а штрафы за ошибки 0->1 — справа налево. В окрестности пороговой точки штрафы минимальные.

    • Вроде нет… Можете привести на примере, как строится массив штрафов penalty, например,
      1) когда правильные ответы = [1, 0], ответы алгоритма = [0.5, 0.5]
      2) по = [1 0 1] оа = [0.7, 0.5, 0.1]
      3) по = [1 0 1 0] оа = [0.9, 0.8, 0.4, 0.0]

  9. Отличная статья, она очень многое по поводу AUC ROC ставит на свои места. Хочется только сделать небольшое замечание по поводу применимости этого функционала качества для задач с сильным дисбалансом классов. Обоснование некорректности AUC ROC для подобных задач, которое было приведено в статье, может и некорректное, но это не опровергает само утверждение, что AUC ROC не всегда адекватно для задач с дисбалансом классов.
    Приведу такой пример: предположим у нас есть 20+N объектов (N — натуральное число), из которых только 10 — это объекты первого класса. За каждый угаданный объект первого класса вам платят к примеру $100, а за каждый не угаданный объект нулевого класса — вы платите $100, за каждый угаданный объект нулевого класса и НЕ угаданный объект первого класса вы не получаете и не платите ничего. Допустим у вас есть алгоритм, который позволяет угадывать к какому классу принадлежит объект, но ранжирует объекты он особым образом:
    вероятность p1 он выдает для какого-то объекта из класса 0,
    вероятность p2 — для объекта класса 1,
    p3 — для объекта класса 0,
    p4 — объект класса 1,
    p5 — объект класса 0,
    ….
    p19 — объект класса 0,
    p20 — объект класса 1
    причем p(i)>p(i-1)
    для всех остальных N объектов (они будут соответствовать нулевому классу) вероятность, которую выдает алгоритм , будет составлять менее p20, то есть p1>p2>p3>p4>….>p19>p20>pn.
    Очевидно, что если использовать описанный алгоритм, то при любом выбранном пороге и вне зависимости от N ваш выигрыш не привысит $0. Однако чем больше N — тем больше дисбаланс классов и при этом тем больше AUC ROC. Так при N=1, AUC ROC=0.5, и классы почти не разбалансированные (10 объектов класса №1 и 11 объектов класса №0). Однако если N=10 (10 объектов первого класс и 20 — нулевого), то AUC ROC=0.725, хотя по-прежнему с использованием этого алгоритма наш результат не превысит $0 при любом пороге. Более того: при N стремящимся к бесконечности, AUC ROC будет стремиться к 1 !!! Согласитесь, что подобные показатели рассмотренной метрики могут ввести в заблуждение.

    • Здравствуйте, Александр!

      Согласен!
      Отличный пример. Кстати, он Ваш? Сразу захотелось его где-нибудь использовать при случае…

      Но смотрите, при всей корректности примера Вы попадаете в ловушку, которую сами же построили для AUC… Вы придумали задачу, в которой есть цель — заработать как можно больше денег. А потом показали, что AUC Вам в этом не помогает. Ну так, естественно, надо было брать функционал напрямую связанный с Вашей целью! В этом примере AUC страдает не сколько из-за дисбаланса, сколько из-за «игры», которую Вы придумали. Классы-то наш алгоритм при стемлении N к бесконечности нормально «растаскивает». Я бы хотел, что бы во многих задачах, где очень мало объектов 1 класса, он работал, как Вы описали. Например, если мы обнаруживаем возгорания по показаниям датчиков, то среди самых сильных 20 сигналов 10 соответствовали бы реальным пожарам (и мы бы не пропустили ни одно возгорание). Но Вы умело придумали игру, в которой именно такой алгоритм плох (собственно, как и я слукавил, придумав случай, где он хорош).

      Т.е. здесь AUC плох не из-за дисбаланса,
      а из-за дисбаланса + правил игры!

      Хотя, конечно, я понимаю, что в любой задаче есть контекст, именно он и придаёт ей смысл. И так или иначе, оценивая функционал, мы именно опираемся на то, помогает он нам решить задачу или нет. В этом смысле Ваш пример корректен, поскольку Вы фиксируете контекст и варьируете дисбаланс — при этом наблюдая «неадекватное поведение» функционала.

      Тут только один вывод и правильный ответ. Каждый функционал качества подходит ровно для тех задач, для которых он соответствует смыслу решения. Если есть чётко определённый смысл (бизнес-цель, цель игры и т.п.) надо его и формализовать в виде функционала, а не требовать от какого-нибудь «стандартного», чтобы он был хорош и для нашей задачи.

      Спасибо большое за внимание и замечание!

      • Спасибо за подробный и довольно оперативный ответ. Пример придуман по мотивам тех «грабель», на которые мне пришлось «наступить» самому. Если этот пример поможет избежать подобных проблем кому-то ещё, я буду только рад. Думаю, в качестве резюме можно сказать, что в мире метрик качества нет «волшебной пули», позволяющей всесторонне оценить качество любого алгоритма и AUC ROC здесь не исключение. В этой связи, думаю, было бы полезно попытаться классифицировать различные задачи и каждому классу поставить в соответствие наиболее подходящую метрику оценки качества. Может быть вы могли бы рекомендовать какие-нибудь публикации на эту тему?

      • Так сходу ничего в голову не приходит… я сам сейчас пытаюсь написать небольшую книжку, в частности, описать там все метрики. Поэтому смотрю, что в принципе есть… пока не нашёл какой-то хорошей их классификации.

        Я думаю, задачи классифицировать не стоит. Постоянно появляются какие-то новые или какие-то новые особенности в старых. Грубое разграничение в обучении с учителем есть: классификация, регрессия, ранговая регрессия, рекомендации (последние 2 типа часто даже не выделяют). А дальше начинается разнообразие метрик — вот их-то, возможно, и следует классифицировать. Но оно тоже условное, поскольку все базовые библиотеки ML, как правило, ориентированы на несколько стандартных (и никто в сообществе не ворчит по этому поводу).

  10. Алексадр, добрый день!
    Подскажите, пжл, красивое решение для такой хотелки:
    from sklearn.metrics import roc_auc_score
    y_true = np.array([0, 0, 1, 1])
    y_scores = np.array([0.1, 0.4, 0.35, 0.8])
    вызвали roc_auc_score(y_true, y_scores) , получили оценку-скаляр

    а хотелось бы получить «за один проход» еще и (в порядке убывания хотения):
    — значение точки разделение на классы — 1 if y >= ??? else 0 — это же фактич. бинарное дерево, правильно?
    — коэф-ты сигмоиды, которая наиболее оптимально вписывается в этот y_scores

    Есть ли пример кода как это сделать красиво и быстро?
    Заранее спасибо.

    • Ну не совсем за один проход… но можно просто настроить логистическую регрессию на данных y_scores с ответами y_true. Отсюда получите коэффициенты сигмоиды и точку разделения… но по поводу точки — ту вопрос, а какая Вам нужна? ROC-кривая как раз и показывает все возможные пары TPR, FPR для разных порогов (можно выбрать подходящий порог для отсечения).

      • Спасибо за правильный вопрос, подумаю )))

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход /  Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход /  Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход /  Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход /  Изменить )

w

Connecting to %s