RFM-анализ с помощью Python

RFM-анализ с помощью Python

RFM-моделирование — это метод маркетингового анализа, используемый для оценки ценности клиента. RFM-моделирование основано на трех факторах:

  • Давность: Как недавно клиент совершил покупку
  • Частота: Как часто клиент совершает покупку
  • Денежная стоимость: Сколько денег клиент тратит на покупки

Модель RFM позволяет получить числовые значения для трех вышеперечисленных показателей. Эти значения помогают компаниям лучше понять потенциал клиентов.

Например

Если клиент ежедневно совершал покупки в Starbucks в прошлом году и ничего не покупал в течение последнего месяца, возможно, он выбрал бренд конкурента. Возможно, он перешел в The Coffee Bean and Tea Leaf из-за более выгодных предложений или удобства.

Starbucks может нацелиться на этих клиентов и разработать маркетинговую стратегию, чтобы вернуть их обратно.

В этой статье я покажу вам, как построить RFM-модель с помощью Python. Мы будем использовать набор данных, содержащий более 4000 уникальных идентификаторов клиентов, и присвоим значения RFM каждому из этих клиентов.

Для начала работы загрузите набор данных с сайта Kaggle. Убедитесь, что на вашем устройстве установлена среда разработки Python, а также библиотека Pandas.

Процесс RFM Анализа

Рассчитаем показатель RFM для 5 выборочных клиентов.

Шаг1: Выведите R, F и M из банка транзакций за последний 1 год.

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

Найти R, F и M довольно просто. Допустим, клиент внес 10 тыс. денег 1 мая и еще 5 тыс. 10 июня. Представьте, что вы проводите RFM-анализ 1 июля. Для этого клиента Recency будет 1 месяц, потому что последняя транзакция была в июне, Frequency будет 2, потому что он сделал два депозита в мае и июне, а M будет 15 K.

Шаг 2: Определите оценку каждого клиента по каждому параметру на основе ранга внутри параметра.

Для Recency, чем меньше, тем лучше, потому что клиент находится на вершине таблицы , а для Frequency & Monitory большие значения лучше.

Возьмем для примера вышеприведенную таблицу: по сравнению со всеми клиентами, повторяемость лучше для клиента 3, так как он занимает 1 место, в то время как по частоте он находится на 4 месте, а по ценности — на 2 месте.

Шаг 3: Стандартизация оценки каждого клиента по каждому параметру (0-100)

Стандартизация = текущее значение/Макс(Значение) * 100

Шаг 4: Определите сводный балл по каждому параметру для каждого клиента

Сводный балл = 0,15*R + 0,28*F + 0,57*M

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

Мы просто применили показатели ценности к каждому клиенту.

Например:

Ценность клиента 4 = 0,15 *40 + 0,28 *60 + 0,57*60 = 57

Затем мы разделили оценки на три сегмента:

  • 0 — 50 — клиент с низкой ценностью
  • 50 — 75 – клиент со средней ценностью
  • 76 — 100 – клиент с высокой ценностью

Основываясь на вышеуказанных оценках, компания может применить стратегию дифференциации, например, удержание /привлечение различных сегментов клиентов.

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

Реализуем RFM-анализ в Python

Шаг 1

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

import pandas as pd

df2 = pd.read_csv(‘data.csv’,encoding=’unicode_escape’)

Теперь посмотрим на верхнюю часть данных:

df.head()

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

  • Количество,
  • Дата покупки,
  • Стоимость покупки,
  • ID клиента.

Шаг 2

Начнем с расчета величины М — денежной стоимости. Это самое простое значение для расчета. Все, что нужно сделать, это вычислить общую сумму, потраченную каждым покупателем.

Для этого необходимо использовать столбцы UnitPrice (стоимость покупки) и Количество. Сначала мы перемножим эти значения, чтобы получить общую сумму, потраченную каждым покупателем за каждую транзакцию.

Вот код для этого элемента:

df[‘Total’] = df[‘Quantity’]*df[‘UnitPrice’]

Проверим верх таблицы данных:

Мы видим новый столбец с общей суммой, потраченной на каждую покупку.

Необходимо найти общую сумму, потраченную одним и тем же клиентом по всему набору данных. Мы можем сделать это с помощью следующих строк кода:

m = df.groupby(‘CustomerID’)[‘Total’].sum()

m = pd.DataFrame(m).reset_index()

Глядя на вершину нового фрейма данных, мы видим следующее:

Мы успешно рассчитали денежную стоимость каждого клиента в кадре данных.

Шаг 3

Рассчитаем частоту. Мы хотим найти количество раз, когда каждый покупатель совершал покупку.

Посмотрим на рамку данных, чтобы понять, как это сделать:

Чтобы найти количество раз, когда каждый клиент совершал покупку, используем столбцы CustomerID (идентификатор клиента) и InvoiceDate (дата покупки).

Нужно подсчитать количество уникальных дат, когда каждый клиент совершал покупку.

Для этого пропишите следующие строки кода:

freq = df.groupby(‘CustomerID’)[‘InvoiceDate’].count()

f = pd.DataFrame(freq).reset_index()

Если взглянуть на вершину таблицы данных, то можно увидеть следующее:

Мы успешно высчитали частоту покупок для каждого клиента в массиве данных.

Шаг 4

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

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

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

Например, если клиент А совершал покупку два месяца назад, а клиент Б совершал покупку два года назад, нужно присвоить клиенту А большее значение повторяемости.

Для этого сначала преобразовываем столбец InvoiceDate в объект времени, затем выполняем следующие строки кода:

df[‘Date’]= pd.to_datetime(df[‘InvoiceDate’])

И снова вернемся к таблице данных:

Обратите внимание, что появился новый столбец — «Дата».

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

Для этого присвоим ранг всем датам для каждого идентификатора клиента. Самая последняя дата будет ранжироваться как 1, вторая дата — как 2 и так далее.

Выполните следующие строки кода:

df[‘rank’] = df.sort_values([‘CustomerID’,’Date’]).groupby([‘CustomerID’])[‘Date’].rank(method=’min’).astype(int)

Взглянув на верхнюю часть таблицы данных, мы увидим следующее:

У нас появились различные ранги, основанные на времени, когда клиент последний раз совершал покупку. Самая последняя покупка имеет ранг 1.

Отфильтруем рамку данных и избавимся от всех остальных покупок. Сохраняем только самые последние покупки:

recent = df[df[‘rank’]==1]

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

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

Выполните следующие строки кода:

recent[‘recency’] = recent[‘Date’] — pd.to_datetime(‘2010-12-01 08:26:00’)

Посмотрим на верхнюю часть таблицы данных:

Обратите внимание, что у нас появился новый столбец, обозначенный «recency», и в нем рассчитано количество дней от самой старой даты в наборе данных. Значение 0 дней означает наименьшую повторяемость.

Преобразуем значения recency в числовые. Для этого пропишите следующие строки кода:

def recency(recency):

res = str(recency).split(‘ ‘)[0]

return(int(res))

recent[‘recency’] = recent[‘recency’].apply(recency)

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

Выберем только столбцы CustomerID и recency и удалим дубликаты:

recent = recent[[‘CustomerID’,’recency’]]

recent = recent.drop_duplicates()

Если взглянуть на верхнюю часть таблицы данных, то можно увидеть следующее:

Шаг 5

Мы закончили вычислять значения RFM. У нас есть результаты, сохраненные в отдельных фреймах данных, объединим их вместе:

finaldf = f.merge(m,on=’CustomerID’).merge(recent,on=’CustomerID’)

Посмотрим на верхнюю часть таблицы данных:

Нам успешно удалось добавить значения RFM к каждому идентификатору клиента в наборе данных.

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

Если вам удалось успешно выполнить приведенные выше коды, попробуйте сделать еще один шаг вперед и нормализовать эти значения. Значения RFM обычно представлены по шкале от 1 до 5, поэтому вы можете создать коды для каждого из этих значений и сгруппировать их вместе.

Стоимость услуг
Наименование услуги Стоимость работ Время выполнения
RFM анализ от 30.000 Р от 5 дней
Необходимые документы
1. База в формате: API или excel, json, иное
2. Доступ к БД
Записаться на консультацию
Остались вопросы? Разберем бесплатно простую задачу или проведем консультацию (Посмотреть пример)
Поделится:

Добавить комментарий

Ваш адрес email не будет опубликован.

Вам также может быть интересно: