Применяйте методы машинного обучения для прогнозирования клиентов

Этот пост посвящен одному из главных проектов, выбранных для Udacity Data Science Nanodegree; Отчет по сегментации клиентов для Bertelsmann / Arvato. Этот проект представляет для меня личный интерес, поскольку он представляет собой реальную задачу по науке о данных с использованием как неконтролируемого, так и контролируемого машинного обучения, а также является соревнованием Kaggle InClass Competition.



Обзор проекта

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

Заявление о проблеме

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

Таким образом, я определяю следующие постановки проблемы:

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

Описание проекта

Для достижения нашей цели проект разделен на несколько подзадач:

  1. Анализ и предварительная обработка данных, включая очистку данных, кодирование категориальных значений и масштабирование функций;
  2. Отчет о сегментации клиентов: сначала выполните уменьшение размерности с помощью PCA, а затем кластеризацию с помощью K-средних;
  3. Модели обучения с учителем для прогнозирования
  4. Представление Kaggle и оценка модели

Показатели

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

Для кластеризации используется K-среднее, и на основе внутрикластерной суммы квадратов (WCSS) для каждого решения используется метод локтя для принятия решения о количестве кластеров для выбора.

Для соревнований Kaggle прогноз оценивается с использованием показателя Area Under Curve (AUC). Это дает представление об общей производительности модели, где кривая построена путем построения истинных положительных и ложноположительных показателей при различных настройках пороговых значений. Модель с хорошей производительностью будет иметь AUROC, равный 1. Таким образом, чем выше оценка AUC, тем выше производительность модели.

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

Анализ

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

С этим проектом связано четыре файла данных:

AZDIAS: Демографические данные по населению Германии в целом.

КЛИЕНТЫ: демографические данные для клиентов компании, занимающейся доставкой по почте.

MAILOUT_TRAIN и MAILOUT_TEST: демографические данные для лиц, которые были целями маркетинговой кампании.

Демографическая информация собиралась на разных уровнях, включая информацию для отдельных лиц, домохозяйств, зданий, сообществ и т. Д. Демографические данные для населения Германии в целом содержат 891 211 записей, и каждая запись имеет 366 атрибутов. Данные о клиентах из компании, занимающейся доставкой по почте, содержат 191 562 записи и 369 атрибутов. Чтобы сравнить данные о населении и клиентах, нам необходимо выполнить некоторые предварительные этапы обработки.

  1. Работа со столбцами смешанного типа

При загрузке данных появляется предупреждающее сообщение. Это произошло из-за столбцов «CAMEO_DEUG_2015» и «CAMEO_INTL_2015», в которых есть некоторые специальные символы «X» и «XX». Эти символы были заменены на NAN.

2. Работа с неизвестными значениями

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

Кроме того, неизвестные значения не совпадают по всему набору данных.

Как видно на рисунке выше, неизвестные представлены как (-1,0), (-1,9) или просто -1. Мы исправляем это, чтобы данные в обоих наборах данных были согласованными.

3. Отсутствующие значения

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

Оба набора данных, похоже, имеют одинаковые отсутствующие данные для каждого столбца. «ALTER_KIND4», «ALTER_KIND3», «ALTER_KIND2» и «ALTER_KIND1» были удалены, поскольку в них отсутствует более 80% значений. Мы дополнительно проанализировали количество пропущенных значений в каждой строке. Было удалено наблюдение, у которого отсутствовало более 50 элементов.

4. Связанные функции

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

5. Ввод отсутствующих значений

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

6. Быстрое кодирование

Есть еще некоторые категориальные переменные, которые необходимо преобразовать, чтобы их можно было передать алгоритмам машинного обучения. По этой причине мы использовали горячее кодирование для «OST_WEST_KZ» и «CAMEO_DEU_2015».

7. Стандартизируйте данные

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

Методология

Уменьшение размерности

К данным был применен анализ главных компонентов (PCA) для уменьшения размеров. Цель состоит в том, чтобы получить наименьшее количество функций, способных объяснить максимальную дисперсию в наборе данных. График PCA показывает объясненную дисперсию по компонентам.

Как видно из рисунка выше, 180 компонентов могут объяснить более 80% отклонений. После очистки и предварительной обработки данных было 312 функций, мы сократили это количество на 132 и по-прежнему сохранили 87% объясненной дисперсии.

Анализ PCA

Мы смотрим на веса функций, определяемые алгоритмом PCA, и понимаем, из чего состоит каждый компонент.

мы можем проанализировать каждый кластер и найти важные особенности. Рисунок выше относится к компоненту 1. 10 наиболее взвешенных характеристик в компоненте 1. Первые 5 являются положительно коррелированными характеристиками, а последние 5 - отрицательно коррелированными характеристиками.

Можно сделать вывод, что первый компонент положительно оценивает людей, связанных с расчетным чистым доходом домохозяйства и классификацией на основе классов. Это отрицательно влияет на людей, относящихся к количеству 1-2 семейных домов в ячейке и доле автомобилей на семью.

Дальнейший анализ кластеров можно найти в моем репозитории GitHub.

Отчет по сегментации клиентов

Обучение без учителя с помощью K-средних

Мы используем алгоритм кластеризации K-средних, чтобы разделить население и клиентов на разные сегменты. Основная идея алгоритма кластеризации состоит в том, чтобы выбрать количество кластеров, чтобы минимизировать внутрикластерные вариации. То есть точки в одном кластере максимально приближены друг к другу. Таким образом, мы определяем расстояния внутри кластера и используем метод локтя, чтобы определить количество кластеров.

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

Теперь мы сравниваем долю данных в каждом кластере для данных о клиентах с долей данных в каждом кластере для генеральной совокупности.

В приведенной выше таблице представлено количество людей в каждом кластере в наборах данных AZDIAS и CUSTOMERS.

Доля населения и клиентов в каждом кластере.

Мы видим, что в кластерах 2 и 3 слишком много клиентов.

Модель обучения с учителем

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

Выполнение

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

  • Логистическая регрессия
  • РешениеДеревоКлассификатор
  • RandomForestClassifier
  • GradientBoostingClassifier
  • AdaBoostClassifier
  • Классификатор XGBoost

Метрика

Учитывая, что это сильно несбалансированные данные, подходящей метрикой оценки будет Область под кривой рабочих характеристик приемника (AUC-ROC). Чем ближе к 1 результат AUC-ROC, тем лучше производительность модели.

GradientBoostingClassifier - лучшая модель, за ней следуют AdaBoost и XGBoostClassifier. Однако, несмотря на то, что результаты Gradient Boosting превосходят по баллам, у него также самое высокое время обучения.

Настройка гиперпараметров

AdaBoost и XGBClassifier будут выбраны для настройки гиперпараметров. Для настройки был выбран набор гиперпараметров для обоих алгоритмов, и был проведен поиск по сетке для определения лучших моделей.

Результаты

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

Для модели с AdaBoost наиболее важной функцией является D19_Soziales. К сожалению, в разделе «Уровни информации DIAS - Атрибуты 2017.xlsx» для него нет описания. Хотя из-за префикса D19 я могу предположить, что он каким-то образом связан с уровнем семейной информации / социальной транзакцией, но могу ошибаться.

Для модели XGBoost наиболее важной функцией снова является D19_Soziales, но она не является доминирующей, как в AdaBoost. Следующая характеристика - KBA05_MOD2, которая связана с долей автомобилей среднего класса.

Конкурс Kaggle

Окончательный прогноз был сделан на тестовом наборе данных Udacity_MAILOUT_052018_TEST.csv и отправлен на Kaggle.

Прогнозирование с XGBoost без GridSearch,

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

Обоснование

С настройкой GridSearch Hyperparameter я смог улучшить обе модели XGBoost и AdaBoost. Лучшей моделью была AdaBoost с общедоступной оценкой 0,80365. Я считаю, что его можно улучшить с помощью более точной настройки.

Вывод

Постановка проблемы, сформулированная в начале этого проекта, была следующей:

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

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

Улучшение

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

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

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

Для получения дополнительной информации посетите мой репозиторий GitHub

Ссылки

  1. Полное руководство по привлечению клиентов на 2020 год (hubspot.com)
  2. Https://www.kaggle.com/c/udacity-arvato-identify-customers
  3. Https://github.com/OliverFarren/arvato-udacity-customersegmentation
  4. Https://towardsdatascience.com/how-to-learn-from-bigdata-files-on-low-memory-incremental-learning-d377282d38ff