Как посчитать Market Saturation Rate в SQL
Содержание:
Зачем Saturation Rate
Бизнес growing 5% YoY. Уже occupy 80% TAM (Total Addressable Market). Saturation rate 80% = «потолок близко». Без expansion в новый geos / segments роста не будет.
Формула
Saturation Rate = customers / TAM × 100%TAM (Total Addressable Market) — оценка total potential customers.
Базовый расчёт
Данные: customers(user_id, country), market sizing.
WITH customer_count AS (
SELECT
country,
COUNT(DISTINCT user_id) AS customers
FROM customers
WHERE active = TRUE
GROUP BY country
),
tam AS (
-- Manual TAM estimation per country
SELECT * FROM (VALUES
('RU', 5000000),
('KZ', 500000),
('BY', 300000),
('UA', 800000)
) AS t(country, total_addressable)
)
SELECT
c.country,
c.customers,
t.total_addressable AS tam,
c.customers::NUMERIC * 100 / NULLIF(t.total_addressable, 0) AS saturation_pct
FROM customer_count c
JOIN tam t ON t.country = c.country
ORDER BY saturation_pct DESC;По гео
SELECT
DATE_TRUNC('quarter', signup_date) AS quarter,
country,
COUNT(*) AS new_customers,
SUM(COUNT(*)) OVER (
PARTITION BY country
ORDER BY DATE_TRUNC('quarter', signup_date)
) AS cumulative_customers
FROM users
WHERE signup_date >= '2024-01-01'
GROUP BY 1, 2
ORDER BY 2, 1;С TAM:
WITH cumulative AS (
SELECT
DATE_TRUNC('quarter', signup_date) AS quarter,
country,
SUM(COUNT(*)) OVER (PARTITION BY country ORDER BY DATE_TRUNC('quarter', signup_date)) AS cum_customers
FROM users
GROUP BY 1, 2
),
tam AS (
SELECT * FROM (VALUES ('RU', 5000000), ('KZ', 500000)) AS t(country, total)
)
SELECT
c.quarter,
c.country,
c.cum_customers,
t.total AS tam,
c.cum_customers::NUMERIC * 100 / NULLIF(t.total, 0) AS saturation_pct
FROM cumulative c
JOIN tam t ON t.country = c.country
ORDER BY c.country, c.quarter;Тренд
SELECT
quarter,
country,
saturation_pct,
LAG(saturation_pct) OVER (PARTITION BY country ORDER BY quarter) AS prev_saturation,
saturation_pct - LAG(saturation_pct) OVER (PARTITION BY country ORDER BY quarter) AS saturation_growth_pp
FROM (
-- previous query
) x
ORDER BY country, quarter;Growth slowing = approaching saturation.
Частые ошибки
Ошибка 1. TAM is hard to define. TAM — оценка. Bottom-up vs top-down. Use multiple sources.
Ошибка 2. SAM vs TAM. TAM — total. SAM (serviceable addressable market) — что вы реально можете serve. Чаще используйте SAM.
Ошибка 3. Active vs cumulative. Если считать cumulative (включая churned), saturation overstated.
Ошибка 4. TAM не статичен. Рынок растёт со временем. Update TAM раз в год.
Ошибка 5. Saturation 50% — много? Зависит от индустрии. В нише — yes, в mass market — no.
Связанные темы
- Как посчитать CAC в SQL
- Как посчитать new users в SQL
- Как посчитать growth rate в SQL
- Как посчитать MAU в SQL
FAQ
TAM откуда?
Industry reports (Statista, IDC). Bottom-up: проксикнутые сегменты. Top-down: общая категория × procent.
Saturation > 100% — bug?
TAM underestimated. Re-evaluate.
Saturation slowing — что делать?
- Expand to new geos / verticals. 2) Increase ARPU существующих. 3) New product line.
Saturation для B2B?
Считать аккаунтами / компаниями, не users.
TAM включить SAM and SOM?
SAM (serviceable) = реалистичная TAM. SOM (obtainable) — что вы можете занять. Use SOM для растущего стартапа.