В этом посте я расскажу о проекте, над которым я работал последние дни в рамках моей наностепени Data Science от Udacity.

Я задался вопросом: как компания, занимающаяся доставкой по почте, может более эффективно привлечь больше клиентов?

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

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

Понимание данных

Данные, предоставленные компанией, показывают:

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

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

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

В конце концов я решил удалить ›40 столбцов из-за большого количества пропущенных значений или проблем с алгоритмами машинного обучения.

Анализ основных компонентов

Согласно [Википедии]( https://en.wikipedia.org/wiki/Principal_component_analysis)

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

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

На этой диаграмме я показываю, как вы можете объяснить большую часть дисперсии набора данных с гораздо меньшим количеством переменных. На самом деле, используя менее половину переменных, можно объяснить более 90 % дисперсии. И ~ 90 измерений уже подготовят вас к учету 80% дисперсии данных.

В анализе основных компонентов несколько переменных объединяются в компоненты на основе их корреляции. Например

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

Кластеризация

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

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

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

Чтобы определить подходящее количество кластеров для использования, я отложил сумму квадратов ошибок (SSE) по оси Y к количеству кластеров (K).

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

После этого анализа я сравнил % общего и клиентского населения в разных кластерах.

Популяция клиентов кажется чрезмерно представленной в кластерах 13, 11, 5 и 4. Это может быть полезно для более подробной оценки компании. После небольшого исследования некоторые из элементов, отличающих «Кластер 13» от среднего населения, заключаются в том, что они являются более жилыми и чаще покупают технологические продукты.

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

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

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

Но еще до того, как мы приступим к машинному обучению, мы уже можем видеть, какие параметры коррелируют с реагированием:

Чтобы избежать переобучения и иметь возможность оценить результаты алгоритмов ML, я сначала разделил свои данные на обучение и тестирование, отдав 25% всех данных обучению. Чтобы заставить эти данные работать с алгоритмами sklearn, которые не могут обрабатывать пропущенные значения, мне пришлось вменить пропущенные значения, заменив их средним ответом. Кроме того, я использовал стандартное масштабирование для стандартизации своих данных.

Я тестировал разные модели:

a) Классификатор случайного леса: не дал хороших результатов из-за дисбаланса классов (даже после использования поиска по сетке)

«б) Наивный байесовский алгоритм: результаты лучше, особенно большое количество людей, которые действительно ответили (см. изображение ниже).

c) AdaBoostClassifier: работает достаточно хорошо, особенно при использовании точности в качестве метрики.

Оптимизация моделей:

Чтобы получить наилучший результат, я использовал GridSearch, инструмент, который позволяет вам опробовать различные комбинации гиперпараметров всех моделей. Таким образом, вы можете опробовать различные комбинации на основе определенного параметра, который хотите оптимизировать. В моем случае я использовал как точность, так и ROC AUC в качестве единиц оптимизации.

Ниже вы можете увидеть результаты поиска по сетке.

Возможность улучшения

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

  • Использование проверки K-Fold: этот инструмент может быть полезен для использования всехданных как для обучения, так и для тестирования. Это может улучшить результаты
  • Тестирование большего количества моделей: использование большего количества моделей, таких как Машины опорных векторов, Градиентная повышающая регрессия или даже нейронные сети.
  • Использование кластеров контролируемого обучения в качестве входных данных для алгоритмов контролируемого обучения
  • Изменение баланса в наборе обучающих данных. Из-за дисбаланса классов люди, откликнувшиеся на кампанию, мало представлены в обучающих данных. Изменение этого баланса может помочь алгоритму переоценить количество людей, которые ответят. Это, вероятно, снизит точность, но повысит другие показатели, которые могут нас больше волновать, например точность.

Заключение

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