Правильная обработка категориальных данных

Самый недооцененный способ кодирования данных и то, что вы делаете неправильно

Категориальные данные - это просто информация, объединенная в группы, а не в числовых форматах, например Пол, Пол или Образование Уровень . Они присутствуют почти во всех реальных наборах данных, но текущие алгоритмы все еще не могут с ними справиться.

Возьмем, к примеру, XGBoost или большинство моделей SKlearn. Если вы попытаетесь обучить их категориальным данным, вы сразу получите ошибку.

В настоящее время многие ресурсы рекламируют широкий спектр решений, которые на первый взгляд могут показаться работающими, но после того, как они будут продуманы, окажутся глубоко ошибочными. Это особенно верно для не порядковых категориальных данных, что означает, что классы не упорядочены (как это может быть для Good = 0, Better = 1, Best = 2). Необходима некоторая ясность, чтобы отличить подходы, которые специалисты по обработке данных должны использовать, от тех, которые просто заставляют модели работать.

Чего не следует делать: кодирование меток

Одним из самых простых и распространенных способов преобразования категориальных переменных является Кодирование метки. Он заключается в замене каждой группы соответствующим номером и сохранении такой нумерации во всем объекте.

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

Расстояние и порядок

Числа поддерживают отношения. Например, четыре - это дважды два, и при прямом преобразовании категорий в числа эти отношения создаются, несмотря на то, что они не существуют между исходными категориями. Глядя на предыдущий пример, Соединенное Королевство становится дважды Францией, а Франция плюс Соединенные Штаты равняется Германии.

Ну, это не совсем так ...

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

Решения

Одно горячее кодирование

Быстрое кодирование - наиболее распространенный и правильный способ работы с неординарными категориальными данными. Он состоит из создания дополнительной функции для каждой группы категориальной характеристики и отметки каждого наблюдения, принадлежащего (Значение = 1) или нет (Значение = 0) к этой группе.

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

Целевое кодирование

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

Процесс получения целевой кодировки относительно прост, и его можно резюмировать следующим образом:

  1. Сгруппируйте данные по категориям
  2. Рассчитайте среднее значение целевой переменной для каждой группы
  3. Присвойте среднее значение каждому наблюдению, принадлежащему к этой группе.

Этого можно добиться с помощью нескольких строк кода:

encodings = data.groupby('Country')['Target Variable'].mean().reset_index()
data = data.merge(encodings, how='left', on='Country')
data.drop('Country', axis=1, inplace=True)

В качестве альтернативы мы также можем использовать библиотеку category_encoders для использования функциональности TargetEncoder.

Целевое кодирование - мощное решение еще и потому, что оно позволяет избежать создания большого количества функций, как в случае с One-Hot Encoding, сохраняя размерность набора данных как исходную.

Резюме

Обработка категориальных признаков - обычная задача для специалистов по анализу данных, но часто люди точно не знают, как правильно их решать.

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

Вместо этого предпочтительными решениями являются One-Hot-Encoding и Target Encoding. One-Hot Encoding, вероятно, является наиболее распространенным решением, хорошо работающим в реальных сценариях. Целевое кодирование - менее известный, но многообещающий метод, который также поддерживает согласованность размерности набора данных, повышая производительность.

Чтобы читать больше подобных статей, подпишитесь на меня в Twitter, LinkedIn или на моем веб-сайте.