978просмотров
56.7%от подписчиков
29 января 2026 г.
Score: 1.1K
RFM-анализ на SQL Один из довольно часто встречающихся на практике кейсов - сегментация пользователей (или RFM-анализ). Цель анализа - разделить клиентов на группы (сегменты), чтобы понять, кто из них самый ценный, кто требует внимания, а кого, возможно, уже не вернуть. Осуществляется на основе: ▶️Recency — когда последний раз покупал? ▶️Frequency — сколько раз покупал? ▶️Monetary — сколько потратил? Базовый запрос выглядит так: WITH clients as ( SELECT customer_id, CURRENT_DATE - MAX(order_date) AS recency_days, COUNT(order_id) AS frequency, SUM(price) AS monetary_value FROM orders GROUP BY customer_id) Из таблицы заказов считается разница между сегодняшним числом (или отчетной датой) и датой последнего заказа, а также считается число заказов и их сумма в разрезе каждого клиента. Далее подключается скоринговая модель. Основной смысл таков: разбить клиентов на 5 квантилей и на основании этих 3 показателей присвоить им рейтинги. Для Recency ценятся наиболее свежие даты, а для Frequency и Monetary - чем больше, тем лучше. Используем оконную функцию NTILE(5), которая делит клиентов на 5 равных частей: SELECT customer_id, NTILE(5) OVER (ORDER BY recency_days) AS r_score, NTILE(5) OVER (ORDER BY frequency DESC) AS f_score, NTILE(5) OVER (ORDER BY monetary_value DESC) AS m_score FROM clients На выходе получится сгруппированная ранее таблица клиентов, к которой добавится 3 столбца, в каждом из которых будет число от 1 до 5 - это будет рейтинг клиента. С этими рейтингами можно поступать по-разному. Можно всё агрегировать в единый итоговый 15-балльный рейтинг, а можно оставить как есть и смотреть рейтинги в разрезе 3 показателей - тут зависит от целей.
978
просмотров
1688
символов
Нет
эмодзи
Нет
медиа

Другие посты @business_stats

Все посты канала →
RFM-анализ на SQL Один из довольно часто встречающихся на пр — @business_stats | PostSniper