Введение в ML: Кластеризация и Сегментация клиентов
Цель: Решить задачу обучения без учителя (Unsupervised Learning). У нас нет правильных ответов (меток классов). Наша задача — найти скрытые структуры в данных и разделить клиентов торгового центра на группы (сегменты) на основе их поведения, используя K-Means и Иерархическую кластеризацию.
Инструменты:
sklearn.cluster: KMeans, AgglomerativeClustering.sklearn.preprocessing: StandardScaler.scipy.cluster.hierarchy: dendrogram, linkage (для визуализации иерархии).sklearn.metrics: silhouette_score.
Данные:
Mall Customers Dataset. Классический учебный датасет для сегментации. Содержит: CustomerID, Gender, Age, Annual Income (Доход), Spending Score (Баллы трат от 1 до 100).
Часть 1: Загрузка, EDA и Масштабирование
Мы будем использовать только два признака: Доход и Рейтинг трат. Это позволит нам легко визуализировать результаты на 2D-плоскости. В реальности признаков может быть больше (N-мерное пространство).
Задание 1.1:
- Загрузите датасет по ссылке.
- Оставьте только колонки
Annual Income (k$)иSpending Score (1-100). - Переименуйте их в
IncomeиScoreдля удобства. - Постройте Scatter plot (Точечную диаграмму) сырых данных. Видите ли вы глазами какие-то группы?
Часть 2: K-Means и Метод Локтя
Мы не знаем, сколько сегментов клиентов существует. 3? 5? 10? Используем метод локтя (Elbow Method), чтобы найти оптимальное .
Задание 2.1: График Инерции
- Запустите цикл
kот 1 до 10. - Внутри цикла обучите
KMeansи сохраните значениеinertia_в список. - Постройте график. Ищите "излом".
Задание 2.2: Финальная кластеризация и Визуализация
- Обучите модель с оптимальным (пусть будет ).
- Получите предсказанные метки кластеров (
fit_predict).
Нарисуем результат. Чтобы график был понятен бизнесу, точки будем брать из исходного (не масштабированного) датасета X, а цвета — из полученных меток y_kmeans.
Бизнес-интерпретация
Попробуйте дать названия группам.
- Низкий доход, Низкий скор -> "Экономные".
- Низкий доход, Высокий скор -> "Транжиры" (целевая группа для кредитов?).
- Высокий доход, Высокий скор -> "VIP".
Часть 3: Иерархическая кластеризация
Посмотрим на данные с другой стороны. Построим дерево объединения (Дендрограмму).
Задание 3.1: Дендрограмма
Используйте библиотеку scipy. Проведите горизонтальную линию там, где она пересекает самые длинные вертикальные линии без горизонтальных перемычек. Скорее всего, это тоже укажет на 5 кластеров.
Часть 4: Валидация (Silhouette Score)
У нас нет "правильных ответов", но есть математика. Оценим плотность кластеров.
Задание 4.1: Расчет Силуэта
Посчитайте silhouette_score для результата K-Means.
- Диапазон: [-1, 1].
- Хороший результат: > 0.5.