— Как выявить сегментацию клиентов на несбалансированных данных

Введение

Посмотрите на картинку выше, можете ли вы найти целевые красные точки во всех образцах? Может быть, легко, просмотрев глазами. Как насчет целевых точек — это потенциальные клиенты компании, занимающейся доставкой по почте, которые занимают всего 1% населения кампании по рассылке? При использовании науки о данных да, мы можем.

Вот подробности этого вызова. Это также один из ключевых проектов Udacity Data Science Nano Degree. Компания по доставке товаров по почте в Германии провела кампанию по рассылке, чтобы найти своих клиентов. Из всех людей, получивших письма, только 1% ответили, что являются клиентами. Компания хочет сделать кампанию более рентабельной, идентифицируя своих потенциальных клиентов перед отправкой писем.

Описание данных

Данные MAILOUT были разделены на две примерно равные части, каждая из которых содержала почти 43 000 строк данных и 366 признаков. Одна часть имеет метку ответа как обучающие данные. Другой выступает в качестве тестовых данных с меткой ответа, скрытой для оценки конкурсом Kaggle.

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

Эти четыре набора данных перечислены ниже. У них есть 366 общих демографических характеристик, в то время как в данных о клиентах есть еще 3 столбца для категорий клиентов, а в данных Mailout_train есть еще 1 столбец для ответа.

  • Azdias: Демографические данные для населения Германии в целом (891211 x 366).
  • Клиенты: демографические данные клиентов компании, занимающейся доставкой по почте (191652 x 369).
  • Mailout_train: демографические данные для лиц, ставших мишенями маркетинговой кампании (42982 x 367).
  • Mailout_test: демографические данные для лиц, ставших мишенями маркетинговой кампании (42833 x 366).

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

Методология

Три шага для решения проблемы:

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

Очистка и обработка данных необходимы перед машинным обучением. После проверки столбцы со значениями NaN более 90 % были удалены. Один столбец даты и времени также был удален, так как в нем отсутствует описание и его трудно интерпретировать. Первый столбец идентификатора «LNR» также был удален, поскольку он не содержит демографической информации.

После внимательного прочтения электронной таблицы сопоставления данных значения NaN в числовых столбцах каждого столбца были сопоставлены с его «неизвестным» кодом: 0, 9 или 10. Некоторые столбцы имеют два кода для «неизвестного» случая, например -1 и 9. Это все объединено в 1 код. Для тех столбцов, которые не имеют кода для «неизвестного» случая, значения NaN были сопоставлены с его минимальным номером.

Большинство функций в данных являются числовыми. Остальные столбцы категорий кодируются числами.

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

2. Определите сегментацию клиентов с помощью неконтролируемого обучения

Кластеризация K-средних выбрана для понимания демографических особенностей общих данных о населении и сравнения их характеристик с данными о клиентах.

  • СПС

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

Данные были стандартизированы по единичной шкале (среднее значение = 0 и дисперсия = 1) перед выполнением PCA. После PCA аккумулированный процент дисперсии был нанесен на график в зависимости от количества основных компонентов из преобразования PCA в данных общей совокупности. 196 компонентов были сохранены, чтобы сохранить 90% исходных данных. Уменьшение размера составляет более 50%.

Важность функции также предоставляется из PCA для каждой функции в каждом основном компоненте, как показано в таблице ниже.

Давайте посмотрим на важность 10 основных функций в первом главном компоненте на рисунке ниже. Учитывая большой объем данных, будет утомительно исследовать каждый основной компонент, извлекать и обобщать их функции импорта. Я просто буду использовать преобразованные данные со 196 компонентами для кластеризации k-средних.

  • Кластеризация K-средних

Чтобы выбрать оптимальное количество кластеров для k-средних, был подготовлен локтевой график путем запуска кластеризации k-средних с 2 ~ 20 кластерами с шагом 2. И, наконец, я выбрал 10 для кластеризации на общих данных населения. Метки кластера добавляются в его исходный фрейм данных.

Чтобы сравнить данные о клиентах с данными генеральной совокупности, я применяю те же PCA и k-средние значения к данным о клиентах и ​​строю графики выборки в каждой кластерной группе. На приведенном ниже графике показано, что население в целом довольно равномерно распределено по восьми кластерам, в то время как группа клиентов представлена ​​только в трех из них.

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

3. Классифицировать обучающие данные и делать прогнозы на основе тестовых данных

  • Цель и вызов

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

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

На приведенном ниже графике подсчитывается количество образцов в классе 0 («ОТВЕТ» = 0, не клиент) и классе 1 («ОТВЕТ» = 1, клиент). Класс 1 составляет всего 1% от всех образцов. Если мы просто используем все выборки для обучения стандартного классификатора, он, скорее всего, предскажет всю выборку как класс 0, при этом достигнув точности 99%.

  • Кластерная субдискретизация

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

После понижения частоты дискретизации в 50 раз класс 1 уменьшается до двойного размера класса 0 с общим размером данных 1381x184. Меньший размер данных также упрощает и ускоряет процесс машинного обучения.

  • Классификатор XGB

Я начал с подгонки LinearSVC и классификатора логистической регрессии к данным обучения с пониженной дискретизацией, затем предсказал исходные данные обучения и проверил их оценки AUC и матрицы путаницы. Они неправильно классифицировали половину фактического класса 1. Поэтому я переключился на классификатор XBG, используя методы XG Boost. XGBoost (Extreme Gradient Boosting) — это расширенная и более эффективная реализация алгоритма Gradient Boosting, который часто используется для обработки несбалансированных данных.

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

Результаты

  • Метрики

Метрикой для оценки различных классификаторов является оценка AUC, которая представляет собой площадь под кривой рабочих характеристик приемника (ROC AUC). Окончательный прогноз на тестовых данных также будет оцениваться по баллу AUC в конкурсе Kaggle, поскольку цель этого проекта — привлечь как можно больше реальных клиентов.

  • Стандартный классификатор

Классификатор LinearSVC и логистической регрессии дает 0,6 балла AUC и неверно предсказывает половину фактического класса 1 в обучающих данных. 33330 фактических образцов класса 0 классифицируются правильно, что составляет 78% класса 0. Но 279 фактических образцов класса 1, на которые ответили клиенты, классифицируются как 0. Это половина фактического населения класса 1. Хотя данные уменьшены, чтобы быть более сбалансированными. Этим стандартным классификаторам все еще трудно учиться на нем.

  • Классификатор XGB

Мы определенно не хотим терять ни одного из потенциальных клиентов. Для лучшей производительности на несбалансированных данных я переключился на классификатор XGB, чтобы построить конвейер и использовать поиск по сетке, чтобы получить наилучшие параметры. Наконец-то я получил 0,86 по показателю AUC и приведенной ниже матрице путаницы. Классификатор XGB правильно предсказал 467 выборок класса 1, но пропустил только 65 выборок. Истинный положительный показатель составляет 467/(467+65)=0,88, что значительно улучшилось. Частота ложноотрицательных результатов уменьшается с 9100/(9100+33330)=0,21 до 6601/(6601+35829)=0,16. Правильно предсказывается больше выборок, чем стандартные классификаторы.

Наконец, я сделал ту же очистку и PCA для тестовых данных и использовал оптимизированный классификатор XGB для прогнозирования. Я предсказал 6,3% выборок в тестовых данных как класс 1 (клиенты). Этот звук сравним с тренировочными данными. Результаты были отправлены на конкурс Kaggle и получили оценку 0,53.

  • Улучшение классификатора XGB

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

Прогноз по обучающим данным выглядит следующим образом. Классификатор XGB лучше справился с идентификацией класса 0 без ошибок. Теперь показатель AUC на обучающих данных равен 0,94. Даже на исходных несбалансированных образцах данных классификатор XGB по-прежнему работает хорошо. В этом случае стандартные классификаторы, такие как логистическая регрессия, не смогли классифицировать класс 1.

Хотя классификатор улучшил классификацию тренировочных данных, он получил только 0,52 балла AUC на тестовых данных, согласно отзывам о соревнованиях Kaggle. Я думаю, что это может помочь включить больше функций из обучающих данных.

Поэтому я снова обучил классификатор XGB с данными обучения исходных 436 функций без выполнения PCA. А прогноз по обучающим данным выглядит так, как показано ниже. Классификатор XGB немного хуже справился с определением класса 1, чем предыдущие результаты. Теперь показатель AUC на обучающих данных равен 0,92.

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

Обсуждение

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

  • Передискретизация данных

Прежде чем приступить к машинному обучению, существуют другие методы повторной выборки данных, отличные от субдискретизации, используемой в этом проекте. Популярный метод — избыточная выборка на основе кластеров. После применения кластеризации k-средних к данным выборки меньшинства класса 1 могут быть продублированы в каждом из его кластеров для достижения размера данных, эквивалентного большинству класса 0. Преимущество перед выборкой заключается в том, что информация об исходных данных не теряется. И, конечно же, вы хотели бы попробовать это на более мощном компьютере.

  • Методы машинного обучения на основе бэггинга и повышения

Бэггинг — это аббревиатура от Bootstrap Aggregating. Он генерирует N различных обучающих выборок начальной загрузки в качестве замены исходных данных. Каждый образец с начальной загрузкой используется для обучения одного классификатора, такого как логистическая регрессия, дерево решений и т. д. Результаты каждого отдельного классификатора объединяются для получения улучшенного.

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

Вывод

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

  1. лучше понять характеристики населения в целом и клиентов компании, занимающейся продажами по почте в Германии, чтобы я мог правильно очистить данные и обработать их перед машинным обучением;
  2. проводить обучение с учителем как на общей совокупности, так и на данных о клиентах, используя кластеризацию PCA и K-средних, и отличать клиентов от общей совокупности на основе количества их кластеров;
  3. создать и оптимизировать классификатор для идентификации клиентов в сильно несбалансированных обучающих данных и получить показатель AUC 0,92 на обучающих данных и 0,71 на тестовых данных;
  4. используйте оптимизированный классификатор для прогнозирования тестовых данных и отправки результатов на конкурс Kaggle.

Благодарность

Я должен отдать должное Arvato Financial Solutions, дочерней компании Bertelsmann, за данные и Курс Udacity по науке о данных в области нанотехнологий за знания и методы, которые я изучил.