1 Введение
Обзор проекта
В этом проекте я работаю с реальными данными, предоставленными нам партнерами Bertelsmann AZ Direct и Arvato Finance Solution. Приведенные здесь данные относятся к компании, занимающейся продажами по почте в Германии. В процессе этого анализа мы обсудим основной бизнес-вопрос ниже на основе всех демографических данных населения Германии и клиентов компании, занимающейся доставкой по почте.
- Какие группы населения Германии могут быть представлены клиентами компании, занимающейся доставкой по почте.
- Какие группы населения Германии вряд ли будут клиентами компании, занимающейся доставкой по почте.
Чтобы ответить на эти два вопроса, я применил неконтролируемые методы обучения демографическим данным и данным о расходах для выборки немецких домохозяйств. Я также предварительно обработал данные, применил методы уменьшения размерности и реализовал алгоритмы кластеризации для сегментации клиентов с целью оптимизации охвата клиентов для компании, занимающейся доставкой по почте. Кроме того, у меня также есть доступ к третьему набору данных с атрибутами целей кампании по почте. Была настроена контролируемая модель машинного обучения, чтобы предсказать, будет ли каждый человек реагировать на кампанию.
Используя методы обучения без присмотра и с учителем, компания, занимающаяся доставкой по почте, может организовать население в кластеры, а затем использовать эти кластеры, чтобы увидеть, какие из них составляют основную базу пользователей компании.
Постановка задачи
Их главный интересующий вопрос состоит в том, чтобы определить группы населения, которые с наибольшей вероятностью станут покупателями их продуктов для кампании по рассылке.
Общее население было организовано в кластеры с использованием методов неконтролируемого обучения, а затем используйте эти кластеры, чтобы увидеть, какие из них составляют основную пользовательскую базу компании. Узнав, какие части населения с большей вероятностью станут клиентами компании, занимающейся доставкой по почте, я также строю контролируемую модель машинного обучения, чтобы решить, стоит ли включать этого человека в кампанию, используя демографические данные. информация от каждого человека.
Метрики
Ниже представлены все показатели, используемые для оценки результатов моей модели, с соответствующей подробной информацией.
- Точность фокусируется на предсказанных «положительных» значениях в нашем наборе данных. Путем оптимизации на основе значений точности мы определяем, хорошо ли мы предсказываем положительные значения по сравнению с предсказанием отрицательных значений как положительных.
- Отзыв фокусируется на фактических «положительных» значениях в нашем наборе данных. Оптимизируя на основе значений отзыва, мы определяем, хорошо ли мы предсказываем положительные значения, независимо от того, как мы работаем с фактическими отрицательными значениями.
- Оценка F1 (или F-бета-оценка) – это распространенный метод, используемый для одновременного просмотра комбинации показателей. Следует отметить, что параметр β определяет степень, в которой точность взвешивается в показателе F, что позволяет одновременно учитывать точность и полноту. Наиболее распространенным значением бета является 1, так как именно здесь мы находим среднее гармоническое между точностью и полнотой.
Кроме того, точность также часто используется для сравнения моделей, поскольку она сообщает нам долю наблюдений, которые мы правильно пометили. Однако эту метрику нельзя использовать для оценки моих моделей, поскольку наши наборы данных, необходимые для этого проекта анализа, имеют большой дисбаланс выходных классов. Таким образом, оптимизация точности может ввести в заблуждение относительно того, насколько хорошо наша модель действительно работает.
2 Понимание данных (исследование и визуализация данных)
В целом, 4 набора данных ниже были предоставлены партнерами Bertelsmann AZ Direct и Arvato Finance Solution. Эти наборы данных имеют много одинаковых оставшихся функций/столбцов. Однако наборы данных о клиентах содержат три дополнительных столбца («CUSTOMER_GROUP», «ONLINE_PURCHASE» и «PRODUCT_GROUP»), которые предоставляют широкую информацию о клиентах, изображенных в файле. Кроме того, mailout_train включал один дополнительный столбец «ОТВЕТ», в котором указывалось, стал ли каждый получатель клиентом компании.
- 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 (столбцы).
В ходе анализа я изучил и понял данные, с которыми работаю. В рамках исследования свойств набора данных был получен доступ к отсутствующим значениям, закодированным в столбцах и строках данных, как показано ниже.
Оценка отсутствующих данных в столбцах (функции)
Хотя приведенная выше диаграмма не может четко представить объекты с большим количеством отсутствующих данных, мы все же могли заметить, что есть некоторые объекты с более чем 20% отсутствующих данных. Давайте увеличим его для объектов, которые имеют более 20% наборов данных, как показано на рисунке ниже.
Обе гистограммы выше показывают пропорцию недостающего значения каждой функции наших наборов данных. Из гистограммы (доля >0,2) мы могли заметить, что 16 функций имеют более высокую долю отсутствующих значений, которая составляет до 99,9%. Поэтому эти 16 функций были исключены из наших наборов данных.
Оценка отсутствующих данных в строках
Что касается отсутствующих данных в строках, я также провел аналогичную оценку для строк набора данных.
count 891221.000000 mean 29.431804 std 73.177219 min 0.000000 25% 0.000000 50% 0.000000 75% 0.000000 max 244.000000 dtype: float64
Основываясь на приведенной выше описательной статистике, максимальное количество отсутствующих данных может достигать 244. Поэтому данные были разделены на два подмножества с использованием ‹= 120 отсутствующих данных и › 120 отсутствующих данных.
Чтобы знать, что делать со строками-выбросами, мы должны посмотреть, является ли распределение значений данных в столбцах, в которых нет пропущенных данных (или пропущено очень мало данных), одинаковым или разным между двумя группами. Следующие пять из этих столбцов были выбраны и сопоставлены с распределением значений.
- Распространение D19_SONSTIGE
- Распространение FINANZ_SPARER
- Распространение ZABEOTYP
- Распространение AGER_TYP
- Распределение SEMIO_DOM
Из этих 5 подграфиков выше мы могли заметить, что данные с › 120 (много) пропущенных значений сильно отличаются от данных с ‹=120 (мало или нет) пропущенных значений. Следовательно, следует отметить, что наши наборы данных особенные.
Дальнейший анализ был дополнительно проведен с использованием данных с ‹=150 (мало или нет) пропущенных значений. Следовательно, количество строк, удаленных из наших наборов данных, составляет всего 105 159 строк (только 11,80 % всех строк). Однако sklearn требует, чтобы в данных не было пропущенных значений, чтобы его оценщики работали правильно. Поэтому я вменил все оставшиеся недостающие значения из наших наборов данных, используя соответствующие значения режима каждого признака.
Я также создал функцию для этой процедуры очистки, которая в первую очередь применяется к общим демографическим данным. Эта функция будет использоваться позже для клиентов и данных рассылки.
3 Подготовка/предварительная обработка данных
В разделе наши наборы данных были предварительно обработаны следующими шагами:
- Перекодирование
- Масштабирование функций
- Уменьшение размерности
Повторное кодирование
Поскольку используемые методы обучения без учителя и с учителем будут работать только с данными, закодированными в числовом виде, мне нужно внести несколько изменений в кодировку или дополнительные предположения, чтобы иметь возможность добиться прогресса.
После доступа ко всем типам данных функций я обнаружил, что следующие функции не являются числовыми. Шаги кодирования были использованы для этих функций, которые также были представлены ниже.
- Категориальные признаки:
- OST_WEST_KZ (бинарные категориальные объекты) — перекодируйте эти объекты в «0» и «1».
- CAMEO_DEU_2015 (многоуровневые категориальные признаки) — манекены с помощью функции get_dummies() от panda.
- CAMEO_DEUG_2015 (многоуровневые категориальные признаки) — манекены с помощью get_dummies() от panda.
2. Особенности смешанного типа:
- CAMEO_INTL_2015 — перекодировано в еще две функции (богатство и этап жизни)
3. Функции даты и времени:
- EINGEFUEGT_AM — перекодировано в функции «Год», «Месяц» и «День».
Масштабирование функций
Прежде чем я применю методы уменьшения размерности к данным, было выполнено масштабирование объектов, чтобы на векторы главных компонентов не влияли естественные различия в масштабе объектов.
Масштабирование функций, выполненное для наборов данных посредством стандартизации, со следующими шагами:
- Создайте экземпляр StandardScaler sklearn и назначьте его переменной масштабирования.
- Вычислите параметры масштабирования, используя метод .fit_transform() для массива признаков предиктора, который также возвращает переменные предиктора в их стандартизированных значениях.
Уменьшение размерности
На масштабированных данных наши наборы данных теперь готовы применить методы уменьшения размерности.
- Используйте класс sklearn PCA, чтобы применить анализ основных компонентов к данным, таким образом найдя векторы максимальной дисперсии в данных. Для начала я не устанавливаю никаких параметров (поэтому вычисляются все компоненты).
- Проверьте отношение дисперсии, объясненное каждым основным компонентом, а также кумулятивную дисперсию, объясненную путем построения кумулятивных или последовательных значений с использованием функции графика matplotlib, как показано на рисунке ниже. Основываясь на графике осыпи, я выбрал значение для количества преобразованных функций (n_components=40), сохраняемых для кластерной части проекта.
- После выбора количества сохраняемых компонентов экземпляр PCA был переоборудован для выполнения выбранного преобразования.
Кроме того, я также создал функцию для этой процедуры предварительной обработки, которая сначала применяется к общим демографическим данным. Эта функция будет использоваться позже для клиентов и данных рассылки.
4 Настройка и оценка модели
Этот проект состоит из трех основных этапов: отчет о сегментации клиентов, модель контролируемого обучения и конкурс Kaggle.
Отчет о сегментации клиентов
На преобразованных данных были применены методы кластеризации для определения групп в общих демографических данных. Та же модель кластеризации для набора данных клиентов также была применена, чтобы увидеть, как сегменты рынка различаются между населением в целом и компанией, занимающейся продажами по почте. Ниже приведены шаги на этом этапе:
- Определение k (количество кластеров) — перед созданием экземпляра модели кластеризации k-средних использовалась общая стратегия для определения
k
, метод локтя. В методе локтя я построил график зависимости количества кластеров (по оси X) от среднего расстояния от центра кластера до каждой точки (по оси Y), как показано ниже. В точке k=4 добавление новых кластеров больше не приведет к существенному уменьшению среднего расстояния. Эта точка известна как локоть. Следовательно, для модели k-mean следует использовать 4 кластера для определения общей совокупности сегмента и совокупности клиентов.
- Используйте метод k-средних, чтобы сгруппировать демографические данные в группы.
- Среднее расстояние всегда будет уменьшаться с каждым дополнительным центром кластера. Однако при меньшем количестве кластеров эти сокращения будут более значительными. В какой-то момент добавление новых кластеров больше не приведет к существенному уменьшению среднего расстояния. Эта точка известна как локоть.
- Примените методы и модели, которые вы согласуете с демографическими данными, к данным о клиентах: очистка данных, масштабирование функций, PCA и кластеризация k-средних. Сравните распределение людей по кластерам для данных о клиентах с распределением населения в целом. Можете ли вы сказать что-нибудь о том, какие типы людей являются вероятными потребителями компании, занимающейся продажами по почте?
Модель контролируемого обучения
В этом разделе каждая из строк в файлах данных «MAILOUT» представляет человека, который был нацелен на кампанию рассылки. Демографическая информация от каждого человека использовалась, чтобы решить, стоит ли включать этого человека в кампанию с использованием модели контролируемого обучения.
Данные «MAILOUT» были разделены на две примерно равные части, каждая из которых содержит почти 43 000 строк данных. В этой части я снабдил модель разделом «ПОЕЗД», который включает в себя столбец «ОТВЕТ», в котором указано, стал ли человек клиентом компании после кампании. В следующей части (конкурс Kaggle) мне нужно будет создать прогнозы для раздела «ТЕСТ», где не указан столбец «ОТВЕТ».
В этом разделе я предпринял следующие шаги для построения модели контролируемого обучения.
Шаг 1. Предварительная обработка необработанных данных. Перед запуском любой модели наборы данных Mailout_Train были предварительно обработаны и очищены с использованием обеих функций (clean_missing_data и encode_features), созданных в разделе понимания данных и предварительной обработки данных.
Шаг 2. Выбор/оценка модели. В этой части были созданы экземпляры следующей модели, подобраны и спрогнозированы данные.
а. Стохастический градиентный спуск, SGD
б. Бэгинг
в. Случайный лес
д. АдаБуст
е. Машина опорных векторов, SVM
Чтобы выбрать лучшую модель, были проведены оценки модели для прогнозируемых результатов этих 5 предложенных моделей. Ниже представлены результаты оценки каждой модели.
The Results for SGD precision recall f1-score support 0 0.98 0.99 0.99 6897 1 0.01 0.01 0.01 105 micro avg 0.98 0.98 0.98 7002 macro avg 0.50 0.50 0.50 7002 weighted avg 0.97 0.98 0.97 7002 ----------------------------------------------------- The Results for Bagging precision recall f1-score support 0 0.99 1.00 0.99 6897 1 0.00 0.00 0.00 105 micro avg 0.98 0.98 0.98 7002 macro avg 0.49 0.50 0.50 7002 weighted avg 0.97 0.98 0.98 7002 ----------------------------------------------------- The Results for Random Forest precision recall f1-score support 0 0.99 1.00 0.99 6897 1 0.00 0.00 0.00 105 micro avg 0.99 0.99 0.99 7002 macro avg 0.49 0.50 0.50 7002 weighted avg 0.97 0.99 0.98 7002 ----------------------------------------------------- The Results for AdaBoost precision recall f1-score support 0 0.99 1.00 0.99 6897 1 0.00 0.00 0.00 105 micro avg 0.99 0.99 0.99 7002 macro avg 0.49 0.50 0.50 7002 weighted avg 0.97 0.99 0.98 7002 ----------------------------------------------------- The Results for SVM precision recall f1-score support 0 0.99 1.00 0.99 6897 1 0.00 0.00 0.00 105 micro avg 0.99 0.99 0.99 7002 macro avg 0.49 0.50 0.50 7002 weighted avg 0.97 0.99 0.98 7002 -----------------------------------------------------
Шаг 3. Создание модели, настройка и обучение
Основываясь на приведенных выше результатах, все модели F1 сравнимы. После этого я приступил к созданию и настройке модели AdaBoost. В этом разделе были выполнены следующие шаги для создания настроенной модели AdaBoost:
- Создание экземпляра классификатора для повышения ada
2. Настройте поиск гиперпараметров с помощью sklearn RandomizedSearchCV() для следующих параметров:
param_dist = {"n_estimators": [10, 200], "learning_rate": [0,001, 0,1, 1, 20]}
3. Подгоните модель к данным поезда (X_train и y_train)
Шаг 4. Проверка результатов настроенной модели
На последнем этапе был подтвержден прогнозируемый результат настроенной модели (наилучшая оценка). Ниже приведены результаты проверки настроенной модели AdaBoost.
The Results for AdaBoost precision recall f1-score support 0 0.99 1.00 0.99 6897 1 0.00 0.00 0.00 105 micro avg 0.99 0.99 0.99 7002 macro avg 0.49 0.50 0.50 7002 weighted avg 0.97 0.99 0.98 7002 -----------------------------------------------------
Конкурс Kaggle
Теперь, когда я создал модель для прогнозирования того, какие люди с наибольшей вероятностью ответят на рассылку, пришло время протестировать эту модель на конкурсе через Kaggle. В этом разделе был подготовлен файл CSV с двумя столбцами. Первый столбец должен быть копией «LNR», который действует как идентификационный номер для каждого человека в разделе «TEST». Второй столбец, «ОТВЕТ», должен быть некоторым показателем того, насколько вероятно, что каждый человек стал клиентом.
Ниже приведены шаги, используемые в этом разделе:
Шаг 1. Предварительная обработка необработанных данных. Перед выполнением любого прогноза наборы данных Mailout_Test были предварительно обработаны и очищены с использованием обеих функций (clean_missing_data и encode_features), созданных в разделе понимания данных и предварительной обработки данных.
Шаг 2: Прогнозирование модели — «ОТВЕТ» был предсказан на основе данных продолжения Mailout_Test с использованием настроенной модели AdaBoost, которая была настроена в предыдущем разделе.
Шаг 3. Подготовка CSV-файла: был подготовлен CSV-файл с двумя столбцами («LNR» и «RESPONSE»).
5 результатов
В этом проекте у нас есть следующие выводы из наших неконтролируемых и контролируемых моделей.
Результаты неконтролируемой модели: сравнение доли данных в каждом кластере для данных о клиентах и общих данных о населении
На приведенной выше гистограмме показано, что кластеры 0 и 2 представлены в наборе данных о клиентах в большей степени, чем в общей популяции. Принимая во внимание, что кластеры с 1 по 3 недостаточно представлены в наборе данных о клиентах по сравнению с общей популяцией.
Кроме того, я также выясняю, какие люди могут быть представлены кластерами 2 и 1, которые имеют наибольшее перепредставление и недопредставление соответственно, как показано на следующих горизонтальных гистограммах.
Перепредставленный кластер
Очевидно, люди из Кластера 2 (представленные в данных о клиентах по сравнению с общей популяцией) имеют следующую справочную информацию:
- более высокая активность последней транзакции с полным файлом TOTAL (D19_GESAMT_DATUM)
- более высокая активность последней транзакции для сегмента почтовых заказов TOTAL (D19_VERSAND_DATUM)
- более высокая транзакционная активность TOTAL POOL за последние 24 месяца (D19_GESAMT_ANZ_24)
- более высокая транзакционная активность TOTAL POOL за последние 12 месяцев (D19_GESAMT_ANZ_12)
Недопредставленный кластер
Очевидно, люди из Кластера 1 (недостаточно представленные в данных о клиентах по сравнению с общей популяцией) имеют следующую справочную информацию:
- меньшее количество домов на 1–2 семьи (PLZ8_ANTG1)
- более низкая доля владельцев автомобилей (KBA13_ANTG1)
- большее количество автомобилей (KBA13_ANTG4)
- более высокая доля построенных автомобилей (KBA13_BAUMAX)
Результаты контролируемой модели — прогноз «ОТВЕТ» модели ADABOOST для конкурса Kaggle
Основываясь на прогнозе предоставленных данных «Mailout_Test», все прогнозируемые «ОТВЕТЫ» равны «нолю» (показано ниже), что означает отсутствие ответов от всех отдельных лиц.
Это не может быть прямой вероятностью. Поскольку наборы данных Mailout_Train (данные модели поезда) имеют большой дисбаланс выходных классов, где большинство людей не ответили на рассылку (показано ниже).
Таким образом, прогнозирование отдельных классов и использование точности не кажется подходящим методом оценки производительности. Вместо этого соревнование Kaggle будет использовать AUC для оценки производительности. Точные значения столбца «ОТВЕТ» не имеют большого значения: только более высокие значения пытаются охватить как можно больше реальных клиентов в начале развертки кривой ROC.
6. Заключение
В этом блоге мы можем сделать следующий вывод на основе результатов, спрогнозированных на основе контролируемых и неконтролируемых моделей, которые были подобраны и спрогнозированы на основе 4 наборов данных, предоставленных партнерами Bertelsmann AZ Direct и Arvato Finance Solution.
- Используя модель кластеризации (неконтролируемое обучение модели), группы людей, которые представлены в данных о клиентах чрезмерно по сравнению с населением в целом, имеют следующую справочную информацию:
- более высокая активность последней транзакции с полным файлом TOTAL
- более высокая активность последней транзакции для сегмента mail-order ИТОГО
- более высокая транзакционная активность TOTAL POOL за последние 24 месяца
- более высокая транзакционная активность TOTAL POOL за последние 12 месяцев
2. Принимая во внимание, что группы людей, недостаточно представленные в данных о клиентах по сравнению с населением в целом, имеют следующую справочную информацию:
- меньшее количество домов на 1–2 семьи
- меньшая доля автовладельцев
- большее количество автомобилей
- более высокая доля автомобилей, построенных
3. При использовании прогнозирования контролируемой модели (классификатор ADABOOST) все прогнозируемые результаты не показывают ответов от всех людей.
Из-за нечеткого названия столбца во всех наборах данных это было основным препятствием для понимания и подготовки данных. Кроме того, было много пропущенных значений, до 99%, найденных в 273/366 признаках наборов данных. Поэтому споры с данными были одним из самых сложных шагов в этом проекте. Для решения этих проблем были созданы функции очистки и кодирования для предварительной обработки всех наборов данных.
Вот некоторые предложения по улучшению этого проекта.
- Из-за большого дисбаланса выходных классов, обнаруженного в наборах данных Mailout_Train. Таким образом, прогнозирование отдельных классов и использование точности не кажется подходящим методом оценки производительности. Вместо этого мы могли бы оценить производительность модели, используя AUC. Точные значения столбца «ОТВЕТ» не имеют большого значения: только более высокие значения пытаются охватить как можно больше реальных клиентов в начале развертки кривой ROC.
Для получения дополнительной информации об этом аналитическом проекте вы можете обратиться к моему репозиторию Github по адресу https://github.com/leehongchen1985/Capstone-Project-Create-a-Customer-Segmentation-Report-for-Arvato-Financial-Services- .