RFM-аналіз клієнтів: сегменти, SQL і що з ними робити
Як провести RFM-сегментацію бази клієнтів магазину чи сервісу — давність, частота, сума — правила балів, SQL-запит, готові сегменти (чемпіони, у зоні ризику, сплячі) і сценарії розсилок для кожного.

У базі магазину тисячі клієнтів, а розсилка йде всім однакова. RFM-аналіз — найпростіший спосіб розділити клієнтів за поведінкою і говорити з кожною групою по-своєму. Він не потребує машинного навчання — лише історії замовлень.
Три виміри
| Літера | Що вимірює | Як рахувати |
|---|---|---|
| R — Recency | давність останньої покупки | днів з останнього замовлення |
| F — Frequency | частота | кількість замовлень за період (наприклад, 12 міс.) |
| M — Monetary | сума | виручка або маржа клієнта за період |
Кожен вимір ділиться на бали — найчастіше від 1 до 5 за квінтилями (20% клієнтів у кожному балі). R: 5 — купував нещодавно; F: 5 — найчастіше; M: 5 — найбільше.
SQL для PostgreSQL
WITH base AS (
SELECT customer_id,
CURRENT_DATE - MAX(order_date)::date AS recency_days,
COUNT(*) AS frequency,
SUM(revenue_net) AS monetary
FROM orders
WHERE status = 'paid' AND order_date >= CURRENT_DATE - INTERVAL '365 day'
GROUP BY 1
)
SELECT customer_id, recency_days, frequency, monetary,
6 - NTILE(5) OVER (ORDER BY recency_days) AS r,
NTILE(5) OVER (ORDER BY frequency) AS f,
NTILE(5) OVER (ORDER BY monetary) AS m
FROM base;
Нюанс з F: у багатьох магазинах більшість клієнтів має одне замовлення, і квінтилі «ламаються». Тоді краще задати пороги вручну: 1, 2, 3–4, 5–7, 8+ замовлень.
Сегменти
Комбінації балів групують у зрозумілі сегменти:
| Сегмент | Правило (R, F) | Що означає | Що робити |
|---|---|---|---|
| Чемпіони | R 5, F 4–5 | купують часто і нещодавно | ранній доступ, програма лояльності, відгуки |
| Лояльні | R 3–5, F 3–5 | регулярні покупці | допродажі, комплекти |
| Перспективні новачки | R 4–5, F 1 | щойно перша покупка | вітальний ланцюжок, друга покупка |
| Потребують уваги | R 3, F 2–3 | рідше, ніж раніше | персональна добірка |
| У зоні ризику | R 1–2, F 3–5 | були активні, зникли | реактиваційна пропозиція, опитування |
| Не можна втратити | R 1–2, F 5, M 5 | великі клієнти, зникли | особистий контакт |
| Сплячі | R 1–2, F 1–2 | давно і мало | дешеві канали або пауза |
M зазвичай використовують для пріоритету: у межах сегмента спочатку працюють з клієнтами з високим M.
Як застосувати
- Перерахунок RFM раз на тиждень у пайплайні (ETL).
- Запис сегмента в CRM або сервіс розсилок як атрибут клієнта.
- Автоматичні сценарії: перехід «Перспективні → У зоні ризику» запускає лист чи повідомлення.
- Контроль: дашборд з розміром сегментів і потоками між ними щомісяця.
Що показувати в дашборді
- розмір і виручка кожного сегмента;
- матриця R × F (теплова карта кількості клієнтів);
- переходи між сегментами за місяць (скільки «Лояльних» стали «У зоні ризику»);
- результати кампаній за сегментами: відкриття, повторні покупки, виручка.
RFM добре доповнює когортний аналіз: когорти показують, як утримується «покоління» клієнтів, а RFM — кого саме зараз треба повернути. Для оцінки цінності сегментів використовуйте LTV.
Особливості для різних бізнесів
- Сервісний бізнес: R у днях відносно звичайного інтервалу візитів (клієнт стрижки раз на 5 тижнів «прострочений» вже на 8-му).
- Товари з довгим циклом (техніка, меблі): F майже завжди 1 — краще RM або сегменти за категоріями.
- B2B: M у маржі, а F — за кількістю угод або активних місяців.
Типові помилки
- Рахувати M у виручці з поверненнями.
- Брати весь час замість фіксованого вікна.
- Сегментувати, але не запускати жодних дій.
- Не враховувати, що ідентифікатор клієнта різний у різних системах (телефон/email).
Чекліст
- Єдиний ідентифікатор клієнта (нормалізований телефон/email)
- Вікно аналізу (наприклад, 12 місяців)
- Пороги F, що враховують структуру бази
- Сегменти з назвами й діями
- Сегмент записується в CRM/розсилку
- Щотижневий перерахунок
- Звіт про переходи між сегментами
Приклад: оцінюємо п'ятьох клієнтів
Ілюстративний магазин, дата аналізу 1 жовтня, оцінки 1–5 за квінтилями серед усіх клієнтів:
| Клієнт | Останнє замовлення | Замовлень (12 міс.) | Виручка (12 міс.) | R | F | M | Сегмент |
|---|---|---|---|---|---|---|---|
| A | 20 вер | 9 | 14 200 | 5 | 5 | 5 | Чемпіони |
| B | 2 сер | 4 | 5 100 | 4 | 4 | 4 | Лояльні |
| C | 12 вер | 1 | 1 300 | 5 | 1 | 2 | Нові |
| D | 15 бер | 6 | 8 900 | 2 | 5 | 5 | Під загрозою (цінний, замовк) |
| E | 10 лис минулого року | 1 | 600 | 1 | 1 | 1 | Втрачені |
Саме з D варто працювати сьогодні: цінний клієнт, чиє останнє замовлення було понад пів року тому. Персональна пропозиція повернення для групи «Під загрозою» окупається значно легше, ніж знижка всім підряд. На E не варто витрачати багато зусиль. C потрібен хороший досвід другої покупки — саме там вирішується більша частина майбутньої цінності магазину.
Як обрати межі оцінок
Квінтилі (кожна оцінка — 20% клієнтів) — варіант за замовчуванням, але вони ламаються у двох поширених випадках:
- У більшості клієнтів одне замовлення. Якщо 70% купили один раз, квінтилі F не можуть їх розділити. Використовуйте фіксовані межі: F = 1 для одного замовлення, 2 — для двох, 3 — для 3–4, 4 — для 5–7, 5 — для 8+.
- Цикли покупки різняться за категоріями. «90 днів від останнього замовлення» — це недавно для меблів і дуже давно для кави. Межі R визначайте з власних інтервалів повторних покупок: наприклад, R = 5, якщо в межах медіанного інтервалу, R = 1 — якщо понад 3× медіани.
Документуйте обрані межі. Коли вони змінюються, розміри сегментів стрибають, і це не слід плутати зі зміною поведінки клієнтів.
Відстежуємо рух між сегментами
Найкорисніший RFM-звіт — не знімок, а рух між знімками. Щомісяця показуйте, скільки клієнтів перейшли між ключовими сегментами:
| Звідки → куди | Клієнтів | Про що сигналізує |
|---|---|---|
| Нові → Лояльні | 120 | ланцюжки другої покупки працюють |
| Лояльні → Під загрозою | 85 | щось охололо: перевірте товар, доставку, конкурентів |
| Під загрозою → Лояльні | 30 | ефект кампанії повернення |
| Під загрозою → Втрачені | 60 | втрачена можливість |
SELECT prev.segment AS from_segment, cur.segment AS to_segment, COUNT(*) AS customers
FROM mart.rfm_snapshot cur
JOIN mart.rfm_snapshot prev
ON prev.customer_id = cur.customer_id
AND prev.snapshot_date = DATE_SUB(cur.snapshot_date, INTERVAL 1 MONTH)
WHERE cur.snapshot_date = @this_month
GROUP BY 1, 2
ORDER BY customers DESC;
Зберігайте знімок щомісяця, а не перераховуйте історію, — тоді звіт про рух відображає те, що ви знали на той момент.
Приватність
RFM використовує історію покупок — це персональні дані. Вивантажуйте для кампаній лише ті поля, що потрібні кампанії, враховуйте згоду на маркетингові розсилки під час побудови аудиторій і не завантажуйте повні історії покупок у рекламні платформи, коли достатньо ID сегмента чи хешованого списку контактів.
Як часто перераховувати
Для більшості магазинів достатньо щомісячного перерахунку з щотижневим оновленням лише R (давності) для тригерних розсилок. Повний щоденний перерахунок має сенс лише тоді, коли на сегменти реагують автоматичні сценарії, наприклад лист «давно не бачились» на 60-й день без замовлень.
Як перевірити, що кампанії за сегментами працюють
Кампанії за сегментами легко переоцінити, бо цільові клієнти часто купили б і так. Відкладіть випадкові 10–20% кожного цільового сегмента і нічого їм не надсилайте. Після вікна кампанії порівняйте частку покупців і виручку на клієнта між групою, яка отримала повідомлення, і контрольною:
| Група | Клієнтів | Купили за 30 днів | Виручка на клієнта |
|---|---|---|---|
| Під загрозою, отримали | 800 | 14% | 290 |
| Під загрозою, контроль | 200 | 9% | 180 |
У цьому ілюстративному випадку кампанія додала близько 5 п.п. покупців і 110 грн виручки на клієнта. Відніміть вартість знижки і розсилки — і побачите, чи вона окупилася. Без контрольної групи ви б приписали кампанії всі 14%.
Часті запитання
Скільки клієнтів потрібно для RFM?
Від кількох сотень клієнтів з покупками вже дає сенс. На малих базах використовуйте прості пороги замість квінтилів.
Чим RFM відрізняється від когортного аналізу?
Когорти групують клієнтів за датою першої покупки і показують утримання з часом. RFM групує за поточною поведінкою для дій тут і зараз.
Чи можна робити RFM у Google Таблицях?
Так, на невеликій базі — формулами QUARTILE або PERCENTRANK. Для щотижневого автоматичного оновлення краще SQL.
Як перевірити, що RFM-кампанії працюють?
Залиште контрольну групу в сегменті без розсилки і порівняйте частку повторних покупок за 30–60 днів.


