RFM (Recency, Frequency, Monetary) анализ — это метод сегментации клиентов, основанный на трех ключевых метриках:
- Recency (давность) — как давно клиент делал свою последнюю покупку;
- Frequency (частота) — как часто клиент делает покупки;
- Monetary (сумма покупок) — сколько денег клиент потратил за определенный период времени. RFM анализ помогает компаниям лучше понять поведение клиентов, выявить лучшие сегменты аудитории и нацелить маркетинговые кампании более эффективно.
Клиенты делятся на группы по трем метрикам:
- Давние клиенты
- Относительно недавние клиенты
- Недавние клиенты
- Покупает очень редко (единичные заказы)
- Покупает нечасто
- Покупает часто
- Маленькая сумма
- Средняя сумма
- Большая сумма
- «111»: делал покупку давно, один раз и на маленькую сумму.
- «333»: покупает часто, на большую сумму, и его последняя покупка была недавно. Это наши лучшие клиенты.
Важно отметить, что диапазоны для 1, 2 и 3 вы задаете сами, определяя, что значит маленькая, средняя и большая сумма продаж для вашего бизнеса.
Сосредоточимся на самом важном: начнем наш анализ, пропуская этап загрузки данных в базу и ее настройку.
create table customer_segments as
with aggregated_data as (
select CustomerId,
max(InvoiceDate) as LastDate,
datediff('2011-12-09', max(InvoiceDate)) as Recency,
count(distinct Invoice) as Frequency,
round(sum(UnitPrice * Quantity), 2) as TotalSum
from Sales
group by CustomerId
),
normalized_data as (
select CustomerId,
Recency,
Frequency,
TotalSum,
(Recency - min(Recency) over()) / (max(Recency) over() - min(Recency) over()) as Recency_normalized,
(Frequency - min(Frequency) over()) / (max(Frequency) over() - min(Frequency) over()) as Frequency_normalized,
(TotalSum - min(TotalSum) over()) / (max(TotalSum) over() - min(TotalSum) over()) as Monetary_normalized
from aggregated_data
)
select CustomerId,
ntile(3) over (order by Recency_normalized desc) as Recency,
ntile(3) over (order by Frequency_normalized asc) as Frequency,
ntile(3) over (order by Monetary_normalized asc) as Monetary
from normalized_data;
В данной части кода создаем таблицу customer_segments
, которая будет содержать сегменты клиентов на основе анализа RFM. На первом этапе мы агрегируем данные о каждом клиенте. Для этого мы извлекаем идентификатор клиента, дату последней покупки, вычисляем давность (Recency), частоту покупок (Frequency) и общую сумму покупок (TotalSum). После агрегации данных мы проводим нормализацию метрик, чтобы привести их к одному диапазону. Это важно, так как каждая из метрик может иметь разные масштабы, что может повлиять на результаты анализа.
Нормализация данных — это процесс преобразования данных так, чтобы все значения находились в одном диапазоне, обычно от 0 до 1. Это делает данные более сопоставимыми, особенно когда разные метрики имеют разные масштабы. Например, в контексте RFM-анализа метрики Frequency
и Monetary
могут значительно отличаться по своим диапазонам.
- Сравнимость данных: Алгоритмы анализа могут быть предвзятыми, если метрики имеют разные диапазоны. Нормализация делает метрики сопоставимыми.
- Улучшение точности сегментации: В RFM-анализе важно, чтобы каждая из метрик имела одинаковый вес для более точной сегментации клиентов.
Мы используем следующую формулу для нормализации:
После нормализации данных мы применяем функцию NTILE(3)
, чтобы разделить клиентов на три группы по каждой из метрик RFM.
Функция NTILE
делит отсортированный набор данных на указанные группы (в данном случае на 3) и присваивает каждой записи номер группы. Это позволяет нам легко сегментировать клиентов в зависимости от их поведения и ценности для бизнеса.
На основе RFM-анализа клиенты были распределены на следующие группы:
update Customer_Segments
set Segment = case
when Recency = 3 and Frequency = 3 and Monetary = 3 then 'VIP'
when Recency = 3 and Frequency = 3 and Monetary = 2 then 'Постоянные со средним чеком'
when Recency = 3 and Frequency = 3 and Monetary = 1 then 'Постоянные с маленьким чеком'
when Recency = 3 and Frequency = 2 and Monetary = 3 then 'Постоянные с высоким чеком'
when Recency = 3 and Frequency = 2 and Monetary = 2 then 'Постоянные со средним чеком'
when Recency = 3 and Frequency = 2 and Monetary = 1 then 'Постоянные с маленьким чеком'
when Recency = 3 and Frequency = 1 and Monetary = 3 then 'Новички с высоким чеком'
when Recency = 3 and Frequency = 1 and Monetary = 2 then 'Новички со средним чеком'
when Recency = 3 and Frequency = 1 and Monetary = 1 then 'Новички с маленьким чеком'
when Recency = 2 and Frequency = 3 and Monetary = 3 then 'Спящие VIP'
when Recency = 2 and Frequency = 3 and Monetary = 2 then 'Спящие постоянные со средним чеком'
when Recency = 2 and Frequency = 3 and Monetary = 1 then 'Спящие постоянные с маленьким чеком'
when Recency = 2 and Frequency = 2 and Monetary = 3 then 'Спящие редкие с высоким чеком'
when Recency = 2 and Frequency = 2 and Monetary = 2 then 'Спящие редкие со средним чеком'
when Recency = 2 and Frequency = 2 and Monetary = 1 then 'Спящие редкие с маленьким чеком'
when Recency = 2 and Frequency = 1 and Monetary = 3 then 'Спящие разовые'
when Recency = 2 and Frequency = 1 and Monetary = 2 then 'Спящие разовые'
when Recency = 2 and Frequency = 1 and Monetary = 1 then 'Спящие разовые'
when Recency = 1 and Frequency = 3 and Monetary = 3 then 'Уходящие VIP'
when Recency = 1 and Frequency = 3 and Monetary = 2 then 'Уходящие постоянные'
when Recency = 1 and Frequency = 3 and Monetary = 1 then 'Уходящие постоянные'
when Recency = 1 and Frequency = 2 and Monetary = 3 then 'Уходящие редкие'
when Recency = 1 and Frequency = 2 and Monetary = 2 then 'Уходящие редкие'
when Recency = 1 and Frequency = 2 and Monetary = 1 then 'Уходящие редкие'
when Recency = 1 and Frequency = 1 and Monetary = 3 then 'Одноразовые'
when Recency = 1 and Frequency = 1 and Monetary = 2 then 'Одноразовые'
when Recency = 1 and Frequency = 1 and Monetary = 1 then 'Потерянные экономные'
end;
Можно выделить группы клиентов с различным уровнем лояльности и ценности для бизнеса. Это позволяет разрабатывать более целевые маркетинговые стратегии для каждой группы и повышать их лояльность.
Был построен отчет в Power BI, содержащий две страницы: "Общие сведения" и "RFM".
На странице "Общие сведения" представлена основная информация по выручке, количеству заказов и проданных товаров. Также показаны графики динамики выручки и заказов по месяцам, тренды по количеству заказов в разрезе дней недели, а также топ продуктов по выручке.
На странице "RFM" представлена сегментация клиентов по их активности и ценности для бизнеса. В таблице отображены различные сегменты клиентов с указанием их вклада в выручку, количество заказов, проданных товаров и средний чек. Данные представлены таким образом, чтобы легко идентифицировать наиболее значимые группы клиентов и их долю в общем объеме продаж.
Была настроена кроссфильтрация для удобного анализа данных между различными элементами отчета. Кроме того, карточки KPI отображают актуальные данные по ключевым параметрам в зависимости от выбранного месяца. Эти карточки показывают процентное изменение показателей по сравнению с предыдущим месяцем, что позволяет быстро оценивать динамику изменений и принимать обоснованные решения на основе актуальных данных.