1. Введение

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

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

  • AZDIAS: Демографические данные для населения Германии в целом; (891 211 х 366).
  • CUSTOMERS: Демографические данные клиентов компании, занимающейся доставкой по почте; (191 652 х 369).
  • MAILOUT_TRAIN: демографические данные для лиц, ставших мишенями маркетинговой кампании; (42 982 х 367).
  • MAILOUT_TEST: Демографические данные для лиц, ставших мишенями маркетинговой кампании; (42 833 х 366).

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

  • Проанализируйте демографические данные (предоставленные Arvato Financial Solutions, дочерней компанией Bertelsmann) для клиентов компании, занимающейся продажами по почте в Германии, и сравните их с демографическими данными для населения в целом.
  • Используйте методы неконтролируемого обучения для сегментации клиентов, определяя части населения, которые лучше всего описывают основную клиентскую базу компании.
  • Используйте методы контролируемого обучения, чтобы предсказать реакцию клиентов в маркетинговой кампании для компании, занимающейся доставкой по почте, которая также является соревнованием Kaggle.

2. Реализация и анализ

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

(1) Создание словаря данных

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

Все функции в AZDIAS должны быть задокументированы, а также их типы данных и «отсутствующие или неизвестные» значения. Некоторые требуют ручной работы на основе ссылок и предположений. Словарь состоит из следующих частей:

Синтетический словарь данных выглядит следующим образом:

(2) Доступ к пустым значениям

  • Замените значения «missing or unknown» на np.nan в наборе данных, ссылаясь на приведенный выше словарь;
  • Удаление столбцов с NaN значением более 30%;
  • Удалить строки с более чем 20 значениями NaN;

(3) Разработка функций

  • Существует одна характеристика (показана выше), которая не является ни категориальной, ни числовой: CAMEO_INTL_2015, которую можно разделить на две порядковые характеристики: уровень благосостояния и уровень возраста.
  • One-Hot Encoding для категориальных функций; (Нет отношений порядка)
  • Заполнить пустые значения: заменить оставшиеся пустые ячейки наиболее часто встречающимся значением в каждом столбце; (PCA и K-Means не могут работать со значениями NaN)
  • Масштабируйте набор данных с помощью StandardScaler() из пакета scikit-learn; (K-средние предполагают сферическую форму кластеров)

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

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

На приведенном выше графике кривой мы видим, что 18 или более компонентов могут объяснить верхние 30% общей дисперсии, а объясненная дисперсия значительно падает примерно после 20. Поэтому я выбрал 20 в качестве параметра для дальнейшего анализа.

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

После обучения мы применяем 10-кластерную модель K-средних как к демографическим данным, так и к наборам данных о клиентах.

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

Коэффициенты Кластера 6 показаны ниже:

Поскольку на кластер 6 больше всего влияют первые 4 функции PCA, давайте заглянем внутрь для деталей.

1-й: Низкий доход, высокая мобильность, районы с большим количеством семейных домов или бизнес-зданий; (следует интерпретировать в обратном значении из-за отрицательных коэффициентов {-6.17289942})

2 место: Автомобили: Высший класс, Немецкие, Быстрые, Спортивные;

3-й: немолод, относительно богат, заинтересован в рекламе и готов делать покупки в Интернете;

4-й: много онлайн-транзакций, не одинок, имеет большую семью;

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

  • Жизненный этап: в среднем возрасте, имеет большую семью;
  • Финансовые возможности: с хорошим уровнем дохода и автомобилями высшего класса;
  • Модель поведения: спокойно относится к рекламе и онлайн-покупкам;

Прогнозировать реакцию клиентов

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

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

  • Сохраняйте как можно больше функций в обучающем наборе, чтобы сохранить больше основных характеристик исходных данных;
  • Оставил все значения NaN, потому что XGBoost умеет работать с отсутствующими значениями;
  • Данные не масштабировал, так как XGBoost — нелинейная модель;
  • Добавьте дополнительные функции: проверяя столбец LNR, мы знаем, что люди как в поезде, так и в тестовом наборе включены в набор данных CUSTOMERS. В этом случае в прогнозной модели можно использовать CUSTOMER_GROUP, ONLINE_PURCHASE, PRODUCT_GROUP.

Затем я разделил MAILOUT_TRAIN данных на наборы для обучения и проверки, обучил их с показателем AUC в качестве метрики оценки и 50 в качестве раундов ранней остановки.

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

Оказывается, в модели очень важны некоторые недокументированные признаки, такие как «D19_SOZIALES», «ANZ_KINDER», «EXTSEL992» и так далее.

Окончательный прогноз (response.csv) получил 0,80762 балла в общедоступной таблице лидеров Kaggle, которая занимала 3-е место на момент отправки и очень близка к высшему баллу 0,80819.

3. Заключение

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

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

Несмотря на то, что в общедоступной таблице лидеров Kaggle результат выглядит нормально, многое еще предстоит улучшить:

  • Разработка признаков: лучшее понимание данных определенно поможет в выборе признаков, а дополнительные признаки, извлеченные из внешних ресурсов для населения Германии, могут улучшить кластеризацию и прогнозирование;
  • Другие алгоритмы: lightgbm, catboost и многие другие алгоритмы могут быть опробованы в этом проекте;
  • Модель Fusion: по причине времени я обучил только одну модель в этом проекте. Однако Fusion Model является необходимой частью задач прогнозирования. Объединив несколько моделей, обученных по разным схемам, возможно, вы поднимете счет на новый уровень.

В конце я хотел бы поблагодарить Udacity и Arvato Financial Services за все это.