Сегментирование ваших клиентов по многим параметрам (или Python для любителей вина)

Использование кластеризации K-средних по более чем двум или трем атрибутам.

Недавно я прочитал книгу по аналитике данных под названием Data Smart, написанную Джоном Форманом, руководителем отдела продуктов MailChimp. Эта книга - отличный учебник по бизнес-аналитике, который проведет вас через различные сценарии использования машинного обучения, дополненный примерами данных и подробными инструкциями по настройке и решению каждого случая в Excel.

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

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

Каждое предложение скидки описывается шестью атрибутами - месяц, сорт вина, минимальное количество,% скидки, страна происхождения и прошлый пик (T / F). Перечислено 32 различных предложения, каждое из которых имеет разную комбинацию этих атрибутов. Список клиентов включает 324 транзакции для около 100 клиентов. Таким образом, эта задача включает в себя гораздо больше измерений, чем вы обычно видите в учебнике по машинному обучению для кластеризации.

Г-н Форман отлично помогает читателю пройти процесс кластеризации K-средних в Excel, используя несколько типов вычислений составляющих расстояний - евклидово, манхэттенское и косинусное расстояние. Это хорошо работает с небольшими наборами данных, но Excel не справляется, когда вы попадаете в сотни тысяч или миллионы строк. В конце книги г-н Форман воссоздает каждый анализ на R, который является его любимым языком больших данных, но не на Python. Итак, вот моя попытка создать учебник Python для этого варианта использования кластеризации. Я загрузил полную записную книжку Python в свой репозиторий Github здесь.

Шаг 1 - загрузить два файла данных в фреймы данных Pandas с помощью команды pd.read_csv. Вот посмотрите на два фрейма данных.

Предложения:

Клиенты / Сделки:

Шаг 2 - создать матрицу сводной таблицы, которую можно передать в алгоритм кластеризации K-средних, представленный в библиотеке Scikit Learn на Python. Эта матрица покажет клиентов, перечисленных вертикально в виде индекса, номера предложений вверху и каждую транзакцию, показанную как значение «1» со всеми нулями, преобразованными в «0». Вот код и быстрый взгляд на полученную матрицу.

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

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

На графике осыпи выше, похоже, есть две точки, где наклон линии уменьшается, в 3 кластерах и снова в 8 кластерах. Давайте попробуем другой метод фильтрации, который поможет определить количество кластеров для алгоритма K-средних, Silhouette Scores.

Silhouette Score сравнивает среднее расстояние между точками данных в каждом кластере и соседними кластерами. Это значение от -1 до 1. Чем ближе к 1, тем лучше.

Ниже я вычислил баллы Silhouette для каждого количества кластеров.

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

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

В первом кластере «0» мы видим, что все эти покупатели - любители Пино Нуар.

Во втором кластере «1» мы видим, что эти люди - франкофилы. Им нравится все, что сделано во Франции.

С кластером «2» мы находим всех любителей игристого вина.

С кластером «3» мы находим больше любителей игристого вина. Может быть, при таком наложении нам следует объединить кластеры 2 и 3?

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

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

В группе «6», за исключением Шардоне, эти люди, похоже, любят и красное, и игристое вино. Может, объединить 5-ю и 6-ю группы?

Наконец, в кластере «7» мы наблюдаем сочетание большего количества покупателей красного и игристого вина, а также некоторых «шумных» покупателей Пино Гриджио.

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

На этот раз мы получаем более чистые результаты:

Сплошная группа поклонников шампанского и красного вина, в основном франкофилов.

Игристые, игристые вееры.

Покупатели с небольшим объемом.

И наши всегда преданные любители Пино Нуар!

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

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

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

В настоящее время тысячи компаний, занимающихся цифровой экономикой, собирают такие данные о нас. Facebook, Google и Amazon - самые известные из этой группы. Хотя это может звучать как «старший брат», на самом деле это та же привычка «узнавать своих лучших клиентов», которую ваш дружелюбный соседский бакалейщик вызывал у него в голове на протяжении многих поколений.

Но теперь, с появлением ресурсов облачных вычислений и простых в изучении языков программирования, таких как Python, такое умное бизнес-мышление можно масштабировать до объемов, исчисляемых миллионами и миллионами! Добро пожаловать в дивный новый мир больших данных!

Если у вас есть комментарии или идеи, которыми вы хотите поделиться со мной, свяжитесь со мной в LinkedIn.