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

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

В этом проекте я использовал данные от Arvato (спасибо!) и предоставленные Udacity.

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

Вот как мои наборы данных были структурированы:

Наборы данных.

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

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

Наборы данных были большими, и их загрузка занимала некоторое время.

Очистка данных и кодирование меток.

После проверки данных стало очевидно, что существует много пропущенных значений.

Кроме того, данные имели неизвестные значения (которые должны были быть указаны как NaN), но существовали в файле в других формах, таких как (-1,10,9), чтобы указать, что эти ответы недоступны. 9 и -1 должны существовать как NaN, как показано ниже:

После понимания данных я разработал функции, которые делали следующее:

  1. Удалены столбцы с 30% отсутствующими данными.
  2. Импутация данных с использованием медианы (для числовых переменных) и режима (для категориальных переменных).
  3. Сделал кодировку меток для категориальных функций, удалил ненужные функции (особенно те, у которых много классов).
  4. Стандартизировали числовые признаки, чтобы не было изменчивости среднего значения. Такая изменчивость влияет на производительность модели.

Разработка неконтролируемой модели.

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

Во-первых, я провел уменьшение размерности с помощью PCA (анализ основных компонентов). Я узнал из PCA, что только 89 признаков были ответственны за дисперсию данных. Поэтому я удалил остальные столбцы.

Затем я смог построить график локтя, чтобы определить количество кластеров.

Я выбрал 10, потому что после 10 видно, что кривая локтя падает.

Затем я визуализировал кластеры и построил их для обоих наборов данных:

Приведенная выше информация показала, что клиенты в основном находились в кластерах 2,8,9,4,1. Однако потенциальные клиенты будут приходить из кластеров 1,9,4,5,6. Это связано с тем, что в этих кластерах проживает намного больше людей.

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

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

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

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

from sklearn import preprocessing
le = preprocessing.LabelEncoder()
le.fit(newmail_data.RESPONSE)
le.transform

Затем я создал набор моделей, используя KNN, логистическую регрессию и классификаторы случайного леса.

Затем я использовал их лучшие модели для ансамбля и прогнозирования тестовых данных с точностью 99%. Поскольку все модели также предсказывали тестовые данные с точностью 99%, я выбрал логистическую регрессию для построения AUC.

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

Заключение.

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

Этот отчет можно улучшить следующим образом:

  1. Использование других моделей, например, LightGBM, XGBoost и других.
  2. Добавление дополнительных данных для исправления дисбаланса в целевой переменной. Возможно, это улучшит наш показатель AUC.

Полный код проекта можно найти здесь.