Сегментация клиентов на основе их поведения при использовании кредитных карт

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

Чтобы облегчить ваше обучение, блокнот доступен на моем GitHub и Kaggle.

Исходный код

Блокнот на Kaggle:



Блокнот на GitHub:



Оглавление

  • Определение кластеризации
  • Обучение с учителем x Обучение без учителя
  • Кластеризация K-средних
  • Словарь набора данных
  • Цель проекта
  • EDA (исследовательский анализ данных)
  • Масштабирование функций
  • PCA (анализ основных компонентов)
  • Кластерная визуализация с Plotly
  • Заключение

Определение кластеризации

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

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

Еще одним очень важным определением является различие между двумя приведенными ниже понятиями.

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

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

Два моих предыдущих проекта по науке о данных:



Модель машинного обучения для прогнозирования выживания на «Титанике [Pt. 1]
Основы машинного обучения: расследование гибели Титаникаmedium.com»





Я построил контролируемую модель машинного обучения, которую использовал для прогнозирования «целевой переменной» (метки).

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

В отличие от обучения с учителем, обучение без учителя использует немаркированные данные, т. е. мы не предоставляем целевую переменную (метку) при обучении модели. Эти алгоритмы используются не для того, чтобы что-то предсказывать, а для обнаружения скрытых закономерностей в данных без необходимости вмешательства человека (следовательно, они «неконтролируемые»).

Если разница все же не так понятна, по ходу проекта вы разберетесь лучше. Давай продолжим!

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

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

K-Means делит данные на K кластеров, каждый кластер имеет центр тяжести. Основная цель этого алгоритма – минимизировать сумму квадратов расстояний от каждой точки до центра тяжести назначенного ей кластера. K-Means не гарантирует, что кластеры будут иметь одинаковый размер, но находит кластеры, которые лучше всего разделены.

Давайте рассмотрим простой пример, представьте, что у нас есть N записей и две переменные X и Y. Предположим, мы хотим разделить данные на K = 3 кластера, что означает присвоение каждой записи (Xi, Yi) кластеру K.

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

После этого координаты центроидов вычисляются повторно, взяв среднее значение всех точек данных, содержащихся в этом кластере. При назначении Nk записей кластеру K центр кластера (Xk, Yk) вычисляется по уравнению:

Проще говоря, мы просто суммируем Xk и Yk кластера и делим на количество точек в этом кластере.

После этого алгоритм вычисляет сумму квадратов в каждом кластере, которая определяется по формуле:

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

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

Если вы хотите сами увидеть, как это работает, я настоятельно рекомендую этот симулятор:



Словарь набора данных

Набор данных, который будет использоваться, состоит из поведения при использовании кредитных карт 8950 клиентов в течение 6 месяцев, имеющего 18 поведенческих характеристик. Ссылка на набор данных доступна на Kaggle.



  • CUST_ID: Идентификация держателя кредитной карты (категория)
  • БАЛАНС: сумма остатка на счету, необходимая для совершения покупок.
  • BALANCE_FREQUENCY: частота обновления баланса, оценка от 0 до 1 (1 = часто обновляется, 0 = редко обновляется).
  • PURCHASES: количество покупок, совершенных из аккаунта.
  • ONEOFF_PURCHASES: максимальная сумма единовременной покупки.
  • INSTALLMENTS_PURCHASES: сумма покупки в рассрочку.
  • CASH_ADVANCE: предоплата наличными, предоставленная пользователем.
  • PURCHASES_FREQUENCY: как часто совершаются покупки, от 0 до 1 (1 = часто совершаются покупки, 0 = редко совершаются покупки).
  • ONEOFFPURCHASESFREQUENCY: как часто совершаются единовременные покупки (1 = часто покупается, 0 = редко покупается).
  • ЧАСТОТА ПОКУПОК: как часто совершаются покупки в рассрочку (1 = часто, 0 = редко).
  • CASHADVANCEFREQUENCY: как часто выплачивается аванс наличными.
  • CASHADVANCETRX: количество транзакций, совершенных с помощью «Cash in Advanced».
  • PURCHASES_TRX: количество совершенных транзакций покупки.
  • CREDIT_LIMIT: лимит кредитной карты для пользователя.
  • ПЛАТЕЖИ: сумма платежа, совершенного пользователем.
  • MINIMUM_PAYMENTS: минимальная сумма платежей пользователя.
  • PRCFULLPAYMENT: процент от полной оплаты, уплаченный пользователем.
  • TENURE: срок использования кредитной карты для пользователя.

Цель проекта

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

EDA (исследовательский анализ данных)

Начнем с импорта библиотек и набора данных:

Визуализация некоторых характеристик набора данных:

Через Pandas Profiling мы можем увидеть очень подробный отчет об общих характеристиках набора данных.

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

Теперь наш набор данных имеет 16 столбцов.

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

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

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

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

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

Если вы видите столбцы частоты, такие как BALANCE_FREQUENCY и PURCHASES_FREQUENCY, они варьируются в диапазоне от 0 до 1, 0 означает 0% частоты, а 1 означает 100% частоту. Сравнив их со столбцами БАЛАНС и ПОКУПКИ, вы увидите, что они не имеют предела их варьирования, известно лишь, что их минимум может быть равен 0.

Однако если вы разместите эти столбцы в кластере так, как они сейчас, это не даст высококачественного кластера, потому что кластер поймет, что разница в 1,00 доллара в BALANCE так же значительна, как разница в 1,00 процента в BALANCE_FREQUENCY.

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

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

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

По умолчанию нормализация L2 применяется к каждому наблюдению, поэтому значения в строке имеют единичную норму. Единичнаянорма с L2 означает, что если каждый элемент возвести в квадрат и просуммировать, общая сумма будет равна 1. Кроме того, нормализатор преобразует все признаки в значения от -1 до 1.

PCA (анализ основных компонентов)

PCA — это метод, используемый в неконтролируемом машинном обучении (таком как кластеризация), который уменьшает многомерные данные до меньших размеров, сохраняя при этом как можно больше информации. Использование PCA перед применением алгоритма кластеризации уменьшает размеры, шум данных и снижает стоимость вычислений.
В этой статье количество признаков будет уменьшено до двух измерений, чтобы можно было визуализировать результаты кластеризации.

Чтобы лучше организовать эти два шага предварительной обработки, мы встроим их в уникальный шаг с Pipeline:

Набор данных будет таким после предварительной обработки:

Кластерная визуализация с Plotly

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

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

Внутри функция преобразует набор данных в соответствии с шагами конвейера, предполагая, что это преобразование вернет только два столбца с именами «x» и «y». Создайте KMeans Cluster, и внутри этого объекта ему будет передано количество кластеров, ранее указанное в параметрах функции в качестве аргумента, чтобы мы могли визуализировать, сколько кластеров мы хотим. И в конце построим точечный график кластеризации, каждый цвет будет кластером.

Теперь давайте визуализируем нашу кластеризацию с 5 кластерами.

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

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

Заключение

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

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