Как посчитать Referral Rate в SQL
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_rateK > 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;По когортам
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 — виральность! Но формула предполагает, что показатели остаются постоянными. В реальности рост со временем затухает.
Связанные темы
- Как посчитать K-factor в SQL
- Как посчитать new users в SQL
- Как посчитать CAC в SQL
- K-factor простыми словами
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?
Во-первых, сделайте приглашение друга очевидным и простым. Во-вторых, давайте бонус обеим сторонам. В-третьих, просите привести друга в правильный момент — сразу после того, как пользователь получил ценность от продукта.