DAU/MAU stickiness: как мерить вовлечённость пользователей
Карьерник — Duolingo для аналитиков: 10 минут в день тренируй SQL, Python, A/B, статистику, метрики и ещё 3 темы собеса. 1500+ вопросов в Telegram-боте. Бесплатно.
Содержание:
Что такое stickiness
Stickiness — отношение DAU к MAU. По смыслу: какая доля месячных активных пользователей заходит в продукт в среднестатистический день. Чем выше — тем чаще среднестатистический активный юзер возвращается.
Формула простая: stickiness = DAU / MAU. Если DAU = 100k и MAU = 500k, то stickiness = 0.20 или 20%. Это значит, что в день в среднем заходит каждый пятый из месячных активных.
Зачем мерить:
- DAU и MAU поодиночке не показывают вовлечённость, только размер аудитории.
- Stickiness — простая и понятная метрика, которая отражает "как часто возвращаются".
- Хороший сигнал здоровья продукта: размер растёт за счёт новых юзеров или старые тоже остаются?
Метрика популяризовалась Facebook в начале 2010-х. С тех пор стала индустриальным стандартом для продуктов с ежедневным использованием.
Какие значения считать нормальными
Никаких "правильных" значений stickiness не существует — зависит от продукта. Но есть ориентиры по категориям (по открытым источникам и публичным выступлениям, для конкретного продукта могут отличаться).
- Социальные сети, мессенджеры: 0.5–0.7. Юзеры заходят почти каждый день.
- Игры и медиа-стриминги: 0.2–0.4.
- E-commerce, банковские приложения: 0.1–0.2.
- Профессиональные B2B-сервисы: 0.05–0.15. Заходят несколько раз в месяц.
Это ориентиры, не таргеты. Гораздо важнее тренд: stickiness 0.15 и растёт — лучше, чем 0.25 и падает.
Если stickiness ниже 0.05 — это либо продукт с очень редким использованием (декларация раз в год), либо MAU перенасыщен мусором (зомби-юзеры).
Как считать stickiness в SQL
Если есть таблицы DAU и MAU по дням — считаем тривиально:
SELECT
d.day,
d.dau::NUMERIC / NULLIF(m.mau_28d, 0) AS stickiness
FROM dau_daily d
JOIN mau_28d_daily m USING (day)
ORDER BY d.day;Если считаем с нуля по таблице событий за последние 90 дней:
WITH days AS (
SELECT generate_series(
CURRENT_DATE - INTERVAL '90 day',
CURRENT_DATE - INTERVAL '1 day',
INTERVAL '1 day'
)::DATE AS day
),
metrics AS (
SELECT
d.day,
(SELECT COUNT(DISTINCT e.user_id)
FROM events e
WHERE e.event_name = 'question_answered'
AND e.event_time >= d.day
AND e.event_time < d.day + INTERVAL '1 day') AS dau,
(SELECT COUNT(DISTINCT e.user_id)
FROM events e
WHERE e.event_name = 'question_answered'
AND e.event_time >= d.day - INTERVAL '27 day'
AND e.event_time < d.day + INTERVAL '1 day') AS mau_28d
FROM days d
)
SELECT day, dau, mau_28d, dau::NUMERIC / NULLIF(mau_28d, 0) AS stickiness
FROM metrics
ORDER BY day;Обратите внимание на NULLIF(mau_28d, 0) — без него получите division by zero на пустых днях. И на ::NUMERIC — без явного каста integer-деление округлит результат в 0.
Как читать график stickiness
Несколько практик:
- Берите rolling 7- или 28-day среднее. Дневной stickiness шумит из-за дней недели.
- Сравнивайте день недели к дню недели. Будний к будню, выходной к выходному.
- Смотрите на тренд за квартал. Длительные тренды важнее недельных скачков.
- Накладывайте релизы и кампании. Видите ступеньку — вспомните, что выкатили.
Хороший сигнал — stickiness стабильно растёт после релиза фичи, которая должна была усилить ежедневное использование. Если фича вышла, а stickiness не изменился — гипотеза не подтвердилась.
Когда stickiness врёт
Несколько случаев, когда метрика может сбить с толку.
- Сезонный продукт. Декабрьская stickiness e-commerce будет выше летней — это сезонность, не рост вовлечённости.
- Разные определения активности. Для DAU считаем "ответил на вопрос", для MAU — "открыл приложение". Stickiness получится низкой и бессмысленной.
- Перекос когорт. Stickiness растёт, потому что MAU чистится от мёртвых, а не потому что DAU реально вырос.
- Малые числа. На малых аудиториях stickiness шумит так, что тренда не видно.
- Изменился канал привлечения. Реклама с высокой кликабельностью, но плохим retention — MAU вырос, DAU нет, stickiness упал.
Поэтому stickiness не существует в вакууме: смотрят рядом с retention, активациями и cohort-анализом.
Частые ошибки
- Деление integer / integer. Получите 0 вместо 0.2. Кастуйте в NUMERIC.
- Без
NULLIF. Падает на пустых днях с division by zero. - Считают stickiness одной цифрой за месяц. Без графика тренд не виден, и решения слабые.
- Сравнивают между продуктами. Stickiness B2B и соцсети — разные планеты, не сопоставимы.
- Игнорируют сезонность. Падение stickiness в январе не повод объявлять кризис.
- Меняют определения активности и не обновляют MAU. Метрика рассинхронится.
Связанные темы
- DAU простыми словами
- MAU: как считать и интерпретировать
- Cohort analysis простыми словами
- Что такое product analytics
FAQ
Что лучше — stickiness или retention?
Это разные метрики. Stickiness — про среднюю частоту визитов. Retention — про возврат когорт через N дней. Считают вместе.
Какой stickiness "хороший"?
Зависит от продукта. Соцсеть на 0.6 живёт хорошо, B2B-сервис на 0.1 — нормально. Смотрите на тренд.
Можно ли считать недельный stickiness?
Да: WAU/MAU. Полезно для продуктов, которые не предполагают ежедневного использования.
Почему мой stickiness стабильно 0?
Скорее всего, integer division: dau / mau без NUMERIC. Кастуйте.
Как растить stickiness?
Через triggers (push, реминды), привычки (стрики, серии), и core-flow, который имеет смысл повторять каждый день.
Можно ли использовать stickiness как North Star?
Не рекомендую. North Star обычно outcome-метрика (заказы, выручка). Stickiness — engagement-метрика, она поддерживающая.
Хочешь прокачать продуктовые метрики? Открой тренажёр Карьерника — задачи на DAU, MAU, retention и SQL.