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

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

Матрица путаницы — это показатель производительности для задач классификации (обучение с учителем). Прочитайте мою статью Алгоритмы машинного обучения для начинающих о типах обучения в машинном обучении.

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

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

  1. Сначала вам нужно знать свой положительный и отрицательный класс
  2. Общее количество сделанных прогнозов.
  3. И, наконец, что означают каждый столбец и строка

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

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

Следующее, что следует отметить, это то, что сумма всех 4 чисел будет равна общему количеству сделанных прогнозов. Из приведенной выше диаграммы матрицы n=240 представляет собой общее количество сделанных прогнозов. То есть 110+45+10+75.

Последнее, на что следует обратить внимание, это то, что в пакете машинного обучения Python Scikit Learn вертикальные столбцы представляют то, что предсказала модель, а горизонтальные столбцы представляют то, что эти метки фактически представляют собой. . Столбцы и строки можно переключать в другом пакете машинного обучения или любом другом программном обеспечении, которое вы используете для оценки матрицы путаницы. Тем не менее, порядок, который мы обсуждаем, - это то, что используется в пакете Python Scikit Learn.

МАТРИЧНЫЕ ТЕРМИНОЛОГИИ СМЕШАНИЙ

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

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

  1. Истинно положительный (TP): здесь модель предсказала голодный (положительный), а человек на самом деле голоден (положительный). В этом случае мы говорим, что это действительно положительно. Исходя из нашей матрицы, TP из приведенной выше матрицы составляет 110.
  2. Истинно отрицательный (TN): в этом случае модель предсказала не голоден (отрицательно), и человек также не голоден (отрицательно). Это действительно отрицательный прогноз. TN из приведенной выше матрицы равен 75.
  3. Ложноположительный результат (FP): в этом случае модель предсказала голодный (положительный результат), но это ложь. Фактическое значение равно не голоден (отрицательное). В этом случае модель ошибочно предсказала положительное значение. FP из приведенной выше матрицы равен 10.
  4. Ложноотрицательный результат (FN): в этом случае модель предсказала не голоден (отрицательный результат), но это неверно. Фактическое значение — голодный (положительный). В этом случае модель ошибочно предсказала отрицательное значение. FP из приведенной выше матрицы равен 45.

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

Зная, что они отображаются в алфавитном порядке, это означает, что если у вас есть два класса, такие как кошка и собака, первый предсказанный столбец будет для кошек, поскольку он начинается с C. за которыми следуют собаки, начинающиеся с D. Для значений true и false первый столбец будет ложным, а в матрице изменения или без изменения в первом столбце будет отток, а во втором — нет оттока. Строки также будут отображаться в том же порядке.

В матрице путаницы Истинно положительные и Истинно отрицательные выравниваются по диагонали. Ячейки, выделенные зеленым цветом в приведенной выше матрице, показывают истинно положительные и истинные отрицательные результаты. Это более очевидно в матрице с более чем двумя классами, как показано ниже. Истинные значения (истинно положительные и истинно отрицательные) выровнены по диагонали и выделены розовым цветом на изображениях ниже. Все остальное (выделено синим цветом) — ложный прогноз. И да, начиная с 3 класса, матрицу путаницы становится трудно отслеживать, используя терминологию (TP, TN, FP, FN), но, по сути, диагонали — это ваши точные прогнозы.

Метрики классификации с использованием матрицы путаницы

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

Точность

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

Из нашей матрицы это будет

Accuracy = (TP+TN)/n
         = 110+ 75 /240
         = 185/240
         =  0.771 

# Our accuracy score is 77%. 

# Note: n =  TP + TN + FP + FN

Когда использовать точность?

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

Например, предположим, что у нас есть набор данных размером 1000. Положительный класс голоден равен всего 100, а отрицательный класс не голоден равен 900. Если матрица путаницы предсказывает не голоден 850 раз и Голод50 раз. Показатель точности будет 850+50/1000, что будет показателем точности 90%. На первый взгляд это отличная оценка, но на самом деле модель не учится, она просто предсказывает, что большинство классов не голодны, потому что их очень много.

Это нехорошо, потому что если в будущем наша модель столкнется с экземпляром, который должен быть предсказан как голодный, она может быть не в состоянии это сделать, потому что не увидела достаточно данных по этому классу. Модель с показателем точности 90%, которая все еще не может хорошо обобщать, никому не нужна. Эта проблема возникает из-за того, что точность, как следует из ее названия, учитывает только точно предсказанные значения, не обращая внимания на отношения или что-либо еще. Это проблема, которую призван решить Precision and Recall.

Точность

Точность измеряет долю правильно спрогнозированных положительных случаев (истинных срабатываний) от всех спрогнозированных положительных случаев (истинные срабатывания + ложные срабатывания).

Он отвечает на вопрос: Когда он предсказывает «да», как часто он оказывается верным? На примере, с которым мы работали, давайте дополним его и представим, что мы работаем в гипотетической медицинской компании под названием Health Nut. Наша задача — построить модель машинного обучения, которая будет встроена в приложение для определения голода. Цель состоит в том, чтобы наша модель могла точнооценить, голоден ли человек, учитывая определенные входные данные, и предупредить его о том, что нужно что-нибудь съесть.

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

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

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

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

Снова используя нашу матрицу, мы можем рассчитать нашу точность как

Precision = TP/(TP + FP)
         = 110/(110 + 10)
         = 110/120
         =  0.916 

# Our precision score is 92%. Impresive! This is 15% better than our 
# accuracy score

Отзывать

Отзыв измеряет соотношение правильно предсказанных положительных случаев (истинно положительных результатов) ко всем фактически положительным случаям (истинно положительные + ложноотрицательные результаты).

Он рассчитывается как:

Отзыв иногда называют чувствительностью. Почему? Ты спрашиваешь. Потому что он измеряет, насколько чувствительна наша модель при правильном предсказании нашего положительного класса (голодный). Теперь я знаю, о чем вы думаете. Чем это отличается от точности? Позвольте мне объяснить.

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

Используя нашу модель ранее, мы можем объяснить 2 таким образом.

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

Короче говоря, точность фокусируется на точности положительных прогнозов, а отзыв фокусируется на охвате реальных положительных случаев.

Recall = TP/(TP + FN)
       = 110/(110 + 45)
       = 110/155
       = 0.73

# Our recall perform 19% lower than our precision

Теперь мы видим, что наш Recall работает очень плохо по сравнению с точностью. Если мы выполняем задачу, в которой для нас важны как точность, так и полнота, то нам нужен какой-то другой тип метрики. Здесь на помощь приходит F1.

Оценка F1

Оценка F1 представляет собой сочетание точности и полноты, также известное как Гармоническое среднее между точностью и полнотой. Это особенно полезно, когда вы хотите найти баланс между точностью и полнотой, поскольку оптимизация одной метрики (например, выбор высокой точности) может происходить за счет другой (приводить к низкой полноте), как мы сейчас сталкиваемся, или наоборот. F1 учитывает как точность, так и полноту, чтобы обеспечить сбалансированную оценку эффективности модели. Диапазон оценки F1 составляет 0–1. Чем ближе показатель F1 к 1, тем лучше производительность нашей модели.

F1 рассчитывается как:

Продолжая без примера, это будет наша оценка F1.

f1 = 2 * ((precision * recall)/(precision + recall))
   = 2 * ((0.916 * 0.73) / (0.916 + 0.73))
   = 2 * (0.668/1.646)  
   = 2 * 0.406
   = 0.812

# Our f1 score is 81%

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

Наконец, следует упомянуть, что, хотя общепризнанной нормы предсказания не существует, общепринятым эталоном является скорость предсказания 80% или выше в большинстве приложений. Он может быть еще выше в таких областях, как медицина, и ниже в таких областях, как игры.

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

Когда использовать F1

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

Ключевые идеи

Матрица путаницы — это таблица, используемая в моделях классификации, из которой могут быть получены такие показатели производительности, как точность, воспроизводимость и полнота.

Используйте точность, когда вы хотите точно предсказать положительный класс

Используйте отзыв, когда хотите захватить большую часть положительного класса

Используйте F1, если для вас важны как точность, так и полнота.

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

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

Попробуй себя

Сценарий. Вы хотите создать модель, которая может точно предсказать, беременна женщина или нет, чтобы использовать ее для создания нового набора инструментов для определения беременности. Беременность – ваш позитивный класс.

  1. Сколько прогнозов являются истинно положительными?
  2. Сколько прогнозов являются истинно отрицательными
  3. Сколько прогнозов являются ложными срабатываниями?
  4. Каков показатель точности?
  5. Какова точность вашей модели?
  6. Какой у тебя результат в F1?
  7. Какая метрика больше подходит для этого сценария?

Удачного кодирования!

Следуйте за мной на GitHub, LinkedIn и здесь, на Medium.

Если вы хотите узнать больше о машинном обучении и анализе данных, ознакомьтесь с Профессиональной программой анализа данных Azubi Africa.