|
Professor Seleznov
|
В четвертой части мы начали изучение задачи классификации и разобрали метод kNN. Мы уже дошли до той точки, когда можем построить худо-бедно работающий классификатор. Но если нас спросят: “а насколько хорошо он работает?”,
то максимум, что мы пока сможем ответить — что-то вроде: “ну... на тестовой выборке модель правильно ответила в p% случаев”. С одной стороны, как гласит древняя пословица: лучше иметь 500 рублей, чем 200. Но гарантирует ли высокий p% качество модели? Сегодня разберём эти вопросы, посмотрим на метрики качества в ML, поймём, зачем они нужны и как их правильно интерпретировать. Accuracy Во вступлении мы уже обсудили эту метрику. Она показывает долю правильных ответов модели. Сразу отмечу, что хоть accuracy часто переводят как “точность”, в ML это может приводить к путанице. Поэтому, вместо перевода, будем говорить либо доля правильных ответов, либо просто Accuracy. Чем он удобен? Accuracy даёт простую и понятную оценку качества модели: он показывает, в каком проценте случаев модель угадала правильный класс. Это хороший базовый ориентир, особенно когда классы в задаче сбалансированы (т.е. имеют примерно одинаковое количество элементов) и ошибки разных типов одинаково важны. Однако у этой метрики есть серьёзное ограничение — он ничего не говорит о том, какие именно ошибки допускает модель. Рассмотрим ситуацию со странными идеями стартапов, среди которых 1 из 1000 может оказаться успешной. Если модель всегда будет отвечать “ничего не получится”, её accuracy будет равен 99.9%.
Формально это отличный результат, но практическая польза такой модели сомнительна... Именно в таких задачах accuracy перестаёт быть полезной метрикой — она скрывает критически важные ошибки, особенно когда классы несбалансированы или цена ошибок различается. Precision Precision (или точность положительного класса) показывает, из всех объектов, которые модель отнесла к положительному классу, сколько действительно являются положительными. Возвращаясь к примеру со стартапами, precision показывает, какая доля стартапов, которые модель предсказала как успешные, действительно таковыми и являются. Precision важен в задачах, где мы не хотим, чтобы модель слишком часто "поднимала ложную тревогу". Например, в банковских системах мы вряд ли будем рады модели, которая отменяет каждую вторую транзакцию, считая её мошеннической. Рассмотрим небольшой пример: Допустим, у нас есть 100 идей стартапов, из которых только 5 действительно окажутся успешными. Модель выдала следующий результат:
- из 5 успешных стартапов она правильно нашла только 3, а оставшиеся 2 посчитала провальными;
- из 95 провальных стартапов модель правильно отметила 90 как провальные, но ещё 5 ошибочно посчитала успешными.
Тогда:
- всего модель дала 93 правильных ответа из 100, то есть accuracy равен 93%;
- успешными модель посчитала 8 стартапов, но реально успешными из них оказались только 3. Значит precision = 3/8 (37.5%)
Несмотря на высокий accuracy, доверять положительным предсказаниям модели всё ещё трудно. Recall Recall (или полнота) показывает, какую долю положительных объектов модель смогла найти среди всех действительно положительных объектов. В нашем примере это доля успешных стартапов, которые модель смогла определить как успешные (в примере таких оказалось 3 из 5, следовательно recall = 60%). Recall особенно важен в задачах, где критично не пропускать положительные объекты. Например, при поиске заболеваний низкий recall означает, что модель пропускает действительно больных людей. F-score У нас возникла одна проблема: precision и recall чуть ли не враждуют друг с другом. Например, модель может очень редко предсказывать "успешный стартап". Тогда её precision будет высоким — ведь она почти не ошибается. Но recall окажется низким, потому что модель пропустит множество действительно успешных проектов. И наоборот: если модель начнёт помечать почти всё как успешное, recall вырастет, но precision резко упадёт. Поэтому на практике часто используют F-score — метрику, которая пытается одновременно учитывать и precision, и recall. В частности F1-score это среднее гармоническое от Precision (

) и Recall (

):

Заметим, что F1-score будет большим только тогда, когда и precision, и recall достаточно большими одновременно. Помимо F1, есть её обобщенная версия Fβ-score. Если F1 одинаково чувствителен как к precision так и к recall (формула симметрична относительно P и R), то Fβ позволяет вручную регулировать баланс между ними. Вычисляется она таким образом:

Если нам важно сильнее учитывать precision, возьмем

. Если важнее recall —

.
Если же оба показателя одинаково важны, будем использовать

, что соответствует стандартному F1-score. Таким образом, Fβ позволяет гибко управлять балансом между precision и recall. Confusion Matrix До того, как пойти дальше, немного поговорим о той же самой концепции через "четырёх всадников апокалипсиса". Честно говоря, такая интерпретация метрик мне не очень нравится — в ней легко запутаться, но, как говорится, надо Федя, надо... Представим, что модель — это система, которая выносит приговор каждому объекту: положительный он или отрицательный. И у каждого такого приговора есть один из четырёх исходов. TP — True Positive (истинно положительный) Это случаи, когда модель сказала: “да, это положительный объект”, и оказалась права.
Модель решила, что стартап успешный и он действительно успешный. FP — False Positive (ложно положительный) Модель сказала: “это положительный объект”, но ошиблась:
Модель решила, что стартап успешный, но на деле он провальный. FN — False Negative (ложно отрицательный) Модель сказала: “это отрицательный объект”, но ошиблась.
Модель решила, что стартап провальный, хотя он на самом деле успешный. TN — True Negative (истинно отрицательный) Модель правильно определила отрицательный класс.
Стартап признан провальным и он действительно провальный.
Маленький гайд запомнить
- True (T) — модель оказалась права.
- False (F) — модель ошиблась.
- Positive (P) — модель отнес объект в положительный класс (класс 1)
- Negative (N) — модель отнес объект в отрицательный класс (класс 0)
Например:
TP: T - модель права, потому что P - отнесла объект в положительный класс
FN: F - модель ошиблась, потому что N - отнесла объект в отрицательный класс
Оказывается, что все метрики, которые мы обсуждали раньше — это просто разные способы смотреть на эти четыре числа:



Также, можно раскрыть формулу для F1-score

Интересно, что TN не участвует в F1-score, поэтому эта метрика не зависит от количества правильно классифицированных отрицательных объектов.
Из-за этого F1 особенно полезен в задачах с дисбалансом классов, когда положительный класс встречается редко и именно качество его определения наиболее важно. В таких задачах нас интересует не то, насколько хорошо модель угадывает "всё подряд", а то, насколько хорошо она находит редкие, но важные случаи — например, заболевания или мошеннические транзакции. Precision-Recall (PR) curve На практике большинство моделей выдают не класс, а вероятность принадлежности к положительному классу. Мы же выбираем порог (threshold): например, если вероятность больше 0.5 — считаем объект положительным, иначе отрицательным. Здесь появляется важная идея: если менять этот порог, будут меняться и precision, и recall.
- при большом пороге модель почти ничего не помечает как положительное․ precision получается большим, а recall — маленьким
- при уменьшении порога модель помечает всё больше объектов как положительное, следовательно, recall растает, precision падает
Если для каждого значения порога посчитать precision и recall, а затем отложить их друг относительно друга, мы получим Precision–Recall curve (PR-кривую).

пример PR кривой Чем ближе кривая к правому верхнему углу, тем лучше модель (высокие precision и recall). Резкое падение кривой говорит о плохом балансе ошибок, а низкое положение — о слабой разделяющей способности модели. ROC-curve Несмотря на свою наглядность, PR-кривая не является идеальным инструментом оценки.
Её главный минус в том, что она ничего не говорит о том, насколько хорошо модель различает отрицательный класс. Такая фокусировка на положительном классе особенно полезна в задачах с сильным дисбалансом, но иногда этого недостаточно для полного понимания поведения модели. ROC(receiver operating characteristic)-кривая, в свою очередь, смотрит на задачу более “симметрично” — учитывая поведение модели сразу на обоих классах. Она показывает, как меняется способность модели находить положительные объекты при росте числа ложных срабатываний. Чтобы понять ROC-кривую, введём две величины: TPR и FPR (True Positive Rate и False Positive Rate): TPR показывает, какую долю действительно положительных объектов модель смогла найти.
По сути, это уже знакомый нам recall:

FPR показывает, какую долю отрицательных объектов модель ошибочно отнесла к положительным:

Как и в случае с PR кривой, мы меняем порог (threshold) и для каждого его значения считаем TPR и FPR. Далее, если нарисовать график где по оси X будет FPR, а по оси Y — TPR, можно получить ROC-кривую.

пример ROC кривой Как с этим работать:
- Чем ближе кривая к левому верхнему углу (точка (0, 1)), тем лучше модель. Это означает, что модель успешно находит положительные объекты (высокий TPR) и при этом почти не создаёт ложных срабатываний (низкий FPR).
- Если кривая резко уходит вправо и вниз, это говорит о том, что модель начинает сильно ошибаться на отрицательных объектах при попытке находить больше положительных.
- Диагональ (линия от (0,0) до (1,1)) соответствует случайной модели — такой, которая не умеет различать классы и фактически "угадывает".
ROC-AUC ROC-кривая показывает, как модель балансирует между TPR и FPR при разных порогах. Но сам график неудобно использовать для сравнения моделей — потому что это не одно число, а целая кривая. Чтобы упростить сравнение, используют ROC-AUC (Area Under Curve) — площадь под ROC-кривой.
Полученное число показывает насколько "хорошо в среднем" модель отделяет положительные объекты от отрицательных при всех возможных порогах. Интерпретировать его можно таким образом։
- AUC = 1 → идеальная модель (полное разделение классов)
- AUC = 0.5 → случайная модель (как подбрасывание монетки)
- AUC < 0.5 → модель хуже случайной (лайфхак: просто перевернуть предсказания и получить нормальную модель)
Заключение Теперь если нас спросят: “а насколько хорошо работает твой классификатор?” — мы уже не ограничиваемся одной цифрой вроде accuracy.
Мы поняли, что качество модели — это многогранная вещь, и его можно рассматривать с разных сторон:
- через confusion matrix и базовые ошибки (TP, FP, FN, TN);
- через precision и recall, которые показывают разные типы ошибок;
- через F-score, который балансирует между ними;
- через PR-кривую, которая показывает компромисс между precision и recall;
- через ROC-кривую, которая учитывает поведение модели на обоих классах;
- и через ROC-AUC, который сводит всё это в одно число․
И главное, что стоит запомнить: не существует одной правильной метрики качества. Есть только разные способы измерить разные типы ошибок. И выбрать нужно тот, который соответствует задаче. Теперь, когда мы узнали про метрики оценивания, в следующей части спокойно перейдём к логистической регрессии и посмотрим, как модели уже начинают не просто оцениваться, а обучаться на данных.-Источник
|