Что такое кластеризация простыми словами

Коротко

Кластеризация (clustering) — автоматическое разделение объектов на группы (кластеры) на основе похожести.

Это unsupervised learning — модель сама находит паттерны, без размеченных данных.

Зачем аналитику

  • Сегментация пользователей — find natural groups.
  • Аномалии — точки, не попавшие в кластеры — outliers.
  • Рекомендации — «похожие на вас купили».
  • RFM-анализ — автоматическая классификация.
  • Анализ market basket — группы товаров, покупаемых вместе.

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

У вас 1000 пользователей с метриками:

  • average_order_size
  • frequency_per_month
  • total_spent

Хотите разбить на 3 группы. Алгоритм найдёт:

  1. VIP: high size, high frequency, high spent.
  2. Регулярные: mid.
  3. Редкие: 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).

Нужно ли валидировать кластеры бизнесом?

Обязательно. «Математически разделились» ≠ «бизнес-осмысленные».