Кардинальность (Cardinality)

Автор:

Количество уникальных значений, которые может принимать признак в наборе данных.

Кардинальность (Cardinality) — это количество уникальных значений, которые может принимать признак в наборе данных. Проще говоря, кардинальность показывает, сколько разных значений есть у переменной.

Этот термин особенно часто используется при работе с категориальными признаками в Машинном обучении (ML) и аналитике данных.

Простой пример

Предположим, есть колонка country:

usercountry
1USA
2Germany
3USA
4France
5Germany

Уникальные значения:

USA
Germany
France

Кардинальность признака country = 3.

Низкая и высокая кардинальность

Категориальные признаки обычно делят на два типа.

Низкая кардинальность

Признак имеет небольшое количество уникальных значений:

  • пол (2 значения)
  • день недели (7 значений)
  • статус заказа (3–5 значений)
    Такие признаки легко кодируются.

Высокая кардинальность

Признак имеет много уникальных значений:

  • user_id
  • email
  • номер телефона
  • адрес
  • название товара
    Иногда количество уникальных значений может быть почти равно количеству строк.

Почему кардинальность важна в ML

Кардинальность напрямую влияет на способ обработки данных.

Проблемы One-Hot Encoding

Если использовать One-Hot Encoding для признака с высокой кардинальностью (к примеру, city имеет 10 000 уникальных значений), то появится 10 000 новых колонок.

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

Риск переобучения

Если признак почти уникален (например user_id), модель может:

  • запомнить конкретные объекты
  • плохо обобщать на новые данные

3. Влияние на выбор модели

Некоторые алгоритмы лучше работают с высокой кардинальностью:

  • CatBoost
  • LightGBM
  • Target Encoding

Как посмотреть кардинальность в Python

import pandas as pd

data = pd.DataFrame({
    "city": ["London", "Paris", "London", "Berlin", "Paris"]
})

cardinality = data["city"].nunique()
print(cardinality)
3

Как работать с признаками высокой кардинальности

Есть несколько распространённых подходов.

  • Target Encoding: заменяем категорию средним значением таргета.
  • Frequency Encoding: Категория заменяется частотой появления.
  • Embeddings: Используется в нейросетях.
  • Специализированные алгоритмы: Word2Vec, GloVe, FastText и т.д.

Когда высокая кардинальность — это нормально

Высокая кардинальность не всегда проблема.

Например:

  • товар в интернет-магазине
  • ID пользователя
  • геолокации

В таких задачах важно просто правильно закодировать признак.