← Back to Academia

09.09 - RFM-анализ

RFM - самый простой и эффективный способ сегментировать клиентскую базу. 3 метрики → 11 сегментов → персонализированные действия для каждого.

#intermediate #block-09


Что такое RFM

МетрикаВопросЧто измеряет
RecencyКогда последняя покупка?Свежесть (чем недавнее, тем лучше)
FrequencyКак часто покупает?Лояльность
MonetaryСколько тратит?Ценность

Расчёт

Для каждого клиента:

  1. R = дней с последней покупки
  2. F = количество покупок за период
  3. M = сумма покупок за период

Каждому присваивается score 1-5 (quintile):

ScoreRecencyFrequencyMonetary
5Последняя покупка 1-7 дней назад10+ покупокTop 20% по сумме
48-30 дней6-9 покупок20-40%
331-60 дней3-5 покупок40-60%
261-120 дней2 покупки60-80%
1120+ дней1 покупкаBottom 20%

RFM-сегменты

СегментRFMДействие
Champions555Exclusive offers, loyalty program, referral
Loyal4-54-53-5Upsell, cross-sell, early access
Potential Loyalists4-52-32-3Engagement programs, loyalty incentives
New Customers511-2Onboarding, welcome series, first purchase offer
Promising3-41-21-2Nurture, education, brand building
Need Attention33-43-4Personalized offers, remind of value
About to Sleep2-32-32-3Win-back campaign, special discount
At Risk24-54-5⚠️ Urgent: personal outreach, big incentive
Can't Lose14-54-5🚨 Most valuable churners: CEO email, phone call
Hibernating1-21-21-2Last-chance offer, then archive
Lost111Remove or minimal effort

SQL для RFM

WITH rfm AS ( SELECT customer_id, DATE_DIFF(CURRENT_DATE(), MAX(order_date), DAY) AS recency, COUNT(*) AS frequency, SUM(revenue) AS monetary, NTILE(5) OVER (ORDER BY DATE_DIFF(CURRENT_DATE(), MAX(order_date), DAY) ASC) AS r, NTILE(5) OVER (ORDER BY COUNT(*) ASC) AS f, NTILE(5) OVER (ORDER BY SUM(revenue) ASC) AS m FROM orders WHERE status = 'completed' GROUP BY customer_id ) SELECT customer_id, recency, frequency, monetary, r, f, m, CONCAT(CAST(r AS STRING), CAST(f AS STRING), CAST(m AS STRING)) AS rfm_score, CASE WHEN r >= 4 AND f >= 4 AND m >= 4 THEN 'Champions' WHEN r >= 4 AND f >= 3 THEN 'Loyal' WHEN r >= 4 AND f <= 2 THEN 'New Customers' WHEN r = 3 AND f >= 3 THEN 'Need Attention' WHEN r <= 2 AND f >= 4 THEN 'At Risk' WHEN r <= 2 AND f <= 2 THEN 'Hibernating' ELSE 'Other' END AS segment FROM rfm;

RFM → Marketing Actions

СегментEmailPushAd AudienceOffer
ChampionsVIP newsletterEarly accessExclude from acquisitionReferral program
At RiskWin-back seriesRe-engagementRetargetingPersonal discount 20%
New CustomersWelcome seriesOnboarding tipsLookalike (seed)Second purchase incentive
HibernatingLast-chance email-Suppress (save budget)Deep discount or remove

🔧 Практика

  1. Запросите данные из CRM/базы заказов (customer_id, order_date, revenue)
  2. Рассчитайте RFM scores (SQL или Google Sheets)
  3. Создайте 5 сегментов
  4. Для каждого: определите email sequence + ad audience + offer

Связанные заметки