Доля юзеров прошедших целевое действие из всех попавших в этап.
$$\text{CR}{step} = \frac{\text{users_completed}{step}}{\text{users_started}_{step}}$$
Что измеряет: эффективность шага/воронки.
Типы CR:
Бенчмарки:
| Продукт | End-to-end CR |
|---|---|
| Ecommerce visitors → buyers | 2-4% |
| Cart → completed checkout | 60-70% |
| Free trial → paid SaaS | 15-25% |
| App install → D7 active | 25-35% |
| Lead form → SQL (sales qualified) | 10-20% |
Pitfalls:
Когда не использовать:
-- Funnel CR step by step
WITH stages AS (
SELECT user_id,
MAX(stage = 'visited') AS visited,
MAX(stage = 'cart_added') AS carted,
MAX(stage = 'checkout_started') AS started,
MAX(stage = 'completed') AS completed
FROM events
WHERE event_time >= '2026-05-01'
GROUP BY user_id
)
SELECT
COUNT(*) FILTER (WHERE visited) AS visits,
COUNT(*) FILTER (WHERE carted)::float / NULLIF(COUNT(*) FILTER (WHERE visited), 0) AS visit_to_cart,
COUNT(*) FILTER (WHERE started)::float / NULLIF(COUNT(*) FILTER (WHERE carted), 0) AS cart_to_checkout,
COUNT(*) FILTER (WHERE completed)::float / NULLIF(COUNT(*) FILTER (WHERE started), 0) AS checkout_to_done,
COUNT(*) FILTER (WHERE completed)::float / NULLIF(COUNT(*) FILTER (WHERE visited), 0) AS end_to_end_cr
FROM stages;
funnel = ["visited", "cart_added", "checkout_started", "completed"]
counts = {stage: events[events["stage"] == stage]["user_id"].nunique() for stage in funnel}
df = pd.DataFrame({"stage": funnel, "users": list(counts.values())})
df["cr_step"] = df["users"] / df["users"].shift(1)
df["cr_overall"] = df["users"] / df["users"].iloc[0]