Когортная таблица: как её читать
Чему научишься
- читать когортную таблицу: строки — , столбцы — возраст (D0, D1, D7, D30);
- различать абсолютное время (календарь) и возраст когорты — и понимать, где в таблице проходит диагональ;
- понимать, почему таблица треугольная и что означают пустые клетки;
- сравнивать когорты одного возраста по столбцу и прослеживать одну когорту по строке;
- за минуту делать первое чтение тепловой карты (heatmap) — таблицы с цветовой заливкой.
Одна когорта — строка. Много когорт — таблица
В прошлом уроке мы считали одной . Одна когорта — это одна строка чисел. Если сложить друг под другом когорты продукта, получится когортная таблица — один из основных инструментов, с помощью которых аналитик смотрит на удержание.
В этом курсе будем читать её так:
- строка = когорта, то есть все, кто пришёл впервые в один день или в одну неделю;
- столбец = возраст когорты: D0, D1, D7, D14, D30;
- клетка = сколько человек этой когорты были активны в этом возрасте — в абсолютных значениях или в процентах от размера когорты.
Вот фрагмент чёрного ящика Котомаркета: покажем когорты с недельным шагом. Сегодня 14 марта. Сначала посмотрим на абсолютные значения:
| когорта | размер (D0) | D1 | D7 | D14 | D30 |
|---|---|---|---|---|---|
| 1 февраля | 1 200 | 456 | 168 | 120 | 84 |
| 8 февраля | 1 400 | 518 | 182 | 126 | 84 |
| 15 февраля | 1 300 | 468 | 156 | 104 | — |
| 22 февраля | 1 500 | 525 | 165 | 105 | — |
| 1 марта | 1 600 | 528 | 176 | — | — |
| 8 марта | 1 500 | 480 | — | — | — |
По абсолютным значениям нельзя напрямую сравнивать удержание: когорты разного размера. Например, 456 активных пользователей из 1 200 — это 38%. Поэтому таблицу почти всегда переводят в проценты: каждую клетку делят на размер своей когорты — тот самый фиксированный знаменатель из прошлого урока.
| когорта | размер | D1 | D7 | D14 | D30 |
|---|---|---|---|---|---|
| 1 февраля | 1 200 | 38% | 14% | 10% | 7% |
| 8 февраля | 1 400 | 37% | 13% | 9% | 6% |
| 15 февраля | 1 300 | 36% | 12% | 8% | — |
| 22 февраля | 1 500 | 35% | 11% | 7% | — |
| 1 марта | 1 600 | 33% | 11% | — | — |
| 8 марта | 1 500 | 32% | — | — | — |
Столбец с размером когорты стоит оставлять: без него проценты повисают в воздухе — ровно как в уроке про знаменатели.
Абсолютное время против возраста когорты
Самая важная мысль этого урока: в когортной таблице два разных времени, и их постоянно путают.
Возраст задают столбцы. Движение вправо по строке — это движение по жизни одной группы: D0, затем D1, D7, D14 и D30.
Абсолютное время (календарь) — дата, когда произошло наблюдаемое событие. Она складывается из даты старта когорты и её возраста. Чем ниже строка, тем позже пришла когорта, но конкретная календарная дата не закреплена ни за одной строкой, ни за одним столбцом. В полной таблице с равномерным шагом одинаковая дата проходит по диагонали. В сокращённой таблице часть точек этой диагонали может отсутствовать.
Проверим на дате 1 марта в условном невисокосном году. Для когорты 1 марта это D0. Для когорты 22 февраля — D7, потому что 22 февраля + 7 дней = 1 марта. Для когорты 15 февраля это D14, для когорты 8 февраля — D21, а для когорты 1 февраля — D28. В схеме есть только столбцы D0, D1, D7, D14 и D30, поэтому даты для D21 и D28 в ней не отмечены:
D0 D1 D7 D14 D30
1 февраля · · · · · ↖
8 февраля · · · · · ↖ диагональ =
15 февраля · · · [1 мар] · ↖ одна календарная
22 февраля · · [1 мар] · · ↖ дата
1 марта [1 мар] · · · · ↖
Зачем это знать? Краткие события, которые затрагивают всех активных пользователей в конкретную дату, — сбой трекинга, праздник, однодневная акция — оставляют след по календарной диагонали. Если 1 марта сломался сбор событий, провалятся D0 у когорты 1 марта, D7 у когорты 22 февраля, D14 у когорты 15 февраля и другие клетки этого календарного дня, не показанные в сокращённой таблице. Если смотреть только на столбец D7, это будет похоже на «одну странную когорту», хотя причина была общей и однодневной.
Изменения, которые применяются к пользователю с момента первого визита, — например, новый онбординг или новая цена только для новичков, — проявляются иначе: в свежих когортах сразу на нескольких возрастах, то есть в нижних строках по мере их дозревания. А релиз, затронувший в одну дату всех активных пользователей, относится к календарным эффектам. Различать эти два узора — половина мастерства чтения когортных таблиц.
Почему таблица треугольная
Обрати внимание на форму: заполненная часть таблицы — треугольник, а правый нижний угол пуст. Это не потеря данных и не ошибка выгрузки.
Причина ровно та, что в прошлом уроке: молодые ещё не достигли более поздних возрастов. Сегодня 14 марта, поэтому:
- у когорты 8 марта известен только D1 (9 марта). D7 наступит 15 марта — завтра;
- у когорты 1 марта известны D1 и D7, а D14 придётся на 15 марта;
- у когорты 15 февраля D30 наступит 16 марта — через два дня.
Чем ниже строка, тем короче её заполненная часть. Отсюда треугольник — и отсюда же правило:
Значения в столбце сравнивают только по тем строкам, где клетка заполнена. Пустая клетка — «пока неизвестно», а не «ноль».
Ошибка, которую делают почти все, кто впервые строит такую таблицу: посчитать «средний D30 по всем когортам». Пустые клетки при этом либо превращаются в нули — среднее обваливается и появляется несуществующее падение , — либо просто выпадают. Во втором случае среднее описывает только зрелые когорты. Такой расчёт допустим, но его нельзя выдавать за показатель всех когорт: у свежих D30 ещё неизвестен.
Есть и обратный перекос: если смотреть только на зрелые когорты, свежие данные не видны совсем, и проблему замечают на месяц позже, чем могли бы. Поэтому в жизни делают так: ранние отметки (D1, D7) читают по всем когортам, которые уже успели до них дозреть, а поздние (D30) — только по зрелым. D1 и D7 созревают быстро и первыми показывают, что новые поколения стали хуже.
Как читать: строка вправо, столбец вниз
У когортной таблицы два базовых направления чтения, и они отвечают на разные вопросы.
Строка вправо — жизнь одной . 38% → 14% → 10% → 7%. Видно форму кривой : резкое падение между D1 и D7, после которого снижение замедляется. Так ведёт себя почти любой продукт: большая часть новичков отваливается в первые дни, а те, кто дожил до второй недели, уходят гораздо медленнее. Плато удержания — участок, где значение почти перестаёт снижаться. Если более поздние точки подтверждают плато, у продукта есть устойчивое ядро пользователей. Если кривая продолжает падать к нулю, такого ядра нет. По одной точке D30 плато ещё нельзя считать доказанным.
Столбец вниз — сравнение поколений при одинаковом возрасте. Это самое ценное движение, потому что оно сравнивает сравнимое: например, всех пользователей в возрасте ровно семи дней.
столбец D1: 38% → 37% → 36% → 35% → 33% → 32%
столбец D7: 14% → 13% → 12% → 11% → 11%
В D1 видны шесть последовательно снижающихся значений. В D7 показатель падает с 14% до 11% за первые четыре доступные когорты, а затем остаётся на 11%. Вместе эти последовательности похожи на ухудшение, а не на одиночный скачок, но сами по себе ещё не доказывают, что случайности нет: сигнал нужно проверять дальше. При этом размер последней когорты выше, чем первой (1 200 → 1 500), то есть людей приходит больше, а остаётся их меньшая доля.
Запись №7 в журнале Л.: «Маркетинг празднует рост DAU. Я смотрю на столбец D7 у новых когорт: 14, 13, 12, 11. Мы наливаем воду в дырявое ведро и хвалим кран».
Первое чтение heatmap за минуту
Когортную таблицу часто раскрашивают. В распространённой одноцветной шкале тёмное означает большее значение, светлое — меньшее. Такая раскраска называется heatmap («тепловая карта»), и глазами она читается быстрее, чем цифрами. Порядок первого чтения:
- Проверь знаменатели — столбец с размерами когорт. В строке на 40 человек один кот меняет показатель на 2,5 процентного пункта, поэтому её значения намного шумнее, чем у тысячной когорты.
- Посмотри на форму строки — где резкий обрыв и где плато.
- Пройди столбцы вниз — поколения улучшаются или ухудшаются?
- Найди аномалии. Одна выбивающаяся строка — проверь, что случилось с этим набором людей: изменился ли источник трафика, не было ли акции. Выбивающаяся диагональ в таблице с равным шагом когорт и возрастов указывает на событие в один календарный период: релиз или сбой. В таблице с неравномерными отметками D1, D7, D14 и D30 календарное событие нужно искать по датам отдельных клеток — прямой диагонали может не быть. Один выбивающийся столбец — ищи причину, связанную с этим возрастом: механику продукта или расчёт метрики; календарный эффект возможен, если эта отметка систематически приходится, например, на выходной.
- Не трактуй правый нижний угол как плохой результат — клетки там пусты, потому что когорты ещё не достигли нужного возраста.
d1_pct, d7_pct и d30_pct.d7_feb и d7_mar в процентах, разницу в процентных пунктах diff_pp и относительное изменение diff_rel в процентах. Заметь: в абсолютах март выглядит лучше.Главное из урока
- строки когортной таблицы — , столбцы — возраст (D0, D1, D7, D30), а каждая клетка — число активных или доля от размера своей когорты;
- в таблице два времени: возраст идёт по столбцам, а в полной таблице с равномерным шагом календарная дата — по диагонали;
- таблица треугольная, потому что молодые когорты ещё не достигли старшего возраста; пустая клетка не равна нулю;
- читая строку слева направо, видишь форму кривой ; читая столбец сверху вниз, сравниваешь поколения в одинаковом возрасте;
- аномалия в одной строке указывает на особенность конкретной когорты, по диагонали — на событие календарного дня, в столбце — на системный эффект конкретного возраста или ошибку расчёта метрики.
Дальше — дело № 0. Расследование ведёшь ты: используешь шаблон из шести шагов, делаешь свои расчёты и формулируешь вывод. Разбор Л. откроется только после твоего решения.