Вычисление RFM-метрик

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

Karolis Urbonas

Head of Data Science, Amazon

Определения

  • Recency — количество дней с последней транзакции клиента
  • Frequency — количество транзакций за последние 12 месяцев
  • Monetary Value — общая сумма трат за последние 12 месяцев
Сегментация клиентов в Python

Набор данных и подготовка

  • Тот же набор данных online, что и в предыдущих уроках
  • Необходима предварительная подготовка данных
  • Новый столбец TotalSum = Quantity x UnitPrice.

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

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

Шаги подготовки данных

Начнём с предобработанного DataFrame online, содержащего данные только за последние 12 месяцев:

print('Min:{}; Max:{}'.format(min(online.InvoiceDate),
                              max(online.InvoiceDate)))
Min:2010-12-10; Max:2011-12-09

Создадим гипотетическую дату snapshot_day, как будто анализ выполняется сегодня.

snapshot_date = max(online.InvoiceDate) + datetime.timedelta(days=1)
Сегментация клиентов в Python

Вычисление RFM-метрик

# Aggregate data on a customer level
datamart = online.groupby(['CustomerID']).agg({
    'InvoiceDate': lambda x: (snapshot_date - x.max()).days,
    'InvoiceNo': 'count',
    'TotalSum': 'sum'})

# Rename columns for easier interpretation datamart.rename(columns = {'InvoiceDate': 'Recency', 'InvoiceNo': 'Frequency', 'TotalSum': 'MonetaryValue'}, inplace=True)
# Check the first rows datamart.head()
Сегментация клиентов в Python

Итоговые RFM-значения

Таблица для RFM-сегментации готова!

Топ-5 строк RFM

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

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

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

Preparing Video For Download...