← К портфолио Cohort Analysis Dashboard preview
Стек
Pythonpandasmatplotlib / seabornJupyter NotebookTableau (Hyper API)
Эффект
  • Cohort retention matrix with triangular decay
  • ARPU / LTV by cohort with proper observation-age caveat
  • Tableau-ready export (CSV + .hyper extract)
  • Reproducible seeded pipeline (seed=42)

Cohort Analysis Dashboard

Business Context

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

Hypothesis

Если разбить пользователей на когорты по месяцу первой активации и построить retention-матрицу + кривые удержания + ARPU/LTV, станет видно скорость оттока по когортам и где монетизация падает быстрее удержания.

Data & Method

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

ПолеТипОписание
user_idintидентификатор пользователя
cohort_monthdateмесяц прихода (выводится из join_date, не отдельное поле)
join_datedateдата регистрации (первое число месяца)
periodintмесяцев с прихода (0 = месяц регистрации)
is_activeint 0/1активен ли в этом месяце
revenueintвыручка за месяц (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 по строке.

Insight

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

Impact

  • Когортная матрица удержания с треугольным убыванием — видно, на каком месяце когорта теряет активность.
  • ARPU / LTV по когортам с корректным caveat по возрасту наблюдения.
  • Tableau-ready экспорт — CSV + .hyper-экстракт, инструкция по сборке view.
  • Воспроизводимый пайплайнuv + pyproject.toml + .python-version, seed=42.

Documentation

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