TGViewer
Симулейтив Симулейтив @simulative_official · 7.44K subscribers
Post #2620 1.79K
Сегментация клиентов с помощью машинного обучения

Привет! С вами Кристина Желтова, ментор курса «ML-инженер».

В персонализации клиентского сервиса и маркетинге важно правильно сегментировать клиентов — разделять клиентскую базу на группы (сегменты) на основе их характеристик.

Эту задачу можно решать разными способами, в том числе с помощью машинного обучения. Если нужно обработать большой набор данных или получить модель, которая может быть гибкой и адаптивной в реальном времени, на помощь придёт кластеризация — набор методов без учителя для группировки данных по определённым критериям.

В качестве датасета возьмем небольшой набор данных Mall Customer Segmentation с Kaggle:

path = kagglehub.dataset_download("vjchoudhary7/customer-segmentation-tutorial-in-python")
df = pd.read_csv('/kaggle/input/customer-segmentation-tutorial-in-python/Mall_Customers.csv')


Один из самых простых и известных методов кластеризации — KMeans. Он разделяет данные на K кластеров, находя центроиды (центры) каждого кластера и группируя точки данных вокруг ближайших центроидов.

❗️ Важно: KMeans не предназначен для работы с категориальными признаками. Их нужно либо анализировать отдельно, либо применять другие алгоритмы кластеризации, поддерживающие смешанные датасеты.


clustering_features = ['Age', 'Annual Income (k$)', 'Spending Score (1-100)']
X = df[clustering_features].copy()


Перед применением алгоритма KMeans важно провести масштабирование признаков, иначе признаки с большими единицами измерения будут «перетягивать на себя» расстояния и смещать всё решение.

scaler = StandardScaler()

X_scaled = scaler.fit_transform(X)
X_scaled_df = pd.DataFrame(X_scaled, columns=clustering_features, index=X.index)


При использовании KMeans всегда есть некоторая неопределенность — этому алгоритму нужно заранее задать, на сколько кластеров/групп мы будем разделять данные. Иногда это предположение можно сделать экспертно, но можно попробовать и подобрать оптимальное количество групп, используя «метод локтя» — перебираем количество кластеров, визуализируя на графике сумму квадратов расстояний от каждой точки до центра её кластера. Точка перегиба, где график «сгибается» как локоть руки, и будет оптимальным количеством кластеров.

inertias = []

k_values = range(2, 11)

for k in k_values:
# Обучаем K-means с конкретным k
kmeans = KMeans(n_clusters=k, random_state=42, n_init=10)
cluster_labels = kmeans.fit_predict(X)

inertia = kmeans.inertia_
inertias.append(inertia)


После такого подбора можно переобучить модель с подобранным k, определить каждого клиента в свой кластер и приступить к визуальному анализу. В задаче кластеризации есть довольно много общих метрик качества, но лучше всего всегда посмотреть глазами на то, что получилось.

➡️ Более подробный пример можно посмотреть в colab notebook.

📊 Simulative
  • ❤ 13
  • 🔥 6
More from @simulative_official
  1. Oct 14, 2026Post #3620
  2. Oct 13, 2026💻💻💻💻💻 Падение продаж: как аналитик превращает размытый вопрос в расследование? Руково…
  3. Oct 13, 2026💻 Почему ваш SQL-запрос выполняется не так, как вы его написали? Кажется логичным, что ба…
  4. Oct 12, 2026#проанализировали_и_поняли
  5. Oct 11, 2026❗️ Перенос вебинара с Евгением Буториным Друзья, к сожалению, по техническим причинам пере…
  6. Oct 9, 2026💻💻💻💻💻 Как выбрать своё направление в аналитике? Решаешь войти в аналитику, открываешь…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →