Как найти Aha-moment в SQL
RIGHT JOIN верно в аналитических запросах?Содержание:
Зачем Aha-moment
Facebook нашёл свой aha-moment: «7 друзей за 10 дней». Если новый пользователь до него добирался — retention взлетал. Если нет — отваливался. Aha-moment — это действие или веха, которая разделяет тех, кто остался, и тех, кто ушёл.
Подход к расчёту
- Выпишите действия-кандидаты (типа «сделал X раз за Y дней»).
- Посчитайте retention отдельно для тех, кто действие совершил, и для тех, кто нет.
- Найдите разрыв больше 2x — это и есть aha-moment.
Базовый расчёт
Допустим, гипотеза: «добавил 3 друзей в первую неделю».
WITH new_users AS (
SELECT user_id, signup_date
FROM users
WHERE signup_date >= CURRENT_DATE - INTERVAL '90 days'
),
friend_count_w1 AS (
SELECT
n.user_id,
n.signup_date,
COUNT(*) AS friends_added_w1
FROM new_users n
LEFT JOIN friend_events f
ON f.user_id = n.user_id
AND f.event_date BETWEEN n.signup_date AND n.signup_date + INTERVAL '7 days'
GROUP BY n.user_id, n.signup_date
),
retention AS (
SELECT
f.user_id,
f.friends_added_w1,
CASE
WHEN EXISTS (
SELECT 1 FROM events e
WHERE e.user_id = f.user_id
AND e.event_date BETWEEN f.signup_date + INTERVAL '30 days'
AND f.signup_date + INTERVAL '60 days'
) THEN 1 ELSE 0
END AS retained_d30
FROM friend_count_w1 f
)
SELECT
CASE
WHEN friends_added_w1 = 0 THEN '0 friends'
WHEN friends_added_w1 BETWEEN 1 AND 2 THEN '1-2 friends'
WHEN friends_added_w1 BETWEEN 3 AND 5 THEN '3-5 friends'
ELSE '6+ friends'
END AS bucket,
COUNT(*) AS users,
AVG(retained_d30) * 100 AS retention_d30_pct
FROM retention
GROUP BY 1
ORDER BY 1;Если retention у «3-5» — 60%, а у «1-2» — 20%, значит aha-moment где-то около 3.
По сегментам
-- Aha-moment может отличаться по acquisition channel
WITH ... -- same logic
SELECT
u.acquisition_channel,
AVG(CASE WHEN friends_added_w1 >= 3 THEN retained_d30 END) * 100 AS retention_if_aha_hit,
AVG(CASE WHEN friends_added_w1 < 3 THEN retained_d30 END) * 100 AS retention_if_not
FROM users u
JOIN retention r ON r.user_id = u.user_id
GROUP BY u.acquisition_channel;Частые ошибки
Ошибка 1. Причинность против корреляции. Пользователи с 5 друзьями на первой неделе удерживаются лучше — но это потому, что друзья тянут retention, или потому, что и друзей, и retention даёт исходная вовлечённость? Вполне возможен selection bias.
Ошибка 2. Aha из одного действия. Настоящий aha — это комбинация: «друзья + посты + лайки». ML или дерево решений находят такие связки лучше, чем ручной перебор.
Ошибка 3. Несогласованные периоды. Действие на первой неделе → retention в первый месяц. А можно ли брать действие в первый месяц → retention во второй? Зависит от продукта.
Ошибка 4. Произвольный порог. «3 друга» — а где именно разрыв? Порог берут не потому, что цифра красивая, а потому, что на графике retention виден перегиб именно на 3.
Ошибка 5. Игнорировать размер выборки. Если в бакете всего 10 пользователей, retention 100% или 0% — это шум, а не сигнал.
Связанные темы
- Aha-moment простыми словами
- Как посчитать retention в SQL
- Как посчитать activation в SQL
- Как посчитать cohort retention в SQL
FAQ
Aha-moment у каждого продукта?
Да, у каждого продукта он свой — найти его уже половина победы. У Twitter это 30 подписок, у Slack — 2000 отправленных сообщений, у Dropbox — один файл, положенный в папку.
Чем aha отличается от активации?
Активация — это первая успешная интеграция продукта. Aha — веха, которая предсказывает retention. На практике это часто одно и то же событие.
Как тестировать гипотезу aha?
Через A/B-тест: одну группу подталкиваете к aha (например, уведомлениями), другую оставляете как есть. Если гипотеза верна, retention у первой группы должен вырасти.
Aha меняется со временем?
Да. Новые фичи могут смещать aha-moment. Имеет смысл пересматривать его хотя бы раз в год.
Можно ли несколько aha?
В сложных продуктах — да. Aha на онбординге, aha на росте и aha на удержании вполне могут быть разными.