Как посчитать Engagement Rate в SQL

Проверь себя · 1/3разбор после ответа
В 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;
Закрепи формулу engagement rate в Карьернике
Запомнить надолго — 5 коротких сессий с задачами на эту тему. Бесплатно
Тренировать engagement rate в Telegram

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 — глубину действий внутри продукта. Метрики связаны, но отвечают на разные вопросы: как часто заходят и что при этом делают.