R - построение когорт

Итак, я решил продолжить транслировать решения задач показанные Алексеем Куличевским на языке 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. для покупок до 1 года
  2. для каждой комбинации `ym_1st_o`  (округленная дата старта когорты) и `ym_o` (округленная дата покупки) рассчитаем:
    1. количество клиентов и 
    2. долю клиентов по отношению к количеству клиентов купивших в первом периоде когорты.

Cohorts volumes by periods.

Теперь мы готовы к тому, чтобы представить когорты в более естественном виде.

Я быстро набросал 3 визуализации (я не полировал их т.к. обычно я не строю когорты в R):
  • в виде матрицы
cohorts matrix.
  • в виде тепловой карты
cohorts heatmaps.
  • в виде кривых
cohorts curves.

Надеюсь мне удалось продемонстрировать вам некоторые возможности работы в R с когортами.


Comments

Popular posts from this blog

IV/WOE - хороший способ понять какой информацией вы обладаете

A/B-тестирование: смотреть на конверсию vs смотреть на продажи

Продуктовая аналитика: влияние продуктовых фич на ретеншн