1. Введение

Для эффективного привлечения новых клиентов любой компании крайне важно иметь представление о том, какие слои общества с наибольшей вероятностью станут клиентами. Этот проект, который является частью программы Udacity Data Science Nano Degree, демонстрирует, как использовать методы машинного обучения для решения этого вопроса. Наборы данных для этого проекта были предоставлены Arvato (дочерняя компания Bertelsmann) и включают демографические данные, относящиеся как к населению в целом, так и к клиентам компании, занимающейся продажами по почте в Германии. Конкретная задача заключалась в том, чтобы проанализировать характеристики существующих клиентов, сопоставить их с общей совокупностью и выполнить сегментацию клиентов, определив части совокупности, которые лучше всего описывают основную клиентскую базу компании.

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

2. Данные

Проект основан на реальных данных, предоставленных Arvato. Было 4 набора данных с демографическими данными (и 2 дополнительных CSV-файла с описаниями некоторых функций).

  • Udacity_AZDIAS_052018.csv: демографические данные для населения Германии в целом; 891 211 лиц (строк) x 366 признаков (столбцов)

  • Udacity_CUSTOMERS_052018.csv: демографические данные клиентов компании, занимающейся доставкой по почте; 191 652 лица (строки) x 369 признаков (столбцы)

  • Udacity_MAILOUT_052018_TRAIN.csv: демографические данные для лиц, ставших мишенями маркетинговой кампании; 42 982 лиц (строки) х 367 (столбцы)

  • Udacity_MAILOUT_052018_TEST.csv: демографические данные для лиц, ставших мишенями маркетинговой кампании; 42 833 лиц (строки) х 366 (столбцы)

3. Схема проекта

Проект был разделен на 3 части:

  1. Предварительная обработка данных
    Предварительная обработка данных, включая очистку данных, кодирование категориальных данных, обработку пропущенных значений, разработку функций и масштабирование.
  2. Сегментация клиентов
    Использование методов неконтролируемого обучения (кластеризация K-средних) для описания взаимосвязи между демографическими данными существующих клиентов компании и населением Германии в целом с целью выявления групп населения в целом. которые, скорее всего, будут частью основной клиентской базы компании, занимающейся доставкой по почте.
  3. Модель обучения с учителем
    Анализ третьего набора данных с демографической информацией для целей маркетинговой кампании компании и использование методов обучения с учителем для обучения модели прогнозированию реакции клиентов на маркетинговую кампанию.

4. Анализ и обсуждение

4.1. Предварительная обработка данных

В первой части проекта использовались только набор данных «Azdias» (представляющий население в целом) и набор данных «Customer» (представляющий клиентов компании, занимающейся доставкой по почте).

Разработка столбцов смешанного типа и унификация кодирования отсутствующих значений

Я начал процедуру обработки с обращения к предупреждениям, которые отображались сразу после загрузки наборов данных и в соответствии с которыми некоторые столбцы имеют смешанные типы (float и int). Итак, первым действием было преобразовать все записи в тип с плавающей запятой.

Следующее, что мне бросилось в глаза при проверке информационного файла «Attributes_Values», заключалось в том, что отсутствующие значения были закодированы непоследовательным образом. Также 0, -1, X как XX использовались для кодирования отсутствующих значений. Поэтому я написал следующую функцию для унификации кодировки путем преобразования всех отсутствующих значений в NaN.

Обработка пропущенных значений и стандартизация функций

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

Точно так же я удалил строки с более чем 30 % отсутствующих значений.

Остальные отсутствующие значения были обработаны путем вменения. Для этого сначала был закодирован категориальный признак «OST_WEST_KZ». Оставшиеся три категориальных признака «EINGEFUEGT_AM», CAMEO_DEU_2015 и D19_LETZTER_KAUF_BRANCHE были удалены из-за того, что не содержали ценной информации или имели очень большое количество уровней, и в значительной степени увеличили бы количество признаков для целей моделирования.

Как видно из информационного файла, из оставшихся признаков 7 являются числовыми, а 335 — масштабируемыми по интервалам. В первом случае отсутствующие значения были рассчитаны с использованием медианы. Для последнего использовалось округленное среднее.

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

4.2. Сегментация клиентов

Предварительная обработка данных «Azdias» привела к набору данных с 322 столбцами. Поскольку количество функций относительно велико, мы можем использовать класс PCA sklearn, чтобы применить анализ основных компонентов к данным, чтобы найти векторы максимальной дисперсии в данных. Это уменьшает шум и, следовательно, методы кластеризации позволяют лучше различать разные кластеры.

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

После выполнения PCA я вычислил кумулятивную дисперсию, учитываемую каждым главным компонентом, и нанес ее на график. Поэтому я решил оставить 150 компонентов.

Как видно на рисунке 8, примерно после 150 компонентов объясняемое изменение кумулятивной дисперсии становится менее значительным. Поэтому я решил оставить 150 компонентов.

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

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

На рисунке 10 показано, что кластеры 0, 2 и 6 представлены в наборе данных о клиентах в большей степени, чем в общей популяции.

Анализ того, что характеризует людей в этих кластерах, показал, что некоторые характеристики, которые их всех объединяют, заключаются в том, что им не менее 46 лет, доминирующим движением в их молодости было «60-е годы — экономическое чудо», имеют экономическую финансовую позицию. и родом из Западной Германии.

4.3. Контролируемое обучение

4.3.1 Подготовка

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

Здесь в игру вступают два набора данных MAILOUT_TRAIN и MAILOUT_TEST. MAILOUT_TRAIN содержит столбец RESPONSE, в котором указано, стал ли человек клиентом компании после кампании. Это было использовано для создания модели прогнозирования.

На первом этапе я применил те же шаги предварительной обработки из части 1 и масштабирование к обоим наборам данных.

4.3.2 Результаты

Поскольку можно использовать несколько моделей классификации, я создал следующую функцию, которая позволяет сравнивать производительность каждого классификатора с точки зрения оценки AUC ROC.

4.3.2.1 Оценка и проверка модели

Сравнение между логистической регрессией, классификатором упаковки, классификатором случайного леса, классификатором AdaBoost и классификатором повышения градиента показало, что последний имел лучшую производительность с оценкой 0,75 (см. Таблицу 1).

Поэтому для дальнейшего анализа я выбрал Gradient Boosting Classifier и выполнил некоторую настройку гиперпараметров с помощью Grid Search cv.

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

  • lossуказывает на оптимизацию функции потерь (я тестировал на «отклонение» и «экспоненциальность»)
  • max_depth ограничивает количество узлов в дереве (я тестировал 2, 3 и 5 узлов)
  • n_estimators относится к количеству оценщиков, выбранных при ранней остановке (я тестировал 80 и 100)
  • subsample доля выборок, которые будут использоваться для подбора отдельных базовых учащихся (я протестировал 0,5 и 1,0)

По этим параметрам наилучшей комбинацией оказалось:

Благодаря этой настройке гиперпараметров мне удалось немного улучшить производительность до 0,77 балла.

В качестве последнего шага мы спрогнозировали столбец «Ответ» для набора данных Mailout Test.

На рисунке 111 ниже вы можете увидеть первые 10 записей полученного набора данных.

4.3.2.2 Обоснование

Результирующая производительность алгоритма обучения с учителем составляет 76,6%, что соответствует средней точности.

Метрика, которую я использовал для оценки производительности, — это так называемые рабочие характеристики приемника области под кривой (AUC ROC), которые можно интерпретировать как вероятность того, что баллы, полученные классификатором, ранжируют случайно выбранный положительный экземпляр выше, чем случайно выбранный положительный экземпляр. выбран отрицательный. Причина, по которой я выбрал эту метрику, заключается в том, что AUC ROC, в отличие, например, от точности, особенно хорошо справляется с несбалансированными классами. В нашем случае, когда столбец RESPONSE содержит 42430 нулей и 532 единицы, я посчитал эту метрику лучшим выбором.

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

5. Заключение и возможные улучшения

В этом проекте в рамках программы Udacity Data Science Nanodegree я использовал реальные демографические данные, предоставленные Bertelsmann Arvato, чтобы сначала выяснить, какие сегменты общества с наибольшей вероятностью станут клиентами, а затем построить модель прогнозирования.

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

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

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

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

С технической стороны можно было бы поэкспериментировать с различными порогами отсутствующих данных во время подготовки данных или использовать другой метод масштабирования (например, MinMax Scaler). Наконец, есть ряд улучшений, которые стоили бы довольно дорого с точки зрения вычислительных ресурсов. Например, можно было бы использовать итеративное вменение для заполнения пропущенных значений (см. здесь для получения дополнительной информации).

Более того, проблему несбалансированных классов можно было бы решить с помощью SMOTE (Техника передискретизации синтетического меньшинства) для создания точек данных, которые лежат между существующими экземплярами меньшинства. Наконец, я мог бы добавить больше гиперпараметров в резюме поиска по сетке.

В заключение я хотел бы поблагодарить Udacity и Arvato за предоставление этого сложного проекта из реальной жизни.