RFM-анализ: как сегментировать клиентов по покупкам
Продвинутое3 минРедакция Innovialabs
Коротко
RFM-анализ оценивает каждого клиента по давности последней покупки, частоте покупок и сумме трат, после чего базу делят на сегменты и для каждого запускают свою коммуникацию — от удержания лучших до возврата уходящих.
Что такое RFM и зачем он нужен
RFM — способ разделить клиентскую базу по реальному поведению, а не по анкетным данным. Каждый клиент получает три оценки:
- Recency (R) — сколько дней прошло с последней покупки. Чем меньше, тем выше оценка.
- Frequency (F) — сколько покупок клиент сделал за выбранный период.
- Monetary (M) — сколько денег он потратил за тот же период.
Обычно каждую метрику переводят в шкалу от 1 до 5. Клиент с кодом 555 недавно покупал, делает это часто и тратит много. Клиент 155 когда-то был лучшим, но давно пропал — его важно вернуть.
Смысл метода в том, что одно и то же сообщение не подходит всем. Скидка постоянному клиенту съедает маржу, а «спасибо за лояльность» новичку звучит странно.
Какие данные нужны
Достаточно таблицы заказов с тремя полями: ID клиента, дата заказа, сумма заказа. Её можно выгрузить из CRM, учётной системы или админки магазина.
Перед расчётом:
- Склейте дубли клиентов — один человек с разными телефонами или email исказит частоту.
- Уберите отменённые и возвращённые заказы.
- Выберите период анализа под свой цикл покупок: для товаров повседневного спроса он короче, для дорогих и редких покупок — длиннее.
- Зафиксируйте дату расчёта — от неё считается давность.
Как посчитать RFM в таблице
- Создайте сводную таблицу по клиентам: последняя дата заказа (
MAXIFS), число заказов (COUNTIFS), сумма (SUMIFS). - Давность:
=дата_расчёта - последняя_дата. - Присвойте оценки. Два подхода:
- квантили — делите клиентов на пять равных групп по каждой метрике (функции
PERCENTRANKилиQUARTILE); - фиксированные пороги — например, для частоты «1 заказ», «2 заказа», «3–4», «5 и больше».
- квантили — делите клиентов на пять равных групп по каждой метрике (функции
- Склейте три оценки в код сегмента, например
=R&F&M.
Для частоты пороги обычно удобнее квантилей: у большинства клиентов часто одна покупка, и квантили делят одинаковые значения в разные группы.
Как посчитать RFM в SQL
Пример для PostgreSQL:
WITH stats AS (
SELECT
customer_id,
CURRENT_DATE - MAX(order_date)::date AS recency_days,
COUNT(*) AS frequency,
SUM(amount) AS monetary
FROM orders
WHERE status = 'paid'
AND order_date >= CURRENT_DATE - INTERVAL '24 months'
GROUP BY customer_id
)
SELECT
customer_id,
NTILE(5) OVER (ORDER BY recency_days DESC) AS r,
CASE WHEN frequency >= 5 THEN 5
WHEN frequency >= 3 THEN 4
WHEN frequency = 2 THEN 3
ELSE 1 END AS f,
NTILE(5) OVER (ORDER BY monetary) AS m
FROM stats;
Давность сортируется по убыванию, поэтому самые «старые» клиенты получают 1, а самые свежие — 5. Пороги частоты подберите под свои данные.
Типичные сегменты и что с ними делать
| Сегмент | Примерный профиль | Что запускать |
|---|---|---|
| Чемпионы | R5, F4–5, M4–5 | Ранний доступ, программа лояльности, просьба об отзыве или рекомендации |
| Лояльные | R3–4, F4–5 | Кросс-продажи, апсейл, персональные подборки |
| Перспективные | R4–5, F2–3 | Мотивация ко второй-третьей покупке, бонус за следующий заказ |
| Новички | R5, F1 | Welcome-цепочка, онбординг, полезный контент о продукте |
| Под угрозой | R2–3, F3–5 | Напоминание, персональное предложение, опрос о причинах |
| Нельзя потерять | R1–2, F5, M5 | Личный контакт менеджера, весомое предложение возврата |
| Спящие | R1–2, F1–2 | Недорогая реактивация, затем исключение из рассылок, если реакции нет |
Таблица — ориентир, а не стандарт. Названия и границы сегментов адаптируйте под свой бизнес.
Частые ошибки
- Один период для всех товаров. Если продаёте и расходники, и технику, считайте RFM отдельно по категориям.
- Скидка всем подряд. Активным клиентам скидка часто не нужна — они купили бы и так.
- Разовый расчёт. RFM имеет смысл пересчитывать регулярно и смотреть, как клиенты переходят между сегментами.
- Нет контрольной группы. Чтобы понять, сработала ли кампания, оставьте часть сегмента без воздействия и сравните.