Использование GLRM для кластерного анализа и сегментации клиентов

Проблема кластеризации

Когда дело доходит до кластерного анализа данных о клиентах розничной торговли и электронной коммерции, чаще всего вы обнаружите, что набор данных беспорядочный, многомерный и с множеством категориальных переменных. Хотя существует множество методов уменьшения размерности, большинство из них плохо работают с набором данных со многими категориальными переменными. Традиционно подходы к кластеризации страдают, когда функции не являются чистыми числовыми значениями. Например, самый популярный алгоритм KNN может обрабатывать только числовые переменные.

Обобщенные модели низкого ранга (GLRM)

Обобщенные модели низкого ранга (GLRM), разработанные студентами Стэнфордского университета (см. Udell ’16), предлагают новую структуру кластеризации для обработки всех типов данных даже со смешанными типами данных. Используя GLRM, вы можете преобразовывать категориальные столбцы в двоичные столбцы. Создание кластеров на основе этого типа набора данных будет сочтено слишком беспорядочным для других методов.

Преимущества GLRM:

  • Уменьшите необходимое хранилище
  • Включить визуализацию данных
  • Убрать шум
  • Вменять недостающие данные
  • Упростите обработку данных

Вы можете найти более подробную информацию о пакете H2O GLRM.

Использование GLRM для преобразования набора данных

Набор данных, который я использовал, взят от вымышленной компании электронной коммерции, продающей подписки на файлы cookie. Как видите, он содержит 18 переменных, многие из которых являются категориальными переменными.

H2O - это среда машинного обучения с открытым исходным кодом и интерфейсами R. Имеет хорошую параллельную реализацию шагов GLRM:

  1. инициализировать кластер h2o.init()
  2. сохранить входные данные as.h2o()
  3. запустить модель GLRM с K = 2 (модель ранга 2), используя h2o.glrm()

Модель GLRM генерирует матрицы X и Y. Матрица X была получена путем вызова: X.m = as.data.table (h2o.getFrame (m_glrm @ model $ presentation_name))

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

Кластеризация с использованием алгоритма K-среднего

Чтобы определить количество кластеров:

Во-первых, я использовал map_dbl для запуска многих моделей с различным значением k.

tot_withinss = map_dbl (1:10, функция (k) {
модель = kmeans (x = X.m, center = k)
модель $ tot.withinss
})

Во-вторых, я создал фрейм данных, содержащий как k, так и tot_withinss.

elbow_df ‹- data.frame (k = 1:10, tot_withinss = tot_withinss)

В-третьих, я рисую локтевой сюжет. Здесь точка локтя равна 3.

Затем я использовал алгоритм k-mean для создания 3 кластеров и построения кластеров с помощью пакета factoextra.

Наконец, я добавил кластеры в исходный набор данных и использовал кластеры, чтобы провести дополнительный анализ и сформировать представление о клиентах. Например, кластер 3 имеет самый высокий прогнозируемый LTV с максимальным доходом за первые 90 дней. Больше EDA можно найти в моей презентации на github.

Вы можете найти код R на Github и не стесняйтесь связываться со мной в LinkedIn, если у вас есть какие-либо вопросы.