Как посчитать Referral Rate в SQL

Проверь себя · 1/3разбор после ответа
Нужно построить график регистраций по часам из таблицы пользователей со столбцом created_at типа timestamp. Какой бакет лучше использовать?

Зачем Referral Rate

Реферальный канал — самый дешёвый. Пользователь привёл друга — и этот клиент достался бесплатно. Если Referral Rate высокий, то в вашем CAC учитываются эти бесплатные пользователи, а значит реальный, эффективный CAC получается ниже.

Формула

Referral Rate = users_who_referred / total_users × 100%

Или:

Avg Referrals per User = total_invites / total_users

Базовый расчёт

Данные: referrals(referrer_id, referred_id, created_at).

WITH stats AS (
    SELECT
        COUNT(DISTINCT u.user_id) AS total_users,
        COUNT(DISTINCT r.referrer_id) AS users_who_referred,
        COUNT(*) AS total_referrals
    FROM users u
    LEFT JOIN referrals r ON r.referrer_id = u.user_id
    WHERE u.signup_date >= CURRENT_DATE - INTERVAL '90 days'
)
SELECT
    total_users,
    users_who_referred,
    total_referrals,
    users_who_referred::NUMERIC * 100 / NULLIF(total_users, 0) AS referral_rate_pct,
    total_referrals::NUMERIC / NULLIF(total_users, 0) AS avg_referrals_per_user
FROM stats;

Связь с K-factor

K-factor = avg_invites_per_user × invite_acceptance_rate

K > 1 — виральный рост: каждый пользователь приводит больше одного нового.

WITH invites_stats AS (
    SELECT
        AVG(invites_sent) AS avg_invites,
        AVG(invites_accepted::NUMERIC / NULLIF(invites_sent, 0)) AS avg_acceptance_rate
    FROM (
        SELECT
            referrer_id,
            COUNT(*) AS invites_sent,
            COUNT(*) FILTER (WHERE status = 'accepted') AS invites_accepted
        FROM referrals
        WHERE created_at >= CURRENT_DATE - INTERVAL '90 days'
        GROUP BY referrer_id
    ) x
)
SELECT
    avg_invites,
    avg_acceptance_rate,
    avg_invites * avg_acceptance_rate AS k_factor
FROM invites_stats;
Закрепи формулу referral rate в Карьернике
Запомнить надолго — 5 коротких сессий с задачами на эту тему. Бесплатно
Тренировать referral rate в Telegram

По когортам

WITH cohort AS (
    SELECT
        user_id,
        DATE_TRUNC('month', signup_date) AS cohort_month
    FROM users
)
SELECT
    c.cohort_month,
    COUNT(DISTINCT c.user_id) AS cohort_size,
    COUNT(DISTINCT r.referrer_id) AS referred,
    COUNT(DISTINCT r.referrer_id)::NUMERIC * 100 / NULLIF(COUNT(DISTINCT c.user_id), 0) AS referral_rate_pct
FROM cohort c
LEFT JOIN referrals r ON r.referrer_id = c.user_id
WHERE c.cohort_month >= '2026-01-01'
GROUP BY c.cohort_month
ORDER BY c.cohort_month;

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

Ошибка 1. Самореферал. Пользователь ввёл собственный код. Отфильтруйте такие строки условием referrer_id != referred_id.

Ошибка 2. Один реферер, много приглашений. Возможно, это попытка накрутки. Ограничьте разумное число приглашений на одного пользователя.

Ошибка 3. Время на реферал. Пользователь, который два года в продукте, успел привести больше друзей — у него просто было больше времени. Сравнивайте когорты в одном возрасте.

Ошибка 4. Ошибка выжившего. Вы считаете только активных рефереров. Но у ушедших в отток пользователей тоже была возможность кого-то привести.

Ошибка 5. Наивная трактовка K-factor. K=1.2 — виральность! Но формула предполагает, что показатели остаются постоянными. В реальности рост со временем затухает.

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

FAQ

Какой Referral Rate считается нормальным?

Ориентир зависит от типа продукта. Для массовых приложений нормой считается 5-15%, для B2B SaaS — 10-30%, а для премиум-продуктов с сильными реферальными бонусами — 20-50%.

Чем Referral Rate отличается от K-factor?

Referral Rate — это доля пользователей, которые привели хотя бы одного друга. K-factor — коэффициент виральности: среднее число приглашений на пользователя, умноженное на долю принятых приглашений.

K > 1 = виральный рост?

Формально да. Но на практике ценен даже устойчивый K=1.1 — он уже разгоняет рост сильнее органического.

Как учитывать массовые промокоды (например, у блогеров)?

Считайте их платным каналом: их стоимость равна размеру бонуса. В органический Referral Rate такие приглашения не входят.

Как повысить Referral Rate?

Во-первых, сделайте приглашение друга очевидным и простым. Во-вторых, давайте бонус обеим сторонам. В-третьих, просите привести друга в правильный момент — сразу после того, как пользователь получил ценность от продукта.