Введение

Как же достала эта чёрная пятница!

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

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

Тоже так думаете? Считаете, что никто не покупает в этот период? Как бы не так. И сегодня вы в этом убедитесь!

Что исследуем?

Сегодняшний датасет почти в 50 раз больше, чем в первом исследовании! В нём 537 577 наблюдений.

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

Посмотрим, какие наблюдения он содержит:

  • User_ID – уникальный код клиента;
  • Product_ID – уникальный код товара;
  • Gender – пол клиента;
  • Age – возрастная категория клиента;
  • Occupation – профессия;
  • City_Category – классификация города по размерности или достатку;
  • Stay_In_Current_City_Years – сколько лет человек живёт в городе;
  • Marital_Status – статус семейного положения;
  • Product_Category_1 – категория продукта;
  • Purchase – сумма покупки ($).

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

Мне удалось найти описание классификации городов по схожей схеме, и она учитывает размер заработных плат в этом городе. Будем считать, что город класса A выше по оплате труда, чем С.

Итого мы имеем:

## Observations: 537,577
## Variables: 12
## $ User_ID                    <int> 1000001, 1000001, 1000001, 1000001,...
## $ Product_ID                 <chr> "P00069042", "P00248942", "P0008784...
## $ Gender                     <chr> "F", "F", "F", "F", "M", "M", "M", ...
## $ Age                        <chr> "0-17", "0-17", "0-17", "0-17", "55...
## $ Occupation                 <int> 10, 10, 10, 10, 16, 15, 7, 7, 7, 20...
## $ City_Category              <chr> "A", "A", "A", "A", "C", "A", "B", ...
## $ Stay_In_Current_City_Years <chr> "2", "2", "2", "2", "4+", "3", "2",...
## $ Marital_Status             <int> 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1,...
## $ Product_Category_1         <int> 3, 1, 12, 12, 8, 1, 1, 1, 1, 8, 5, ...
## $ Product_Category_2         <int> NA, 6, NA, 14, NA, 2, 8, 15, 16, NA...
## $ Product_Category_3         <int> NA, 14, NA, NA, NA, NA, 17, NA, NA,...
## $ Purchase                   <int> 8370, 15200, 1422, 1057, 7969, 1522...

Вопросы и гипотезы

Какие у вас возникли вопросы при просмотре структуры датасета? У меня сразу же возникли следующие:

  1. Кто покупает больше товаров?
  2. Кто тратит больше денег?
  3. У кого выше средний чек? 1
  4. Как брак влияет на покупки?
  5. Как город влияет на покупки?
  6. Как тип города влияет на покупки человека?
  7. Как количество лет в одном городе влияет на покупки?
  8. Какая самая привлекательная аудитория в чёрную пятницу?

Их и будем проверять. Кстати, если вы хотели бы участвовать в формировании вопросов для анализа, напишите в комментарии или личные сообщения!

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

Предобработка

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


Работа с датасетом происходит в R version 3.5.1 (2018-07-02).

Обработка первичных данных

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

##                            col_num na_nums
## User_ID                          1       0
## Product_ID                       2       0
## Gender                           3       0
## Age                              4       0
## Occupation                       5       0
## City_Category                    6       0
## Stay_In_Current_City_Years       7       0
## Marital_Status                   8       0
## Product_Category_1               9       0
## Product_Category_2              10  166986
## Product_Category_3              11  373299
## Purchase                        12       0

Можно сказать, что нам крупно повезло – основная часть данных не содержит пропусков, а та, что содержит, в контексте данного анализа неважна для нас. Поэтому удалим колонки Product_Category_2, Product_Category_3.

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

##                            col_num  freq
## User_ID                          1  5891
## Product_ID                       2  3623
## Gender                           3     2
## Age                              4     7
## Occupation                       5    21
## City_Category                    6     3
## Stay_In_Current_City_Years       7     5
## Marital_Status                   8     2
## Product_Category_1               9    18
## Product_Category_2              10    18
## Product_Category_3              11    16
## Purchase                        12 17959

Все колонки со значением freq меньше 25 преобразуем в фактор.

После первичных преобразований получаем следующий датасет:

## Observations: 537,577
## Variables: 10
## $ User_ID                    <int> 1000001, 1000001, 1000001, 1000001,...
## $ Product_ID                 <chr> "P00069042", "P00248942", "P0008784...
## $ Gender                     <fct> Female, Female, Female, Female, Mal...
## $ Age                        <fct> 0-17, 0-17, 0-17, 0-17, 55+, 26-35,...
## $ Occupation                 <fct> 10, 10, 10, 10, 16, 15, 7, 7, 7, 20...
## $ City_Category              <fct> A, A, A, A, C, A, B, B, B, A, A, A,...
## $ Stay_In_Current_City_Years <fct> 2, 2, 2, 2, 4+, 3, 2, 2, 2, 1, 1, 1...
## $ Marital_Status             <fct> Not Married, Not Married, Not Marri...
## $ Product_Category_1         <fct> 3, 1, 12, 12, 8, 1, 1, 1, 1, 8, 5, ...
## $ Purchase                   <int> 8370, 15200, 1422, 1057, 7969, 1522...

Формирование выборок для анализа

Выборка по пользователям

Чтобы ответить на первые три вопроса, нам понадобится выборка, сгруппированная по каждому пользователю. Всего в данных 537577 строк, а уникальных пользователей 5891 – это говорит о том, что в наборе данных на каждого пользователя по несколько покупок. Формируем сабсет:

## Observations: 5,891
## Variables: 9
## $ User_ID                    <int> 1004277, 1001680, 1002909, 1001941,...
## $ Gender                     <fct> Male, Male, Male, Male, Male, Male,...
## $ Age                        <fct> 36-45, 26-35, 26-35, 36-45, 26-35, ...
## $ Marital_Status             <fct> Not Married, Married, Not Married, ...
## $ Stay_In_Current_City_Years <fct> 0, 3, 1, 1, 3, 0, 4+, 0, 3, 3, 1, 1...
## $ City_Category              <fct> A, A, A, A, A, A, A, A, A, A, A, A,...
## $ purchases                  <int> 978, 1025, 717, 898, 694, 574, 739,...
## $ sum_p_thous                <S3: formattable> $10,536.78, $8,699.23, ...
## $ avg_purch_thous            <S3: formattable> $10.77, $8.49, $10.57, ...

Для удобства анализа все денежные данные приведены к формату валюты. Также для удобства восприятия сумма покупок представляется в тысячах.

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

Выборка по статусу брака

Данная выборка позволит понять абсолютную разницу между поведением покупателей в зависимости от семейного положения по целевым показателям:

## Observations: 12
## Variables: 5
## $ Age        <fct> 18-25, 18-25, 26-35, 26-35, 36-45, 36-45, 46-50, 46...
## $ Gender     <fct> Female, Male, Female, Male, Female, Male, Female, M...
## $ diff_p     <dbl> -5, 14, 3, 0, 4, -3, -11, -6, 5, 0, 12, -2
## $ diff_avg_p <S3: formattable> $0.36, $-0.31, $-0.33, $0.12, $0.20, $0...
## $ diff_sum_p <S3: formattable> $7.84, $128.90, $-2.10, $10.79, $42.87,...

Выборка по типу городов

Благодаря этому датасету мы получим ответы на вопросы, связанные с типами городов:

## Observations: 376
## Variables: 10
## $ City_Category              <fct> B, B, C, A, B, B, B, B, C, A, A, A,...
## $ Gender                     <fct> Male, Male, Male, Male, Male, Male,...
## $ Age                        <fct> 26-35, 26-35, 26-35, 26-35, 26-35, ...
## $ Marital_Status             <fct> Not Married, Married, Not Married, ...
## $ Stay_In_Current_City_Years <fct> 1, 1, 1, 1, 3, 2, 1, 1, 1, 2, 3, 4+...
## $ users                      <int> 98, 71, 136, 69, 48, 59, 63, 57, 10...
## $ purchases                  <int> 14619, 9748, 8576, 9114, 8714, 8460...
## $ sum_p_thous                <S3: formattable> $138,838.71, $92,520.21...
## $ avg_purch_thous            <S3: formattable> $1,416.72, $1,303.10, $...
## $ avg_purch_per_order        <S3: formattable> $9.50, $9.49, $10.02, $...

На этом обработка и предобработка данных завершена.

Анализ

Кто покупает больше товаров?

Для начала посмотрим, кто делает больше покупок?

На (Рис. 1) видим, что женщины совершают меньше покупок. В среднем женщины покупают 79 товаров, а мужчины 95.

Сделаем чуть более наглядный график: Тест Стьюдента показывает, что различия значимые, так как p-value – 0.014. Подробнее о тесте.

Те, кто не в браке – покупают больше (Рис. 2). Возможно, это связано с тем, что в браке добавляются такие статьи расходов, как ребёнок, ипотека и прочее.

Кто тратит больше денег?

Мужчины больше тратят, чем женщины, причём существенно – на 30% (Рис. 3). Женщины в среднем тратят $699.05, а мужчны $906.26 тысяч долларов.

Тест Стьюдента показывает, что различия значимые, так как p-value – 0.014. Подробнее о тесте.

На (Рис. 4) видим, что люди не в браке тратят больше. Возможно, это связано с тем, что количество покупок у них тоже больше. Давайте выявим корреляцию. Её коэффициент составляет: 0.9787397. Это говорит практически об абсолютной взаимосвязи (максимальное значение коэффициента – 1).

У кого выше средний чек?

Тест Стьюдента показывает, что различия значимые, так как p-value – 0.028. Подробнее о тесте.

По среднему чеку видим (Рис. 5), что мужчины на каждую покупку тратят на 9% больше женщин.

Замужние женщины начинают тратить больше, а женатые мужчины незначительно меньше (Рис. 6). Возможно, это связано с тем, что в некоторых семьях присутствуют общие бюджеты, из которых женщина делает дополнительные покупки для быта, семьи или себя.

Как брак влияет на покупки?

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

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

Количество покупок

Отрицательные значения на графике говорят о том, что до брака люди тратят меньше, чем в браке.

Здесь видим очень большую разницу для мужчин категории 18-25 лет (Рис. 7). Возможно, это связано с тем, что молодые мужчины вне брака тратят всё на своё развитие, развлечения и получение опыта. Мужчины же в браке могут быть обременены ипотекой, кредитами или расходами на ребёнка и жену.

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

Сумма покупок

Главные отклонения наблюдаются по тем же категориям, что количество покупок (Рис. 7).

При этом видим (Рис. 8), что практически все люди, кроме категории 46-50, вне брака тратят больше, чем в браке.

С чем это может быть связано? Больше денег уходит на быт и ребёнка? Ответить сложно, так как мы не знаем конкретной страны и год, в которые собиралась данная статистика. Если бы у нас была данная информация, то мы согли бы её собрать и дополнить картину.

Средний чек

По среднему чеку видим любопытные отклонения (Рис. 9). Помним, что мужчины категории 18-25 делают больше покупок (Рис. 7), но при этом это менее дорогие покупки, чем у женщин.

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

Как город влияет на покупки?

Напомню, что в датасете города разбиты на три категории – A, B, C. Удалось найти похожую классификацию городов. Поэтому будем придерживаться позиции, что город класса A наполняют люди с большим доходом, чем в городе класса C. Соответственно, доходы жителей: A > B > C.

Предварительно поймём, сколько людей живёт в каждом типе городов:

Количество людей распределяется в зависимости от достатка – чем выше достаток, тем меньше людей (Рис. 10).

Количество покупок

Видим, что в чёрную пятницу гораздо больше покупок совершают жители городов категории B (Рис. 11). Они делают на 60% больше покупок, чем жители городов типа A, и на 36% больше покупок, чем жители городов типа C.

В свою очередь жители городов типа C делают на 17% больше покупок, чем жители городов типа A.

Сумма покупок

Наблюдаем, что корреляция между количеством покупок и суммой продолжает сохраняться. Жители городов категории B делают на 64% больше покупок, чем жители городов типа A, и на 27% больше покупок, чем жители городов типа C (Рис. 12).

В свою очередь жители городов типа C делают на 29% больше покупок, чем жители городов типа A.

Средний чек покупок

Cредний чек больше всего у жителей городов типа A и видим взаимосвязь – чем выше класс города, тем больше средний чек.

Средний чек значительно меньше в городах категории C: на 130%, чем у жителей городов типа A, и на 127%, чем у жителей городов типа B (Рис. 13).

Как количество лет в городе, влияет на покупки?


Никак.


Почти.

Если вам интересно посмотреть на графики, показывающие это – листайте дальше. Если нет – переключайтесь к определению портрета самой платёжеспособной аудитории.

Как долго люди находятся в городах?

Видим, что наибольшее количество людей проживает в каждом типе городов около 1 года, а распределение по количеству лет одинаковое для каждого класса городов (Рис. 14).

Это может говорить о большом количестве приезжих людей. Всего людей, проживающих в городе дольше 4-х лет только 15.4%.

Количество покупок

Тест Стьюдента показывает, что различия значимые, так как p-value – 0. Подробнее о тесте.

Сумма покупок

Тест Стьюдента показывает, что всё же различия значимые, так как p-value – 0. Подробнее о тесте.

Средний чек

Тест Стьюдента показывает, что всё же различия значимые, так как p-value – 0. Подробнее о тесте.

Самая привлекательная аудитория в чёрную пятницу

Итак, мы подошли к самому главному – на кого стоило бы таргетировать свою рекламу с точки зрения полученных денег? Графики ниже интерактивные. Вы можете выбрать нужную возрастную категорию:

На графике (Рис. 18) мы видим, что с точки зрения выручки самая привлекательная для нас аудитория – неженатые мужчины 26-35 лет из города категории B.

Убедимся в этом и для удобства упорядочим график и выстроим все категории людей в единую линию:

C точки зрения абсолютного дохода самыми привлекательными являются: Not Married, Male, 26-35, B, Not Married, Male, 26-35, A, Married, Male, 26-35, B.

Если же смотреть на метрику “доход на пользователя”, которая учитывает то, сколько людей находится в каждом типе города, то увидим другую картину:

Разрыв между категориями людей уже не такой большой, как в количестве покупок. И наиболее привлекательными являются категории: Not Married, Female, 0-17, A, Not Married, Female, 0-17, B, Not Married, Female, 0-17, C.

Холостые мужчины находятся лишь на 25 месте.

Если бы магазин привлёк больше таких пользователей, то в идеальном случае мог бы получить на $40,196,985.94 больше дохода. Конечно, это не учитывает изменение среднего чека при увеличении аудитории и многих других факторов.

Выводы

В чёрную пятницу:

  1. Холостые люди тратят больше, чем люди в браке.
  2. Мужчины покупают больше товаров с более высоким средним чеком.
  3. Жители городов класса B тратят больше всего денег.
  4. Наименее привлекательные с точки зрения среднего чека – жители городов группы C.
  5. Самые привлекательные пользователи по метрике “доход на пользователя” – неженатые мужчины 51-55 лет из городов типа C.
  6. Самые привлекательные пользователи с точки зрения абсолютного дохода – неженатые мужчины 26-35 лет из городов типа B.