Что такое кластеризация простыми словами
Коротко
Кластеризация (clustering) — автоматическое разделение объектов на группы (кластеры) на основе похожести.
Это unsupervised learning — модель сама находит паттерны, без размеченных данных.
Зачем аналитику
- Сегментация пользователей — find natural groups.
- Аномалии — точки, не попавшие в кластеры — outliers.
- Рекомендации — «похожие на вас купили».
- RFM-анализ — автоматическая классификация.
- Анализ market basket — группы товаров, покупаемых вместе.
Простой пример
У вас 1000 пользователей с метриками:
- average_order_size
- frequency_per_month
- total_spent
Хотите разбить на 3 группы. Алгоритм найдёт:
- VIP: high size, high frequency, high spent.
- Регулярные: mid.
- Редкие: low.
Не вы назначили границы — алгоритм нашёл естественные.
Тренироваться на таких вопросах можно в Telegram-боте Карьерник — там 1500+ задач с реальных собесов с разборами.
Основные алгоритмы
1. K-Means
Самый популярный. Задаёте K (число кластеров), алгоритм группирует.
from sklearn.cluster import KMeans
X = df[['size', 'frequency', 'spent']]
model = KMeans(n_clusters=3, random_state=42)
df['cluster'] = model.fit_predict(X)
print(df.groupby('cluster').mean())Плюсы: простой, быстрый.
Минусы:
- Нужно задать K заранее.
- Чувствителен к масштабу (нужно StandardScaler).
- Работает плохо с не-сферическими кластерами.
2. DBSCAN
Не требует K. Находит кластеры плотных точек + выбросы.
from sklearn.cluster import DBSCAN
model = DBSCAN(eps=0.5, min_samples=5)
df['cluster'] = model.fit_predict(X)
# cluster = -1 → outlier
outliers = df[df['cluster'] == -1]Плюсы: не надо задавать K, находит outliers.
Минусы: чувствителен к eps и min_samples.
3. Hierarchical Clustering
Строит дерево кластеров (dendrogram).
from scipy.cluster.hierarchy import dendrogram, linkage
Z = linkage(X, method='ward')
dendrogram(Z)Можно «разрезать» дерево на любом уровне — получить разное число кластеров.
Плюсы: показывает структуру, не требует K заранее.
Минусы: медленно на больших данных.
4. Gaussian Mixture Models (GMM)
Каждая точка — смесь распределений. Soft clustering (вероятности).
from sklearn.mixture import GaussianMixture
gmm = GaussianMixture(n_components=3)
df['cluster'] = gmm.fit_predict(X)
df['prob_cluster'] = gmm.predict_proba(X).max(axis=1)Как выбрать K
1. Elbow method
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
inertias = []
for k in range(1, 11):
km = KMeans(n_clusters=k, random_state=42)
km.fit(X)
inertias.append(km.inertia_)
plt.plot(range(1, 11), inertias, 'o-')Ищите «локоть» (резкий изгиб). Там оптимальное K.
2. Silhouette score
from sklearn.metrics import silhouette_score
for k in range(2, 10):
km = KMeans(n_clusters=k).fit(X)
score = silhouette_score(X, km.labels_)
print(f'K={k}: {score:.3f}')Чем ближе к 1 — тем лучше разделение. 0.5+ — хорошо.
3. Бизнес-логика
Иногда «природное» K не работает с бизнесом. «Нужны 4 сегмента для маркетинговых кампаний» — задаём K=4, даже если алгоритм хочет 3.
Предобработка
Кластеризация чувствительна к масштабу:
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
model = KMeans(n_clusters=3).fit(X_scaled)Без scaling — фичи с большими значениями (deytrading revenue 100000) доминируют над маленькими (session count 5).
Интерпретация кластеров
# Средние по кластерам
cluster_means = df.groupby('cluster').mean()
# Размеры кластеров
print(df['cluster'].value_counts())
# Визуализация (если 2 фичи)
import seaborn as sns
sns.scatterplot(data=df, x='spent', y='frequency', hue='cluster')Называйте кластеры по их характеристикам: «VIP», «Регулярные», «Новички».
К слову, набить руку на таких кейсах удобно через тренажёр в Telegram — разбирайте по 10 вопросов в день, через 2 недели тема становится рефлексом.
Практические кейсы
1. Сегментация пользователей
Features: RFM, demographics, activity. Результат: 3–5 сегментов для разных маркетинговых стратегий.
2. Product segmentation
Группы товаров по характеристикам → кросс-селл рекомендации.
3. Anomaly detection
DBSCAN → точки-outliers → возможный фрод или ошибки данных.
4. Market basket
Кластеризация заказов по составу → популярные наборы.
Ошибки
1. Слишком много кластеров
10+ кластеров = сложно интерпретировать. Обычно 3–7 оптимум.
2. Забыть масштабирование
Без StandardScaler кластеризация искажается.
3. Доверять алгоритму полностью
Smart features — важнее алгоритма. Плохой feature engineering → бессмысленные кластеры.
4. Не валидировать
Прогоните elbow, silhouette, посмотрите на результат визуально.
Читайте также
FAQ
K-Means или DBSCAN?
K-Means — если ожидаете ~сферические кластеры и знаете K. DBSCAN — если точки в плотных областях разной формы и хотите outliers.
Сколько фич в кластеризации?
3–10 ключевых. Больше — curse of dimensionality, меньше осмысленных кластеров.
Supervised или unsupervised?
Clustering — unsupervised (без меток). Если есть метки сегментов — это классификация (supervised).
Нужно ли валидировать кластеры бизнесом?
Обязательно. «Математически разделились» ≠ «бизнес-осмысленные».