HW14 // Кластерный анализ

Данные

Сегодня мы работаем с данными про сотрудников Компании.

В данных содержатся следующие переменные:

  • emp — индентификатор сотрудника
  • p_exp — опыт работы в компании
  • p_age — возрастная группа
  • p_lvl — уровень должности в должностной иерархии компании
  • p_sex — пол сотруника
  • p_div — подразделение, в котором работает сотрудник

Также в данных есть переменные с префиксом q, которые содержат ответы на вопросы анкеты, которую заполняли сотрудники. Вопросы анкеты можно найти в этом файле. Шкала ответов на вопрос анкеты содержала три альтернативы: 1 — согласен, -1 — не согласен, 0 — затрудняюсь ответить.

Задача, которую поставил нам HRD (директором по персоналу) — кластеризовать сотрудников на основе ответов на вопросы анкеты.

Основные задания

#1

  1. Загрузите данные. Проверьте их структуру, при необходимости скорректируйте типы переменных. Если в данных есть пропущенные значения, удалите строки, которые их содержат.
  2. Для упрощения дальнейшей работы отберите переменные, сродержащие ответы сотрудников на вопросы анкеты в отдельный датасет.

Для самопроверки в поле ниже введите количество пропущенных значений, которое содержится в данных.

#2

Кластеризуйте сотрудников по ответам на вопросы анкеты помощью алгоритма иерархической кластеризации.

Так как результаты кластеризации существенно могут зависеть от выбранной метрики расстояния между кластерами, рассмотрите три варианта — среднее невзвешенное расстояние, метод дальнейго соседа и метод ближайшего соседа.

В качестве метрики расстояния между наблюдениями выберите ту, которая соответствует шкале ответов на вопросы.

Проверьте с помощью построения дендрограмм, выявляется ли кластеризация в данных.

Для самопроверки введите значение аргумента method функции иерархического кластерного анализа, при котором получается однозначная кластеризация. Если однозначная кластеризация получается при все методах расчета расстояния, введите в поле ответа all, если ни в одном методе нет однозначной кластеризации, введите none.

Подсказки
  • Иерархическая кластеризация выполняется с помощью функции hclust()
  • Функция требует на вход матрицу расстояний между объектами и метод, с помощью которого рассчитается расстояние между кластерами.
  • Матрицу расстояний можно получить с помощью функции dist().
  • Среднее невзвешенное расстояние задается через значение "average" аргумента method. Метод ближайшего и дальнего соседа — значениями single и complete соответственно.
  • Дендрограмму можно построить, передав объект с результатами кластеризации в функцию plot().

#3

Рассмотрите возможность кластеризации сотрудников по ответам на вопросы анкеты с помощью метода k-средних.

Для начала определите оптимальное число кластеров, используя в качестве метрики качества кластеризации среднюю ширину силуэта кластера.

Используйте соответствующий график для определения оптимального числа кластеров.

Для самопроверки в поле ответа введите оптимальное число кластеров согласно средней ширине силуэта кластеров.

Подсказки
  • Построить необходимую визуализацию можно с помощью функции fviz_nbclust() из пакета factoextra.
  • Функция требует на вход
    • датасет (x)
    • метрику качества кластеризации (method, в данном случае необходимо передать в него значение "silhouette")
    • функцию кластеризации (FUNcluster)
    • матрицу расстояний (diss)
    • максимальное число кластеров, которое вы хотите рассмотреть (k.max)
  • Максимальное количество кластеров необходимо выбрать достаточно большим — например, порядка 20.
  • Оптимальным количеством кластеров считается то, при корой значение метрики качества кластеризации наибольшее.

#4

  1. Используя матрицу расстояний, выполните кластеризацию методом k-средних, задав в качестве входного параметра алгоритма оптимальное количества кластеров, полученное в предыдущем задании.
  2. Визуализируйте кластеры. По построенной визуализации оцените результаты кластеризации.
Подсказки
  • Кластеризация методом k-средних выполняется с помощью функции k-means().
  • Входными параметрами функции являются матрица расстояний (x) и количество искомых кластеров (centers).
  • Виузализировать кластеры поможет функция fviz_cluster() из пакета factoextra.

#5

Визуализируйте силуэты кластеров. Оцените качество кластеризации.

Подсказки
  • Для визуализации силуэтов кластеров используйте функцию fviz_silhouette() из пакета factoextra.
  • На вход ей необходимо передать результат работы функции silhuoette() из пакета cluster.
  • Функция silhuoette() ожидает на вход матрицу расстояний (dist) и вектор со значениями приписанных наблюдениям кластеров (x).

#6

Рассмотрите вариант кластеризации методом k-средних с тремя кластерами. Выполните кластеризацию, визуализируйте кластеры и их силуэты.

Сравните результаты кластеризации на два и на три кластера.

Подсказки
Как делать задание?
Что надо сделать?
Ответ неверный

#7

Рассмотрите возможность нечеткой кластеризации на имеющихся данных.

Определите оптимальное число кластеров, используя в качестве метрики качества кластеризации среднюю ширину силуэта кластера. В качестве степени нечеткости кластеризации (fuzziness parameter) используйте значение 1.5.

Используйте соответствующий график для определения оптимального числа кластеров.

Для самопроверки в поле ответа введите оптимальное число кластеров согласно средней ширине силуэта кластеров.

Подсказки
  • Построить необходимую визуализацию можно с помощью функции fviz_nbclust() из пакета factoextra.
  • Функция требует на вход
    • датасет (x)
    • метрику качества кластеризации (method, в данном случае необходимо передать в него значение "silhouette")
    • функцию кластеризации (FUNcluster, в данном случае необходимо передать в него значение fanny)
    • матрицу расстояний (diss)
    • максимальное число кластеров, которое вы хотите рассмотреть (k.max)
    • fuzziness parameter, или степень нечеткости кластеров (memb.exp)
  • Максимальное количество кластеров необходимо выбрать достаточно большим — например, порядка 20.
  • Оптимальным количеством кластеров считается то, при корой значение метрики качества кластеризации наибольшее.

#8

  • Используя матрицу расстояний, выполните нечеткую кластеризацию методом С-средних, задав в качестве входного параметра алгоритма оптимальное количества кластеров, полученное в предыдущем задании. В качестве степени нечеткости кластеризации (fuzziness parameter) используйте значение 1.5.
  • Визуализируйте кластеры и их силуэты. По построенным визуализациям оцените результаты кластеризации.
Подсказки
  • Кластеризация методом С-средних выполняется с помощью функции fanny() из пакета cluster.
  • Входными параметрами функции являются матрица расстояний (x), количество искомых кластеров (k) и степень нечеткости кластеров (fuzziness parameter, memb.exp).
  • Виузализировать кластеры поможет функция fviz_cluster() из пакета factoextra.
  • Виузализировать силуэты кластеров помогут функции fviz_silhouette() из пакета factoextra и silhouette() из пакета cluster.

#9

  1. Добавьте к датасету только с вопросами анкеты (полученному в задании 1.b) переменную, содержащую степень принадлежности наблюдений к большему кластеру. Сохраните результат в новый объект, чтобы не было перезаписи исходного датасета.
  2. Постройте линейную модель, в которой целевой переменной будет степень принадлежности наблюдений к большему кластеру, а предикторами — ответы на вопросы анкеты.

Для самопроверки в поле ниже введите значение скорректированного коэффициента детерминации построенной модели, округленное до сотых. В качестве десятичного разделителя используйте точку.

Подсказки
  • Добавить переменную в датасет можно с помощью функции mutate().
  • Значения степени принадлежности наблюдений к каждому из кластеров содержаться в элементе membership объекта с результатами нечеткой крастеризации.
  • Элемент membership представляет собой матрицу, в которой первая колонка — степень принадлжености к первому кластеру, вторая — ко второму и так далее.

#10

  1. Загрузите датасет с формулировками вопросов анкеты.
  2. Создайте датасет, в котором будут содержаться статистики статистически значимых коэффициентов построенной линейной модели и соответствующие им вопросы. Схема датасета представлена ниже.
Estimate Standard Error t p Question Indic
0.02 0.003 4.40 0.04 q_011 Текст вопроса
  1. Опираясь на формулировки статистически значимых вопросов, предложите интерпретацию кластеризации: какие сотрудники оказались в рассматриваемом (большем) кластере?
Подсказки

Чтобы получить требуемый датасет, необходимы выполнить следующие шаги:

  • Извлечить из аутпута функции summary() таблицу со статистиками коэффициентов (coeffisients) через индксацию списка по имени элемента.
  • Преобразовать её в тиббл с помощью функции as_tibble().
    • Названия предикторов (переменных, содержащих ответы на вопрос) содержиться в названиях строк. Чтобы включить их в датасет в функции as_tibble() в аргументе rownames укажите название колонки, в которую необходимо записать названия предикторов.
    • Для удобства можно перезадать имена колонок после создания тиббла с помощью функции set_names().
  • Объедините с помощью функции right_join() полученный тиббл с датасетом, содержащим формулировки вопросов.
  • Отфильтруйте статистически значимые вопросы по колонке со значениями p-value.

Дополнительные задания

#1

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

#2

Постройте матрицу расстояний на отобранных наблюдений.

#3

Рассмотрите возможность нечеткой кластеризации отобранных наблюдений.

Определите оптимальное число кластеров, используя в качестве метрики качества кластеризации среднюю ширину силуэта кластера. В качестве степени нечеткости кластеризации (fuzziness parameter) используйте значение 1.5.

Используйте соответствующий график для определения оптимального числа кластеров.

#4

  • Используя матрицу расстояний, выполните нечеткую кластеризацию методом С-средних, задав в качестве входного параметра алгоритма оптимальное количества кластеров, полученное в предыдущем задании. В качестве степени нечеткости кластеризации (fuzziness parameter) используйте значение 1.5.
  • Визуализируйте кластеры и их силуэты. По построенным визуализациям оцените результаты кластеризации.

#5

Изучите матрицу, содержащию значения степени принадлежности наблюдений к кластерам. Сделайте вывод о наличии или отсутствии кластеризации.