RFM-анализ для продакт-менеджера: пример
Карьерник — Duolingo для аналитиков: 10 минут в день тренируй SQL, Python, A/B, статистику, метрики и ещё 3 темы собеса. 1500+ вопросов в Telegram-боте. Бесплатно.
Содержание:
Зачем продакту RFM
Средний пользователь — миф. В любом продукте есть «киты», которые приносят основную выручку, и «туристы», которые зашли один раз. Если делать решения на средних — оптимизируете под несуществующего пользователя.
RFM — старый, простой и рабочий способ разложить базу на сегменты по поведению. Изначально применялся в директ-маркетинге и e-commerce, но прекрасно работает и для подписочных продуктов, и для b2c-приложений.
Польза для продакта в трёх вещах: видишь, кто реально твои чемпионы; понимаешь, кто на грани оттока; можешь таргетировать коммуникации и фичи под конкретные сегменты, а не «всех».
Три измерения RFM
- Recency — как давно пользователь делал последнее действие (покупку, тренировку, сессию). Чем меньше — тем «свежее» пользователь.
- Frequency — как часто. Число действий за период.
- Monetary — сколько денег приносит. Сумма покупок, средний чек, доход за период.
Каждое измерение разбивается на квантили (обычно 5 или 3). Получаем оценки от 1 до 5 по каждому. Сочетание трёх оценок — RFM-код пользователя: например, R5F4M3.
Для бесплатных продуктов вместо Monetary часто берут «глубину» — число действий, время в продукте, законченные сценарии. Тогда фреймворк называют RFE (Engagement) или просто RF.
Как считать в SQL
Базовый паттерн — посчитать R, F, M, потом разбить на квантили через NTILE:
WITH user_stats AS (
SELECT
user_id,
EXTRACT(DAY FROM (CURRENT_DATE - MAX(event_date)))::INT AS recency_days,
COUNT(*) AS freq,
SUM(amount) AS monetary
FROM purchases
WHERE event_date >= CURRENT_DATE - INTERVAL '180 day'
GROUP BY user_id
)
SELECT
user_id,
6 - NTILE(5) OVER (ORDER BY recency_days) AS r_score,
NTILE(5) OVER (ORDER BY freq) AS f_score,
NTILE(5) OVER (ORDER BY monetary) AS m_score
FROM user_stats;Несколько важных деталей:
- Для Recency инвертируем: чем меньше дней — тем выше скор. Поэтому
6 - NTILE(...). - Окно для расчёта (здесь 180 дней) подбирайте под цикл вашего продукта. Для еженедельного — 60 дней, для ежемесячного — 180–365.
- Если пользователей немного, NTILE(5) даёт по 20% в каждой группе, и сегменты будут одинакового размера. Если хочется зафиксировать пороги — задавайте через
CASE WHEN.
Какие сегменты получаются
Из 125 теоретических комбинаций (5×5×5) на практике используют 8–11 укрупнённых сегментов:
- Champions (R5 F5 M5) — лучшие. Свежие, частые, прибыльные.
- Loyal (R4–5 F4–5 M3–4) — стабильные, частые, средний чек.
- Big spenders (M5, R и F разные) — приносят много денег, но не всегда часто.
- Promising (R5 F1–2 M1–2) — недавно подключились, мало действий.
- Need attention (R3 F3 M3) — средние по всем осям.
- About to sleep (R2 F2–3 M2–3) — давно не были, скоро уйдут.
- At risk (R1–2 F4–5 M4–5) — раньше были чемпионами, но давно не возвращались.
- Hibernating (R1 F1–2 M1–2) — почти ушли.
- Lost (R1 F1 M1) — фактически отвалились.
Названия и пороги в каждой команде свои. Главное — иметь не больше 10–12 сегментов, иначе работать невозможно.
Сценарии работы с сегментами
- Champions — программа лояльности, ранний доступ к фичам, реферальная программа. Ничего не сломайте.
- Loyal — апсейл, кросс-продажа премиум-функций, сбор отзывов и кейсов.
- Promising — onboarding-цепочки, обучающий контент, активационные пуши.
- At risk — реактивация. Самый важный сегмент с точки зрения ROI: вернуть бывшего активного пользователя дешевле, чем привлечь нового.
- About to sleep — мягкие напоминания, изменения в продукте, опрос «что не так».
- Lost — wow-предложение или признание, что они ушли. Не закидывайте их рассылками — раздражает.
Для каждой стратегии меряйте конверсию реактивации/удержания. Без замера это просто дополнительная нагрузка на CRM.
Частые ошибки
- Окно слишком короткое. Если для подписочного сервиса считать R за 30 дней — сегменты дёрганые, пользователь скачет между «Champion» и «At risk» каждую неделю.
- Деньги вместо вовлечённости в бесплатных продуктах. Если у вас freemium и 95% пользователей не платят, Monetary бесполезна. Берите глубину вовлечённости.
- NTILE на маленьких выборках. На 200 пользователях квантили шумят. Лучше задать пороги вручную или объединять группы.
- Сегменты ради сегментов. Если на сегмент не запускается ни одна активность — он не нужен. Лучше 6 рабочих сегментов, чем 11 декоративных.
- Расчёт раз в год. RFM теряет актуальность за месяц. Норма — пересчёт раз в неделю.
Связанные темы
FAQ
Подходит ли RFM для freemium-продуктов?
Да, но с заменой Monetary на глубину вовлечённости. Получится RFE-вариант: Recency, Frequency, Engagement.
Как часто пересчитывать RFM?
Для подписочных продуктов — раз в неделю. Для e-commerce — раз в день, потому что Recency меняется быстро.
Сколько сегментов оставлять?
Обычно 8–11. Меньше 6 — теряется детализация, больше 12 — невозможно работать в маркетинге.
Можно ли использовать RFM в B2B?
Можно, но «пользователь» — это аккаунт, а не отдельный человек. Метрики считают по компаниям, а не по индивидуальным сотрудникам.
Чем RFM отличается от LTV-сегментации?
LTV — про будущее, RFM — про прошлое. Для прогноза LTV часто стартуют именно с RFM-сегмента: у Champions LTV высокий, у Lost — нулевой.
Можно ли строить RFM в Excel?
На небольших выборках до 50 тысяч строк — без проблем. Дальше лучше SQL или Python: NTILE через формулы перестаёт справляться.
Хотите тренировать продуктовую аналитику и сегментацию? Откройте Карьерник — 1500+ вопросов по RFM, SQL, метрикам и собесам.