Введение

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

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

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

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

Часть I: Обучение без учителя

Анализ данных о клиентах и ​​общих данных о населении

Управление неизвестными значениями

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

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

Как видно, некоторые функции имеют значения NaN до ~100%. Таким образом, столбцы с отсутствующими значениями более 30% удаляются из набора данных.

Аналогичный анализ строк показывает, что в нескольких строках отсутствует большая часть данных. Почти в 82 процентах строк отсутствует 16 или менее значений. В то время как у остальных отсутствует 58 или более значений. 58 составляет ~16% от 357 столбцов, оставшихся после удаления столбцов с высоким NaN. Поэтому все строки с 58 или более отсутствующими значениями удаляются из набора данных.

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

«OST_WEST_KZ», «CAMEO_DEU_2015», «D19_LETZTER_KAUF_BRANCHE» преобразуются в фиктивные переменные, а значения NaN удаляются. и «EINGEFUEGT_AM» отбрасывается.

«PRAEGENDE_JUGENDJAHRE» преобразуется в 2 переменные «Десятилетие» и «Движение».

«CAMEO_INTL_2015» преобразуется в «БОГАТСТВО» и «ЭТАП ЖИЗНИ».

Масштабирование функций и замена NaN

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

Используя функцию Imputer(), я преобразовал все пропущенные значения в среднее значение значений столбца.

Впоследствии я использовал функцию StandardScaler для преобразования всех значений признаков в среднее значение 0 и стандартное отклонение 1.

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

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

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

Мы видим, что при 30 функциях и 280 функциях наблюдается существенное изменение наклона. Общее количество функций 430.

На 280 признаков приходится 95% дисперсии, поэтому я использую 280 компонентов для анализа PCA. Это дает существенное сокращение компонентов с минимальной потерей информации.

Быстрый анализ первого основного компонента с 280 признаками показывает, что этот компонент имеет дело с количеством людей в домашнем хозяйстве, плотностью населения в районе и доходом. Чем выше доля домов на 1-2 семьи, тем выше будет положительное влияние на этот основной компонент. Чем выше доля от 6 до 10 или более 10 семейных домов, тем выше негативное воздействие на этот основной компонент.

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

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

Когда у нас есть PCA для населения в целом и данные о клиентах, нам нужно сгруппировать их с помощью подходящего алгоритма кластеризации. Я использовал kMeans. Это позволит нам проверить, как данные кластеризуются в пространстве рассчитанных главных компонент.

Тогда возникает вопрос, какое количество кластеров будет подходящим для заполнения kMeans.

Из приведенного ниже рисунка видно, что по мере увеличения количества кластеров совокупное расстояние до центров кластеров постепенно уменьшается, но после 28 кластеров дальнейшего сокращения не происходит. Поэтому я использовал 28 кластеров для алгоритма kMeans.

Используя ту же модель, мы можем предсказать кластеры для данных о клиентах. Быстрое сравнение покажет нам, какие кластерные центры преобладают в клиентских данных по сравнению с населением в целом.

Из данных видно, что кластер 11 и кластер 17 представлены в клиентских данных чрезмерно по сравнению с общей популяцией.

Кластер 11

Люди с дорогими автомобилями высокого класса более склонны становиться клиентами. Люди с очень низким доходом и дешевыми автомобилями не будут склонны становиться клиентами.

Кластер 17

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

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

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

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

Часть II: контролируемое обучение

В этом разделе я построю модель прогнозирования, используя предоставленные помеченные данные. Данные искажены, так как из 42962 точек данных только 532 являются клиентами, что составляет 1,35% единиц и 98,65% нулей.

Модель, которая предсказывает 0 в 100% случаев, все равно будет успешной в 98,65%. Поэтому нам нужно использовать AUC-ROC для измерения производительности алгоритма.

Быстрая проверка анализа среди Random Forest, SGD и XGboost показывает, что XGBoost — это алгоритм, который следует использовать. Random Forest overfits и SGD очень требовательны к вычислительным ресурсам.

XGDBoost динамически обрабатывает значения NaN, поэтому у нас есть больше данных для анализа. Нет необходимости удалять какие-либо строки или столбцы NaN.

XGDBoost также эффективен в вычислительном отношении. Я использовал GridSearchCV для расчета оптимальных параметров для достижения наивысшего балла AUC ROC.

Оптимизированные оценки показаны ниже.

Best number of trees = 51

Overall AUC_train: 0.890400384174
Accuracy train: 0.9875
Overall AUCPR_train: 0.303283562948

Overall AUC_test: 0.799911876909
Accuracy test: 0.9879
Overall AUCPR_test: 0.0373487354451

Вывод

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

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