Перейти к содержимому
8 (495) 660-36-72 8 (800) 600-36-72 (по РФ бесплатно)

Когортный анализ в маркетинге: удержание и повторные покупки

Когортный анализ сравнивает группы клиентов с одинаковым моментом входа на одном возрасте после первого события. Чтобы вывод можно было проверить, заранее определите допустимый заказ, когорту, возраст, знаменатель и зрелость периода, а удержание в конкретном месяце считайте отдельно от накопленной повторной покупки.

Когортный анализ в маркетинге: удержание и повторные покупки

Сначала зафиксируйте вопрос и определения

В учебной задаче нужно понять, возвращались ли покупатели разных месяцев первой покупки в последующие календарные месяцы. Дата анализа — 31 мая 2026 года. Все строки, идентификаторы и даты вымышлены; имён, телефонов, email и других персональных данных нет.

Рабочий контракт расчёта:

  • Когорта — календарный месяц первого подходящего завершённого заказа клиента.
  • Подходящий заказ — строка со статусом completed, заполненным синтетическим customer_id и уникальным order_id. Отмены и полностью возвращённые заказы исключаются.
  • Возраст M0, M1, M2… — число календарных месяцев от месяца первой покупки до месяца рассматриваемого заказа.
  • Знаменатель — исходное число уникальных клиентов когорты; между ячейками он не меняется.
  • Зрелая ячейка — полный календарный месяц, который закончился не позже даты анализа. Будущее отмечается прочерком, а не нулём.

Если бизнес считает возврат, частичную компенсацию, подписку или повторную покупку иначе, сначала меняется контракт, затем пересчитывается вся таблица. Смешивать разные определения в одной матрице нельзя.

Какие поля нужны и как очистить строки

Минимальные поля здесь — order_id, customer_id, дата заказа и статус. Для денежного анализа понадобилась бы ещё чистая сумма, но в этой задаче измеряется только факт подходящего заказа. Сначала сохраните контрольные количества, затем применяйте правила по одному.

ШагСтрокиПроверка
Синтетическая исходная таблица31Все order_id и статусы перечислены
Исключена отмена O08−1status = cancelled
Исключён полный возврат O17−1status = refunded
Исключена строка O30 без customer_id−1Нельзя устойчиво назначить клиента когорте
Удалён повтор order_id O02−1Сохраняется одна запись заказа
Подходящие уникальные заказы2731 − 1 − 1 − 1 − 1 = 27

После очистки остаются 12 клиентов. Не пытайтесь «восстановить» пропущенный идентификатор по похожему имени или адресу: в рабочем контуре нужно исправлять качество источника либо применять согласованную систему идентификации.

Как назначить каждому клиенту одну когорту

Для каждого customer_id найдите минимальную дату среди подходящих заказов и возьмите её календарный месяц. Затем рассчитайте возраст каждого последующего заказа. Например, у клиента A первая покупка 5 января, поэтому заказ 10 февраля имеет M1, а заказ 2 апреля — M3.

КлиентКогортаПодходящие даты заказов
A2026-0105.01, 10.02, 02.04
B2026-0112.01, 25.01, 05.03
C2026-0120.01
D2026-0128.01, 02.02, 15.03, 01.05
E2026-0203.02, 10.03, 09.04
F2026-0207.02
G2026-0220.02, 28.02, 12.05
H2026-0301.03, 01.04
I2026-0307.03, 20.05
J2026-0322.03
K2026-0403.04, 05.05
L2026-0418.04, 25.04

Контроль размера: январь — 4 клиента, февраль — 3, март — 3, апрель — 2; 4 + 3 + 3 + 2 = 12. Один клиент встречается только в одной строке размера когорты, даже если сделал несколько заказов в месяце входа.

Удержание и повторная покупка — разные расчёты

В этой статье периодное удержание Mk — доля клиентов исходной когорты, у которых есть хотя бы один подходящий заказ именно в месяце возраста k. Повторная покупка к горизонту Mk — доля клиентов, накопивших не менее двух подходящих заказов с M0 по Mk. Первая метрика отвечает «кто был активен в этом месяце», вторая — «кто уже успел повторить покупку к этому сроку».

Документация Google Analytics показывает, что результат когортного исследования зависит от критерия включения, критерия возвращения, гранулярности и режима standard, rolling или cumulative: когортное исследование GA4. Это пример необходимости настроек, а не требование использовать определение Google.

Amplitude также различает возврат точно в период и возврат в период или позже и отдельно предупреждает о неполных недавних интервалах: FAQ по retention analysis. Поэтому в своей выгрузке подпишите формулу словами, а не полагайтесь на название графика в интерфейсе.

Матрица активности в точном месяце

В числителе — уникальные клиенты с заказом в точном возрасте, в знаменателе — исходный размер когорты. M0 равен 100% по определению входа и не доказывает качество удержания.

КогортаРазмерM0M1M2M3M4
2026-0144/4 = 100%2/4 = 50%2/4 = 50%1/4 = 25%1/4 = 25%
2026-0233/3 = 100%1/3 = 33,3%1/3 = 33,3%1/3 = 33,3%
2026-0333/3 = 100%1/3 = 33,3%1/3 = 33,3%
2026-0422/2 = 100%1/2 = 50%

Проверка по клиентам: январский M1 дают A и D, M2 — B и D, M3 — A, M4 — D. Февральский M1 и M2 даёт E, M3 — G. Мартовский M1 даёт H, M2 — I. Апрельский M1 даёт K. Ни один числитель не превышает знаменатель.

Периодная доля может снижаться и снова расти: это не накопительная метрика. В большой реальной выборке рост в позднем месяце может быть закономерен, но его всё равно нужно объяснять циклом покупки, коммуникацией и сезонностью, а не самой формой таблицы.

Накопленная повторная покупка к горизонту

Теперь для каждого клиента считаем число подходящих заказов от M0 до выбранного возраста. Как только их стало два, клиент входит в числитель всех последующих зрелых горизонтов. Поэтому накопленный показатель не должен уменьшаться.

КогортаM0К M1К M2К M3К M4
2026-011/4 = 25%3/4 = 75%3/4 = 75%3/4 = 75%3/4 = 75%
2026-021/3 = 33,3%2/3 = 66,7%2/3 = 66,7%2/3 = 66,7%
2026-030/3 = 0%1/3 = 33,3%2/3 = 66,7%
2026-041/2 = 50%2/2 = 100%

Повтор в M0 возможен: B сделал два январских заказа, G — два февральских, L — два апрельских. Для февраля к M3 повторили E и G, то есть 2/3 = 66,7%, хотя активен именно в M3 только G — 1/3 = 33,3%. Это контрольный пример, который доказывает, что две метрики нельзя подменять друг другом.

Как проверить матрицу и не сравнить незрелые периоды

  1. Сверьте аудит строк: 31 исходная − 4 исключения = 27 подходящих заказов.
  2. Сверьте клиентов: 12 уникальных customer_id и сумма размеров когорт 12.
  3. Для каждой ячейки сохраните список customer_id, а не только процент.
  4. Убедитесь, что числитель равен длине списка и не превышает исходный размер когорты.
  5. Для накопленного повтора проверьте, что числитель не уменьшается на зрелых горизонтах.
  6. Маскируйте ячейку, если полный календарный месяц ещё не закончился.

Расчёт примера выполнен двумя независимыми способами: через группировки pandas и через отдельные словари и множества в чистом Python. Оба пути дали одинаковые размеры когорт, числители периодной активности и накопленного повтора. Такая сверка защищает от ошибки логики, но не от неверного бизнес-определения — его нужно проверить до кода.

На 31 мая февральский M4, мартовский M3–M4 и апрельский M2–M4 ещё не наблюдались полностью. Прочерк означает «нет полного горизонта», а не «нет покупателей».

Как интерпретировать разницу и поставить следующий тест

В синтетическом наборе январская активность в M1 равна 50%, а февральская и мартовская — по 33,3%. Эти когорты слишком малы, вымышлены и имеют разный возраст. Таблица не доказывает влияние канала, сезонности, предложения или коммуникации.

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

Не запускайте широкую кампанию и не объявляйте «лучшую» когорту только по этой матрице. Сначала проверьте объём, интервалы неопределённости, состав каналов, цикл повторной покупки и возможные изменения продукта.

От одной таблицы к маркетинговой системе

Когортная матрица отвечает на один вопрос о поведении во времени. Чтобы принять решение, её связывают с источником привлечения, CRM-сегментом, воронкой, коммуникацией и дизайном проверки. Общая архитектура данных разобрана в материале о связке Метрики, CRM и расходов.

Курс «Интернет-маркетолог» даёт более широкую связку аналитики и KPI с CRM, персонализацией, автоворонками и оценкой клиентского пути. Статья оставляет законченный и повторяемый расчёт; обучение нужно, чтобы встраивать его в систему маркетинговых решений и экспериментов.

Надёжный когортный анализ начинается не с цветной матрицы, а с контракта данных. Назначьте каждому клиенту одну когорту, зафиксируйте знаменатель, разделите точный период и накопленный горизонт, сохраните списки клиентов за ячейками и не превращайте незрелый период или корреляцию в вывод.

Практика вместо теории

От одной когортной матрицы — к системе CRM и digital-аналитики

Курс «Интернет-маркетолог» помогает связать аналитику и KPI с CRM, персонализацией, автоворонками и клиентским путём. Преподаватель курса — Гаврилов Александр; по итогам обучения выдаётся Удостоверение о повышении квалификации.

Вопросы и ответы

  • Какую гранулярность выбрать — день, неделю или месяц?

    Она должна соответствовать циклу повторного действия и объёму данных. Для редких покупок день создаст много пустых ячеек, для частых действий месяц скроет динамику. Определите гранулярность до сравнения когорт.

  • Нужно ли включать отмены и возвраты?

    Запишите правило под бизнес-вопрос. В этом примере отменённые и полностью возвращённые заказы исключены до назначения когорт. При другом определении пересчитайте и входное событие, и все последующие ячейки.

  • Почему M0 в матрице удержания равен 100%?

    Потому что когорта сформирована по первому подходящему заказу, и каждый её участник по определению активен в месяце входа. Для оценки возврата полезнее зрелые M1 и далее.

  • Может ли периодное удержание вырасти на позднем месяце?

    Да. Оно считает активность именно в отдельном периоде, поэтому люди могут пропустить M1 и вернуться в M2. Накопленная повторная покупка, напротив, на зрелых горизонтах не должна уменьшаться.

По теме