90% точность не достигает цели

Позвольте мне рассказать вам историю стажера-специалиста по данным, который был счастлив использовать алгоритмы машинного обучения на реальных данных после года изучения набора данных Iris, сравнения Sepal.length и Petal.width.

Этому стажеру было поручено его первое задание в новой компании. На основе данных о просмотре спрогнозируйте вероятность того, что посетитель вернется на веб-сайт в течение дня. Цель этого прогноза заключалась в том, чтобы предложить другой опыт для пользователя, который, скорее всего, вернется.

Clic, clic, clic, shift + Enter: запущена ячейка записной книжки, алгоритм творит чудеса, вычисление точности ...

Через несколько бесконечных секунд в тишине запуска ячейки всплывает результат:

Точность: 90%

Банко!

Этот молодой, невинный специалист по анализу данных, стажер, затем идет к своему наставнику, засунув руку в карман: «Эй, приятель, что-нибудь более интересное для меня?»

На самом деле… 90% - это далеко.

Среди всех посещений веб-сайта только 9% привели ко второму посещению в течение дня.

Если бы этот стажер предсказал, что никто не вернется, его точность составила бы 91%, что было бы лучше, чем его алгоритм.

Поэтому важно знать:

Какие показатели для оценки эффективности алгоритмов?

0. Быстрый ответ

Чего я жду от своей модели?

Ответ на этот вопрос составляет 3/4 работы.

  • Банковские компании хотят обнаруживать мошенничество. Они ожидают, что модель не упустит никаких случаев мошенничества. ноль, застежка-молния, нада. Модель может ошибаться: обнаруживать мошенничества, которых нет. Время от времени с клиентами будут связываться для подтверждения транзакции, это не имеет большого значения.
  • Почтовые службы, напротив, могут пропускать спам-письма, которые попадают прямо во входящие. Но они сделают все возможное, чтобы не классифицировать электронные письма как спам (по причинам UX).
  • Алгоритмы распознавания рака по изображениям родинок могут обнаружить рак, которого нет. Родинка будет удалена, конец истории. Это лучше, чем упустить настоящий рак.

Чего я жду от своей модели?

Сказано иначе:

Какие ошибки может сделать моя модель? А какие ошибки запрещены?

Ответ может заключаться в бизнес-целях компании. Что касается моего вводного примера, это сводится к ответу на вопрос: предпочитаем ли мы отправлять уведомление тому, кто совсем не заинтересован, или мы предпочитаем, чтобы кто-то очень мотивированный покинул веб-сайт?

Поэтому мы должны знать, что мы пытаемся минимизировать. Для этого можно использовать несколько формул:

1. Показатели и инструменты

Мы рассмотрим следующие показатели и инструменты:

  • Матрица путаницы
  • Точность
  • Точность
  • Отзывать
  • F1-Score
  • Чувствительность, специфичность и кривая ROC

В этой статье я буду использовать результаты этого обнаружения:

Алгоритм должен был распознать Брэдли Купера, он, очевидно, узнал слишком много людей.

Затем мы получили y = [0,0,0,0,0,0,0,0,0,0,1] (реальные классы) и y pred = [0,0,0,0,0,0,0 , 0,0,1,1] (прогнозируемые классы).

I. Матрица недоразумений

Эта матрица - основа всего. Следующие ниже вычисления и кривая ROC основаны на tn, fn, fp и tp, показанных на изображении выше.

Любой уважающий себя специалист по данным уже колебался относительно истинно отрицательного / ложноположительного / ложноотрицательного / истинно положительного… Я нашел метод; первая часть (истина / ложь) указывает, является ли прогноз верным (? pred class = true class?), вторая часть (положительный / отрицательный) указывает результат прогноза.

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

Если мы вернемся к трем моим предыдущим примерам, банку потребуется fn = 0 при обнаружении мошенничества, службе электронной почты потребуется fp = 0 при обнаружении спама, а врачу потребуется fn = 0 при обнаружении рака.

II. Точность

Точность позволяет узнать долю хороших прогнозов по сравнению со всеми прогнозами. Операция проста: количество хороших прогнозов / общее количество прогнозов.

Как я объяснил выше, проблема с этой метрикой в ​​том, что она не указывает на сильные и слабые стороны нашей модели.

Если бы наш алгоритм не обнаружил Брэдли Купера, мы бы тоже добились успеха на 90%.

III. Точность

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

В нашем примере это количество раз, когда Брэдли Купера узнавали (это действительно был он), по сравнению с количеством раз, когда его предсказывали (даже если на самом деле это было не так). его).

хм, наш алгоритм не так хорош ...

Точность измеряет стоимость ложных срабатываний, то есть тех, которые были обнаружены по ошибке. Если мы пытаемся ограничить количество ложных срабатываний, то именно этот показатель мы собираемся минимизировать. В примере обнаружения спама, показанном здесь, мы достигли точности = 1. Это идеально для этого типа проблем.

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

Но ... как мы узнаем, все ли положительные классы обнаружены?

Для этого мы будем использовать ...

IV. Напомним

Отзыв относится к количеству документов, правильно отнесенных к классу i, по сравнению с общим количеством документов, принадлежащих к классу i (общее истинно положительное число).

Что ж, пример Брэдли Купера не подходит для иллюстрации этого индикатора. Но, допустим, у нас на фото было несколько Брэдли Купера, вспомните, сколько раз Брэдли Купера узнали, по сравнению с количеством раз, когда его должны были узнать (где он на самом деле).

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

Вы видели это приближающимся, в случае банковского мошенничества или обнаружения рака, мы желаем ... у нас должен быть Recall = 1.

Напоминание также называется чувствительностью.

Оооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооо У нас есть метрики для оценки ложноотрицательного и ложноположительного воздействия. Но как мы можем в целом оценить нашу модель?

Дорогой читатель, между Precision и Recall существует волшебная комбинация, которая называется…

В. F1-Score

F1-Score тонко сочетает в себе точность и отзывчивость. Это интересно и интереснее точности, потому что количество истинных негативов (tn) не учитывается при расчете. А в ситуациях несбалансированного класса, таких как Брэдли Купер, у нас есть большинство истинных негативов, которые полностью искажают наше восприятие производительности алгоритма. Большое количество истинных негативов (tn) не повлияет на оценку F1.

Таким образом, в случае несбалансированной ситуации в классе следует отдавать предпочтение баллу F1 над точностью.

VI. Чувствительность, специфичность, кривая ROC

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

Что это за порог?

Порог

Представьте себе тест на грипп. Этот тест основан только на температуре тела. Чтобы решить, болен ли кто-то, мы определяем температурный порог, выше которого человек считается больным.

Если порог = 40 ° C, высока вероятность того, что тест будет мало или даже не даст ошибок при рассмотрении пациентов как больных (fp = 0). С другой стороны, он забудет многих пациентов, у которых температура тела может достигать 39,5 ° C (fn = очень высокая).

Это пример с одним параметром. Алгоритмы машинного обучения учитывают множество параметров. На самом деле порог оценивается не в ° C, а в диапазоне от 0 до 1. Порог представляет собой вероятность, исходя из которой мы считаем, что человек принадлежит к классу X.

В python, если мы используем библиотеку Sklearn, мы вызовем функцию pred_proba и изменим порог следующим образом:

y_pred = (clf.predict_proba(X_test)[:,1] >= THRESHOLD).astype(bool)

Затем мы должны подсчитать tp, tn, fp, fn, и мы можем рассчитать чувствительность, специфичность и кривую ROC:

Чувствительность

Чувствительность измеряет долю правильно определенных положительных прогнозов (положительных прогнозов, которые на самом деле оказались положительными). Это действительно та же формула, что и отзыв.

Все, что было замечено в отзыве, остается в силе, чувствительность позволяет нам измерить количество положительных занятий, которые мы пропустили.

Специфика

Специфичность, в отличие от чувствительности, измеряет долю правильно идентифицированных отрицательных элементов.

Формулы специфичности и чувствительности говорят сами за себя: они дополняют друг друга. Просмотр одного без другого ничего не дает. Например, если мы классифицируем больных / здоровых с порогом = 40 ° C, специфичность будет равна 1, но чувствительность будет очень низкой.

Хорошая модель должна быть чувствительной и конкретной.

Подведем итоги… Мы собираемся изменять порог, который будет изменять значения tn, tp, fn, fp, что будет изменять чувствительность и специфичность. Мы представим их на кривой, называемой… кривой ROC.

Кривая ROC

Если вы поняли эту предыдущую часть, больше нечего сказать ... кроме интерпретации.

Чтобы представить точки, мы представим чувствительность по оси Y и (специфичность 1) по оси X.

Приведенная выше кривая получена при идентификации сердечной недостаточности в зависимости от уровня BNP (натрийуретический пептид B-типа для любопытных). Уровень BNP - это порог. Замечено, что чем больше увеличивается этот уровень BNP, тем сильнее снижается чувствительность.

Эта кривая служит двум целям:

  • Сравнить модели
  • Выберите оптимальный порог

Как сравнивать модели?

Мы можем сравнивать модели, отображая их кривые ROC. Затем вы можете выбрать, какая модель работает лучше всего. Для его выбора необходимо опираться на площадь под кривой (Area Under the Curve). Чем больше площадь под кривой, тем лучше наша модель.

В предыдущем примере мы выберем модель, из которой получится кривая D.

Как выбрать идеальный порог?

Идеальный порог - лучший компромисс между чувствительностью и специфичностью.

Как поясняется здесь, идеальный порог соответствует точке как наиболее близкой к идеалу (1.1), так и наиболее удаленной от диагонали.

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

Построение кривой ROC шаг за шагом представлено здесь.

Заключение

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

Углубить вопрос? Формулы этой статьи взяты из статей Википедии там и там очень полные!

400 просмотров в месяц !!

Несколько месяцев назад я опубликовал именно эту статью на французском языке. Получил 400 просмотров и 0 сообщений.

Моя основная мотивация для написания - помочь ... Если я помог вам, пожалуйста, оставьте комментарий, свяжитесь со мной в Linkedin или, пожалуйста, хлопните X раз (X будет кратно 3 (X по модулю 3 = 0), я пойму сообщение :)