Задача классификации

КОНСУЛЬТАЦИЯ 29.05 – самостоятельная №3

Машинное обучение. Классификация.

 

Сразу отвечаем на вопросы:

Да, постараемся сделать запись.

Да, файлы вывесим в группу.

Всем, кто оставил фидбек – безграничная любовь



Задача классификации.

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

Как и у регрессии, у классификации есть свои метрики качества прогнозов. На первой половине нашего занятия разберемся, что там да как.

 

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

 

В первом задании нам предлагают найти долю правильных ответов для всех трёх моделей. Ок, давайте найдем. Перепишем модельки.

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

TN = True negative, FN = False negative

FP = False positive, TP = True Positive

Что нужно, чтобы найти долю правильных ответов? Правильно, взять и поделить

TN + TP на сумму всего остального.

На примере 1 модели:

(80+80) / (80+20+20+80) = 0.8

 

Для 2 модели: (48+98) / (98+52+2+48) = 0.73

Для 3 модели: (10+10000) / (10000+90+20+10) = 0.98

 

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

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

 

Чтобы таких недочетов в нашей жизни было меньше, придумали ещё 2 метрики: Precision и Recall. Они на практике используются чаще.

Эта метрика отвечает за точность классификатора.

В принципе, из формулы понятно, как она считается.

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

Пример: мы хотим выдать кредит и нам смерть как нужно получить деньги с процентами обратно. Естественно, для нас страшнее будет False positive ошибка, ведь мы предсказали, что деньги вернутся, но… Не прокатило.

Пример 2: мы хотим найти зараженных КаКиМ-То вирусом. В таком случае, для нас будет страшнее False negative ошибка, ведь мы сказали человеку, что он здоров, тот, впоследствии пошел гулять по паркам и всех перезаражал. Так себе вышло.

 

Это я всё к чему – метрику мы выбираем в зависимости от того, что там важно и что нам нужно. Accuracy наверное не берут на практике или берут супер-редко.

 

 

Давайте-ка обратно к практике.

Найдем Precision и Recall для всех наших моделей.

Precision = TP / TP+FP

Recall = TP / TP+FN

 

Для 1: Precision = 80/(20+80)=0.8 Recall = 80/(20+80)= 0.8

Для 2: по аналогии, Precision = 0.96, Recall = 0.48

Для 3:Precision = 0.33, Recall = 0.1

 

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

Неплохо, да? Но и этого недостаточно.

Нам не всегда хочется выбирать между Precision и Recall, поэтому умные люди придумали так называемую f-меру. Считается она так:

Посчитаем этот параметр для наших моделей.

Для 1: 2* 0.8*0.8 / (0.8+0.8) = 0.8

Для 2: 2* 0.96*0.48 / (0.96+0.48) = 0.64

Для 3: 2* 0.33*0.3 / (0.33+0.1) = 0.15

 

Вот, теперь всё совсем хорошо стало.

 

 


 

f-мера очень полезная вещь, которую, кстати, можно визуализировать.

Совершенно бесполезно, но зато смотрите, как красиво

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

Ничего не напоминает? Кривые безразличия из микры, да.

Помните невеселые примеры с кредитами и вирусами?

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

Если β > 1 приоритет отдаётся полноте, если 0 < β < 1, то точности. Например, если β = 2, для нас более важна полнота. Если β = 0.5, более важна точность.

а) Представим себе два объекта: плохой и хороший. Представим себе, что модель предсказала нам вероятность того, что первый объект будет плохой и получила p̂1, а для второго случая (когда объект хороший) p̂2.

y = 1       P(y = 1) = p̂1 

y = 0       P(y = 1) = p̂2

Ясно, что если модель хорошая, то p̂1 > p̂2

roc_auc — это доля пар, где модель оказалась права

Чтобы это найти, нам надо сравнить каждый объект у=1 с каждым объектом у = 0

у = 1 у нас встречается два раза, у = 0 три.

наблюдений, логично, будет 6.

0.7 > 0.2    ok

0.7 > 0.3    ok

0.7 > 0.1    ok

0.25 > 0.2  ok

0.25 < 0.3   not ok

0.25 > 0.1  ok

Внимание! Нули с нулями и единицы с единицами мы не сравниваем.

Итого, 5 наблюдений из 6 у нас вышли правильными. Клево. Наверное.

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

 

Отсортируем нашу табличку по значению вероятности, которую предсказала модель

Теперь начнем строить:

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

 

 

Если положительный класс существенно меньше по размеру, roc_auc может давать неадекватную оценку качества алгоритма. Вылечить такой недостаток позволяет другая метрика, pr_auc (precision-recall area under curve). О ней мы сейчас и поговорим.

 

 

Давайте по оси x откладывать полноту, а по оси y точность. Будем по очереди перебирать

разные пороги и считать для них точность и полноту. Нанесём на картинку все полученные точки и соединим их. Это и будет precision − recall кривая.

Например, если мы возьмём порог ≥ 0.1, тогда все объекты будут принадлежать к классу 1, точность составит 2 / 5, а полнота 1. Если мы возьмём порог ≥ 0.2, тогда один объект

будет нулевым, а остальные четыре единичными. Точность составит 2 / 4, а полнота 1. По аналогии получим точность и полноту при порогах ≥ 0.25, ≥ 0.3 и ≥ 0.7.

PR- кривая всегда начинается из точки (0, 0) и заканчивается в точке (1, r), где r — это доля объектов первого класса в выборке.

В случае идеального классификатора, то есть если существует такой порог, что и точность, и полнота равны 100%, кривая будет проходить через точку (1, 1). Таким образом, чем ближе кривая пройдет к этой точке, тем лучше оценки. Площадь под этой кривой может быть хорошей мерой качества оценок принадлежности к классу 1. Такая метрика называется pr-auc, или площадь под PR-кривой.

 

Посчитав площадь под кривой получим pr-auc. Будем делать это, считая площади треугольников и прямоугольников.

0.5 ⋅ 1 ⋅ 0.5 + 0.5 ⋅ 0.5 ⋅ (0.66 − 0.5) + 0.52 = 0.25 + 0.04 + 0.25 = 0.54

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





Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: