Исследование в Черную пятницу

На Kaggle нашел интересный датасет с данными по e-commerce. Это данные о покупках в интернет-магазине в Черную пятницу. Я хочу провести анализ и попытаться выявить инсайты в данных.

Оглавление:

  1. Разведка
  2. Ассоциации
  3. Предсказания
  4. Кластеризация
  5. Итоги

Разведка

Посмотрим, как выглядят данные:

User_ID – Идентификатор пользователя
Product_ID – Идентификатор продукта
Gender – Пол пользователя
Age – Возрастная категория
Occupation – Род занятий пользователя
City_Category – Город проживания
Stay_In_Current_City_Years – Количество лет проживания
Marital_Status – Семейное положение
Product_Category – Несколько категорий товара
Purchase – Сумма покупки в $

Каждая строка (наблюдение) – это покупка одного типа товара одним пользователем. Всего в данных 537 577 наблюдений.

Пол покупателей

Посмотрим на распределение наших покупателей по полу:

Заметно, что мужчин среди покупателей сильно больше, примерно в 2,5 раза. А как насчет среднего чека?

Хоть женщин в магазине заметно меньше, тратят они почти столько же сколько и мужчины.

Самые продаваемые товары

Вот топ-10 самых продаваемых товаров:

Интересно, что же это за топ-1, так полюбившийся покупателям? Жаль нет расшифровки ID.
Посмотрим на покупателей самого популярного товара:

Тут стоит обратить внимание на сумму покупки – она разная. Что это, акции, другие города??? Нужно продактам разобраться.
А вот интересно, как мужчины и женщины покупают этот бестселлер? А вот так:

Очень похоже на распределение пола по всем товарам. Значит, предпочтений к бестселлеру у мужчин или женщин нет.

Возраст

Распределение покупателей по возрасту выглядит так:

А это возраст покупателей бестселлера:

Теперь сравним оба графика:

Выходит – молодежь более склонна к покупке бестселлера.

Города

Это количество покупателей по городам:

А это сумма всех покупок по городам (в тысячах $):

Сравним:

В городе B либо любят покупать много, либо покупают самое дорогое. Проверим гипотезы, сравнив сумму покупок с количеством купленных товаров:

Раз распределение количества покупок схоже с распределением суммы покупок, значит в городе B покупают много!

А как дела с нашим бестселлером в городах?

В городе B при большем количестве продаж, меньше покупок бестселлера, чем в C. О чем это может говорить?

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

Количество лет проживания в городах

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

Что-то не долго…Год-два, а если по городам глянуть?

То же самое. Распределение в городах примерно одинаково, никаких аномалий нет. Пора перейти к продажам.

Продажи

Это график плотности распределения суммы чеков. Невооруженным взглядом видно, что распределение не равномерно. У нас имеется очень длинный хвост чеков с высокими костами. В результате мы имеем:

  • Средний чек  – 852 k$ (красная линия)
  • Медиана – 513 k$ (синяя линия)
  • Максимальная плотность чеков (ну почти что мода) – 216 k$ (зеленая линия)

Немного оффтопа: Тут отличный пример того, как мы можем презентовать результаты Черной пятницы. Хотите оптимистичный вариант – берите средний чек и вставляйте значение в презентацию Power Point. Если у вас плохое настроение и весь мир выглядит унылым – берите типа “моду” в 216 k$. И так и сяк вы будете правы, никто вас не поймает за руку и не уволит, вы же все правильно рассчитали, а вот эффект от презентации будет разным. Почувствуйте себя манипулятором!)

А какой же вывод из этого графика? Толком никакого – много чеков в районе 216 k$, но мы имеем очень длинный хвост с чеками сильно выше этой цифры, что значительно повлияло и на медиану и на среднее. (Интересно, что же это за магазин такой с такими чеками. И ведь в корзине не одна покупка, например дом…)

Семейное положение

Расшифровки с данными (1,0) у нас нет. Но предположим, следуя двоичной логике (о – нет, 1 – да), что 0 – это холост/не замужем, таких покупателей больше.
Теперь посмотрим распределение по городам:

В городе A больше всего покупателей холостяков. И в общем среди всех клиентов магазина больше холостяков. Тогда почему в городе A меньше покупателей? – Не “те” холостяки, город A маленький?  Сейчас разберемся:

 

А вот ответ. В городе А большая часть покупателей молодая, значит еще не все обзавелись семьями. Как нам поможет это знание? Делаем в рекламе акцент на молодежь. А если пойти по принципу “ошибки выжившего”, то наоборот, нужна реклама для пенсионеров. Почему? Ну если предположить, что распределение возраста по городам примерно одинаковое, то в городе А почему-то люди 45+ покупают мало, им нужна мотивация.
Так или иначе, уже есть две гипотезы, которые нужно проверить.

Род занятий

А чем же наши покупатели занимаются?

Определенно, занятие под номером 4 самое популярное у клиентов магазина.

Доклад разведчика

Разведывательный анализ (Exploratory Data Analysis – EDA) помог нам обнаружить:

  • Аудитория нашего магазина преимущественно мужская.
  • Женщины тратят чуть меньше мужчин, но не на много
  • Самая большая возрастная группа покупателей – 26-35 лет
  • Большинство покупателей из города C. Но при этом больше количество и сумма продаж в городе B
  • Покупатели магазина часто переезжают (основная масса живет в городе не более 2-х лет)
  • Среди покупателей больше холостых / не замужних
  • Любимые занятия покупателей: 4, 0, 7
  • Чек большинства покупок в магазине около 261 k$,  при медиане в 513 k$
  • В магазине есть бестселлер, лояльность к бестселлеру в городах примерно одинакова

Ассоциации


Поиграем в ассоциации? А точнее в ассоциативные правила. Попробуем предсказать, что же покупатели вероятнее всего возьмут к себе в корзину в дополнение к определенным товарам. Не ну рыбка к пиву то понятно, а есть еще что? Ответ будем искать с помощью алгоритма машинного обучения Apriori.
Посмотрим на количественный состав корзин:

Не так красиво, как на графиках. Но суть такая:

  • Минимальное количество Product_ID в корзине наших покупателей – 6
  • Максимальное – 1026, ого!
  • Медиана – 54
  • Среднее – 92,41

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

Посмотрим на график частоты товаров в корзине:

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


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

Тут стоит внести ремарку – это не причинно-следственная связь. А просто взаимосвязь, говорящая, что при наличии в корзине товаров: A и B, с вероятностью 70% там же окажется товар C. Но вот при наличии A и C, B окажется с другой долей вероятности. Ровно как и наличие одного C не гарантирует 70% появление в корзине A и B. Важно, что последовательность появления в корзине A, B и C может быть разной: сначала взяли C, потом A, потом B – будет равносильно – сначала взяли B, потом C, потом D, потом E и наконец A.

lhs – это те товары, которые приводят к появлению нового товара
rhs – предсказываемый товар
support – % корзин от общего числа, содержащие все товары lhs и rhs
confidence – с какой вероятностью предсказываемый товар окажется в корзине
lift – это отношение частоты появления условия в транзакциях, которые также содержат и следствие, к частоте появления условия в целом. Значения лифта большие, чем единица, показывают, что условие чаще появляется в транзакциях, содержащих следствие, чем в остальных. Это субъективная мера значимости ассоциативного правила.
count – количество случаев применения правила в реализации алгоритма

Визуализируем 20 правил:

Стрелки от элементов – это rhs, а к элементам – lhs. Что с этим делать? Отдать маркетологам, пусть изучают. Уверен, появятся новые идеи. Ну а для тех, кто совсем не визуал, вот:

Предсказания


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

Быстро пробегусь по всем переменным:
User_ID – Для прогнозирования продаж не интересно
Product_ID – Не интересно
Gender – Возьму в модель
Age – Возьму в модель
Occupation – Возьму в модель
City_Category – Возьму в модель
Stay_In_Current_City_Years – Возьму в модель
Marital_Status – Возьму в модель
Product_Category – Не интересно
Purchase – Это значение (только сумма покупок по каждому клиенту) буду предсказывать

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

Значимыми переменными, хоть как-то влияющими на размер чека, оказались: Возраст, Пол, Род Занятий, Город.
Семейное положение, и Время проживания в городе никакого эффекта на продажи не оказали. Итак, как сильно предсказывают наши параметры уровень продаж?

Adjusted R-squared: 0,1634

Вот! Целых 16% изменчивости в сумме чека обусловлены отобранными мной параметрами. Куча коэффициентов (на скрине выше) и их значения позволяют построить линейное уравнение для каждого типа покупателя (Мужчина, 26-35 лет, из города A, Род занятий – 7). Но поскольку эти все характеристики не сильно влияют на чек – смысла так предсказывать я не вижу. Но понимание того, какие переменные влияют на продажи даст мне еще кое-что…

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

Как-то не задалось у меня с предсказаниями сегодня. Попробую-ка я посчитать всех клиентов и объединить их в группы.
Как и по какому принципу? Я не знаю. Я пойду от обратного, с помощью метода k-средних, я соберу оптимальные группы (с точки зрения k-средних).
И подберу их количество тоже оптимально (на глаз). А потом исследую эти группы и что-нибудь найду (а может и нет).

Поехали. Чем больше переменных, тем хуже кластеры (будет больше пересечений), но не зря же я делал предсказания – возьму только то, что хоть как-то влияло на продажи. Значит наши кластеры будут состоять из: Суммы покупок каждого клиента, Возраста, Пола, Рода занятий и Города. Получается кластеры будут строится в 5-мерном пространстве. Пока я код пишу, можете представить себе такое пространство.

Сколько кластеров взять? Хороший вопрос, посмотрим сюда:

Что тут нужно выявить? Точку перегиба, где функция начинает заметно слабее возрастать. У нас не совсем идеальная ситуация, функция не показывает крутого перегиба и монотонно возрастает. Субъективно, мне явилась цифра 7. Вот ее я и возьму, будет 7 кластеров.

У меня с фантазией 5-мерного пространства не задалось и я решил визуализировать кластеры схлопнув их в двумерное пространство:

А вы как себе 5-мерное пространство представили?)

Перейдем к исследованию кластеров. Разведку по каждому кластеру я делать не буду, иначе статья рискует превратиться в приключенческую книгу. А лучше задамся основным вопросом бытия – зачем это все? Ну конечно же ради денег! Бизнесу нужны $$$! А раз так, то вот график продаж по кластерам:

Вау! Моя машинка неплохо потрудилась мы можем выделить явного фаворита по продажам (кластер 1) и аутсайдера (кластер 3). Но если подумать, станет понятно – нужны средние чеки в кластерах, иначе из-за разного количества народа в кластерах ничего не понятно. Ну вот, пожалуйста:

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

Нет, все ок. Снова имеем длинный хвост справа, но тем не менее медиана (синенькая линия) и среднее (красненькая) близки к вершине в 2500k$, получается Кластеризация выделила нам самый luxury-сегмент.

Окей, Гугл! – Скажите вы. – Зачем вся эта фигня, если можно было просто взять, отсортировать топ-500 клиентов по чекам и посмотреть на их параметры?

Логично! – Отвечу я. – Но вот вопрос, почему 500, а не 100 или 700, как узнать, когда остановиться сортируя топ? И кроме того, если посмотреть на остальные кластеры, там тоже найдутся покупатели с высокими чеками за 2,5kk$. По совокупности всех 5-ти факторов моя машина отнесла их не в первую группу, а распределила в другие. Почему так? Ну математически они оказались ближе к кучке других покупателей. Правильно это или нет  – вопрос сложный. Можно исключить из процесса кластеризации чеки покупок и посмотреть какие кластеры в итоге получатся, сравнив их внутрикластерные средние чеки. Это тоже хорошее исследование, но я решил его вынести за рамки этого кейса.

Возвращаюсь к исследованию и покажу вам как же распределился наш luxury-сегмент по сравнению с остальными:

Какие можно сделать выводы:

  • Пол: Мужчин в luxury заметно больше
  • Возраст: Выделяется сильнее группа 26-35, их доля по сравнению с остальными возрастными группами в luxury выше
  • Город: Среди luxury отсутствуют жители города C
  • Количество лет проживания: Распределения похожи, инсайтов нет
  • Род занятий: В luxury больше 0, но топ-3 занятий (0, 4, 7) в выборках схож
  • Семейное положение: Распределения похожи, инсайтов нет

Итоги

Самое время резюмировать, пока не пришли новые идеи, чего тут еще можно накопать. Итак:

  1. Был проведен разведывательный анализ, позволивший выявить распределения характеристик клиентов. На его основе можно описать ЦА магазина и придумать стимулирующие маркетинговые акции в городах.
  2. После была исследована корзина покупок и выявлены закономерности, которые также поспособствуют формированию маркетинговых гипотез.
  3.  Была попытка предсказать сумму чека по “внешнему виду клиента” (кто такой, сколько лет, где живешь? Ммм…Кажется ты у нас сегодня на 2kk$ затаришься!) Но увы, встречать по одежке не получится.
  4. И наконец, я взял и всех клиентов поделил. Нашли в группах наших любимых и обожаемых luxury и попытались описать их, сравнив с остальным пулом клиентов. Кстати говоря, так же можно поступить и с аутсайдерами по сумме чека (напомню, это кластер 3). Ну это вам на домашнее задание.
  5. Лично от себя скажу то, что осталось за кадром. В процессе кручения и верчения данных возникло много вопросов, на которые можно и нужно искать ответы, они совсем не были освещены в этой статье. Вопросы не возникли, если бы я просто взял в Excel эту выборку с данными, посчитал средний чек и кол-во клиентов, запилил бы презентацию в Power Point и с чувством выполненного долга пошел домой.

Материалы

Написать этот опус мне помогли: