Как посчитать ARPPU в SQL
events_web(user_id, event_name, created_at) и events_app(user_id, event_name, created_at). Нужно получить общий поток событий для дальнейшей агрегации. Что использовать?Содержание:
Зачем ARPPU
ARPPU = Average Revenue Per Paying User — средняя выручка на одного платящего пользователя. ARPU размазывает выручку по всем пользователям, включая бесплатных. ARPPU считает только платящих. Он показывает качество платящей аудитории и не зависит от размера бесплатной базы.
Формула
ARPPU = total_revenue / paying_users«Платящий пользователь» — тот, кто совершил хотя бы одну оплату за период.
Базовый расчёт
SELECT
DATE_TRUNC('month', created_at) AS month,
SUM(amount) AS revenue,
COUNT(DISTINCT user_id) AS paying_users,
SUM(amount)::NUMERIC / NULLIF(COUNT(DISTINCT user_id), 0) AS arppu
FROM transactions
WHERE status = 'paid'
AND amount > 0
AND created_at >= CURRENT_DATE - INTERVAL '12 months'
GROUP BY 1
ORDER BY 1;ARPU vs ARPPU
WITH revenue AS (
SELECT SUM(amount) AS total_revenue
FROM transactions
WHERE status = 'paid'
AND created_at >= DATE_TRUNC('month', CURRENT_DATE - INTERVAL '1 month')
AND created_at < DATE_TRUNC('month', CURRENT_DATE)
),
all_users AS (
SELECT COUNT(DISTINCT user_id) AS cnt
FROM activity
WHERE DATE >= DATE_TRUNC('month', CURRENT_DATE - INTERVAL '1 month')
AND DATE < DATE_TRUNC('month', CURRENT_DATE)
),
paying AS (
SELECT COUNT(DISTINCT user_id) AS cnt
FROM transactions
WHERE status = 'paid'
AND created_at >= DATE_TRUNC('month', CURRENT_DATE - INTERVAL '1 month')
AND created_at < DATE_TRUNC('month', CURRENT_DATE)
)
SELECT
r.total_revenue,
a.cnt AS all_users,
p.cnt AS paying_users,
r.total_revenue::NUMERIC / NULLIF(a.cnt, 0) AS arpu,
r.total_revenue::NUMERIC / NULLIF(p.cnt, 0) AS arppu,
p.cnt::NUMERIC * 100 / NULLIF(a.cnt, 0) AS paying_pct
FROM revenue r, all_users a, paying p;По сегментам
SELECT
u.country,
COUNT(DISTINCT t.user_id) AS paying_users,
SUM(t.amount) AS revenue,
SUM(t.amount)::NUMERIC / NULLIF(COUNT(DISTINCT t.user_id), 0) AS arppu
FROM transactions t
JOIN users u ON u.user_id = t.user_id
WHERE t.status = 'paid'
AND t.created_at >= CURRENT_DATE - INTERVAL '90 days'
GROUP BY u.country
ORDER BY arppu DESC;По когортам (месяц привлечения)
SELECT
DATE_TRUNC('month', u.registered_at) AS cohort,
SUM(t.amount) AS cohort_revenue,
COUNT(DISTINCT t.user_id) AS cohort_paying,
SUM(t.amount)::NUMERIC / NULLIF(COUNT(DISTINCT t.user_id), 0) AS arppu
FROM transactions t
JOIN users u ON u.user_id = t.user_id
WHERE t.status = 'paid'
AND u.registered_at >= CURRENT_DATE - INTERVAL '12 months'
GROUP BY 1
ORDER BY 1;Частые ошибки
Ошибка 1. Путать ARPU и ARPPU. ARPU включает бесплатных пользователей, ARPPU — только платящих.
Ошибка 2. Возвраты. Возвраты нужно исключить или вычесть, иначе ARPPU завышен.
Ошибка 3. Выбор периода. Месячный ARPPU и ARPPU за весь срок жизни клиента — очень разные цифры.
Ошибка 4. Несколько продуктов. Один пользователь платит за продукт A и продукт B. Считать его одним платящим пользователем или двумя?
Ошибка 5. Выбросы. Киты (1% пользователей приносит 50% выручки) сильно тянут среднее — поэтому важны медианный ARPPU и перцентили.
Связанные темы
- Как посчитать ARPU в SQL
- Как посчитать paying users в SQL
- Как посчитать LTV в SQL
- ARPU vs ARPPU — разница
FAQ
Чем ARPPU отличается от ARPU?
ARPU — это выручка, делённая на всех пользователей, а ARPPU — выручка, делённая только на платящих. Поэтому ARPPU всегда больше ARPU: в знаменателе меньше людей. ARPU показывает монетизацию всей базы, ARPPU — сколько приносит именно платящий клиент.
Зачем смотреть медианный ARPPU?
Среднее сильно тянут киты — несколько пользователей с огромными платежами. Медиана и перцентили показывают, сколько платит типичный клиент, а не искажённое китами среднее. Поэтому судить о платящей базе по одному среднему ARPPU рискованно.
ARPPU растёт — это хорошо?
Обычно да: платящие пользователи стали приносить больше. Но сначала проверьте долю платящих — ARPPU мог вырасти просто потому, что база сократилась и ушли самые «дешёвые» клиенты. Тогда рост ARPPU маскирует проблему, а не показывает успех.
ARPPU стабилен, а ARPU растёт — что это значит?
Это значит, что монетизируется больше пользователей: растёт доля платящих при том же чеке на каждого. Обычно это здоровый рост — вы вовлекаете в оплату новых людей, не выжимая больше из старых.
Виден ли в ARPPU эффект апселла?
Да. Когда платящие переходят на более дорогие тарифы или докупают продукты, средний чек растёт и ARPPU увеличивается. По сути ARPPU — это приближённая оценка LTV для платящего сегмента.