Все материалы
Продуктовая аналитикагайдсредний

LTV/CAC: как считать соотношение по когортам и каналам

Почему LTV/CAC нельзя считать по выручке и смешанным клиентам. Расчёт на двухмесячных когортах магазина, сравнение каналов и сценарии скидки, возвратов и CAC.

КейсПрактика28 сентября 2026 г.14 мин

В отчёте маркетинга LTV/CAC выглядит как одно число, например 1,31. Руководитель спрашивает, можно ли теперь удвоить бюджет. Прежде чем отвечать, аналитик должен назвать три вещи: какую группу клиентов взяли, за сколько месяцев накопили её вклад и какие расходы положили в CAC. Без этих подписей красивое отношение сравнивает разные деньги. На учебном магазине Wave посчитаем пять каналов одной июльской когорты и посмотрим, как скидка, возвраты и стоимость нового клиента меняют вывод.

Коротко: формула LTV/CAC и условие сравнения

LTV/CAC — накопленный маржинальный вклад клиента за явно названный горизонт, делённый на стоимость привлечения одного клиента из той же когорты и канала. Если вклад за июль и август равен 1 825,58 ₽ на нового клиента, а CAC его июльской когорты 1 388,89 ₽, отношение равно 1,31. На этом горизонте вклад покрыл привлечение, но общие расходы магазина из этой дроби ещё не оплачены.

Традиционное слово lifetime не обязывает угадывать всю будущую жизнь клиента. Для управленческого отчёта честнее писать LTV M1 / CAC: M0 — месяц первой покупки, M1 — следующий. Если у когорты нет полного M1, ставьте «не наблюдалось», а не подменяйте его прогнозом. Коэффициент не отменяет отдельного вопроса о сроке окупаемости и доступности денег до него.

Одинаковая база
LTV/CAC на M1 = (вклад заказов когорты в M0 и M1 / число новых покупателей) / (расход её канала / то же число покупателей)

Эквивалентно суммарный вклад когорты / её расход на привлечение; используйте одинаковые канал, месяц и состав клиентов.

  • Когорта начинается с первой оплаченной покупки, а не любой покупки месяца.
  • В числителе — доход после скидок и возвратов минус переменные затраты.
  • Знаменатель клиента не меняется, когда часть когорты перестала покупать.
  • Сравнивайте когорты только в одинаковом возрасте и при одинаковом срезе возвратов.

Почему выручка клиента не равна LTV для этой дроби

Если клиент потратил 2 700 ₽, бизнес не получил 2 700 ₽ на оплату рекламы. Скидка, возврат, закупка, доставка, упаковка и платёжная комиссия забрали часть суммы. В Wave сентябрьские заказы на 8 066 873 ₽ после известных возвратов дали 2 459 009,05 ₽ модельного вклада до маркетинга, то есть 30,48% дохода. Если подставить выручку вместо вклада, отношение LTV/CAC будет описывать оборот на рекламный рубль, а не покрытие затрат.

Затраты в примере — допущения, не данные реального магазина. CSV Wave содержит заказы, покупателей, товары и возвраты; себестоимость по категориям, доставка, эквайринг и маркетинговые бюджеты заданы отдельно. Именно поэтому вывод касается выбранной модели, а не фактической рентабельности вымышленной компании.

Для когорты прибыльность ещё уже: после маржинального LTV надо покрыть CAC, затем общие постоянные расходы, поддержание продукта и другие статьи, отсутствующие в выгрузке. Отношение больше единицы — признак окупаемости включённых затрат на горизонте, не доказательство прибыли бизнеса.

Что входит в маржинальный LTV Wave
СлойИсточник / допущениеКак влияет
Оплаченные заказы и скидкиCSV ordersФормируют сумму после скидки
Возвраты к заказамCSV returns до 31.10Уменьшают доход исходного заказа
Себестоимость42–68% цены по категории, допущениеУменьшает вклад; часть восстанавливается
Доставка и упаковка220 + 55 ₽ / заказ, допущениеОстаются переменными на заказ
Эквайринг и возврат1,8%; 140 ₽, допущениеУменьшают вклад
МаркетингБюджеты каналов, допущениеВходит в CAC, не вычитается ещё раз из LTV

Когорта Wave: первая покупка, а не регистрация

Для сравнения привлечения мы берём пользователей, чья первая оплаченная покупка была в июле 2024 года. Затем присоединяем все оплаченные заказы этих же людей в июле и августе. Возвраты от заказов относятся к исходному месяцу покупки и известны на срезе 31 октября. M0 — июль, M1 — август; число людей в знаменателе остаётся июльским, даже если в августе купили не все.

Канал берётся из users.channel и не меняется для пользователя. Это учебная атрибуция: база не доказывает, что расходы канала вызвали покупку. Бюджет июля по каналу складывает медиа, долю команды и инструменты; бонус или скидку, уже уменьшившую net_total, нельзя повторно записывать в CAC. Для оценки инкрементального эффекта бюджета нужны эксперименты или другая причинная схема.

В июльском paid_ads впервые купили 180 человек. За июль и август их заказы дали 328 604,93 ₽ модельного вклада, то есть 1 825,58 ₽ на исходного покупателя. Расход канала за июль задан 250 000 ₽; CAC = 250 000 / 180 = 1 388,89 ₽. Это и есть согласованная пара для дроби 1,31.

Проверка зерна для paid_ads июля
ВеличинаРасчётОтвет
Новые покупателиПервая оплаченная покупка в июле180
Вклад M0–M1Заказы тех же людей в июле и августе328 604,93 ₽
LTV M1328 604,93 / 1801 825,58 ₽
Июльский бюджетМедиа + команда + инструменты250 000 ₽
CAC250 000 / 1801 388,89 ₽
LTV M1 / CAC328 604,93 / 250 0001,31

Пять каналов на одном горизонте M1

В июле у email 109 новых покупателей, у organic 176, у paid_ads 180, у referral 48, у social 67. В таблице каждый канал имеет свой июльский расход и вклад своих клиентов за два календарных месяца. Нельзя сложить CAC пяти каналов и поделить на один общий LTV: у групп разные веса и разные бюджеты.

Самое высокое отношение получилось у organic — 9,78, но это не приказ бесконечно увеличивать контентный бюджет. В модели его июльский расход лишь 30 000 ₽; следующие 176 клиентов могут оказаться намного дороже. У paid_ads 1,31 и у social 1,55: оба на наблюдаемом горизонте покрывают включённый CAC, но запас до общих расходов различается.

У referral к M1 вклад на клиента 1 475,70 ₽ против 1 488,86 ₽ в M0: накопленная линия может опуститься, если поздние возвраты и расходы следующего месяца перевесили новые покупки. Не превращайте LTV в монотонную «пожизненную ценность» просто потому, что так удобнее рисовать график.

Июльские когорты Wave: вклад за июль–август и бюджет июля
КаналНовыхCACМаржинальный LTV M1LTV/CAC
organic176170,45 ₽1 667,03 ₽9,78
email109366,97 ₽1 975,58 ₽5,38
referral48520,83 ₽1 475,70 ₽2,83
social671 268,66 ₽1 966,88 ₽1,55
paid_ads1801 388,89 ₽1 825,58 ₽1,31
Отношение LTV M1 / CAC у каналов одной июльской когорты

Двухмесячный наблюдённый горизонт; это не прогноз всей жизни клиента.

Отношение

Месяц окупаемости и отношение — не одно и то же

У июльского paid_ads уже в M0 накопленный вклад 1 760 ₽ на человека выше CAC 1 388,89 ₽. Значит включённый бюджет в среднем покрыт в июле, но без дневной кривой нельзя назвать конкретный день окупаемости. К M1 вклад возрастает до 1 825,58 ₽, а отношение меняется с 1,27 до 1,31. Оба числа положительны, но скорость возврата денег в пределах месяца остаётся неизвестной.

У сентябрьского paid_ads другая картина: CAC 1 890,24 ₽, накопленный вклад в M0 1 826,57 ₽ — отношение 0,97. По имеющимся к 31 октября заказам M1 вклад вырос до 2 019,37 ₽, отношение около 1,07. Этот второй месяц ещё может пересмотреть поздний возврат. Не сравнивайте его с полностью наблюдённым июльским M1 как окончательное качество канала.

Для бюджета и кассового разрыва срок окупаемости иногда важнее высокого дальнего отношения. Канал с будущим LTV/CAC 2,5 через год может быть труднее финансировать, чем канал с 1,5 через месяц. Дробь скрывает календарь, поэтому держите рядом накопительную кривую и дату среза.

Июльский paid_ads: вклад на исходного покупателя и CAC

M2 показан для формы кривой; у сентябрьских заказов короче окно возвратов, чем у июльских и августовских.

Накопленный вклад, ₽CAC, ₽

Почему «3:1» не универсальный ответ

В деловых материалах часто предлагают ориентир 3:1. Это эвристика, не закон природы и не порог, после которого деньги появляются автоматически. Магазину с большими постоянными расходами, дорогим оборотным капиталом и коротким сроком возврата нужен один запас; подписке с другими затратами и горизонтом — другой. Процент до общих расходов нельзя перевести в «норму» без плана бизнеса.

Отношение 1,31 для июльского paid_ads означает только то, что выбранный вклад за M0–M1 больше выбранного CAC. Разница 1 825,58 − 1 388,89 = 436,69 ₽ на стартового покупателя ещё должна участвовать в покрытии общих расходов. Если магазин расходует 3 млн ₽ фиксированных затрат в месяц, расчёт по одной когорте не доказывает, что это покрытие достаточно.

С другой стороны, отношение 9,78 у organic основано на синтетически низком бюджете и условной атрибуции. Оно не гарантирует возможность купить в девять раз больше organic-клиентов по той же цене. Для решения о следующем бюджете измерьте предельный CAC новых клиентов, а не только историческое среднее.

Чувствительность: скидка, возвраты, CAC

Меняем по одному условию для той же июльской paid_ads-когорты и тех же 218 заказов, которые она оформила в июле–августе. Дополнительная скидка 10% от уже сниженной суммы заказов уменьшает вклад на клиента с 1 825,58 до 1 146,77 ₽ при прежнем CAC: отношение падает ниже единицы, до 0,83. Это не прогноз спроса от промо — число заказов удержано постоянным.

Если частота возвратных событий вырастет на 5 п. п. от числа заказов, при прежнем среднем размере возврата и доле восстановления товара модель даст 1 644,48 ₽ вклада на клиента, отношение 1,18. Если CAC вырастет на 20% при тех же клиентах, вклад не изменится, но отношение станет 1,10. Порог чувствителен к определению как числителя, так и знаменателя.

Для такого сценария недостаточно взять общий процент возвратов магазина и автоматически назвать его прогнозом канала. У paid_ads июльской когорты в наблюдаемых 218 заказах было 17 возвратных событий; модель изменения использует их средний размер. Фактический mix категорий и причин возврата при расширении рекламы может измениться.

LTV/CAC июльского paid_ads на M1, один параметр за раз
СценарийВклад на нового клиентаCACLTV/CAC
База1 825,58 ₽1 388,89 ₽1,31
Ещё 10% скидки1 146,77 ₽1 388,89 ₽0,83
Возвраты +5 п. п.1 644,48 ₽1 388,89 ₽1,18
CAC +20%1 825,58 ₽1 666,67 ₽1,10

Неполная когорта и слишком длинный горизонт

В датасете продажи заканчиваются 31 октября 2024 года. Для сентябрьской когорты есть M0 и часть последующего наблюдения, но возвраты октябрьских заказов ещё не успели пройти полное окно. Для июльской M1 — июль и август — окно более зрелое. Поэтому основная таблица построена по июлю и остановлена на M1, хотя в сентябре у этих людей есть M2.

Расчёт «пожизненного» LTV из двух месяцев — прогноз, которому нужны допущения о дальнейших покупках, возвратах и удержании. Если модель не построена, пишите наблюдённый вклад M1. Если она построена, показывайте отдельно наблюдаемую часть, прогнозную часть и диапазон неопределённости. Иначе в числителе окажутся воображаемые деньги, а CAC останется исторической точной суммой.

Для месячной отчётности полезно показать матрицу: строки — месяц и канал первой покупки, столбцы — M0, M1, M2. Пустая ячейка означает «возраст ещё не достигнут», а не нулевую выручку. На одном срезе сравнивайте только те столбцы, которые доступны всем строкам.

Как подписывать возраст на срезе 31.10.2024
КогортаM0M1M2
Июль 2024НаблюдаетсяНаблюдаетсяПродажи сентября есть, возвраты менее зрелые
Сентябрь 2024НаблюдаетсяПредварительноНет в данных

Как считать по каналам, не размножая денежные строки

В рабочей модели сначала получите одну строку на оплаченный заказ с уже агрегированными возвратами и переменными затратами. Отдельно найдите первый оплаченный заказ каждого пользователя. По этому первому заказу назначьте месяц и канал когорты, затем присоедините все последующие заказы пользователя. Если первым шагом присоединить order_items и returns без агрегации, вклад и доход размножатся при нескольких товарах или возвратах.

Запрос ниже использует проверочный слой order_economics, уже приведённый к одному заказу, и сохраняет размер первоначальной когорты. Он считает июльский вклад M0–M1; полный бюджет канала добавляется после отдельной агрегации по июлю. Сверка для paid_ads: 180 людей и 328 604,93 ₽ суммарного вклада.

Выделяйте таблицу бюджета с зерном «месяц × канал». Одна запись расхода не должна повторяться на каждой покупке клиента. Когда будете расширять расчёт на другие периоды, сравните сумму вкладов всех каналов с общим вкладом этих же заказов и удерживайте единое правило для возвратов.

Когорта первой покупки и её наблюдённый двухмесячный вклад
WITH first_paid AS (
  SELECT user_id, channel, placed_at,
         ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY placed_at, order_id) AS rn
  FROM order_economics
), july_new AS (
  SELECT user_id, channel
  FROM first_paid
  WHERE rn = 1
    AND placed_at >= DATE '2024-07-01'
    AND placed_at < DATE '2024-08-01'
)
SELECT n.channel, COUNT(DISTINCT n.user_id) AS new_buyers,
       SUM(o.contribution) AS cohort_contribution
FROM july_new n
JOIN order_economics o USING (user_id)
WHERE o.placed_at < DATE '2024-09-01'
GROUP BY n.channel
ORDER BY n.channel;

Когда высокий коэффициент вводит в заблуждение

Первая ловушка — LTV по выручке при CAC в рублях расходов: числитель завышает доступные деньги. Вторая — CAC на новых покупателях, а LTV на тех, кто повторил покупку: выжившие выглядят выгоднее всей когорты. Третья — смешать органику и paid_ads, затем переносить средний результат на следующий платный бюджет.

Четвёртая — сравнить июльский M2 с сентябрьским M1 как качество клиентов без одинакового возраста. Пятая — назвать прогнозное «на всю жизнь» число фактом, не показав долю предсказания. Шестая — забыть поздние возвраты и подумать, что накопленный вклад не может уменьшиться. Седьмая — вычесть маркетинг и в CAC, и из самого LTV: одна и та же сумма попадёт в расчёт дважды.

Восьмая — решать только по отношению, не глядя на рубли и срок окупаемости. Если у маленького канала ratio высокий, он всё равно может дать мало абсолютного вклада; если у большого низкий, отключение без теста может убрать клиентов, которые вернулись бы позже. Таблица должна показывать размер когорты, CAC, рублёвый вклад и горизонт рядом с дробью.

Как принимать решение о новом бюджете

Зафиксируйте минимальный горизонт, за который бизнес способен ждать возврата денег, и требуемый остаток после покрытия общих расходов. Затем для каждого канала сравнивайте несколько зрелых когорт на этом горизонте, а не одну удачную неделю. Отдельно посмотрите разброс по категориям товара и размерам первого заказа: среднее может держаться на нескольких крупных покупателях.

Если paid_ads при 1,31 на M1 предлагается масштабировать, задайте предельный бюджет эксперимента и критерий остановки: новый CAC, число впервые купивших, возвраты, маржа M0 и M1. Если новая порция покупателей обходится дороже или покупает более возвратные товары, прошлое отношение не сохранится. Сравнивайте тестовую и контрольную группы там, где можно отделить прирост от перетока органических покупок.

Календарь платежей поставщикам и рекламной площадке также важен. Даже будущая окупаемость не помогает, если кассовый разрыв наступает раньше. LTV/CAC — один из столбцов решения, а не единственный сигнал.

Частые вопросы и следующий шаг

«Какое LTV/CAC нормально?» Универсального числа нет: нужный запас зависит от общих затрат и срока возврата денег. «Можно ли брать LTV всей базы и CAC одной кампании?» Нет, потому что числитель и знаменатель относятся к разным клиентам. «Должен ли LTV всегда расти?» Накопленный доход без возвратов растёт, но накопленный вклад может уменьшиться из-за возврата или переменных расходов.

«Что делать, если у новой когорты нет M1?» Покажите M0 как предварительный срез и дождитесь сравнимого горизонта либо явно обозначьте прогноз. «Нужно ли оценивать LTV на клиента или на заказ?» Для CAC нужен тот же новый клиент в знаменателе; экономика заказа отвечает на другой вопрос.

Если нужно воспроизвести когорты и окна, откройте тренажёр SQL с нуля и начните с поиска первого заказа каждого пользователя. Таблица выше станет полезной только после сверки людей, денег и даты возвратов.

Продолжить чтение
Вся библиотека