Итак, я решил продолжить транслировать решения задач показанные Алексеем Куличевским на языке
Python. В этот раз мы будем заниматься трансляцией на R задач по
агрегации и построению когорт (ссылка на оригинал поста с кодом Python). Датасет будем использовать тот же, что и в
первом посте.
|
Original dataset. |
Начнем с простых агрегаций. Давайте ответим на вопрос: сколько продаж и покупок было сделано в магазине?
|
Simple aggregations and distribution charts. |
Итак, первый кусок кода делает простые агрегации. Я решил сразу добавить больше агрегаций (mean, median, max) т.к. в e-commerce крайне важно понимать насколько наша аудитория
чувствительна к цене.
Средний чек (AOV) у нас $459. Неплохо! Но в тоже время медиана (MedOV) = $152, а это значит, что 50% всех чеков
намного ниже среднего. С другой стороны, это указывает на то, что должно быть также некоторое количество чеков, которые сильно выше медианы. И такие чеки есть - максимальный чек (MaxOV) = $23661
Интересно, а сколько у нас таких огромных чеков? Давайте быстро визуализируем наше распределение чеков (второй кусок кода):
|
AOV distribution. |
Из чарта выше видно, что чек в $23K один, да и вообще чеков больше $2500 крайне мало.
Теперь давайте ответим на другой вопрос: что происходит с распределением чеков до медианы, т.е. в первых 50% чеков (третий кусок кода):
|
Distribution before MedOV. |
Ответ отрезвляет: концентрация чеков до медианы находится на уровне
всего $12! Это еще раз корректирует наше понимание чувствительности клиентов к цене.
Дальше двигаемся в сторону построения когорт.
Для построения когорт нам необходимо на уровне
каждого клиента рассчитать
дату первой покупки и сделать агрегацию по этим датам.
Но, если мы захотим делать дальнейшую аналитику то, очевидно, будем укрупнять когорты до уровня недели/месяца или даже квартала/года.
Поэтому помимо даты старта когорты, мы также создадим дату создания когорты округленную до начала месяца
(ym_1st_o), и такое же округление сделаем по дате покупки
(ym_o).
|
Adding cohort dates. |
Дальше Леша предложил посчитать: "сколько в среднем заказов и приносят клиенты в течение первого года".
Однако, учитывая то, что он делал агрегацию на уровне
дня когорты, то формально он посчитал - средние значения продаж и количества заказов по когортам.
|
stats for 1y cohorts. |
Если же мы захотим посчитать значения оригинальной задачи, то агрегацию нужно делать на уровне
клиента, а не на уровне дня когорты.
|
stats for 1y customers. |
И напоследок давайте все же построим когорты:
- для покупок до 1 года
- для каждой комбинации `ym_1st_o` (округленная дата старта когорты) и `ym_o` (округленная дата покупки) рассчитаем:
- количество клиентов и
- долю клиентов по отношению к количеству клиентов купивших в первом периоде когорты.
|
Cohorts volumes by periods. |
Теперь мы готовы к тому, чтобы представить когорты в более естественном виде.
Я быстро набросал 3 визуализации (я не полировал их т.к. обычно я не строю когорты в R):
|
cohorts matrix. |
|
cohorts heatmaps. |
|
cohorts curves. |
Надеюсь мне удалось продемонстрировать вам некоторые возможности работы в R с когортами.
Comments
Post a Comment