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

В этом проекте я изучаю более глубокие демографические данные клиентов компании, занимающейся продажами по почте в Германии, сравнивая их с демографическими данными для населения в целом. Кроме того, я выявляю части населения, которые лучше всего описывают основную клиентскую базу компании, и разрабатываю модель, позволяющую прогнозировать, какие люди с наибольшей вероятностью станут клиентами компании Bertelsmann Arvato Analytics. Вот содержание:

  • Знание данных
  • Анализ данных
  • Алгоритмы обучения без учителя: PCA и кластеризация K-средних
  • Алгоритмы контролируемого обучения
  • Каггл Конкурс
  • Вывод

Знание данных

Прежде всего, я использую данные, предоставленные Bertelsmann Arvato Analytics, состоящие из четырех файлов данных. Перед анализом заглянем в набор данных и получим о них основную информацию:

  • Udacity_AZDIAS_052018.csv: демографические данные для населения Германии в целом; 891 211 лиц (строк) x 366 черт (столбцов).
  • Udacity_CUSTOMERS_052018.csv: демографические данные клиентов компании, занимающейся доставкой по почте; 191 652 лица (строки) х 369 признаков (столбцы).
  • Udacity_MAILOUT_052018_TRAIN.csv: демографические данные для лиц, ставших мишенями маркетинговой кампании; 42 982 лиц (строки) х 367 (столбцы).
  • Udacity_MAILOUT_052018_TEST.csv: демографические данные для лиц, ставших мишенями маркетинговой кампании; 42 833 лиц (строки) х 366 (столбцы).
  • Атрибуты DIAS — значения 2017.xlsx: демографические данные с описанием, значениями и значениями.

Анализ данных

Я начну с обработки неизвестных и отсутствующих (nan) значений в данных azdias и клиентов. Есть некоторые неизвестные значения, и их следует заменить значениями nan. После этого я рисую 50 лучших атрибутов в соответствии с процентом их значений nan, используя данные azdias.

График показывает мне, что я должен обрабатывать пропущенные значения в столбцах данных как azdias, так и клиентов. Находя и удаляя столбцы и строки, более половины которых содержат пропущенные значения:

  • Данные Azdias изменились с: (891221, 366) на: (791258, 356)
  • Данные клиентов изменились с: (191652, 366) на: (140866, 356)

Некоторые столбцы, типы которых являются «объектами», следует рассматривать по-разному. Я использую LabelEncoder для сопоставления каждого значения типа объекта с числовым. Это преобразование должно быть необходимо перед применением машинных алгоритмов.

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

  • SimpleImputer: это преобразователь вменения для заполнения пропущенных значений. Здесь используется стратегия «наиболее частая».
  • StandardScaler: это метод стандартизации путем удаления среднего значения и масштабирования до единичной дисперсии.

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

Алгоритмы обучения без учителя: PCA и кластеризация K-средних

Анализ основных компонентов (PCA): это уменьшение линейной размерности с использованием разложения данных по сингулярным значениям для проецирования их в пространство более низкого измерения.

Я создаю экземпляр объекта PCA, чтобы выбрать такое количество компонентов, чтобы величина дисперсии превышала 0,95. Применяя уменьшение размерности, я получаю 225 основных компонентов среди 356 атрибутов в данных azdias (исключается 36,8% данных).

Вот первые 3 главных компонента и их дисперсии в порядке, определенном алгоритмом.

Кластеризация методом K-средних. Это алгоритм, который группирует данные в k групп.

Я делаю анализ, какое значение k является оптимальным для данных azdias. Я рассчитываю «сумму квадратов расстояний» для различных значений k в диапазоне [1, 20].

Согласно графику, при увеличении k сумма квадратных расстояний уменьшается. Однако выбор большого размера увеличит сложность. Вместо этого я определяю оптимальное k = 8 следующим образом:

  • Я сортирую баллы по убыванию
  • Я останавливаюсь там, где оценка превышает среднюю

Найдя число главных компонент и оптимальное значение k, я создаю конвейер, состоящий из объектов PCA и K-Means. Я применяю этот конвейер как к данным azdias, так и к данным клиентов и нахожу количество людей в каждом кластере.

На рисунке выше показано процентное распределение между кластерами azdias и данными клиентов. Поскольку данные azdias относятся к населению в целом, а данные о клиентах — к клиентам, я могу сделать вывод, что кластеры, в которых доля клиентов выше, являются более репрезентативными. Другими словами, компания должна ориентироваться на людей из кластера_4, кластера_5 и кластера_6.

Алгоритмы контролируемого обучения

В этой части проекта я использую данные mailout_train для построения модели машинного обучения. Перед созданием модели я применяю к этим данным методы предварительной обработки, как и в предыдущей части. Эти методы:

  • Преобразование неизвестных значений в значения nan
  • Удаление столбцов и строк со значениями nan более 50%
  • Применение LabelEncoder к столбцам типа «объект»
  • Применение конвейера, состоящего из SimpleImputer и StandardScaler

Данные меняются с (42962, 367) на (35094, 359) в конце.

Я выбираю четыре алгоритма для оценки их производительности, чтобы определить окончательную модель для конкурса Kaggle. Этими классификаторами являются случайный лес (RF), классификатор повышения градиента (GBC), машины опорных векторов (SVM) и многослойный персептрон (MLP).

Метрика оценки определяется как оценка roc auc из-за высокого дисбаланса классов в данных. Я разделил данные mailout_train на обучающий и тестовый наборы. В таблице ниже приведены результаты.

Несмотря на то, что SVM хорошо восстанавливается в поезде, результаты теста низкие. По этой причине я выбираю классификатор Gradient Boosting Classifier с наивысшим результатом теста (0,787688). На графике показаны кривые ROC и оценки производительности классификаторов.

После выбора окончательной модели, Gradient Boosting Classifier, я выполняю поиск по сетке этой модели, чтобы оптимизировать гиперпараметры (скорость обучения, n_estimators, функция потерь). Выбранные значения параметров следующие:

  • скорость обучения = 0,1
  • n_оценщиков = 50
  • функция потерь = «экспоненциальная»

На графике показаны кривые ROC и оценки AUC окончательной модели. Кроме того, производительность этой модели на обучающих данных составляет 0,8779641871477044.

В соответствии с этой моделью ниже показаны 10 наиболее важных функций, а «D19_SOZIALES» выбран в качестве наилучшего атрибута.

Каггл Конкурс

В этой части я использовал данные «mailout_test» для тестирования лучшей модели, которую я нашел в конкурсе Kaggle. Я также применяю методы предварительной обработки к этим данным, упомянутым выше. Представлены прогнозы модели и получен первый балл входа: 0,78864 и 186-е место среди конкурентов.

Вывод

В этом проекте я пытаюсь создать отчет о сегментации клиентов, используя данные, предоставленные Bertelsmann Arvato Analytics. Во-первых, я применяю некоторые методы предварительной обработки, чтобы получить представление о данных.

Я сталкиваюсь с большим объемом данных, и мне нужно уменьшить данные, чтобы повысить производительность классификации. Вот почему я применяю алгоритм PCA. После этого я применяю алгоритм K-Means для группировки людей в разные кластеры.

Я пробую несколько моделей данных и выбираю лучшую в качестве классификатора повышения градиента. Наконец, эта лучшая модель представлена ​​в Kaggle.

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

  • различные методы предварительной обработки
  • разные значения k для алгоритма кластеризации K-средних
  • другие контролируемые алгоритмы ML,
  • более сложный поиск по сетке для настройки большего количества гиперпараметров

Если вам интересна эта тема, вы можете ознакомиться с работой здесь.

использованная литература

https://scikit-learn.org/stable/