Все материалы
Продуктовая аналитикапрактикумсредний

NTILE в SQL: как разбить пользователей на группы по активности

Практика NTILE в SQL для сегментации пользователей по выручке, активности и latency без ручных порогов и спорных границ.

КПКейсПрактика29 августа 2026 г.9 мин

Ручные границы вроде «больше пяти действий — активный» быстро устаревают. NTILE помогает построить относительные группы, но не превращает статистическое ранжирование в бизнес-сегмент автоматически. Как разделить пользователей на равные по размеру группы, если заранее неизвестны хорошие пороги?

Когда пригодится подход

Как разделить пользователей на равные по размеру группы, если заранее неизвестны хорошие пороги?

Ручные границы вроде «больше пяти действий — активный» быстро устаревают. NTILE помогает построить относительные группы, но не превращает статистическое ранжирование в бизнес-сегмент автоматически.

Квинтили по недельной активности позволяют сравнить top 20% с остальными. Но одинаковый размер групп не означает одинаковую ценность: один пользователь может иметь много технических событий.

Договорённости до расчёта

Одна строка для NTILE должна быть user × period. Нельзя ранжировать сырые события и потом называть корзины сегментами пользователей.

Сначала агрегируй факты до user_id и периода, затем добавь NTILE поверх явной сортировки. Для стабильного результата укажи tie-breaker и реши, как обрабатывать NULL и нулевые значения.

Если показатель строится по событиям, отдельно проверь повторную отправку, идентичность пользователя и часовой пояс. Если данные приходят из бизнес-системы, сопоставь техническое поле с тем, как команда реально принимает решение.

Проверяемый результат
вопрос → объект → период → расчёт → проверка → решение

Любой пропущенный шаг может изменить смысл итогового числа.

Пример с данными

Квинтили по недельной активности позволяют сравнить top 20% с остальными. Но одинаковый размер групп не означает одинаковую ценность: один пользователь может иметь много технических событий.

Не копируй пример в рабочий отчёт вслепую. Сначала замени названия таблиц и полей, проверь кардинальность связей и запиши, какие строки должны попасть в результат. Хорошая адаптация сохраняет логику, но делает допущения видимыми.

Относительный и абсолютный сегмент
ПодходПорогПлюсРиск
NTILE20% группысопоставимый размерграница меняется
Rule>= 5 действийпонятно бизнесунеравные группы
Hybridквинтиль + minimumбаланссложнее объяснить
sqlПрисвоить пользователям квинтиль активности
WITH weekly AS (\n  SELECT user_id, COUNT(*) AS actions\n  FROM events\n  WHERE event_name = 'core_action' AND event_at >= DATE '2026-07-01' AND event_at < DATE '2026-08-01'\n  GROUP BY user_id\n)\nSELECT user_id, actions, NTILE(5) OVER (ORDER BY actions, user_id) AS activity_quintile\nFROM weekly;

Ограничения метода

Нестабильный ORDER BY, неполные периоды и пересчёт групп после каждого нового пользователя затрудняют сравнение. Для бизнес-правил часто лучше фиксированный порог.

Отдельно протестируй пустой результат, NULL, дубль, граничную дату и объект без связанной записи. Эти случаи не являются редкими исключениями: именно они чаще всего превращают рабочий показатель в красивую, но неверную цифру.

  • Не смешивай зрелые и незрелые периоды без отдельной подписи.
  • Не заменяй проверку качества тем, что запрос просто выполнился.
  • Не делай причинный вывод из одного разреза.

Сравнение на графике

График здесь нужен не для украшения статьи. Он помогает увидеть форму сигнала: тренд, разрыв между сегментами, хвост распределения или этап, на котором теряется объект. Сначала прочитай оси и единицы, затем сравни с таблицей и только после этого формулируй вывод.

На визуализации «Распределение пользователей по квинтилям» сравнивай не только максимальное значение. Проверь, одинаковы ли базы, не скрыта ли неполная дата и не меняется ли знаменатель от категории к категории.

Распределение пользователей по квинтилям

Условный пример: размер групп похож, но значение метрики растёт неравномерно.

Доля пользователей, %

Самостоятельная проверка

Раздели пользователей на квинтили по числу core_action и сравни в группах retention и revenue. Посмотри, совпадают ли активность и ценность.

После упражнения напиши вывод в двух версиях. Первая — техническая: какие строки и условия дали результат. Вторая — для команды: что изменилось, насколько это надёжно и какое действие стоит проверить. Если эти версии противоречат друг другу, вернись к определению показателя.

  • Собери контрольный пример из пяти-десяти строк.
  • Сверь итог с независимым способом расчёта.
  • Проверь хотя бы один крайний случай.
  • Зафиксируй дату, версию схемы и ограничение.

Следующий шаг

Используй NTILE для исследования и относительного сравнения. Для коммуникации с CRM или продуктом закрепляй понятные правила и проверяй, не дрейфуют ли границы.

Сильный аналитический материал не обещает абсолютной уверенности. Он показывает, как получить число, где оно может ошибиться и какое решение можно принять уже сейчас. Такой формат хорошо переносится в дашборд, SQL-тренажёр, собеседование и рабочее обсуждение с командой.

Продолжить чтение
Вся библиотека