Этот проект является частью программы Udacity Data Science Nano Degree, и его можно найти на GitHub. Набор данных был предоставлен Bertelsmann Arvato Analytics и по соглашению не может быть обнародован.

Постановка задачи и описание проекта

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

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

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

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

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

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

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

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

Информационные уровни DIAS — Атрибуты 2017.xlsx: список атрибутов и описаний, упорядоченный по информационным категориям.

Атрибуты DIAS — Values ​​2017.xlsx: отображение значений данных для каждого объекта в алфавитном порядке.

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

  1. Жилье (например, количество домов на 1–2 семьи в районе)
  2. Финансовые (например, финансовый тип, тип покупателя/покупателя и т. д.)
  3. Мобильность (например, доля автомобилей с мощностью двигателя от 61 до 120 кВт)
  4. Личность (например, близость, указывающая на то, что человек придерживается традиционных взглядов)

и другие.

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

На изображении выше мы можем принять решение удалить столбцы с более чем 200 000 пропущенных значений. И мы делаем ту же процедуру, но для строк мы получаем следующую визуализацию:

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

Затем нам нужно иметь дело с категориальными данными. В этом проекте для простоты я решил убрать столбцы с более чем 10 уникальными значениями. Столбцы с меньшим количеством уникальных значений реконструируются с использованием фиктивных переменных. Проделав эти манипуляции с данными генеральной совокупности, мы получим 374 признака (столбца).

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

Теперь у нас все еще могут быть пропущенные значения, поэтому нам нужно использовать алгоритмы вменения, чтобы заполнить этот пробел. Заполнить пропущенные значения средними значениями столбца — самое простое решение, и мы будем его использовать. Затем мы будем использовать Standart Scaler, чтобы наши модели машинного обучения работали правильно.

Определите сегменты клиентов

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

Не существует четкого способа или алгоритма выбора количества компонентов. После поиска в Интернете было предложено выбрать количество компонентов, чтобы покрыть более 85% изменчивости данных. Кроме того, мы можем видеть «локоть» — когда кривая перестает расти, это может быть индикатором количества компонентов для выбора. Основываясь на этом и графиках выше, я выбрал 200 компонентов, которые объясняют ~ 90% изменчивости данных.

Следующим шагом является кластеризация методом k-средних. Чтобы понять, какое количество кластеров выбрать, мы можем построить кривую:

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

Если мы посмотрим на графики выше, то увидим, что основные и текущие клиенты являются представителями кластеров 0,2,3,7 из общей популяции, а кластеры 1,4 и 8 являются наименее представленными кластерами из общей популяции. в наборе данных клиентов. Так что можно сказать, что представители из общей популяции 1,4 и 8 — наши мишени. Кто они? Давайте проверим признаки для каждого кластера с положительной корреляцией. Для кластера 1 можно сказать, что это молодые люди, которые очень хорошо зарабатывают, заботятся об экологии и окружающей среде и склонны экономить, не тратить много. Для второго кластера это люди с семьями, которые совмещают традиционные и онлайн-покупки. И кластер 8: это тоже люди с семьями, с более высоким доходом, домами, религиозными и большими автомобилями (или минивэнами для семьи). Итак, классическая семья в общих чертах. Это еще не полная картина, так как мы пропустили много столбцов на этапе очистки данных, и некоторые столбцы трудно интерпретировать без дополнительных разъяснений.

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

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

Набор обучающих данных состоит из 33837 строк и 367 функций, включая 1 столбец: ОТВЕТ. Он имеет только 0 и 1 в значениях, а 1 указывает, что человек стал клиентом, и 0, если нет. Если мы проверим столбец ОТВЕТ, мы увидим, что у нас есть только ~ 1,2% 1 и 98,8 0, так что это довольно несбалансировано. ROC AUC использовался в качестве показателядля выбора лучшей модели. Набор тестовых данных включает 42833 человека.

Нам нужно будет применить те же шаги предварительной обработки для наборов данных, что и раньше. Для тестирования выбраны 4 контролируемые модели: SVC, RandomForestClassifier, AdaBoostClassifier и GradientBoostingClassifier.

После расчета ROC AUC по всем моделям имеем следующие результаты:

SVC: оценка — 0,6078, время выполнения — 2664 сек.

RandomForestClassifier: оценка — 0,5159, время выполнения — 5,55 сек.

AdaBoostClassifier: оценка — 0,6702, время выполнения — 42,45 сек.

GradientBoostingClassifier: оценка — 0,6958, время выполнения — 196,55 сек.

Таким образом, у GradientBoostingClassifier был самый высокий показатель ROC AUC среди других — 0,6958 и время 196 секунд. На втором месте AdaBoostClassifier, который немного отстает по показателю — 0,67, но затрачивает всего 42 секунды, то есть в 4,5 раза быстрее. Таким образом, для применения GridSearch выбран AdaBoostClassifier, и в этом случае он будет более практичным. После проведения оптимизации мы получили результат ROC AUC, увеличенный с 0,67 до 0,72 (~7%), что является неплохим результатом.

Выводы

Отражение

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

По сравнению с проектом от Term1 — это намного сложнее по многим причинам. Один из них заключается в том, что у нас есть больший набор данных и больше столбцов, что означает, особенно без словаря, который у нас был в предыдущем проекте. действительно трудно понять/догадаться. Таким образом, отсутствие описания некоторых столбцов сильно повлияло на понимание результатов анализа PCA и кластеризации. В моем случае я вижу преобладание типа финансов, типа покупок и столбцов доходов в других столбцах, например, связанных с автомобилями, что немного сбивает с толку, когда при анализе компонентов PCA была четкая картина взаимосвязи дорогих и дешевых автомобилей. Но из-за отсутствия описания для других столбцов эти интерпретации ни к чему не привели. А что касается общей очистки данных — конечно, для получения более качественных и четких результатов потребуется больше работы по разработке функций — не просто удаление столбцов с более чем 10 уникальными значениями, а скорее их фиктивное и перекодирование при необходимости. Наверняка это потребует большей вычислительной мощности и, вероятно, эта задача не подойдет для среднего ноутбука, а потребует чего-то более мощного.

Улучшения

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