Что это такое?
Категоризация (или бининг) — это процесс превращения непрерывных числовых данных в дискретные группы, или категории. Например, вместо чисел 22, 45, 67 мы получаем группы «молодой», «средний», «пожилой».
Зачем это нужно?
1. Упрощение анализа. Вместо тысяч уникальных чисел аналитик работает с несколькими понятными группами. Легче увидеть общую картину.
2. Обнаружение закономерностей. Паттерны и зависимости часто видны именно на уровне групп. Например, всплеск продаж уходит среди покупателей с доходом «выше среднего», но не на уровне отдельных сумм.
3. Сегментация аудитории. Клиентов, пользователей или товары делят на сегменты для таргетинга, персонализации и маркетинговых кампаний.
4. Удобная визуализация. Категории отлично ложатся на столбчатые диаграммы, круговые графики и тепловые карты, тогда как сырые числа дают перегруженные графики.
5. Улучшение моделей машинного обучения. Многие алгоритмы стабильнее работают с категориальными признаками. Биннинг снижает влияние шума, выбросов и уменьшает риск переобучения.
6. Основа для агрегаций. Группировка (groupby), подсчёт частот (value_counts), кросс-таблицы и сводные отчёты строятся именно на категориальных данных.
7. Проверка гипотез. Сравнение групп (A/B-тесты, контрольная и тестовая выборки) требует разбиения данных на категории.
Создание категорий
pd.cut() разбивает числовой признак на интервалы по заданным границам. Он нужен, когда границы имеют смысл для задачи: например, ночь / утро / день / вечер или low / medium / high.
pd.qcut() делит значения по квантилям и старается получить группы примерно одинакового размера. Его удобно использовать, чтобы сравнить свои смысловые пороги с разбиением самого распределения.
Проверка получившихся групп
value_counts() показывает, сколько строк попало в каждую категорию. groupby().agg() позволяет проверить реальные значения внутри групп: минимум, максимум, медиану и число наблюдений.
Исследование распределения
describe() даёт основные числовые характеристики, а quantile() — значения выбранных квантилей. Они помогают выбрать границы не случайно, а опираясь на данные.
Сравнение долей
pd.crosstab(..., normalize="index") строит таблицу долей внутри каждой группы. В кейсе CityBike с её помощью можно сравнить, какая доля часов с высоким спросом приходится на разные части суток.
Открыть полную теорию по категориальным признакам →