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

Кодирование категорных признаков

В лекции рассматриваются методы интерпретации моделей машинного обучения и работы с категориальными признаками. Сначала объясняется, как оценить важность признаков в уже построенной модели с помощью атрибута coef_ (веса). Затем подробно разбирается метод кодирования категориальных переменных: сравниваются One-Hot Encoding (создание бинарных столбцов под каждую категорию) и Label Encoding (присвоение каждой категории уникального числа). На примере кредитного скоринга показывается, почему One-Hot Encoding в большинстве случаев является более безопасным и адекватным подходом, а также демонстрируется создание функции для автоматизации обучения моделей.

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

1. Интерпретируемость важнее точности: Мало построить модель с хорошей точностью, важно понимать, почему она принимает то или иное решение (выдача / отказ в кредите).
2. Веса признаков (coef_): Атрибут coef_ в моделях (например, логистическая регрессия) хранит степень важности каждого признака. Знак «+» или «-» показывает, влияет ли признак на положительный или отрицательный ответ.
3. One-Hot Encoding: Преобразует текстовую категориальную переменную в несколько бинарных столбцов (1 — если категория совпадает, 0 — если нет). Это корректный способ, так как он не привносит в данные ложных числовых отношений.
4. Опасность Label Encoding: Присвоение категориям чисел (1, 2, 3…) заставляет модель искать математическую взаимосвязь (например, что категория «8» важнее категории «2» в 4 раза), что часто искажает реальность.
5. Автоматизация процессов: Для повторяющихся шагов (обучение, предсказание, оценка) целесообразно создавать функции, чтобы не писать один и тот же код каждый раз.
Показывать лекцию целиком
Краткое изложение

Часть 1. Анализ важности признаков
Лектор объясняет, что после построения модели важно понять логику её решений. Для этого используется атрибут coef_ (веса). Чтобы сопоставить вес с именем признака, создаётся DataFrame с двумя колонками: «фича» (название) и «вес». Самый сильный отрицательный фактор в примере — продолжительность кредита (duration), так как это увеличивает риски банка. Самые сильные положительные — наличие недвижимости и машины (как залог).

Часть 2. One-Hot Encoding для цели кредита
Исходный признак «цель кредита» был текстовым. Метод get_dummies из библиотеки Pandas превращает каждое уникальное текстовое значение в отдельный столбец. Если у клиента цель «бизнес», в столбце «бизнес» ставится 1, а во всех остальных — 0. Количество столбцов в датасете увеличивается. Затем из данных удаляется целевая переменная (правильные ответы), чтобы использовать её отдельно.

Часть 3. Сравнение One-Hot и Label Encoding
Лектор создаёт функцию get_accuracy, которая обучает модель, делает предсказание и возвращает точность. Это позволяет легко сравнивать алгоритмы. Качество моделей (особенно логистической регрессии и случайного леса) растёт после One-Hot Encoding.

Затем демонстрируется Label Encoding (простая нумерация целей: 1, 2, 3…). Проблема в том, что модель начинает считать, что между этими числами есть математическое отношение (например, риск категории 9 в 9 раз выше риска категории 1). Это вносит искажение.

Итог эксперимента: В рассмотренном примере One-Hot Encoding показал себя лучше. Label Encoding имеет смысл использовать только если вы точно знаете количественное соотношение между категориями (например, риск бизнеса в 3 раза выше риска покупки авто). Если предметная область неизвестна — применяйте One-Hot Encoding.

Выводы

1. Анализ весов позволяет не только предсказывать, но и объяснять решения модели, выявляя ключевые факторы (например, что срок кредита важнее, чем доход).
2. One-Hot Encoding — это «золотой стандарт» для обработки категориальных признаков, так как он не создаёт ложных числовых зависимостей между категориями.
3. Label Encoding потенциально опасен: он навязывает модели порядок и пропорции там, где их может не быть (нельзя сказать, что «ремонт» важнее «покупки машины» в 2 раза).
4. Увеличение количества признаков (после One-Hot) может потребовать настройки гиперпараметров, например, увеличения max_iter в логистической регрессии.
5. Создание функций-обёрток для обучения и оценки моделей ускоряет эксперименты и делает код чище.

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

1. Почему недостаточно просто добиться высокой точности модели? Зачем нужно «заглядывать внутрь»?
2. Что означает отрицательный вес (-1.45) у признака в логистической регрессии для задачи кредитного скоринга?
3. В чем заключается ключевое различие между One-Hot Encoding и Label Encoding с точки зрения появления «числового отношения»?
4. Почему присвоение категориям значений 1, 2, 3 может испортить модель, даже если это удобно для программиста?
5. В каком редком случае использование Label Encoding может быть оправдано и даже улучшить модель?
6. Зачем после применения get_dummies нужно удалять исходный столбец с целевой переменной (Target) из обучающей выборки?
7. Что означает предупреждение «количество итераций достигло предела» (max_iter) и как его исправить?
Вернуться к учебному плану