Кардинальность (Cardinality)
Количество уникальных значений, которые может принимать признак в наборе данных.
Кардинальность (Cardinality) — это количество уникальных значений, которые может принимать признак в наборе данных. Проще говоря, кардинальность показывает, сколько разных значений есть у переменной.
Этот термин особенно часто используется при работе с категориальными признаками в Машинном обучении (ML) и аналитике данных.
Простой пример
Предположим, есть колонка country:
| user | country |
|---|---|
| 1 | USA |
| 2 | Germany |
| 3 | USA |
| 4 | France |
| 5 | Germany |
Уникальные значения:
USA
Germany
France
Кардинальность признака country = 3.
Низкая и высокая кардинальность
Категориальные признаки обычно делят на два типа.
Низкая кардинальность
Признак имеет небольшое количество уникальных значений:
- пол (2 значения)
- день недели (7 значений)
- статус заказа (3–5 значений)
Такие признаки легко кодируются.
Высокая кардинальность
Признак имеет много уникальных значений:
- user_id
- номер телефона
- адрес
- название товара
Иногда количество уникальных значений может быть почти равно количеству строк.
Почему кардинальность важна в 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 пользователя
- геолокации
В таких задачах важно просто правильно закодировать признак.