Перейти до змісту

Юніт-економіка

Когортний аналіз утримання: як читати таблицю і порахувати в SQL

Що таке когортний аналіз, як побудувати когорти утримання та накопиченого LTV для магазину, сервісу чи застосунку, як читати «трикутник» і які рішення з нього випливають.

DATUMPANELОпубліковано Оновлено 6 хв читання

Обкладинка статті про когортний аналіз

Середня частка повторних покупок — оманлива метрика. Якщо цього місяця прийшло багато нових клієнтів з розпродажу, вона просяде, хоча з утриманням усе гаразд. Когортний аналіз розділяє клієнтів за «датою народження» і показує, як кожна група поводиться з часом.

Що таке когорта

Когорта — група клієнтів з однаковою стартовою подією в одному періоді. Найчастіше:

  • місяць першої покупки (магазин);
  • місяць першого візиту (сервісний бізнес);
  • тиждень встановлення або реєстрації (застосунок, SaaS);
  • місяць старту підписки (SaaS).

Додатково когорти можна ділити за першим каналом, першим товаром, містом — це найцінніше.

Як виглядає таблиця когорт

Умовні дані: частка клієнтів, які зробили хоча б одну покупку в місяць N після першої.

КогортаКлієнтівМ0М1М2М3М4М5
2026-04820100%18%12%10%9%8%
2026-05910100%17%12%9%9%
2026-061 340100%11%7%6%
2026-07870100%19%13%
2026-08900100%20%

Як читати

  • По рядку — як утримується конкретна когорта з часом.
  • По стовпчику — чи кращає утримання для нових когорт (М1 росте з 17% до 20% — добре).
  • Аномалії — червневої когорти більше, а утримання гірше. Типово для розпродажу або агресивної знижки: прийшли «мисливці за акціями».

Види когортних метрик

МетрикаЩо в клітинціДля чого
Утримання клієнтів% активних у місяць Nлояльність
Утримання виручкивиручка когорти в місяць N / виручка М0гроші від повторних
Накопичений LTVсумарна маржа на клієнта до місяця Nокупність CAC
Відтік підписок% підписок, що лишилисьSaaS

Накопичений LTV — найкорисніший для власника: поставте поруч CAC, і видно, на якому місяці когорта окупилась (LTV до CAC).

SQL: когорти утримання

Для PostgreSQL, таблиця orders(customer_id, order_date, status):

WITH first AS (
  SELECT customer_id, DATE_TRUNC('month', MIN(order_date)) AS cohort
  FROM orders WHERE status = 'paid'
  GROUP BY 1
),
activity AS (
  SELECT DISTINCT o.customer_id, f.cohort,
         (EXTRACT(YEAR FROM AGE(DATE_TRUNC('month', o.order_date), f.cohort)) * 12
        + EXTRACT(MONTH FROM AGE(DATE_TRUNC('month', o.order_date), f.cohort)))::int AS m
  FROM orders o JOIN first f USING (customer_id)
  WHERE o.status = 'paid'
)
SELECT cohort, m,
       COUNT(*) AS active,
       ROUND(100.0 * COUNT(*) / FIRST_VALUE(COUNT(*)) OVER (PARTITION BY cohort ORDER BY m), 1) AS pct
FROM activity
GROUP BY cohort, m
ORDER BY cohort, m;

Для BigQuery замініть AGE на DATE_DIFF(month_of_order, cohort, MONTH).

Когорти з GA4

Для поведінкових когорт (повернення на сайт, а не покупки) використовуйте user_pseudo_id і first_visit з експорту GA4 у BigQuery. Пам'ятайте: без логіна один клієнт на двох пристроях — два «користувачі», тому для грошових когорт краще брати CRM.

Які рішення дає когортний аналіз

  • Якість каналів: когорти з TikTok утримуються гірше, ніж з пошуку → враховувати це в допустимому CAC.
  • Ефект акцій: клієнти з розпродажу купують рідше → обмежити глибину знижок або змінити оффер.
  • Онбординг і перший досвід: якщо падіння М0→М1 різке, проблема в першому замовленні (доставка, якість, спілкування).
  • Ритм повторних покупок: коли більшість других покупок відбувається на 2-му місяці — саме тоді має йти нагадування або персональна пропозиція.

Як показувати когорти в дашборді

  • теплова карта (heatmap) з однією шкалою кольору;
  • перемикач метрики: клієнти / виручка / накопичений LTV;
  • фільтр за першим каналом і першою категорією товару;
  • лінія CAC на графіку накопиченого LTV;
  • підпис розміру когорти — маленькі когорти шумні.

Для ширшої картини економіки клієнта — гайд з юніт-економіки. Для сегментації вже утриманих клієнтів — RFM-аналіз.

Типові помилки

  • Брати середнє утримання без когорт.
  • Порівнювати незавершені місяці з завершеними.
  • Ігнорувати розмір когорти.
  • Рахувати повернення (refund) як активність.
  • Будувати грошові когорти на user_pseudo_id з GA4.

Чекліст

  • Визначено стартову подію і період когорти
  • Клієнт ідентифікується однаково (телефон/email/ID CRM)
  • Враховано лише оплачені замовлення
  • Є три режими: клієнти, виручка, накопичений LTV
  • Фільтр за першим каналом
  • Поточний незавершений місяць позначено

Приклад: читаємо правдоподібний трикутник

Ілюстративна місячна таблиця утримання для магазину (частка когорти, що зробила ще одне замовлення в місяці N):

КогортаКлієнтівM1M2M3M4M5
Травень82014%9%8%7%6%
Червень90013%9%7%7%
Липень1 4508%5%4%
Серпень88015%10%
Вересень91016%

Як читати:

  • Рядки показують, як поводиться одна когорта з часом. Утримання травневої когорти вирівнюється на 6–7% з M3 — це лояльні клієнти.
  • Стовпці порівнюють когорти в однаковому «віці». M1 липня вдвічі нижчий за інші.
  • Липневий викид: на 60% більше клієнтів, але значно нижче утримання. Це типовий слід великої акції чи широкої кампанії залучення, що привела одноразових «мисливців за знижками». Врахуйте це в рішеннях щодо CAC: вартість утриманого клієнта з тієї кампанії була значно вищою, ніж показував CAC.
  • Серпень і вересень у тому ж віці кращі за травень — щось покращилось. З'ясуйте, що змінилося (ланцюжок листів після покупки, нова лінійка, кращий таргетинг), і збережіть це.

Накопичена виручка на клієнта: погляд на LTV

Утримання показує, чи повертаються клієнти. Накопичена виручка на клієнта показує, скільки вони варті. Той самий ілюстративний магазин:

КогортаM0M1M2M3M6
Травень1 0501 2101 3201 4201 690
Липень9801 0601 1101 150—

Якщо травневі клієнти за пів року досягають ~1 690 грн виручки, а маржинальність — близько 30%, кожен вартий приблизно 507 грн маржі за цей період. Це верхня межа CAC для схожого залучення ще до будь-якого прибутку. Липневі клієнти з 1 150 грн за 3 місяці й вирівнюванням виправдовують значно нижчий CAC. Ці числа прямо йдуть у рішення щодо CAC і LTV.

SQL: накопичена виручка на клієнта за когортами

WITH first AS (
  SELECT customer_id, DATE_TRUNC(MIN(order_date), MONTH) AS cohort
  FROM clean.orders WHERE status = 'paid' GROUP BY 1
),
rev AS (
  SELECT f.cohort,
         DATE_DIFF(DATE_TRUNC(o.order_date, MONTH), f.cohort, MONTH) AS m,
         SUM(o.revenue_net) AS revenue
  FROM clean.orders o JOIN first f USING (customer_id)
  WHERE o.status = 'paid'
  GROUP BY 1, 2
),
size AS (SELECT cohort, COUNT(*) AS customers FROM first GROUP BY 1)
SELECT r.cohort, r.m, s.customers,
       SUM(r.revenue) OVER (PARTITION BY r.cohort ORDER BY r.m) / s.customers AS cum_revenue_per_customer
FROM rev r JOIN size s USING (cohort)
ORDER BY r.cohort, r.m;

Два застереження. Не показуйте клітинки за місяці, що ще не завершилися, — поточний місяць завжди виглядає як провал. І когорта менша за приблизно сотню клієнтів дає відсотки, які «стрибають» через кількох людей, тож об'єднуйте малі місяці в квартали.

Когорти за каналом залучення

Найкорисніший розріз — когорта × канал першого замовлення. Ілюстративні частки повторних покупок за 90 днів:

Канал першого замовленняКлієнтівПовторні за 90 днів
Органічний пошук1 10022%
Email/рекомендації30028%
Платні соцмережі1 60011%
Маркетплейс9006%

Якщо платні соцмережі дають 40% нових клієнтів, але ті повертаються вдвічі рідше, «дешевий CAC» цього каналу не такий уже й дешевий. Клієнти з маркетплейсу часто належать маркетплейсу, а не вам, — це варто знати, перш ніж вкладатися в його зростання.

Тижневі чи місячні когорти?

Період когорти обирайте за тим, як часто купують клієнти:

БізнесЦикл покупкиПеріод когортиДивитись утримання на
Доставка їжі, продуктиднітижденьW1, W4, W8
Одяг, косметикатижні–місяцімісяцьM1, M3, M6
Меблі, технікамісяці–рокикварталQ1, Q2, Q4
SaaS, підпискицикл оплатимісяцьM1, M3, M12
Послуги (салони, студії, сервіси ремонту)цикл візитівмісяцьM1, M2, M3

Занадто дрібний період дає шумні, розріджені таблиці. Занадто великий — ховає ефект кампаній і змін, які ви хочете оцінити. Якщо сумніваєтеся, почніть з місячних когорт і змініть, якщо таблиця переважно порожня або всюди однакова.

Ще одна порада: для бізнесів із сильною сезонністю порівнюйте когорти не з попереднім місяцем, а з тим самим місяцем минулого року. Грудневі клієнти, що прийшли за подарунками, майже завжди повертаються рідше за вересневих, і це не означає, що щось зламалося.

Як презентувати когорти команді

Трикутник когорт лякає тих, хто бачить його вперше. Почніть з одного рядка: «з клієнтів, що прийшли в травні, через три місяці повертаються 8%». Потім покажіть, що в серпні це вже 10%, і поясніть, що змінилося. Коли команда звикне читати один рядок, повна таблиця стає зрозумілою сама собою.

Часті запитання

Скільки даних потрібно для когортного аналізу?

Корисну картину дають 6+ місяців історії й когорти від кількох сотень клієнтів. На менших обсягах дивіться квартальні когорти.

Що вважати «нормальним» утриманням?

Порівнюйте з власною історією і між каналами, а не з чужими бенчмарками — вони сильно залежать від категорії і частоти покупок.

Як ідентифікувати клієнта без реєстрації?

За телефоном або email із замовлення (у нормалізованому вигляді). Для більшості українських магазинів телефон — найнадійніший ключ.

Чи можна будувати когорти в Google Таблицях?

Так, через зведені таблиці на невеликих обсягах. На тисячах замовлень і з щотижневим оновленням краще перенести розрахунок у SQL.

Теги: когортиутриманняLTVSQL

Автор

DATUMPANEL — Аналітика даних для бізнесу

DATUMPANEL — це незалежний аналітик даних з України. Будую дашборди для власників бізнесу, налаштовую GA4 і експорт у BigQuery, збираю пайплайни даних і автозвіти в Telegram для e-commerce, сервісного бізнесу, SaaS і агенцій — від аудиту даних до рішень.

Написати в Telegram[email protected]Відкрити демо

Читайте також

  • Юніт-економіка9 хв читання

    Юніт-економіка: формули, приклад розрахунку і дашборд

    Як порахувати юніт-економіку інтернет-магазину, сервісу чи SaaS — CAC, маржа на замовлення, LTV, окупність — на реальних даних з CRM і реклами, і як винести це в щоденний дашборд.

    Основний гайд

  • Юніт-економіка6 хв читання

    RFM-аналіз клієнтів: сегменти, SQL і що з ними робити

    Як провести RFM-сегментацію бази клієнтів магазину чи сервісу — давність, частота, сума — правила балів, SQL-запит, готові сегменти (чемпіони, у зоні ризику, сплячі) і сценарії розсилок для кожного.

  • Юніт-економіка6 хв читання

    LTV і CAC: як порахувати чесно і що означає співвідношення

    Формули CAC і LTV для магазину, сервісу і SaaS, повний і «рекламний» CAC, LTV у маржі, окупність CAC у місяцях і чому правило 3:1 не варто сприймати буквально.

Хочете таку аналітику у себе?

Опишіть, які дані у вас є і на які запитання бракує відповідей. Відповім того ж дня — з планом, термінами й тим, що можна зробити швидко.

Або напишіть напряму:

Відкрити демо →

Залиште заявку

Відповім протягом робочого дня.

Що вас цікавить
Сфера бізнесу
Ще деталі · необов’язково
Орієнтовний бюджет · необов’язково
Коли зручно почати · необов’язково
Які джерела даних є · необов’язково

Надсилаючи форму, ви погоджуєтесь з Політикою конфіденційності — контакти використовуються лише для відповіді на заявку.