Агрегация нескольких закодированных категориальных значений

Вопрос или проблема

Я пытаюсь найти общепринятые техники для работы с многоценностными категориальными переменными с высокой кардинальностью.

В данный момент я использую набор данных с признаком CATEGORY, который имеет кардинальность около 20,000. One-hot кодирование не имеет смысла, так как это слишком сильно увеличит пространство признаков.

Каждое наблюдение в моем наборе данных может принимать несколько значений для признака CATEGORY, например, в строке 1 может быть значение a, но в строке 2 могут быть значения a, b, c, d.

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

Как следует комбинировать эти закодированные значения?

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

На визуальном уровне

recordid | category | value
-------- | -------- | -----
   1     |   a      |  5
   2     |   a,b,c  |  10

это станет

recordid | category |  value
-------- | -------- | ------
   1     |   a      |   5
   2     |   a      |   10
   2     |   b      |   10
   2     |   c      |   10

Вы можете затем выполнять дальнейшую агрегацию или преобразования по мере необходимости.

В противном случае вы можете рассмотреть “a”, “abc” и “abcd” как новую категорию, т.е. элемент с категориями “abc” отличается от элемента с только категорией “a”.

В этом случае я использую параметр min_frequency класса OneHotEncoder из SK-learn, ознакомьтесь: https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.OneHotEncoder.html

Вы задаете минимальное количество наблюдений для достижения значения, чтобы иметь собственный one-hot признак. Все значения, которые не достигают этого минимума, считаются редкими и будут сгруппированы в infrequent_category.

Допустим, вы установили его на 100, тогда совершенно приемлемо иметь много one-hot признаков, потому что все они будут иметь более 100 наблюдений.

Ответ или решение

Агрегация многократных закодированных категориальных значений

Работа с многократными категориальными переменными, особенно с высокой кардинальностью, представляет собой сложную задачу в современном анализе данных. В вашей ситуации переменная CATEGORY имеет около 20,000 уникальных значений, и использование метода one-hot кодирования может привести к значительному увеличению размерности данных. Вместо этого необходимо применять методы, позволяющие эффективно агрегировать и представлять такие категории. Давайте рассмотрим несколько подходов, которые помогут вам справиться с этой задачей.

1. Один из наиболее распространенных подходов — это многократная кодировка значений

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

Пример:

Исходная структура данных может выглядеть так:

recordid | category | value
---------|----------|------
  1      |    a     | 5
  2      |  a,b,c   | 10

После нормализации данных мы можем преобразовать таблицу в следующий формат:

recordid | category | value
---------|----------|------
  1      |    a     | 5
  2      |    a     | 10
  2      |    b     | 10
  2      |    c     | 10

Это позволяет вам сохранять отдельную идентификацию каждой категории для каждой записи.

2. Использование метода частотной фильтрации

Одним из существенных недостатков является то, что многие категории могут быть редкими, и использование всех возможных значений может привести к ненужному размыванию информации. Optimal решение — использовать параметр min_frequency в методе OneHotEncoder из библиотеки scikit-learn. Он позволяет задавать минимальное количество вхождений для того, чтобы категория была закодирована отдельно.

Например, если вы установите это значение равным 100, все категории, у которых менее 100 вхождений, будут сгруппированы в категорию infrequent_category. Это решение помогает уменьшить размерность признаков и избавиться от шумовой информации.

3. Агрегация через стембинговые методы

Если вы хотите сохранить информацию о многократных категориях, но в то же время избегать чрезмерного увеличения размерности, можно использовать агрегированные метрики, такие как:

  • Count: Подсчет количества уникальных категорий в каждой строке.
  • Mode: Определение наиболее часто встречающегося значения среди категорий для каждой строки.
  • Binarizer: Преобразование значений в бинарные (наличие или отсутствие определенной категории).

4. Кодирование с использованием методов художественной группировки

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

Заключение

Агрегация многократных закодированных категориальных значений требует тщательного выбора подхода, учитывающего специфику ваших данных. Рассмотрите использование многоколонного представления, параметров частотной фильтрации, агрегированных метрик и группового кодирования. Каждый из этих методов можно адаптировать под специфические требования и характер данных в вашей задаче.

Чтобы больше узнать об этих методах, рекомендуем ознакомиться с документацией и практическими примерами в рамках scikit-learn и других библиотек для анализа данных. Выбор итогового решения должен основываться на проведенном предварительном анализе данных и оценке их влияния на вашу модель.

Оцените материал
Добавить комментарий

Капча загружается...