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

Закрепи формулу saturation rate в Карьернике
Запомнить надолго — 5 коротких сессий с задачами на эту тему. Бесплатно
Тренировать saturation rate в Telegram

Зачем 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;
Закрепи формулу saturation rate в Карьернике
Запомнить надолго — 5 коротких сессий с задачами на эту тему. Бесплатно
Тренировать saturation rate в Telegram

Тренд

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.

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

FAQ

TAM откуда?

Industry reports (Statista, IDC). Bottom-up: проксикнутые сегменты. Top-down: общая категория × procent.

Saturation > 100% — bug?

TAM underestimated. Re-evaluate.

Saturation slowing — что делать?

  1. 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 для растущего стартапа.