Как посчитать Engagement Rate в SQL
EXPLAIN вашего отчёта видно, что выполняется Sort по created_at на очень большом наборе строк. Какое действие чаще всего помогает уменьшить работу сортировки?Содержание:
Зачем Engagement Rate
DAU/MAU показывают, кто пришёл. Engagement Rate показывает, насколько активно люди пользуются продуктом. Низкий ER — это «зомби-пользователи»: заходят, ничего не делают и скоро отвалятся.
Формула
Engagement Rate (product) = engaged_users / total_users × 100%
Engagement Rate (social) = (likes + comments + shares) / impressions × 100%«Engaged» — тот, кто выполнил ключевые действия (создал пост, отправил сообщение, загрузил файл).
Базовый расчёт
Product engagement (binary):
WITH user_events AS (
SELECT
user_id,
BOOL_OR(event_type IN ('post_created', 'message_sent', 'file_uploaded')) AS engaged
FROM events
WHERE event_date >= CURRENT_DATE - INTERVAL '30 days'
GROUP BY user_id
)
SELECT
COUNT(*) AS total_users,
COUNT(*) FILTER (WHERE engaged) AS engaged_users,
COUNT(*) FILTER (WHERE engaged)::NUMERIC * 100 / NULLIF(COUNT(*), 0) AS engagement_rate_pct
FROM user_events;Product Engagement Rate
Гранулярно:
WITH user_engagement AS (
SELECT
user_id,
COUNT(*) FILTER (WHERE event_type = 'session_start') AS sessions,
COUNT(*) FILTER (WHERE event_type = 'post_created') AS posts,
COUNT(*) FILTER (WHERE event_type = 'comment') AS comments,
COUNT(*) FILTER (WHERE event_type = 'LIKE') AS likes
FROM events
WHERE event_date >= CURRENT_DATE - INTERVAL '30 days'
GROUP BY user_id
)
SELECT
AVG(sessions) AS avg_sessions,
AVG(posts + comments + likes) AS avg_actions
FROM user_engagement
WHERE sessions > 0;Social Engagement Rate
Для постов в соцсетях (в духе Instagram):
SELECT
post_id,
impressions,
likes,
comments,
shares,
(likes + comments + shares)::NUMERIC * 100 / NULLIF(impressions, 0) AS engagement_rate_pct
FROM post_stats
WHERE published_at >= CURRENT_DATE - INTERVAL '30 days'
HAVING impressions >= 1000
ORDER BY engagement_rate_pct DESC;Средняя вовлечённость по постам становится ориентиром (benchmark) для будущих публикаций.
Частые ошибки
Ошибка 1. Путать engagement и DAU. DAU — это кто зашёл, а ER — кто реально что-то сделал. Пользователь может открыть приложение и ничего не делать: в DAU он попадёт, а в engaged — нет.
Ошибка 2. Веса действий. Просмотр и комментарий — не одно и то же. Если складывать все действия без весов, дешёвые действия получат слишком большой вклад и картина исказится.
Ошибка 3. Смешивать social и product engagement. У них разные определения: в соцсетях вовлечённость считают относительно показов, а в продукте — относительно активных пользователей. Сравнивать эти два ER напрямую нельзя.
Ошибка 4. Накрутка ботами. Боты искусственно раздувают лайки и просмотры, поэтому данные нужно чистить перед расчётом.
Ошибка 5. Несколько устройств. Если один пользователь заходит с двух устройств и вы не склеиваете его в один ID, вовлечённость задвоится и ER окажется завышенным.
Связанные темы
FAQ
Какой ER считается нормальным?
В соцсетях (например, Instagram) средний ER — 1–3%, а 5% и выше уже отличный результат. В B2C-приложениях нормой считают 30–50% вовлечённых от DAU, а в SaaS — 60–80%. Ориентируйтесь на бенчмарк своего типа продукта, а не на чужой.
Engagement vs Engagement Rate?
Engagement — это общее количество действий пользователей. Engagement Rate — это доля активных пользователей в процентах. Первое показывает объём, второе — насколько широко продукт вовлекает аудиторию.
ER падает — что делать?
Разложите ER по когортам и сегментам, прежде чем бить тревогу. Часто у свежих когорт вовлечённость ниже просто потому, что они ещё осваивают продукт, а не потому, что он стал хуже.
Bot-protected engagement?
Фильтруйте трафик по IP, user-agent и поведенческим паттернам, чтобы отсечь ботов. Дополнительно помогают капча и анти-бот-защита на ключевых действиях.
ER vs Stickiness?
Stickiness (DAU/MAU) показывает частоту возвращения, а ER — глубину действий внутри продукта. Метрики связаны, но отвечают на разные вопросы: как часто заходят и что при этом делают.