Когортный анализ в маркетинге: удержание и повторные покупки
Когортный анализ сравнивает группы клиентов с одинаковым моментом входа на одном возрасте после первого события. Чтобы вывод можно было проверить, заранее определите допустимый заказ, когорту, возраст, знаменатель и зрелость периода, а удержание в конкретном месяце считайте отдельно от накопленной повторной покупки.
- Сначала зафиксируйте вопрос и определения
- Какие поля нужны и как очистить строки
- Как назначить каждому клиенту одну когорту
- Удержание и повторная покупка — разные расчёты
- Матрица активности в точном месяце
- Накопленная повторная покупка к горизонту
- Как проверить матрицу и не сравнить незрелые периоды
- Как интерпретировать разницу и поставить следующий тест
- От одной таблицы к маркетинговой системе
- Вопросы и ответы
Сначала зафиксируйте вопрос и определения
В учебной задаче нужно понять, возвращались ли покупатели разных месяцев первой покупки в последующие календарные месяцы. Дата анализа — 31 мая 2026 года. Все строки, идентификаторы и даты вымышлены; имён, телефонов, email и других персональных данных нет.
Рабочий контракт расчёта:
- Когорта — календарный месяц первого подходящего завершённого заказа клиента.
- Подходящий заказ — строка со статусом completed, заполненным синтетическим customer_id и уникальным order_id. Отмены и полностью возвращённые заказы исключаются.
- Возраст M0, M1, M2… — число календарных месяцев от месяца первой покупки до месяца рассматриваемого заказа.
- Знаменатель — исходное число уникальных клиентов когорты; между ячейками он не меняется.
- Зрелая ячейка — полный календарный месяц, который закончился не позже даты анализа. Будущее отмечается прочерком, а не нулём.
Если бизнес считает возврат, частичную компенсацию, подписку или повторную покупку иначе, сначала меняется контракт, затем пересчитывается вся таблица. Смешивать разные определения в одной матрице нельзя.
Какие поля нужны и как очистить строки
Минимальные поля здесь — order_id, customer_id, дата заказа и статус. Для денежного анализа понадобилась бы ещё чистая сумма, но в этой задаче измеряется только факт подходящего заказа. Сначала сохраните контрольные количества, затем применяйте правила по одному.
| Шаг | Строки | Проверка |
|---|---|---|
| Синтетическая исходная таблица | 31 | Все order_id и статусы перечислены |
| Исключена отмена O08 | −1 | status = cancelled |
| Исключён полный возврат O17 | −1 | status = refunded |
| Исключена строка O30 без customer_id | −1 | Нельзя устойчиво назначить клиента когорте |
| Удалён повтор order_id O02 | −1 | Сохраняется одна запись заказа |
| Подходящие уникальные заказы | 27 | 31 − 1 − 1 − 1 − 1 = 27 |
После очистки остаются 12 клиентов. Не пытайтесь «восстановить» пропущенный идентификатор по похожему имени или адресу: в рабочем контуре нужно исправлять качество источника либо применять согласованную систему идентификации.
Как назначить каждому клиенту одну когорту
Для каждого customer_id найдите минимальную дату среди подходящих заказов и возьмите её календарный месяц. Затем рассчитайте возраст каждого последующего заказа. Например, у клиента A первая покупка 5 января, поэтому заказ 10 февраля имеет M1, а заказ 2 апреля — M3.
| Клиент | Когорта | Подходящие даты заказов |
|---|---|---|
| A | 2026-01 | 05.01, 10.02, 02.04 |
| B | 2026-01 | 12.01, 25.01, 05.03 |
| C | 2026-01 | 20.01 |
| D | 2026-01 | 28.01, 02.02, 15.03, 01.05 |
| E | 2026-02 | 03.02, 10.03, 09.04 |
| F | 2026-02 | 07.02 |
| G | 2026-02 | 20.02, 28.02, 12.05 |
| H | 2026-03 | 01.03, 01.04 |
| I | 2026-03 | 07.03, 20.05 |
| J | 2026-03 | 22.03 |
| K | 2026-04 | 03.04, 05.05 |
| L | 2026-04 | 18.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% по определению входа и не доказывает качество удержания.
| Когорта | Размер | M0 | M1 | M2 | M3 | M4 |
|---|---|---|---|---|---|---|
| 2026-01 | 4 | 4/4 = 100% | 2/4 = 50% | 2/4 = 50% | 1/4 = 25% | 1/4 = 25% |
| 2026-02 | 3 | 3/3 = 100% | 1/3 = 33,3% | 1/3 = 33,3% | 1/3 = 33,3% | — |
| 2026-03 | 3 | 3/3 = 100% | 1/3 = 33,3% | 1/3 = 33,3% | — | — |
| 2026-04 | 2 | 2/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-01 | 1/4 = 25% | 3/4 = 75% | 3/4 = 75% | 3/4 = 75% | 3/4 = 75% |
| 2026-02 | 1/3 = 33,3% | 2/3 = 66,7% | 2/3 = 66,7% | 2/3 = 66,7% | — |
| 2026-03 | 0/3 = 0% | 1/3 = 33,3% | 2/3 = 66,7% | — | — |
| 2026-04 | 1/2 = 50% | 2/2 = 100% | — | — | — |
Повтор в M0 возможен: B сделал два январских заказа, G — два февральских, L — два апрельских. Для февраля к M3 повторили E и G, то есть 2/3 = 66,7%, хотя активен именно в M3 только G — 1/3 = 33,3%. Это контрольный пример, который доказывает, что две метрики нельзя подменять друг другом.
Как проверить матрицу и не сравнить незрелые периоды
- Сверьте аудит строк: 31 исходная − 4 исключения = 27 подходящих заказов.
- Сверьте клиентов: 12 уникальных customer_id и сумма размеров когорт 12.
- Для каждой ячейки сохраните список customer_id, а не только процент.
- Убедитесь, что числитель равен длине списка и не превышает исходный размер когорты.
- Для накопленного повтора проверьте, что числитель не уменьшается на зрелых горизонтах.
- Маскируйте ячейку, если полный календарный месяц ещё не закончился.
Расчёт примера выполнен двумя независимыми способами: через группировки 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. Накопленная повторная покупка, напротив, на зрелых горизонтах не должна уменьшаться.
