Научный руководитель: Вильданов Алмаз Нафкатович
к.ф.-м.н., Уфимский университет науки и технологий, Нефтекамский филиал
Введение
В анализе данных часто встречаются задачи, где предсказывать нечего — потому что нет размеченных ответов. Есть только сырые данные о клиентах, их покупках, частоте визитов и среднем чеке. Классическое машинное обучение здесь бессильно, так как ему нужны примеры для обучения.
В таких случаях используется обучение без учителя, и главный инструмент здесь — кластеризация. Этот подход позволяет разбить объекты на группы без заранее известных меток, чтобы внутри группы объекты были похожи друг на друга, а между группами — максимально отличались.
Кластеризация широко применяется в маркетинге для сегментации клиентов, в антифроде для поиска аномалий, в ритейле для группировки товаров. В этой статье разбираются основные алгоритмы, критерии выбора и типичные ошибки при работе с кластеризацией.
1. Что такое кластеризация
Кластеризация — это задача группировки объектов без использования размеченных данных. Алгоритм самостоятельно ищет скрытую структуру в данных, основываясь только на их свойствах.
Основные сценарии применения кластеризации:
|
Сценарий |
Задача |
| Маркетинг | Разбить клиентов на сегменты для персонализированных предложений |
| Антифрод | Найти аномальные группы транзакций, похожих на мошеннические |
| Ассортимент | Сгруппировать товары, которые часто покупают вместе |
| Геоаналитика | Выделить районы города со схожими характеристиками |
Главное преимущество кластеризации — она не требует размеченной выборки. Это особенно ценно на начальных этапах анализа данных, когда структура данных ещё неизвестна.
2. Основные алгоритмы кластеризации
Существует множество алгоритмов кластеризации, но на практике чаще всего применяются три.
2.1. K-Means
K-Means — самый известный и часто используемый алгоритм. Он разбивает данные на K кластеров, где K задаётся аналитиком заранее.
Принцип работы:
- Алгоритм случайно выбирает K центров кластеров
- Каждая точка относится к ближайшему центру
- Центры пересчитываются как среднее точек в кластере
- Шаги 2–3 повторяются до стабилизации
Достоинства:
- Высокая скорость работы
- Простота реализации и интерпретации
- Хорошо работает при сферической форме кластеров
Недостатки:
- Необходимость заранее задавать число кластеров
- Чувствительность к выбросам
- Плохо работает с кластерами сложной формы
Когда использовать: для быстрой базовой сегментации, когда данные не содержат сильных выбросов и кластеры предположительно имеют округлую форму.
2.2. DBSCAN
DBSCAN (Density-Based Spatial Clustering of Applications with Noise) — алгоритм, основанный на плотности точек. Он не требует задавать количество кластеров и может находить кластеры произвольной формы.
Ключевые параметры:
- eps — радиус окрестности, в пределах которого ищутся соседи
- min_samples — минимальное количество точек для формирования кластера
Достоинства:
- Не требует указания числа кластеров
- Находит кластеры произвольной формы
- Устойчив к выбросам — они не попадают в кластеры, а помечаются как шум
Недостатки:
- Чувствителен к выбору параметров
- Плохо работает при разной плотности кластеров
- Может не справиться с многомерными данными
Когда использовать: когда форма кластеров неизвестна, в данных есть выбросы или требуется автоматическое определение количества групп.
2.3. Иерархическая кластеризация
Иерархическая кластеризация строит дерево вложенных кластеров (дендрограмму), позволяя аналитику выбрать нужный уровень детализации.
Принцип работы:
Существует два подхода:
- Агломеративный — каждый объект сначала находится в своём кластере, затем кластеры последовательно объединяются
- Дивизивный — все объекты находятся в одном кластере, который последовательно разделяется
Достоинства:
- Не требует заранее задавать количество кластеров
- Результат легко визуализировать (дендрограмма)
- Позволяет анализировать иерархическую структуру данных
Недостатки:
- Высокая вычислительная сложность
- Чувствительность к выбросам
- Сложность интерпретации при большом количестве объектов
Когда использовать: когда важно увидеть иерархическую структуру данных или количество объектов не слишком велико (до нескольких тысяч).
3. Выбор количества кластеров
Если для DBSCAN количество кластеров определяется автоматически, то для K-Means и многих других алгоритмов этот параметр нужно задавать заранее. Существуют стандартные методы для его определения.
3.1. Метод локтя (Elbow Method)
Один из самых простых и наглядных методов. Для каждого значения K вычисляется сумма квадратов расстояний от точек до центров своих кластеров (inertia). Оптимальное K находится в точке, где инерция перестаёт резко снижаться — образуется «локоть».
python
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
inertias = []
for k in range(1, 11):
kmeans = KMeans(n_clusters=k, random_state=42)
kmeans.fit(data)
inertias.append(kmeans.inertia_)
plt.plot(range(1, 11), inertias, marker=’o')
plt.xlabel(‘Количество кластеров’)
plt.ylabel(‘Инерция’)
plt.show()
3.2. Силуэтный коэффициент (Silhouette Score)
Более сложный, но и более информативный метод. Оценивает, насколько точки похожи на свой кластер по сравнению с соседними кластерами. Коэффициент принимает значения от -1 до 1:
- Близко к 1 — точки хорошо сгруппированы
- Около 0 — кластеры пересекаются
- Меньше 0 — точки, вероятно, попали не в свой кластер
Оптимальным считается K с максимальным средним силуэтным коэффициентом.
4. Подготовка данных для кластеризации
Качество кластеризации напрямую зависит от того, как подготовлены данные. Есть несколько обязательных шагов.
4.1. Масштабирование признаков
Алгоритмы кластеризации чувствительны к масштабу признаков. Если один признак измеряется в тысячах, а другой — в долях единицы, первый будет доминировать при расчёте расстояний.
Стандартизация приводит признаки к среднему 0 и стандартному отклонению 1:
python
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
data_scaled = scaler.fit_transform(data)
Нормализация сжимает значения в диапазон [0, 1]:
python
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
data_normalized = scaler.fit_transform(data)
4.2. Выбор метрики расстояния
По умолчанию чаще всего используется евклидово расстояние, но это не единственный вариант:
|
Метрика |
Когда использовать |
| Евклидово | Данные в непрерывном пространстве, все признаки равнозначны |
| Манхэттенское | При наличии выбросов, так как оно менее чувствительно |
| Косинусное | Текстовые данные, когда важны направления, а не длины векторов |
4.3. Снижение размерности
При большом количестве признаков (десятки и сотни) кластеризация становится сложной — это явление называют «проклятием размерности». В таких случаях помогает снижение размерности с помощью PCA (главные компоненты) или t-SNE.
python
from sklearn.decomposition import PCA
pca = PCA(n_components=2)
data_reduced = pca.fit_transform(data_scaled)
5. Интерпретация результатов
Кластеризация бесполезна, если её результаты нельзя интерпретировать и использовать в бизнесе. После того как кластеры получены, важно понять, чем они отличаются друг от друга.
5.1. Профилирование кластеров
Для каждого кластера рассчитываются средние значения по всем признакам. Это позволяет описать каждый сегмент:
python
# Добавляем метки кластеров в датафрейм
df['cluster'] = labels
# Смотрим средние значения по кластерам
profile = df.groupby(‘cluster’).mean()
print(profile)
На основе такого профиля можно сформулировать описания:
- Кластер 0: молодые клиенты, низкий средний чек, высокая частота покупок
- Кластер 1: клиенты старшего возраста, высокий средний чек, редкие покупки
- Кластер 2: клиенты среднего возраста, средний чек, покупают в основном в выходные
5.2. Визуализация
Для визуализации кластеров в двухмерном пространстве используется PCA или t-SNE:
python
import matplotlib.pyplot as plt
plt.figure(figsize=(10, 6))
scatter = plt.scatter(data_reduced[:, 0], data_reduced[:, 1],
c=labels, cmap=’viridis’, alpha=0.6)
plt.colorbar(scatter, label=’Кластер’)
plt.title(‘Визуализация кластеров’)
plt.show()
6. Типичные ошибки при кластеризации
За годы применения кластеризации в реальных проектах можно выделить несколько типичных ошибок, которых стоит избегать.
6.1. Кластеризация без масштабирования
Одна из самых частых ошибок — запуск алгоритма на ненормализованных данных. Признаки с большими значениями неизбежно доминируют, и результат оказывается бессмысленным.
6.2. Слепое использование K-Means
K-Means не всегда подходит. Если кластеры имеют сложную форму или в данных много выбросов, результат может оказаться неудовлетворительным. Всегда стоит пробовать разные алгоритмы.
6.3. Игнорирование предметной области
Статистически оптимальная кластеризация может быть бесполезна для бизнеса, если сегменты не интерпретируются. Например, алгоритм может выделить кластер, который невозможно содержательно описать — такой результат сложно использовать в маркетинге.
6.4. Переобучение при выборе K
Выбор количества кластеров «под ответ» — распространённая проблема. Если подбирать K так, чтобы результат казался красивым, есть риск получить сегменты, которые не воспроизводятся на новых данных.
Заключение
Кластеризация — мощный инструмент анализа данных, который позволяет находить скрытые группы объектов без размеченной выборки. В отличие от задач классификации или регрессии, здесь не требуется исторических ответов, что делает кластеризацию особенно полезной на начальных этапах работы с данными.
Выбор конкретного алгоритма зависит от структуры данных и задач бизнеса:
- K-Means подходит для быстрой сегментации при условии, что форма кластеров близка к сферической
- DBSCAN эффективен, когда форма кластеров неизвестна и в данных присутствуют выбросы
- Иерархическая кластеризация даёт глубокое понимание структуры, но требует больше ресурсов
Успех проекта по кластеризации определяется не столько выбором алгоритма, сколько качественной подготовкой данных, грамотным выбором метрик расстояния и, главное, интерпретируемостью результатов для конечного бизнес-пользователя.
Кластеризация не даёт «правильного ответа» в математическом смысле — она даёт инструмент для понимания данных. И именно это понимание становится основой для принятия более эффективных решений.
Библиографический список
- Дубейковский В.И., Лебедев П.А. Управление проектами внедрения корпоративных информационных систем (на примере 1С:ERP). — М.: ДМК Пресс, 2020. — 312 с.
- Робертс Т. Руководство по выживанию при внедрении ERP-систем. — Пер. с англ. — СПб.: Питер, 2018. — 256 с.
- Официальный сайт компании «1С». Раздел «1С:ERP Управление предприятием 2»: https://v8.1c.ru/erp/
- Методические материалы партнеров «1С».
- Материалы отраслевых конференций. Тезисы докладов с мероприятий «Инфостарт.Конф», «1С:Событие» и других.
- Hammer, M., Champy, J. Reengineering the Corporation: A Manifesto for Business Revolution. — N.Y.: HarperBusiness, 2006.
- Project Management Institute. A Guide to the Project Management Body of Knowledge (PMBOK® Guide). — 7th Edition. — PMI, 2021.
- Котлер, Ф., Келлер, К.Л. Маркетинг-менеджмент. — 15-е изд. — СПб.: Питер, 2022.
