Методические указания к лр-4
Лабораторная работа 4. Кластеризация
Введение
После завершения этапа предобработки данных мы получили очищенный, нормализованный и готовый к анализу набор данных. Теперь можно переходить к кластеризации.
Кластеризация — это задача обучения без учителя, целью которой является разбиение совокупности объектов на группы (кластеры) таким образом, чтобы объекты внутри одной группы были более похожи друг на друга, чем на объекты из других групп. Например, в маркетинге это позволяет сегментировать клиентскую базу для разработки персонализированных стратегий взаимодействия.
Результате кластеризации позволяют решить практической задачи сегментации данных.
В данной части работы мы рассмотрим три популярных алгоритма кластеризации:
· K-Means
· DBSCAN
· Иерархическая кластеризация
Для каждого алгоритма следует изучить его параметры, провести визуализацию результатов и выполнить интерпретацию полученных кластеров.
Теоретические основы алгоритмов кластеризации
1. Метод K-средних (K-Means)
Назначение: Один из самых популярных и простых алгоритмов кластеризации. Разбивает данные на заранее заданное количество кластеров K.
Принцип работы:
1. Алгоритм случайным образом выбирает K точек в пространстве признаков — центроиды будущих кластеров.
2. Каждый объект данных относится к ближайшему центроиду (обычно по евклидову расстоянию).
3. Положение центроидов пересчитывается как среднее координат всех точек, принадлежащих данному кластеру.
4. Шаги 2 и 3 повторяются до тех пор, пока центроиды не перестанут изменяться (или изменения станут меньше заданного порога).
Преимущества:
· Высокая скорость работы.
· Простота реализации и интерпретации.
Недостатки:
· Необходимо заранее задавать количество кластеров K.
· Чувствителен к выбору начальных центроидов (решается фиксацией random_state).
· Плохо работает с кластерами сложной формы и разного размера.
· Чувствителен к выбросам (поэтому так важна предобработка!).
2. Алгоритм DBSCAN (Пространственная кластеризация при наличии шума)
Назначение: Алгоритм кластеризации, основанный на плотности соединения точек. Позволяет находить кластеры произвольной формы и автоматически определять выбросы (шум).
Принцип работы:
Алгоритм использует два основных параметра:
· eps (эпсилон) — максимальное расстояние между двумя точками, чтобы они считались "соседями".
· min_samples — минимальное количество точек в окрестности радиуса eps, необходимое для образования ядра кластера.
Точки делятся на три типа:
· Ядровые точки: имеют не менее min_samples соседей в радиусе eps.
· Граничные точки: находятся на границе кластера (имеют соседей, но их меньше min_samples).
· Шум: точки, не являющиеся ни ядровыми, ни граничными.
Преимущества:
· Не требует указания количества кластеров.
· Находит кластеры произвольной формы.
· Устойчив к выбросам (выделяет их в отдельный класс).
Недостатки:
· Чувствителен к выбору параметров eps и min_samples.
· Плохо работает с данными разной плотности (может объединить редкие кластеры или разбить плотные).
3. Иерархическая кластеризация
Назначение: Построение иерархии вложенных кластеров. Результат представляется в виде дендрограммы — дерева, наглядно показывающего последовательность объединения (или разделения) кластеров.
Принцип работы (агломеративный подход "снизу-вверх"):
1. Каждый объект данных изначально считается отдельным кластером.
2. На каждом шаге два наиболее близких (по заданной метрике) кластера объединяются в один.
3. Шаг 2 повторяется до тех пор, пока не останется один кластер.
Методы определения близости между кластерами (линковка):
· Одиночная связь: расстояние между ближайшими точками кластеров.
· Полная связь: расстояние между самыми дальними точками.
· Средняя связь: среднее расстояние между всеми парами точек.
· Метод Варда: минимизация суммы квадратов расстояний внутри кластеров (похож на K-Means).
Преимущества:
· Наглядность результата (дендрограмма).
· Не требуется задавать количество кластеров заранее (его можно выбрать после анализа дендрограммы).
Недостатки:
· Высокая вычислительная сложность (медленно работает на больших данных).
· Чувствителен к выбросам и шуму.
Реализация алгоритмов кластеризации
1. Подготовка данных к кластеризации
На предыдущем этапе работы мы выполнили очистку, масштабирование и кодирование данных. В результате мы должны получить датасет, содержащий только числовые масштабированные признаки, готовые для подачи в алгоритмы.
Задание 1. Загрузка подготовленных данных
1. Загрузите предобработанный датасет.
2. Убедитесь, что в нем нет пропусков, все признаки числовые и отмасштабированы (проверьте среднее и стандартное отклонение).
3. Отделите признаки для кластеризации (матрица X) от идентификаторов, если они остались (под идентификаторами мы понимаем не несущие смысловой нагрузки столбцы. Например, порядковый номер)
2. Кластеризация методом K-Means
2.1. Определение оптимального числа кластеров
Главная проблема K-Means — выбор K. Существует несколько методов для его определения.
Задание 2. Метод локтя (Elbow Method)
1. Для каждого значения K от 1 до 10 выполните кластеризацию K-Means.
2. Для каждого K сохраните значение инерции (суммы квадратов расстояний от точек до центроидов своих кластеров) — атрибут .inertia_ после обучения модели.
3. Постройте график зависимости инерции от K.
4. Найдите точку "локтя" на графике — место, где скорость уменьшения инерции резко замедляется. Это значение часто считается оптимальным K.
Задание 3. Коэффициент силуэта (Silhouette Score)
1. Для тех же значений K (от 2 до 10) выполните кластеризацию.
2. Для каждой модели рассчитайте коэффициент силуэта с помощью sklearn.metrics.silhouette_score.
3. Коэффициент силуэта измеряет, насколько объект похож на свой кластер по сравнению с другими. Значения варьируются от -1 до 1. Чем ближе к 1, тем лучше.
4. Постройте график зависимости коэффициента силуэта от K. Оптимальным считается K с максимальным значением.
2.2. Применение K-Means
Задание 4. Обучение модели
1. На основе анализа методом локтя и коэффициента силуэта выберите оптимальное количество кластеров K.
2. Создайте объект KMeans из sklearn.cluster с выбранным K и фиксированным random_state для воспроизводимости результатов.
3. Обучите модель на данных X методом .fit().
4. Получите метки кластеров для каждого объекта методом .predict(X) или из атрибута .labels_.
2.3. Визуализация и анализ
Задание 5. Визуализация кластеров
1. Для визуализации многомерных данных используйте метод главных компонент (PCA).
2. С помощью PCA из sklearn.decomposition снизьте размерность данных до 2 компонент.
3. Постройте scatter plot, где точки окрашены в соответствии с полученными метками кластеров.
4. Проанализируйте, насколько хорошо кластеры отделимы друг от друга.
Задание 6. Интерпретация кластеров
1. Добавьте полученные метки кластеров обратно в исходный (немаcштабированный) DataFrame, чтобы видеть реальные значения признаков.
2. Для каждого кластера рассчитайте средние значения по всем признакам (.groupby('cluster').mean()).
3. Опишите полученные сегменты клиентов. Например:
· Кластер 0: "Молодые клиенты с низким доходом и редкими покупками"
· Кластер 1: "Состоятельные клиенты старшего возраста с высокими покупками"
6.3. Кластеризация методом DBSCAN
3.1. Подбор параметров
DBSCAN чувствителен к параметрам eps и min_samples.
eps — это максимальное расстояние между двумя точками, чтобы они считались "соседями".
· Если eps = 0.5 — точки считаются соседями, только если расстояние между ними меньше или равно 0.5
· Если eps = 2.0 — радиус поиска соседей больше, значит у точки будет больше соседей
min_samples — это минимальное количество точек (включая саму точку), которое должно быть в радиусе eps, чтобы точка считалась "ядровой" (core point).
· Если у точки в радиусе eps есть min_samples или больше соседей, то это ядровая точка (становится центром кластера)
· Если у точки меньше min_samples соседей, но она находится в радиусе eps от ядровой точки, то это граничная точка
· Если точка не попадает ни под одно условие, то это шум
Пример: Пусть, eps = 1.0, min_samples = 4
Точка P: в радиусе 1.0 нашлось 5 соседей → P = ядровая точка
Точка Q: в радиусе 1.0 нашлось 2 соседа, но один из них — ядровая точка P → Q = граничная точка
Точка R: в радиусе 1.0 нашлось 0 соседей → R = шум
Задание 7. Определение параметров
1. Для начала задайте min_samples обычно равным размерности данных * 2 или больше (например, 5).
2. Для подбора eps используйте метод k-расстояний (k-distance graph):
· Рассчитайте для каждой точки расстояние до её k-го ближайшего соседа (где k = min_samples).
· Отсортируйте эти расстояния по убыванию и постройте график.
· Точка перегиба на этом графике ("локоть") подскажет оптимальное значение eps.
3.2. Применение DBSCAN
Задание 8. Обучение модели и анализ
1. Создайте объект DBSCAN из sklearn.cluster с выбранными eps и min_samples.
2. Обучите модель и получите метки кластеров. Обратите внимание: точки, обозначенные меткой -1, считаются шумом.
3. Подсчитайте количество кластеров и количество точек, отнесенных к шуму.
4. Снизьте размерность с помощью PCA (как в п. 6.2.3) и визуализируйте результаты, выделив кластеры и шум разными цветами.
5. Сравните результаты DBSCAN с K-Means. Какие кластеры нашел DBSCAN? Много ли шума?
6.4. Иерархическая кластеризация
4.1. Построение дендрограммы
Задание 9. Визуализация иерархии
1. Для уменьшения вычислительной сложности (если данных много) можно использовать случайную подвыборку или параметр truncate_mode в дендрограмме.
2. Используйте функцию dendrogram из модуля scipy.cluster.hierarchy.
3. Предварительно постройте матрицу связей (linkage matrix) с помощью функции linkage, указав метод (например, 'ward').
4. Постройте дендрограмму. На ней будет видно, на каких расстояниях объединяются кластеры.
5. Проведите горизонтальную линию на максимально высоком уровне, где она пересекает вертикальные линии дендрограммы "естественным" образом. Количество пересечений укажет на возможное число кластеров.
4.2. Формирование кластеров
Задание 10. Получение меток
1. На основе анализа дендрограммы выберите количество кластеров.
2. Используйте функцию fcluster для получения меток кластеров, задав пороговое расстояние (критерий maxclust или distance).
3. Визуализируйте результат (снова используя PCA).
4. Сравните полученную кластеризацию с предыдущими методами.
7. Сравнение и оценка результатов
Задание 11. Сравнительный анализ
1. Сведите в таблицу результаты трех алгоритмов:
· Количество полученных кластеров.
· Коэффициент силуэта (для K-Means и иерархической).
· Количество шумовых точек (для DBSCAN).
2. Ответьте на вопросы:
· Какой алгоритм дал наиболее интерпретируемые кластеры?
· Насколько устойчивы результаты при изменении параметров?
· Есть ли кластеры, которые были найдены всеми методами?
Задание 12. Выводы
1. Опишите итоговые сегменты клиентов, которые удалось выделить.
2. Предложите рекомендации для маркетингового отдела на основе выделенных сегментов (например, для какого сегмента делать скидки, для какого — программы лояльности, а какой сегмент требует дополнительного изучения).
Требования к материалам, подготовленным для сдачи лабораторной работы
1. Отчет в электронном виде (PDF или Word)
Титульный лист
· Название учебного заведения
· Название кафедры
· Тема: "Кластеризация данных"
· ФИО студента, группа
· ФИО преподавателя
· Дата выполнения
Введение
· Цель работы
· Задачи работы
· Краткое описание исходного датасета
2. Раздел 1: Предобработка данных (Часть 1)
2.1. Обработка пропущенных значений
· Таблица: Количество и процент пропусков в каждом столбце ДО обработки
· Скриншот: Тепловая карта пропусков (heatmap)
· Описание: Вывод о природе пропусков (случайные/системные)
· Описание: Обоснование выбранной стратегии заполнения/удаления
· Таблица: Количество и процент пропусков ПОСЛЕ обработки
2.2. Обработка дубликатов
· Число: Количество дубликатов, найденных в данных
· Описание: Решение (удалены/оставлены)
· Число: Количество строк ПОСЛЕ удаления дубликатов
2.3. Обработка выбросов
· Скриншоты: Ящики с усами (boxplot) для каждого числового признака ДО обработки
· Таблица: Для каждого признака: Q1, Q3, IQR, нижняя граница, верхняя граница
· Таблица: Количество выбросов по каждому признаку
· Скриншоты: Ящики с усами ПОСЛЕ обработки
· Описание: Обоснование метода обработки выбросов (удаление/замена/цензурирование)
3. Раздел 2: Преобразование данных (Часть 2)
3.1. Масштабирование данных
· Таблица: Статистики признаков (среднее, мин, макс, ст.отклонение) ДО масштабирования
· Название: Какой метод масштабирования выбран (StandardScaler / MinMaxScaler) и почему
· Таблица: Статистики признаков ПОСЛЕ масштабирования (среднее должно быть ~0, ст.отклонение ~1 для StandardScaler)
3.2. Кодирование категориальных признаков
· Таблица: Список категориальных признаков и количество уникальных значений в каждом
· Описание: Для каждого признака — какой метод кодирования выбран (порядковое/прямое) и обоснование выбора
· Таблица/схема: Соответствие "категория → код" (например, Среднее=1, Высшее=2, Неоконченное высшее=3)
3.3. Итоговый датасет
· Таблица: Первые 5 строк итогового датасета, готового к кластеризации (только числовые масштабированные признаки)
· Размерность: Сколько строк и столбцов в итоговом датасете
4. Раздел 3: Кластеризация (Часть 3)
4.1. Общий этап
· Подтверждение: Матрица X (признаки) отделена от идентификаторов
4.2. Кластеризация методом K-Means
4.2.1. Определение оптимального числа кластеров
· Скриншот: График метода локтя (elbow method) с подписанными осями
· Скриншот: График коэффициента силуэта (silhouette score)
· Вывод: Какое K выбрано и на основании чего
4.2.2. Применение K-Means
· Число: Выбранное K
· Скриншот: Визуализация кластеров после снижения размерности PCA (точки окрашены по кластерам)
4.2.3. Интерпретация результатов
· Таблица: Средние значения признаков по каждому кластеру (на исходных, НЕмасштабированных данных)
· Описание: Характеристика каждого кластера словами (например, "Кластер 0 — молодые клиенты с низким доходом, делают много мелких покупок")
· Таблица: Размер каждого кластера (количество клиентов и процент от выборки)
4.3. Кластеризация методом DBSCAN
4.3.1. Подбор параметров
· Скриншот: График k-расстояний (k-distance graph) для подбора eps
· Числа: Выбранные значения eps и min_samples с обоснованием
4.3.2. Применение DBSCAN
· Скриншот: Визуализация кластеров DBSCAN после PCA (шум отмечен отдельным цветом)
· Числа: Количество найденных кластеров
· Числа: Количество точек, отнесенных к шуму
· Таблица: Сравнение результатов DBSCAN с K-Means (совпадения/различия)
4.4. Иерархическая кластеризация
4.4.1. Построение дендрограммы
· Скриншот: Дендрограмма с подписанными осями
· Линия: Горизонтальная линия на дендрограмме, показывающая выбранный уровень отсечения
· Число: Выбранное количество кластеров на основе дендрограммы
4.4.2. Применение иерархической кластеризации
· Скриншот: Визуализация кластеров после PCA
· Таблица: Сравнение результатов иерархической кластеризации с предыдущими методами
5. Раздел 4: Сравнение и выводы
5.1. Сравнительная таблица
Метод Число кластеров Коэф. силуэта Число шумовых точек Преимущества Недостатки
K-Means —
DBSCAN
Иерарх. —
5.2. Итоговые сегменты данных
· Таблица: Финальное описание сегментов
· Название сегмента
· Характеристики
· Размер
· Рекомендации
5.3. Общий вывод по работе
· Какой метод кластеризации показал лучшие результаты и почему
· Что узнали о клиентах в результате сегментации
· Какие практические рекомендации можно дать бизнесу
6. Дополнительные материалы (в архиве)
Файлы с кодом
· Jupyter Notebook (.ipynb) с полным кодом и результатами выполнения
· Или .py файлы с кодом
Файлы с данными
· Исходный датасет
· Промежуточные датасеты (если есть)
· Финальный датасет с метками кластеров (clients_with_clusters.csv)
Требования к коду
· Код должен быть хорошо откомментирован
· Все графики должны иметь подписи осей и заголовки
· Должна быть обеспечена воспроизводимость (фиксированный random_state где необходимо)
7. Устные вопросы для защиты:
1. Почему важно удалять ID из данных перед кластеризацией?
2. Чем K-Means отличается от DBSCAN? Когда какой метод лучше использовать?
3. Что такое метод локтя и как он работает?
4. Что показывает коэффициент силуэта?
5. Как интерпретировать дендрограмму?
6. Почему для кластеризации важно масштабировать данные?
7. Что делать, если DBSCAN отнес половину точек к шуму?
8. Как вы определили, что выбрали правильное число кластеров?
9. Какие ограничения у каждого метода кластеризации?
10. Как полученные кластеры можно использовать на практике?
Чек-лист для самопроверки перед сдачей
· Титульный лист оформлен
· Все разделы отчета заполнены
· Все графики подписаны и читаемы
· Есть обоснование каждого выбора параметров
· Код приложен и работает
· Сделаны выводы по каждому этапу
· Сформулированы практические рекомендации