Анализ данных на Python в примерах и задачах

Описание различных метрик качества. Часть 2

В лекции рассматриваются метрики качества бинарной классификации (Recoil/Recall, Precision, Accuracy, F1) на примере задачи определения спама. Анализируется ситуация с несбалансированными классами (класс «спам» составляет лишь 15% данных) и объясняется, почему Accuracy в таких случаях вводит в заблуждение. На примере двух алгоритмов — логистической регрессии и k-ближайших соседей (KNN) — демонстрируется, как интерпретировать Precision и Recall для выбора лучшей модели в зависимости от бизнес-рисков (что хуже: пропустить спам или удалить важное письмо). В конце лекции подчеркивается важность анализа значимости признаков и универсальности синтаксиса библиотеки Scikit-learn.

Основные мысли

1. Recall (Полнота) отвечает на вопрос: «Какую долю от всех реальных спамов мы нашли?» (TP / (TP + FN)).
2. Precision (Точность) отвечает на вопрос: «Какую долю среди предсказанных нами спамов составляют реальные спамы?» (TP / (TP + FP)).
3. Accuracy (Доля верных ответов) бесполезна при сильном дисбалансе классов: если спама 15%, всегда отвечая «Не спам», мы получим Accuracy 85%, но такая модель бесполезна.
4. Выбор метрики зависит от цены ошибки:
o Плохо объявить спамом важное письмо (ложное срабатывание) → важнее Precision.
o Плохо пропустить спам → важнее Recall.
5. В задаче определения спама приоритетнее Precision, так как потеря важного письма критичнее, чем редкий пропуск спама.
6. Логистическая регрессия (Precision 99%, Recall 84%) предпочтительнее KNN (Precision 100%, Recall 32%), так как находит больше реального спама при приемлемо высокой точности.
7. В Scikit-learn синтаксис един для всех моделей: .fit(), .predict(), одинаковый подсчет метрик, что упрощает эксперименты.
Показывать лекцию целиком
Краткое изложение

Введение в метрики:
Лектор объясняет метрику Recoil (Recall) как отношение правильно предсказанных единиц (True Positive) ко всем реальным единицам в данных. В отличие от Precision, который отвечает на вопрос «насколько мы были правы, когда сказали "1"».

Дисбаланс классов:
В данных класс «1» (спам) встречается лишь в 15% случаев. Из-за этого неинформативная метрика Accuracy (общая точность) будет высокой (85%), даже если модель всегда отвечает «Не спам».

Правила выбора метрики:
В бизнес-контексте (фильтрация писем):
• Пропустить спам (False Negative) — не очень страшно.
• Объявить хорошее письмо спамом (False Positive) — катастрофа (потеря важных данных, траншей, денег).
Следовательно, главная метрика — Precision (чтобы среди писем, попавших в спам, не было хороших).

Сравнение двух моделей:
1. Логистическая регрессия: Precision = 99% (лишь 1 ошибка на 100 определений спама), Recall = 84% (находит 84% всего спама).
2. K-ближайшие соседи (KNN): Precision = 100% (абсолютно не ошибается), Recall = 32% (находит только треть спама).
Вывод: Лучше логистическая регрессия, так как она отсеивает больше спама, а её мелкие ошибки (1%) приемлемы.

Анализ признаков:
• Для логистической регрессии выведены коэффициенты весов. Положительные коэффициенты (например, win, claim, txt, call) указывают на спам. Отрицательные (например, Ltgt — аббревиатуры обычной речи) — на «не спам».
• У KNN нет весов признаков, он работает только через метрики расстояния.

Итог и философия:
Scikit-learn унифицирует процесс: CountVectorizer, fit_transform, fit, predict, метрики — всё одинаково для любых алгоритмов. Однако важно не просто получить высокую точность, а интерпретировать модель: почему она дала тот или иной вес признаку. Модель может выдать результат, противоречащий здравому смыслу предметной области, и тогда ей нельзя доверять.

Выводы

1. Accuracy не подходит для задач с дисбалансом классов (например, 85% / 15%).
2. Для задачи определения спама критически важна Precision (минимизация ложных срабатываний), а не Recall.
3. Модель логистической регрессии оказалась практичнее KNN: несмотря на идеальную точность KNN, она слишком нечувствительна (находит лишь 32% спама).
4. Недостаточно просто обучить модель — необходимо анализировать веса признаков, чтобы убедиться в соответствии модели логике предметной области.
5. Библиотека Scikit-learn предоставляет единый интерфейс для разных алгоритмов, что ускоряет эксперименты (достаточно заменить переменную с моделью).

Вопросы для самопроверки

1. Почему в задаче с 85% «нулей» и 15% «единиц» Accuracy в 85% считается плохим результатом?
2. В чем разница между Precision и Recall? Представьте, что модель нашла 5 спамов, но реально их в корзине 10, при этом среди найденных 5 один был важным письмом. Рассчитайте обе метрики.
3. Лектор выбирает логистическую регрессию (Precision 99%, Recall 84%) вместо KNN (Precision 100%, Recall 32%), работая «внешним подрядчиком». Почему? Какой риск он минимизирует?
4. Какие коэффициенты (веса признаков) в логистической регрессии говорят о спаме — положительные или отрицательные?
5. Почему для алгоритма KNN нельзя вывести «важность признаков» так же, как для логистической регрессии?
6. О чем говорит ситуация, когда модель машинного обучения присваивает параметру отрицательный вес, а эксперт в предметной области точно знает, что зависимость должна быть положительной?
Вернуться к учебному плану