new-lvl.pro · Статьи · Кейс · Метрики
Кейс // 12 мин чтения

MAU +22%,
revenue плоский —
кто эти новые юзеры

Март 2024. Маркетплейс-приложение. MAU растёт как никогда, продакт доволен, инвесторы довольны. ARPU за тот же месяц падает на 18% — и никто не замечает, пока не смотришь в данные правильным вопросом.

Март 2024: дашборд радует, данные — нет

На еженедельном стендапе продуктовая команда смотрит в дашборд и видит зелёный. MAU — главная метрика роста этого квартала — пробила плановые 210K и идёт дальше. Вся команда в хорошем настроении.

Проблема всплывает неделю спустя, когда финансы присылают отчёт: revenue за март практически не вырос, хотя MAU прибавил 22%. Аналитик видит это первым. И если не разобраться — в следующем месяце будет хуже.

MAU, март 2024
+21.6%
180K → 218K активных пользователей. Новый рекорд.
Revenue, март 2024
−1.2%
4.2M → 4.15M ₽. Фактически плоско при росте базы.
ARPU, март 2024
−18.5%
23.3 → 19.0 ₽/пользователь. Вот где скрыта проблема.

ARPU — это revenue / MAU. Если MAU растёт быстрее revenue — ARPU падает. Звучит очевидно, но на большинстве дашбордов ARPU стоит где-то в углу, а MAU — в центре. Первый вопрос аналитика в такой ситуации: кто именно пришёл в этом месяце?

Шаг 01
Разбить рост: новые vs возвращающиеся

Начинаем с декомпозиции MAU по типу пользователей. Нас интересует: кто из 218K — новые (первое посещение за месяц), кто — возвращающиеся (был раньше).

segment mau by user type + arpu
WITH first_visits AS (
  SELECT
    user_id,
    DATE_TRUNC('month', MIN(event_at)) AS first_month
  FROM events
  GROUP BY user_id
),
march_users AS (
  SELECT DISTINCT
    e.user_id,
    CASE
      WHEN fv.first_month = '2024-03-01' THEN 'new'
      ELSE 'returning'
    END AS user_type
  FROM events e
  JOIN first_visits fv USING (user_id)
  WHERE DATE_TRUNC('month', e.event_at) = '2024-03-01'
),
revenue_march AS (
  SELECT user_id, SUM(amount) AS rev
  FROM orders
  WHERE DATE_TRUNC('month', created_at) = '2024-03-01'
  GROUP BY user_id
)
SELECT
  mu.user_type,
  COUNT(DISTINCT mu.user_id)             AS users,
  COALESCE(SUM(rm.rev), 0)               AS total_rev,
  COALESCE(SUM(rm.rev), 0)
    / COUNT(DISTINCT mu.user_id)::float  AS arpu
FROM march_users mu
LEFT JOIN revenue_march rm USING (user_id)
GROUP BY mu.user_type
ORDER BY users DESC;
Результат: возвращающихся 136K (норма), новых — 82K. В феврале и январе новых было в среднем 45K. Аномальный прирост новых: +37K. Откуда они?
Шаг 02
Retention 7-day мартовской когорты

Если новые пользователи «нормальные» — они должны возвращаться с похожим retention, что и прошлые когорты. Смотрим retention 7-day: доля зарегистрировавшихся в марте, которые вернулись хотя бы раз в первую неделю.

7-day retention: march cohort vs organic baseline
WITH cohort_march AS (
  SELECT user_id, MIN(event_at) AS first_at
  FROM events
  WHERE DATE_TRUNC('month', event_at) = '2024-03-01'
  GROUP BY user_id
  HAVING MIN(event_at) >= '2024-03-01'
    AND MIN(event_at) < '2024-03-25'   -- чтобы было окно 7 дней
),
returned AS (
  SELECT DISTINCT c.user_id
  FROM cohort_march c
  JOIN events e USING (user_id)
  WHERE e.event_at BETWEEN c.first_at + INTERVAL '1 day'
                         AND c.first_at + INTERVAL '7 days'
)
SELECT
  COUNT(DISTINCT c.user_id)   AS cohort_size,
  COUNT(DISTINCT r.user_id)   AS returned_7d,
  ROUND(
    COUNT(DISTINCT r.user_id)::numeric
    / COUNT(DISTINCT c.user_id) * 100, 1
  )                             AS retention_7d_pct
FROM cohort_march c
LEFT JOIN returned r USING (user_id);
Retention 7-day мартовской когорты: 8%. У органики (новые из января–февраля): 28%. В 3.5 раза хуже. Эти люди приходят — и почти не возвращаются.
Шаг 03
ARPU первых 30 дней по типу привлечения

Низкий retention — плохо. Но может, они хотя бы покупают активно в первый визит? Смотрим ARPU за первые 30 дней после регистрации — отдельно для «аномальных» мартовских новых и органических новых.

ltv-30d для новых пользователей марта
WITH new_march AS (
  SELECT user_id, MIN(event_at) AS registered_at
  FROM events
  GROUP BY user_id
  HAVING DATE_TRUNC('month', MIN(event_at)) = '2024-03-01'
),
revenue_30d AS (
  SELECT
    nm.user_id,
    COALESCE(SUM(o.amount), 0) AS rev_30d
  FROM new_march nm
  LEFT JOIN orders o ON o.user_id = nm.user_id
    AND o.created_at BETWEEN nm.registered_at
                           AND nm.registered_at + INTERVAL '30 days'
  GROUP BY nm.user_id
),
-- Сегментируем: paid_channel — из платного канала, остальные — органика
segmented AS (
  SELECT
    u.acquisition_channel,
    CASE
      WHEN u.acquisition_channel = 'cashback_partner'
      THEN 'cashback'
      ELSE 'organic'
    END AS segment,
    r.rev_30d
  FROM revenue_30d r
  JOIN users u USING (user_id)
)
SELECT
  segment,
  COUNT(*)              AS users,
  ROUND(AVG(rev_30d), 1) AS arpu_30d,
  ROUND(SUM(rev_30d), 0) AS total_rev_30d
FROM segmented
GROUP BY segment
ORDER BY arpu_30d DESC;
ARPU за 30 дней: органика — 18.9 ₽, cashback-канал — 3.8 ₽. В 5 раз меньше. Они приходят, берут промокод — и уходят.
Шаг 04
Разбивка по каналам привлечения

Теперь финальный разрез: откуда пришли эти 37K аномальных новых? Смотрим по acquisition_channel — тегу, который проставляется при регистрации из UTM или SDK атрибуции.

acquisition channel breakdown — march new users
SELECT
  u.acquisition_channel,
  COUNT(DISTINCT u.user_id)                AS new_users,
  ROUND(
    COUNT(DISTINCT u.user_id)::numeric
    / SUM(COUNT(DISTINCT u.user_id)) OVER () * 100,
  1)                                         AS share_pct,
  ROUND(AVG(r.rev_30d), 1)                  AS arpu_30d,
  ROUND(AVG(ret.ret7d::int) * 100, 1)      AS retention_7d_pct
FROM users u
JOIN (
  SELECT user_id,
         DATE_TRUNC('month', MIN(event_at)) AS first_month
  FROM events GROUP BY user_id
) fm ON fm.user_id = u.user_id
  AND fm.first_month = '2024-03-01'
LEFT JOIN revenue_30d r ON r.user_id = u.user_id
LEFT JOIN retention_flags ret ON ret.user_id = u.user_id
GROUP BY u.acquisition_channel
ORDER BY new_users DESC;
Один канал — cashback_partner — принёс 34K из 37K аномальных пользователей. Доля 41% всех новых за март. Retention 7d: 6%, ARPU 30d: 3.8 ₽. Всё остальное — норма.
// Инсайт

Cashback-канал привёл «скидочных охотников»

Партнёр предлагал кешбэк за регистрацию в приложении. Люди регистрировались, активировали промо — и уходили. Продукт их не интересовал. Это не пользователи — это транзакции за кешбэк. Мы заплатили за 34K регистраций, которые дали 34K × 3.8 = 129K ₽ revenue, но при стоимости привлечения в канале около 150–200 ₽/юзер это убыточная когорта в моменте и ноль ценности в долгую. Revenue не вырос — потому что эти люди ничего толком не купили. MAU вырос — потому что они зарегистрировались. ARPU упал — потому что знаменатель вырос, а числитель нет.

Органика vs cashback: данные рядом

Метрика Органика (новые марта) Cashback-канал Разница
Новых пользователей 48 000 34 000
Retention 7-day 28% 6% −78%
ARPU 30 дней 18.9 ₽ 3.8 ₽ −80%
Revenue 30 дней 907 000 ₽ 129 000 ₽
Доля MAU марта 22% 41% Перекосила структуру

Если бы в марте не было cashback-канала — MAU составил бы около 184K (не рекорд, норма), revenue и ARPU были бы в плюсе. Вся красивая картинка с ростом MAU — артефакт одного неудачного канала.

Прорешать задачи на когорты и сегментацию
На sql.new-lvl.pro — маркетплейс-датасет 2023–2024 с реальными паттернами retention decay и канальной разбивкой. Задачи по когортам, ARPU, LTV — с автопроверкой.
Открыть тренажёр

Что изменилось после остановки канала

Решение было принято быстро: cashback-партнёрство приостановили. Ниже — что произошло за 6 недель.

Март 2024 — пик
MAU 218K, ARPU 19.0 ₽
Рекорд по MAU. Revenue плоский. ARPU на дне. Команда ещё не знает, что происходит.
Начало апреля — расследование
Инсайт найден, канал остановлен
Аналитик находит аномалию за 2 дня. Cashback-партнёрство приостанавливают. Продакт фиксирует: цель — не MAU, а качественный MAU.
Середина мая — 6 недель спустя
MAU 191K, Revenue 4.3M, ARPU 22.5 ₽
MAU упал на 12% от пика — ушли «временные» пользователи. Revenue вырос на 3.4%. ARPU восстановился до 22.5 ₽ — близко к досеансным значениям. Бизнес стал здоровее при меньшей базе.

3 вывода из этого кейса

// 01
MAU без retention — ванильная метрика
Активный пользователь — это тот, кто возвращается. Регистрация под акцию — это не пользователь, это транзакция. Всегда смотри retention 7-day и 30-day рядом с MAU.
// 02
ARPU — сигнальная метрика
Падение ARPU при росте MAU — почти всегда признак изменения структуры пользователей, а не падения монетизации. Первый вопрос: кто именно стал новым?
// 03
Декомпозиция по каналу — обязательна
Агрегированные когорты скрывают проблему. Всегда разрезай retention и ARPU по каналу привлечения — особенно когда появляется новый источник трафика.
// 04
«Меньше, но лучше» — это нормально
После остановки канала MAU упал. Это психологически тяжело — рекорд позади. Но revenue и ARPU восстановились. Иногда правильное решение — сделать базу меньше и чище.

Частые вопросы

Как быстро заметить проблему до того, как она стала критической?
Ставь alert на ARPU, а не только на MAU. Если за неделю ARPU упал больше чем на 5% при росте MAU — это сигнал. Второй уровень: retention 7-day новой когорты — если он на 30%+ хуже предыдущей когорты, смотреть в каналы немедленно. Это несложно автоматизировать в дашборде.
Разве cashback-каналы всегда плохие? Может, они помогают на старте?
Нет, не всегда. Cashback-партнёры могут работать, если: (1) продукт создаёт привычку быстро — например, еда или транспорт, где первый заказ даёт опыт; (2) средний чек высокий, и даже один заказ окупает привлечение; (3) промо ограничено — не «регистрация», а «первая покупка». В кейсе выше канал давал регистрацию без покупки — это худший сценарий.
Что такое «качественный MAU» и как его считать?
Качественный MAU — это пользователи, которые делают ключевое целевое действие хотя бы раз в месяц. Для маркетплейса — купил или продал. Для SaaS — использовал core-функцию. Для медиа — дочитал хотя бы один материал. Считается как COUNT DISTINCT user_id WHERE target_action_count > 0 AND month = current_month. Это «активный по смыслу», а не «открыл приложение».
Как убедить продакта остановить канал, который даёт MAU-рекорды?
Показывать деньги. Посчитай: если канал приводит 34K по 150 ₽ = 5.1M ₽ расходов, а revenue от них за 30 дней = 129K ₽ — это убыток в 39 раз. Добавь CAC payback period: при ARPU 3.8 ₽/мес окупаемость 150 ₽ = 39 месяцев. Это не инвестиция в рост — это сжигание бюджета. Числа говорят убедительнее слов «этот канал плохой».
Нужно ли сразу убирать канал или сначала тестировать что-то другое?
Зависит от суммы расходов. Если канал дорогой — сначала стоп, потом разбор. Если дешёвый — можно параллельно попробовать изменить условие: например, cashback не за регистрацию, а за первый заказ. Иногда структура промо решает больше, чем сам канал. Но в кейсе выше решение было однозначным — слишком большой перекос в структуре MAU.

Связанные материалы

Главное из этого кейса

MAU +22% — это не рост, если ARPU при этом упал на 18%. Агрегированная метрика скрывает структурный сдвиг. Инструмент, который его вскрывает — декомпозиция: новые vs возвращающиеся, retention по когортам, ARPU по каналу привлечения. Всё это — три SQL-запроса и два дня работы.

Ключевой урок не технический: правильный вопрос важнее любого инструмента. «Почему MAU вырос» — это не вопрос аналитика. «Кто именно вырос и чем они отличаются от остальных» — вот с чего начинается расследование.

P.S. Retention 7-day новой когорты — метрика, которую стоит смотреть каждую неделю. Если она резко падает без изменений в продукте — ищи в каналах. Это занимает 15 минут на дашборде и сохраняет месяц разбирательств потом.

АТ
Андрей Тарасенко
// Продуктовый аналитик · Авито · Ментор

Паттерн «MAU растёт — revenue не растёт» встречается чаще, чем кажется. Почти всегда за ним стоит либо смена структуры пользователей, либо изменение монетизации. Первое раскрывается когортным анализом, второе — декомпозицией ARPU. Оба инструмента занимают час — если умеешь их применять.

Написать в Telegram
// ХОЧЕШЬ ЕЩЁ КЕЙСОВ?

Практикуй кейсы на тренажёре

В SQL-тренажёре — задачи по мотивам реальных собесов: воронки, когорты, retention, revenue. Пишешь запрос — получаешь проверку.

▶ Открыть SQL-тренажёр ★ Premium · 80 задач
Все материалы: База знаний · Telegram