1.1Kпросмотров
65.5%от подписчиков
3 февраля 2026 г.
Score: 1.2K
Сегментация с помощью K-means на Python Предположим, что надо сегментировать банковские точки продаж по признакам: ▶️Число клиентов
▶️Доход (млн руб.)
▶️Конверсия в продукты
▶️Среднее время обслуживания (мин)
▶️Жалобы на 1000 клиентов
▶️Число конкурентов рядом Вообще, сегментация через k-means осуществляется по принципу "чем меньше расстояние между значениями, тем лучше". То есть этот метод не различает контекст и будет просто объединять максимально похожие друг на друга точки в одну группу. Это не скоринг, где точки будут отсортированы по рейтингу. И результаты сегментации надо будет интерпретировать уже вручную в зависимости от того, что получится. 🟠В нашем контексте это будет полезно для того, чтобы определить, какие паттерны вообще существуют и что делать. То есть может получиться образцовая группа, где высокий доход, низкие жалобы и высокая конверсия. Вторая группа может иметь много клиентов, но медленное обслуживание и высокие жалобы. И в этом случае для второй группы надо будет решать специфические проблемы, например, как эти точки разгрузить. А третья группа может иметь мало клиентов и мало конкурентов - это уже другой пул проблем и задач. 🟠Итак, приступим. Сначала как обычно импортируем библиотеки и подключаемся к источнику данных. Также нужно будет отдельно выделить признаки для сегментации в датафрейм: import pandas as pd
from sklearn.preprocessing import StandardScaler
from sklearn.cluster import KMeans ######
#ИСТОЧНИК ДАННЫХ + СОЗДАНИЕ DF
###### features = [ 'clients', 'income_mln', 'conversion_pct', 'service_time_min', 'complaints_per_1k', 'competitors_nearby'
] X = df[features] Затем важный шаг - нормализация данных. Она приводит все данные к одному масштабу. Это особенно важно в нашем случае, потому что все признаки у нас имеют разные единицы измерения. И чтобы не происходило смешивания, этот метод приводит каждое значение к "общему знаменателю", рассчитывая среднее и стандартное отклонение по каждому столбцу. scaler = StandardScaler()
X_scaled = scaler.fit_transform(X) Наконец, запускаем саму сегментацию. Для этого нужно настроить сам алгоритм. То есть указать количество кластеров (пусть будет n_clusters=4), проставить random_state (чтобы алгоритм всегда выдавал один и тот же результат, начиная с одной точки) и указать число повторений (n_init=10) для бОльшей точности. И затем этот алгоритм применить уже к нормализованным данным (X_scaled): kmeans = KMeans(n_clusters=4, random_state=42, n_init=10)
clusters = kmeans.fit_predict(X_scaled)
df['cluster'] = clusters
print(df.groupby('cluster')[features].mean().round(2)) В итоге получится 4 группы точек продаж, сгруппированных по ранее указанным признакам. Для каждой группы будет указано среднее значение каждого признака. Если захочется вывести id конкретных точек в каждой группе, то можно написать: for cluster_id in sorted(df['cluster'].unique()): ids = df[df['cluster'] == cluster_id]['branch_id'].tolist() print(f"Кластер {cluster_id}: {ids}") Выведет 4 списка (по 1 на группу), где будут указаны номера точек продаж.