← К портфолио Cohort Analysis Dashboard preview
Ситуация
Когортный анализ удержания и LTV на синтетических данных: средний retention прячет динамику
Задача
Показать поведение каждой когорты отдельно, а не сглаженную среднюю по всей базе
Действия
Матрица удержания, ARPU и LTV по когортам, поправка на возраст наблюдения, выгрузка в Tableau (CSV + Hyper)
Результат
Когортная матрица вместо среднего retention: видно скорость оттока и расхождение монетизации с удержанием
Стек
Pythonpandasmatplotlib / seabornJupyter NotebookTableau (Hyper API)
Исходники Смотреть на GitHub → Обновлено: Sep 4, 2026
Содержание
  1. Ситуация
  2. Задача
  3. Действия
  4. Результат
  5. Ограничения
  6. Документация

Cohort Analysis Dashboard

Ситуация

Когортный анализ удержания и LTV на синтетических данных: удержание пользователей, кривые оттока и выручка по когортам прихода. Средний retention прячет динамику, а LTV без поправки на возраст когорты вводит в заблуждение. Задача — собрать матрицу, на которой видно, где скорость оттока выше и где монетизация падает быстрее удержания. Пайплайн на Python (pandas + matplotlib/seaborn), плюс выгрузка для Tableau; данные детерминированные (seed=42), воспроизводятся из кода.

Задача

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

Действия

Модель данных — одна строка = «пользователь × месяц наблюдения»:

Поле Тип Описание
user_id int идентификатор пользователя
cohort_month date месяц прихода (выводится из join_date, не отдельное поле)
join_date date дата регистрации (первое число месяца)
period int месяцев с прихода (0 = месяц регистрации)
is_active int 0/1 активен ли в этом месяце
revenue int выручка за месяц (0, если не активен)

cohort_month выводится из join_date, как в реальном продакшене. Младшие когорты наблюдались меньше месяцев — матрица удержания треугольная.

Методология:

  • Period 0 = 100% удержания по определению (все активны в месяц прихода). Кривая убывает с периода 1: retention(p) = 0.85 · 0.75^(p-1).
  • Выручка: активный месяц → Poisson(λ=10); неактивный → 0.
  • Размеры когорт — число уникальных user_id в period == 0.
  • ARPU — средняя выручка на пользователя когорты; LTV — кумулятивный ARPU по периодам.

Функции: cohort_sizes() (приток по месяцам), retention_matrix() (матрица + кривые), revenue_by_cohort() (ARPU/LTV).

Tableau-выгрузка (tableau_export.py) создаёт в tableau/:

  • cohort_export.csv — плоский shape для Tableau (доб. cohort_label и period_date — календарный месяц наблюдения);
  • cohort_extract.hyper — Tableau Hyper-экстракт через официальный Hyper API.

Heatmap в Tableau: Columns = period, Rows = cohort_label, Marks = Square, Color = AVG(is_active), Text = % of Total по строке.

Результат

Когортный вид важнее среднего retention: на нём видно скорость оттока и монетизацию относительно удержания. Ключевые решения по методологии — cohort_month выводится из join_date (а не отдельным случайным полем), period 0 = 100% по конвенции, NaN замаскированы в heatmap вместо рендера nan%.

Ограничения

LTV младших когорт занижен из-за короткой истории — сравнивать LTV корректно только при равном «возрасте» когорты. Данные синтетические, поэтому числа иллюстрируют метод, а не поведение реального продукта.

Документация

Аналитика

Данные: github.com/NikitaBoyarkin/tableau_cohort_analysis: cohort_data.csv (5,469 user-period rows, 1,000 users, cohorts 2023-01..2023-10) — metrics computed with pandas from the committed CSV artifact: cohort sizes at period 0, retention mean by cohort x period, blended retention by period, cohort LTV = total_revenue / users

Матрица удержания когорт

Доля активных пользователей по когорте прихода (строки) и месяцу с регистрации (столбцы). Месяц прихода — 100 % по определению. Полная матрица треугольная: у младших когорт история наблюдения короче. Показан полностью наблюдаемый фрагмент 5 × 6 — все значения реальные.

2023-01 2023-02 2023-03 2023-04 2023-05 M0 M1 M2 M3 M4 M5 2023-01 · M0: 100% 100% 2023-01 · M1: 83.5% 83.5% 2023-01 · M2: 57.7% 57.7% 2023-01 · M3: 39.2% 39.2% 2023-01 · M4: 33% 33% 2023-01 · M5: 21.6% 21.6% 2023-02 · M0: 100% 100% 2023-02 · M1: 81% 81% 2023-02 · M2: 65.5% 65.5% 2023-02 · M3: 45.7% 45.7% 2023-02 · M4: 34.5% 34.5% 2023-02 · M5: 25.9% 25.9% 2023-03 · M0: 100% 100% 2023-03 · M1: 86% 86% 2023-03 · M2: 66.3% 66.3% 2023-03 · M3: 48.8% 48.8% 2023-03 · M4: 32.6% 32.6% 2023-03 · M5: 30.2% 30.2% 2023-04 · M0: 100% 100% 2023-04 · M1: 84.4% 84.4% 2023-04 · M2: 67.5% 67.5% 2023-04 · M3: 44.2% 44.2% 2023-04 · M4: 44.2% 44.2% 2023-04 · M5: 29.9% 29.9% 2023-05 · M0: 100% 100% 2023-05 · M1: 86.1% 86.1% 2023-05 · M2: 65.2% 65.2% 2023-05 · M3: 49.6% 49.6% 2023-05 · M4: 38.3% 38.3% 2023-05 · M5: 26.1% 26.1% 0 100%
Выводы
  • Удержание через 1 месяц составляет 81.0–86.7 %, через 5 месяцев падает до 21.6–30.2 %.
  • Самое глубокое падение — у когорты 2023-01: с 83.5 % на M1 до 21.6 % на M5, т.е. −72 % от уровня первого месяца.

Размер когорт

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

0 50 100 150 2023-01 — users: 97 97 2023-02 — users: 116 116 2023-03 — users: 86 86 2023-04 — users: 77 77 2023-05 — users: 115 115 2023-06 — users: 105 105 2023-07 — users: 100 100 2023-08 — users: 108 108 2023-09 — users: 93 93 2023-10 — users: 103 103 2023-01 2023-02 2023-03 2023-04 2023-05 2023-06 2023-07 2023-08 2023-09 2023-10 Когорта Пользователи
Выводы
  • Суммарный приток — 1000 пользователей за 10 месяцев, от 77 (2023-04) до 116 (2023-02) в месяц.
  • Пиковый приток 116 (февраль 2023) в 1.5 раза выше минимального 77 (апрель 2023).

Кривая удержания (среднее по когортам)

Средняя доля активных пользователей по всем когортам в зависимости от месяца с регистрации. Период 0 — 100 % по определению.

0 50 100 retention M0 — retention: 100 M1 — retention: 84.5 M2 — retention: 62.3 M3 — retention: 47 M4 — retention: 35.9 M5 — retention: 26.5 M6 — retention: 19.9 M7 — retention: 15.4 M8 — retention: 9.9 M9 — retention: 9.3 M0 M1 M2 M3 M4 M5 M6 M7 M8 M9 Месяц с регистрации Активные, %
Выводы
  • Через 3 месяца остаётся 47.0 % пользователей, через 9 месяцев — 9.3 %.
  • За первые 3 месяца уходит больше половины: 53.0 % оттока уже на M3.

LTV по когортам

Суммарная выручка когорты, делённая на её размер. У младших когорт LTV занижен из-за короткой истории наблюдения — сравнивать корректно только когорты равного «возраста».

0 10 20 30 40 2023-01 — ltv: 37.82 37.82 2023-02 — ltv: 39.47 39.47 2023-03 — ltv: 39.63 39.63 2023-04 — ltv: 39.45 39.45 2023-05 — ltv: 36.53 36.53 2023-06 — ltv: 34.11 34.11 2023-07 — ltv: 29.79 29.79 2023-08 — ltv: 23.2 23.2 2023-09 — ltv: 18.29 18.29 2023-10 — ltv: 10.3 10.3 2023-01 2023-02 2023-03 2023-04 2023-05 2023-06 2023-07 2023-08 2023-09 2023-10 Когорта LTV, ед. выручки
Выводы
  • Максимальный LTV — 39.63 (2023-03), минимальный — 10.30 (2023-10).
  • Разрыв между старшей и младшей когортой — 3.8 раза (39.63 против 10.30), что отражает эффект возраста когорты, а не ухудшение качества.

Смотрите также

Карта связей

Проекты, записи и темы, связанные с этим проектом. Наведите на узел, чтобы увидеть название; клик — открыть.