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, метрикам и собесам.