Как посчитать feature adoption в SQL

Проверь себя · 1/3разбор после ответа
У вас есть таблицы users(email) и marketing_signups(email). В одной системе email сохраняется как Ivan@Example.com, в другой — ivan@example.com. Какой подход в JOIN чаще всего решает проблему без изменения данных в таблицах?

Зачем feature adoption

Запустили новую фичу — нужно измерять, кто реально ей пользуется. Feature adoption rate = доля активных пользователей, попробовавших фичу. Низкий adoption означает плохой онбординг, ненужную фичу или спрятанный функционал. Высокий adoption при плохом удержании говорит, что фича разочаровывает после первого использования.

Определения adoption

Вариантов несколько, зафиксируйте один до начала анализа:

  • Ever used — попробовал хоть раз. Простой критерий, но обманчивый.
  • Used in last N days — активное пользование за последние N дней.
  • Used > X times — «реальное» вовлечение, а не случайный клик.
  • Used + retained — вернулся к фиче на следующий день или неделю.

Adoption rate в SQL

«Used in last 30 days» вариант:

WITH active_users AS (
    SELECT DISTINCT user_id
    FROM events
    WHERE event_date >= CURRENT_DATE - INTERVAL '30 days'
),
feature_users AS (
    SELECT DISTINCT user_id
    FROM events
    WHERE event_name = 'feature_x_used'
      AND event_date >= CURRENT_DATE - INTERVAL '30 days'
)
SELECT
    (SELECT COUNT(*) FROM active_users) AS active,
    (SELECT COUNT(*) FROM feature_users) AS adopted,
    (SELECT COUNT(*) FROM feature_users)::NUMERIC * 100
    / NULLIF((SELECT COUNT(*) FROM active_users), 0) AS adoption_rate_pct;

Если active = 10k, adopted = 1.5k → adoption 15%.

По когортам и каналу

WITH cohort AS (
    SELECT user_id, DATE_TRUNC('month', created_at)::DATE AS cohort_month, utm_source
    FROM users
),
adopted AS (
    SELECT DISTINCT user_id
    FROM events
    WHERE event_name = 'feature_x_used'
      AND event_date >= CURRENT_DATE - INTERVAL '30 days'
)
SELECT
    c.cohort_month,
    c.utm_source,
    COUNT(*) AS cohort_size,
    COUNT(*) FILTER (WHERE c.user_id IN (SELECT user_id FROM adopted)) AS adopted,
    COUNT(*) FILTER (WHERE c.user_id IN (SELECT user_id FROM adopted)) * 100.0
    / NULLIF(COUNT(*), 0) AS adoption_pct
FROM cohort c
GROUP BY c.cohort_month, c.utm_source
HAVING COUNT(*) >= 50
ORDER BY adoption_pct DESC;
Закрепи формулу feature adoption в Карьернике
Запомнить надолго — 5 коротких сессий с задачами на эту тему. Бесплатно
Тренировать feature adoption в Telegram

Время до adoption

Когда пользователь впервые встречает фичу:

WITH first_use AS (
    SELECT
        user_id,
        MIN(event_date) AS first_feature_use
    FROM events
    WHERE event_name = 'feature_x_used'
    GROUP BY user_id
)
SELECT
    AVG(EXTRACT(EPOCH FROM (fu.first_feature_use - u.created_at)) / 86400) AS avg_days_to_first_use,
    PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY EXTRACT(EPOCH FROM (fu.first_feature_use - u.created_at)) / 86400) AS median_days
FROM first_use fu
JOIN users u USING (user_id);

Если медиана = 7 дней, фича не обнаруживается в первую неделю — онбординг нужно чинить.

Частые ошибки

Ошибка 1. Считать adoption от всех зарегистрированных пользователей. В знаменатель попадают ушедшие (churned) пользователи — метрика занижается. Берите за базу активных пользователей.

Ошибка 2. Считать adoption по одному разу. Частая картина: «попробовали» 80%, а реально пользуются 5%. Критерий Used > X times строже и честнее.

Ошибка 3. Игнорировать сегмент. Если фича доступна только на iOS, считайте adoption среди пользователей iOS, а не среди всех.

Ошибка 4. Считать за короткий период сразу после запуска. Adoption растёт со временем: через неделю 5%, через месяц 25%. Всегда указывайте период.

Ошибка 5. Не сравнивать с базовым уровнем. Adoption одной фичи без сравнения с похожими фичами повисает без контекста.

Связанные темы

FAQ

Какой adoption «хороший»?

Всё зависит от типа фичи и её роли в продукте. Для ключевой (core) фичи хороший adoption — от 50% и выше, ей должно пользоваться большинство. Для нишевой фичи под power-юзеров нормой считаются и 5–15%.

Adoption vs activation?

Activation — это про продукт в целом: пользователь дошёл до момента, когда получил из него ценность. Adoption — про конкретную фичу: сколько активных пользователей начали ей пользоваться. То есть activation шире, а adoption всегда привязан к отдельной функции.

Сравнить с конкурентом?

Напрямую сравнивать adoption с конкурентом бессмысленно — у него другая аудитория, другой продукт и другой способ считать метрику. Полезнее сравнивать новую фичу со своими же прошлыми запусками. Так вы увидите, лучше или хуже она заходит на вашей собственной базе.

Adoption падает — что делать?

Сначала разберитесь в причине. Иногда фича просто стала не нужна — изменился рынок или сценарий; иногда виновата регрессия в UX после обновления. Быстрее всего понять, что произошло, помогают интервью с пользователями.

Можно ли увеличить через онбординг?

Да, часто это самый дешёвый рычаг. Подсказки в интерфейсе, короткий тур по продукту и всплывающие тултипы помогают пользователям вообще заметить фичу. Нередко именно плохая обнаруживаемость, а не сама фича, держит adoption низким.