Когортный анализ

Сегментация клиентов в Python

Karolis Urbonas

Head of Data Science, Amazon

Тепловая карта когортного анализа

Строки:

  • Первая активность
  • Здесь — месяц привлечения

Столбцы:

  • Время с момента первой активности
  • Здесь — месяцы с момента привлечения

Тепловая карта когорт

Сегментация клиентов в Python

Тепловая карта когортного анализа

Строки:

  • Первая активность
  • Здесь — месяц привлечения

Столбцы:

  • Время с момента первой активности
  • Здесь — месяцы с момента привлечения

Сегментация клиентов в Python

Данные интернет-магазина

Более 500 000 транзакций британского интернет-магазина.

В курсе используется случайная выборка из 20% этого набора данных.

OnlineRetail

Сегментация клиентов в Python

Первые 5 строк данных

online.head()

Первые 5 строк

Сегментация клиентов в Python

Определение когорты по месяцу привлечения

def get_month(x): return dt.datetime(x.year, x.month, 1)

online['InvoiceMonth'] = online['InvoiceDate'].apply(get_month)
grouping = online.groupby('CustomerID')['InvoiceMonth']
online['CohortMonth'] = grouping.transform('min')
online.head()

top5-cohort-added

Сегментация клиентов в Python

Извлечение целочисленных значений из данных

Определяем функцию для извлечения целочисленных значений year, month и day.

Она будет использоваться на протяжении всего курса.

def get_date_int(df, column):
    year = df[column].dt.year
    month = df[column].dt.month
    day = df[column].dt.day
    return year, month, day
Сегментация клиентов в Python

Вычисление временного смещения

invoice_year, invoice_month, _ = get_date_int(online, 'InvoiceMonth') 
cohort_year, cohort_month, _ = get_date_int(online, 'CohortMonth')

years_diff = invoice_year - cohort_year months_diff = invoice_month - cohort_month
online['CohortIndex'] = years_diff * 12 + months_diff + 1 online.head()

top5-time-offset-added

Сегментация клиентов в Python

Подсчёт активных клиентов по когортам за каждый месяц

grouping = online.groupby(['CohortMonth', 'CohortIndex'])

cohort_data = grouping['CustomerID'].apply(pd.Series.nunique)
cohort_data = cohort_data.reset_index()
cohort_counts = cohort_data.pivot(index='CohortMonth', columns='CohortIndex', values='CustomerID')
print(cohort_counts)
Сегментация клиентов в Python

online-pivot-counts

Сегментация клиентов в Python

Давайте потренируемся!

Сегментация клиентов в Python

Preparing Video For Download...