Короткий ответ (BLUF): метрика активации — это одно измеримое действие в первые дни жизни пользователя, которое сильнее всего коррелирует с тем, что он останется с продуктом. Чтобы её найти: разбейте юзеров на две когорты (удержались / отвалились), сравните их раннее поведение и найдите действие, которое почти всегда есть у первых и почти всегда отсутствует у вторых. Классические примеры — «7 друзей за 10 дней» у крупной соцсети и «2 транзакции за 30 дней» у платёжных сервисов. Но найденная корреляция — только гипотеза: перед тем как строить продукт вокруг неё, проверьте причинность A/B-тестом. Ниже — SQL для поиска, формула активации и как встроить её в воронку.
Что такое активация и Aha-moment
Пользователь регистрируется. Дальше два сценария: либо он понял, зачем ему продукт, и возвращается, либо закрыл вкладку и не вспомнил. Aha-moment — это тот самый момент, когда до человека доходит ценность. Не «я зарегистрировался», а «я получил то, ради чего пришёл».
Для аналитика важно, что Aha-moment — это не абстракция про эмоции, а конкретное поведение в логах. У командный мессенджер (беру как обезличенный пример механики) это было «команда обменялась 2000 сообщениями», у облачного хранилища — «загрузил хотя бы один файл на одно устройство и увидел его на другом». Задача аналитика — превратить размытое «понял ценность» в измеримое событие с порогом и окном: *действие X* повторить *N раз* за *T дней*.
Метрика активации — доля новых пользователей, которые дошли до этого события. Это верхнеуровневый KPI, который вы кладёте в дашборд и отслеживаете по когортам. Aha-moment — это гипотеза о том, *какое именно* действие взять за основу активации.
Разница в терминах, которую путают на собеседованиях (её любят спрашивать — см. типовые вопросы в разделе /interviews):
- Регистрация — юзер завёл аккаунт. Ничего не говорит о ценности.
- Активация — юзер совершил ключевое действие, предсказывающее удержание.
- Retention — юзер вернулся через N дней.
Активация стоит между регистрацией и retention и работает как ранний предиктор: по ней вы понимаете судьбу когорты, не дожидаясь 30 дней.
Почему активация — ключ к retention
Retention измеряется с лагом. Чтобы узнать D30-retention когорты, надо ждать 30 дней. Это неудобно: вы залили новый онбординг, а результат увидите через месяц. Активация же измеряется в первые дни и сильно коррелирует с будущим удержанием — значит, служит опережающим индикатором (leading metric).
Логика простая. Если пользователи, которые активировались, удерживаются на D30 в 45%, а неактивированные — в 6%, то поднимая долю активированных, вы почти механически поднимаете retention всей воронки. Формула вклада:
$$\text{Retention}_{D30} = p_{act} \cdot r_{act} + (1 - p_{act}) \cdot r_{noact}$$
где $p_{act}$ — доля активированных, $r_{act}$ и $r_{noact}$ — их retention. Подставим: $p_{act}=0{,}30$, $r_{act}=0{,}45$, $r_{noact}=0{,}06$:
$$0{,}30 \cdot 0{,}45 + 0{,}70 \cdot 0{,}06 = 0{,}135 + 0{,}042 = 0{,}177$$
Итого D30 = 17,7%. Теперь поднимем активацию до 40% (те же ставки удержания):
$$0{,}40 \cdot 0{,}45 + 0{,}60 \cdot 0{,}06 = 0{,}18 + 0{,}036 = 0{,}216$$
Retention вырос с 17,7% до 21,6% — плюс 4 процентных пункта только за счёт сдвига активации на 10 п.п. Вот почему продуктовые команды дерутся именно за активацию: рычаг короткий, эффект на удержание — большой. Как retention считать по когортам SQL-ом, разбирали в блоге про когортный анализ; здесь фокус на том, что стоит *до* retention.
Как найти Aha-moment по данным
Ключевая идея: сравнить раннее поведение удержавшихся и отвалившихся когорт и найти действие, которое их различает сильнее всего. Пошагово.
Шаг 1. Определите «удержался». Например, был активен на 4-й неделе после регистрации. Это ваш таргет — бинарная метка retained = 1/0.
Шаг 2. Соберите кандидаты в Aha-действия. Мозговым штурмом с продактом выпишите 10–20 событий первой недели: добавил друга, создал проект, загрузил файл, прошёл урок, сделал заказ, настроил интеграцию. Для каждого — счётчик за первые 7 дней.
Шаг 3. Постройте таблицу «действие → retention». Для каждого кандидата и каждого порога N считаете: какой retention у тех, кто сделал действие ≥ N раз, против тех, кто сделал < N раз. Ищете максимальный разрыв (lift).
Шаг 4. Найдите точку перегиба (порог N). Часто retention растёт с числом действий не линейно, а с изломом: после определённого N кривая выходит на плато. Этот излом и есть кандидат в порог активации. У крупная соцсеть так родилось «7 друзей за 10 дней» — на 7 друзьях кривая удержания резко выпрямлялась.
Важно: вы ищете не просто «действие, которое делают удержавшиеся», а действие с сильной дискриминирующей способностью — большим разрывом retention между сделавшими и не сделавшими, и при этом достаточно массовое (если действие делают 2% юзеров, оно не годится в активацию, даже если разрыв огромный).
SQL для поиска: когорты и корреляция действия с возвратом
Разберём на модельной схеме. Таблицы:
users(user_id, signup_date)events(user_id, event_name, event_ts)— все действия- retention определим как активность на 4-й неделе.
Сначала считаем для каждого юзера число ключевых действий в первые 7 дней и флаг retained. Возьмём кандидат «добавил друга» (add_friend):
WITH first_week AS (
SELECT
u.user_id,
u.signup_date,
COUNT(*) FILTER (
WHERE e.event_name = 'add_friend'
AND e.event_ts < u.signup_date + INTERVAL '7 days'
) AS friends_7d
FROM users u
LEFT JOIN events e ON e.user_id = u.user_id
GROUP BY u.user_id, u.signup_date
),
retained AS (
SELECT DISTINCT u.user_id
FROM users u
JOIN events e ON e.user_id = u.user_id
WHERE e.event_ts >= u.signup_date + INTERVAL '21 days'
AND e.event_ts < u.signup_date + INTERVAL '28 days'
)
SELECT
fw.friends_7d,
COUNT(*) AS users,
COUNT(r.user_id) AS retained_users,
ROUND(100.0 * COUNT(r.user_id) / COUNT(*), 1) AS retention_pct
FROM first_week fw
LEFT JOIN retained r ON r.user_id = fw.user_id
GROUP BY fw.friends_7d
ORDER BY fw.friends_7d;
Результат — таблица «сколько друзей за неделю → какой retention»:
| friends_7d | users | retention_pct |
|---|---|---|
| 0 | 4200 | 4,1 |
| 1 | 1800 | 9,8 |
| 2 | 1100 | 18,2 |
| 3 | 720 | 27,5 |
| 4 | 510 | 34,1 |
| 5 | 380 | 39,7 |
| 6 | 260 | 43,0 |
| 7 | 190 | 51,2 |
| 8+ | 340 | 53,8 |
Виден излом: до 4 друзей retention растёт круто, дальше замедляется, и на 7 выходит плато около 51–54%. Порог = 7, окно = 10 дней (в реальности порог и окно подбирают вместе — можно расширить окно до 10 дней и пересчитать).
Теперь оцените силу связи для порога. Сравним retention «сделал ≥ 7» против «< 7» и посчитаем lift:
WITH scored AS (
SELECT
fw.user_id,
(fw.friends_7d >= 7) AS activated,
(r.user_id IS NOT NULL) AS retained
FROM first_week fw
LEFT JOIN retained r ON r.user_id = fw.user_id
)
SELECT
activated,
COUNT(*) AS users,
ROUND(100.0 * AVG(retained::int), 1) AS retention_pct
FROM scored
GROUP BY activated;
Если получится 50% против 8% — это разрыв в 6 раз, сильный сигнал. Чтобы перебрать не один кандидат, а все сразу, оберните расчёт в цикл по event_name через GROUP BY event_name в CTE и посчитайте для каждого lift. Сравнивать удобно по корреляции точечно-бисериального типа (числовое действие vs бинарный retained) — по сути это то же, что разрыв средних, нормированный на разброс.
Хотите потренировать такие оконные и когортные запросы на живом PostgreSQL — соберите этот разбор в /sql-sandbox: там запросы гоняются в браузере на настоящем движке, а похожие продуктовые задачи с данными лежат в /tasks и /cases.
Как определить метрику активации и поставить её в воронку
Когда Aha-действие и порог найдены, формализуйте метрику активации как одно предложение по шаблону:
*N штук действия X за T дней после регистрации.*
Примеры формулировок:
- Соцсеть: «7 друзей за 10 дней».
- EdTech: «3 урока за первую неделю».
- Маркетплейс: «1 заказ за 3 дня».
- B2B SaaS: «пригласил 1 коллегу и создал 1 проект за 14 дней».
Метрика активации = доля новых юзеров, дошедших до этого условия:
$$\text{Activation Rate} = \frac{\text{юзеры, выполнившие условие за }T\text{ дней}}{\text{все зарегистрированные в когорте}}$$
Дальше — воронка. Активация встаёт отдельным шагом между регистрацией и первым retention:
Регистрация → Первое ключевое действие → АКТИВАЦИЯ (порог N за T дней) → Retention D7 → Retention D30
Считаем воронку по когорте регистраций одного месяца:
WITH cohort AS (
SELECT user_id, signup_date
FROM users
WHERE signup_date >= DATE '2026-06-01'
AND signup_date < DATE '2026-07-01'
),
acted AS ( -- хотя бы одно ключевое действие
SELECT DISTINCT c.user_id
FROM cohort c
JOIN events e ON e.user_id = c.user_id
WHERE e.event_name = 'add_friend'
AND e.event_ts < c.signup_date + INTERVAL '10 days'
),
activated AS ( -- достигли порога 7
SELECT c.user_id
FROM cohort c
JOIN events e ON e.user_id = c.user_id
AND e.event_name = 'add_friend'
AND e.event_ts < c.signup_date + INTERVAL '10 days'
GROUP BY c.user_id
HAVING COUNT(*) >= 7
)
SELECT
(SELECT COUNT(*) FROM cohort) AS registered,
(SELECT COUNT(*) FROM acted) AS did_first_action,
(SELECT COUNT(*) FROM activated) AS activated,
ROUND(100.0 * (SELECT COUNT(*) FROM activated)
/ (SELECT COUNT(*) FROM cohort), 1) AS activation_rate_pct;
Практические советы по воронке:
- Один порог для всей компании. Не давайте маркетингу и продукту считать активацию по-разному — иначе цифры не сойдутся на планёрке.
- Ставьте окно T реалистично. Если медиана до Aha-момента — 5 дней, окно в 24 часа отрежет половину активирующихся. Считайте распределение time-to-activate и берите окно на уровне p75–p90.
- Смотрите на активацию по каналам привлечения. Часто платный трафик активируется хуже органики — это сразу видно, если разбить activation_rate по
utm_source. - Не заморозьте метрику навсегда. Продукт меняется, Aha-момент дрейфует. Пересчитывайте порог раз в полгода.
Готовые формулы retention, activation, DAU/WAU и других продуктовых метрик со связями лежат в /metrics — удобно свериться, когда собираете дашборд.
Отличие корреляции от причинности: проверяем A/B
Здесь начинается главная ловушка, на которой валятся и джуны, и синьоры. Вы нашли, что «юзеры с 7 друзьями удерживаются в 6 раз лучше». Соблазн: «Давайте заставим всех добавить 7 друзей — и retention взлетит». Это ошибка вывода причинности из корреляции.
Проблема в том, что «7 друзей» может быть не *причиной* удержания, а его *симптомом*. Возможные альтернативные объяснения:
- Обратная причинность. Не 7 друзей делают юзера лояльным, а изначально заинтересованные юзеры и друзей добавляют, и остаются. Друзья — следствие мотивации, а не её источник.
- Скрытая переменная (confounder). И друзья, и retention вызваны третьим: юзер пришёл по рекомендации знакомого → у него уже есть контакты в сети → и друзей добавляет легко, и остаётся, потому что тут его круг.
- Selection bias. Чтобы набрать 7 друзей, надо прожить в продукте несколько дней. Значит, в группе «7 друзей» автоматически оказываются те, кто и так не ушёл сразу — вы отобрали выживших.
Как отличить симптом от рычага? Рандомизированный эксперимент. Берёте новых юзеров, случайно делите на две группы. Тестовой группе продукт активно подталкивает к Aha-действию (онбординг с предложением добавить друзей, импорт контактов, подсказки), контрольной — обычный онбординг. Через 30 дней сравниваете retention.
- Если retention тестовой группы вырос — «7 друзей» действительно рычаг, стройте продукт вокруг него.
- Если не изменился, хотя друзей стали добавлять больше — это был симптом. Вы подняли метрику активации, но не тронули то, что реально держит людей.
Мини-схема проверки статзначимости различия конверсий (в retention) на псевдо-SQL для агрегатов:
SELECT
variant,
COUNT(*) AS n,
SUM(retained::int) AS conv,
ROUND(AVG(retained::int)::numeric, 4) AS retention_rate
FROM ab_users
GROUP BY variant;
-- дальше двухвыборочный z-тест пропорций: сравниваем retention_rate групп,
-- считаем p-value; при p < 0.05 разница между вариантами значима
Формула z-статистики для разности долей:
$$z = \frac{\hat{p}_A - \hat{p}_B}{\sqrt{\hat{p}(1-\hat{p})\left(\frac{1}{n_A}+\frac{1}{n_B}\right)}}, \quad \hat{p} = \frac{x_A + x_B}{n_A + n_B}$$
Правило на практике: любое продуктовое решение, обоснованное найденной активационной корреляцией, должно пройти хотя бы один A/B перед раскаткой на всех. Корреляция даёт гипотезу и метрику для мониторинга — эксперимент даёт право строить на ней продукт. На собеседованиях в продуктовые команды именно этот переход «нашёл корреляцию → предложил A/B → проверил» — то, что отделяет сильного кандидата; типовые кейсы такого разбора собраны в /cases и в подготовке на /sobesedovanie-analitika-dannyh.
Частые вопросы
Чем метрика активации отличается от onboarding-completion?
Onboarding-completion — это «прошёл туториал / заполнил профиль», действие внутри интерфейса, которое вы сами придумали. Метрика активации — действие, которое доказанно предсказывает retention по вашим данным. Иногда они совпадают, но чаще нет: юзер может пройти весь онбординг и отвалиться, а другой — проигнорировать туториал, но сразу сделать Aha-действие и остаться. Всегда проверяйте кандидата на корреляцию с удержанием, а не берите «завершение онбординга» по умолчанию.
Какой порог N и окно T выбрать, если нет явного излома на кривой?
Если кривая retention растёт гладко без плато, берите порог по бизнес-достижимости: точку, где retention уже заметно выше базового, но действие пока делает достаточная доля когорты (ориентир — 20–40% новых юзеров дотягиваются до порога). Слишком высокий порог даёт красивый retention, но применим к горстке людей и бесполезен как рычаг. Окно T подбирайте по распределению time-to-activate — берите p75–p90, чтобы не отрезать медленных активирующихся. Потренировать сам расчёт распределений и оконных функций можно в /python-sandbox.
Может ли быть несколько Aha-моментов у одного продукта?
Да, у разных сегментов — разные. У маркетплейса покупатель активируется первым заказом, а продавец — первой выставленной позицией. У B2B-инструмента admin активируется приглашением команды, а рядовой участник — первым выполненным в продукте действием. Считайте активацию отдельно по ролям и сегментам, иначе смешаете разные механики удержания в одну усреднённую цифру, которая не двигает ничего.
Как понять, что метрику активации пора пересчитать?
Три сигнала: активация растёт, а retention стоит на месте (метрика оторвалась от реальности); вы сильно изменили продукт или онбординг; активационное действие делают уже почти все (порог слишком низкий, метрика перестала различать). Пересчитывайте порог раз в 6 месяцев или после крупных релизов: заново стройте таблицу «действие → retention» на свежих когортах и сверяйте, где теперь излом.
Что делать дальше: возьмите свою последнюю месячную когорту, выберите 5–10 кандидатов в Aha-действия, прогоните запрос «действие → retention» по каждому и найдите тот, что даёт наибольший разрыв при массовости хотя бы 20%. Это ваш кандидат в активацию. Оформите его как «N за T дней», встройте в воронку — и обязательно проверьте A/B, прежде чем строить вокруг него онбординг. Отработать SQL под это можно в /sql-sandbox, а системно подготовиться к продуктовым интервью — на /course.