← К портфолио Product Analytics Dashboard (Streamlit) preview
Ситуация
Портфолио показывает весь AARRR-цикл на одном датасете из 8 000 синтетических пользователей, а не одну метрику
Задача
Собрать метрики так, чтобы они читались как один связный сюжет, а не набор отдельных графиков
Действия
Детерминированный seed и общий кэш: одна база для Funnel, Retention, Revenue и Segments; 5 страниц на Streamlit
Результат
Funnel, Retention, Revenue и Segments читаются на одной базе; тот же UI стал слоем презентации Supabase-проекта
Стек
PythonStreamlitpandas / NumPy
Исходники Смотреть на GitHub → Репозиторий приватный — доступ по запросу Обновлено: Aug 14, 2026
Содержание
  1. Ситуация
  2. Задача
  3. Действия
  4. Страницы
  5. Запуск
  6. Результат
  7. Ограничения
  8. Документация

Product Analytics Dashboard (Streamlit)

Ситуация

Аналитическое портфолио должно показывать весь AARRR-цикл на одном согласованном датасете, а не одну метрику изолированно. Этот дашборд — self-contained приложение: данные генерируются детерминированно, метрики воспроизводимы между запусками, а тот же UI позже стал слоем презентации для full-stack Supabase-проекта.

Задача

От меня требовалось собрать метрики так, чтобы они читались как один связный сюжет, а не как набор отдельных графиков.

Действия

Данные: синтетический SaaS-датасет, 8 000 пользователей, Jan 2024 – Jun 2025. Генерируется in-memory с детерминированным seed = 42 и кэшируется через @st.cache_data — датасет идентичен между запусками и разделяем между страницами в сессии.

Страницы

Page Что показывает
Overview KPI (users, paid, MRR, active 30d, stickiness), DAU trend, monthly signups, conversion by channel
Funnel app_open → signup → activate → start_trial → subscribe с пошаговым drop-off
Retention Cohort retention heatmap (месяц signup × месяцев с момента signup)
Revenue MRR growth, MRR by plan, ARPU, logo churn
Segments Распределения + конверсия + ARPU по сегменту / каналу / стране / устройству

Запуск

uv sync
uv run streamlit run app.py

Результат

Все AARRR-вопросы читаются на одной согласованной базе. Детерминированный seed означает, что Funnel, Retention, Revenue и Segments говорят об одних и тех же пользователях, а числа можно проверить. Позже этот же UI стал слоем презентации для full-stack Supabase-проекта — сменился только слой данных.

Ограничения

Данные синтетические и сгенерированы in-memory: числа воспроизводимы, но не описывают реальный продукт. Ценность дашборда — в полноте цикла и согласованности метрик между страницами, а не в конкретных значениях.

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

Аналитика

Данные: github.com/NikitaBoyarkin/streamlit-app: data.py — deterministic synthetic SaaS dataset (seed=42; 8,000 users, 2024-01..2025-06); metrics computed by re-running the repo's own helpers (generate / funnel_counts / cohort_retention_matrix / mrr_series / conversion_by_channel) via `uv sync && uv run python data.py`

Воронка активации и оплаты

Уникальные пользователи на каждом шаге: app_open → signup → activate → start_trial → subscribe. Шаги app_open и signup совпадают по построению датасета.

app_open: 8000 (100% от макс.) app_open 8000 signup: 8000 (100% от макс.) signup 8000 activate: 5478 (68.5% от макс.) activate 5478 start_trial: 3025 (37.8% от макс.) start_trial 3025 subscribe: 1086 (13.6% от макс.) subscribe 1086
Выводы
  • Из 8000 зарегистрированных до активации доходят 5478 (68.5 %), до подписки — 1086 (13.6 %).
  • Самый большой провал — на шаге start_trial→subscribe: теряются 1939 пользователей (64.1 % запустивших триал), конверсия шага — 35.9 %.

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

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

2024-01 2024-02 2024-03 2024-04 2024-05 2024-06 2024-07 2024-08 2024-09 2024-10 2024-11 2024-12 2025-01 2025-02 2025-03 2025-04 2025-05 2025-06 M0 M1 M2 M3 M4 M5 M6 M7 M8 M9 M10 M11 M12 2024-01 · M0: 88.9% 2024-01 · M1: 79.7% 2024-01 · M2: 59.9% 2024-01 · M3: 43.3% 2024-01 · M4: 34.8% 2024-01 · M5: 29.3% 2024-01 · M6: 22.8% 2024-01 · M7: 18.4% 2024-01 · M8: 13.8% 2024-01 · M9: 13.4% 2024-01 · M10: 9.4% 2024-01 · M11: 6.7% 2024-01 · M12: 6.7% 2024-02 · M0: 88.5% 2024-02 · M1: 80.1% 2024-02 · M2: 55.2% 2024-02 · M3: 44.4% 2024-02 · M4: 34.9% 2024-02 · M5: 28% 2024-02 · M6: 23.8% 2024-02 · M7: 15.7% 2024-02 · M8: 16.1% 2024-02 · M9: 11.3% 2024-02 · M10: 9.3% 2024-02 · M11: 8.4% 2024-02 · M12: 6.4% 2024-03 · M0: 89.7% 2024-03 · M1: 80.9% 2024-03 · M2: 59.3% 2024-03 · M3: 45.1% 2024-03 · M4: 33.3% 2024-03 · M5: 27.2% 2024-03 · M6: 18.7% 2024-03 · M7: 18.9% 2024-03 · M8: 13.8% 2024-03 · M9: 13.6% 2024-03 · M10: 10.3% 2024-03 · M11: 8.6% 2024-03 · M12: 8.6% 2024-04 · M0: 91.6% 2024-04 · M1: 79.3% 2024-04 · M2: 53.5% 2024-04 · M3: 39.8% 2024-04 · M4: 31.9% 2024-04 · M5: 24.9% 2024-04 · M6: 20% 2024-04 · M7: 18.8% 2024-04 · M8: 15.1% 2024-04 · M9: 11.2% 2024-04 · M10: 10% 2024-04 · M11: 8.6% 2024-04 · M12: 6.3% 2024-05 · M0: 91.2% 2024-05 · M1: 76.3% 2024-05 · M2: 54.5% 2024-05 · M3: 40.5% 2024-05 · M4: 28.7% 2024-05 · M5: 25% 2024-05 · M6: 19.4% 2024-05 · M7: 12.7% 2024-05 · M8: 11.2% 2024-05 · M9: 8% 2024-05 · M10: 8% 2024-05 · M11: 6.9% 2024-05 · M12: 3.9% 2024-06 · M0: 90.5% 2024-06 · M1: 80.9% 2024-06 · M2: 57.6% 2024-06 · M3: 46.4% 2024-06 · M4: 33% 2024-06 · M5: 27.9% 2024-06 · M6: 21.6% 2024-06 · M7: 16.8% 2024-06 · M8: 16.8% 2024-06 · M9: 12.2% 2024-06 · M10: 9.9% 2024-06 · M11: 9.9% 2024-06 · M12: 6.5% 2024-07 · M0: 89.5% 2024-07 · M1: 80.2% 2024-07 · M2: 57.4% 2024-07 · M3: 43.8% 2024-07 · M4: 36.4% 2024-07 · M5: 30.5% 2024-07 · M6: 23.1% 2024-07 · M7: 16.2% 2024-07 · M8: 11.4% 2024-07 · M9: 13.3% 2024-07 · M10: 8.3% 2024-07 · M11: 6.9% 2024-07 · M12: 0% 2024-08 · M0: 89.9% 2024-08 · M1: 82.4% 2024-08 · M2: 57.8% 2024-08 · M3: 41.7% 2024-08 · M4: 35.3% 2024-08 · M5: 29.7% 2024-08 · M6: 21.1% 2024-08 · M7: 16.3% 2024-08 · M8: 14% 2024-08 · M9: 10.5% 2024-08 · M10: 9% 2024-08 · M11: 0% 2024-08 · M12: 0% 2024-09 · M0: 90.2% 2024-09 · M1: 80.6% 2024-09 · M2: 60.3% 2024-09 · M3: 46.9% 2024-09 · M4: 36.2% 2024-09 · M5: 27.5% 2024-09 · M6: 20.5% 2024-09 · M7: 15.8% 2024-09 · M8: 14.1% 2024-09 · M9: 11.2% 2024-09 · M10: 0% 2024-09 · M11: 0% 2024-09 · M12: 0% 2024-10 · M0: 92.3% 2024-10 · M1: 79.5% 2024-10 · M2: 58.3% 2024-10 · M3: 41.1% 2024-10 · M4: 32.1% 2024-10 · M5: 26.8% 2024-10 · M6: 23% 2024-10 · M7: 18.1% 2024-10 · M8: 13% 2024-10 · M9: 0% 2024-10 · M10: 0% 2024-10 · M11: 0% 2024-10 · M12: 0% 2024-11 · M0: 91.3% 2024-11 · M1: 78% 2024-11 · M2: 56.7% 2024-11 · M3: 41.4% 2024-11 · M4: 31% 2024-11 · M5: 24.8% 2024-11 · M6: 22% 2024-11 · M7: 16.5% 2024-11 · M8: 0% 2024-11 · M9: 0% 2024-11 · M10: 0% 2024-11 · M11: 0% 2024-11 · M12: 0% 2024-12 · M0: 92% 2024-12 · M1: 78.4% 2024-12 · M2: 54.5% 2024-12 · M3: 44.4% 2024-12 · M4: 32.9% 2024-12 · M5: 26.5% 2024-12 · M6: 23.7% 2024-12 · M7: 0% 2024-12 · M8: 0% 2024-12 · M9: 0% 2024-12 · M10: 0% 2024-12 · M11: 0% 2024-12 · M12: 0% 2025-01 · M0: 87.8% 2025-01 · M1: 78.2% 2025-01 · M2: 58.5% 2025-01 · M3: 45.8% 2025-01 · M4: 36.9% 2025-01 · M5: 28.3% 2025-01 · M6: 0% 2025-01 · M7: 0% 2025-01 · M8: 0% 2025-01 · M9: 0% 2025-01 · M10: 0% 2025-01 · M11: 0% 2025-01 · M12: 0% 2025-02 · M0: 89.6% 2025-02 · M1: 78.5% 2025-02 · M2: 58.7% 2025-02 · M3: 48.3% 2025-02 · M4: 35.1% 2025-02 · M5: 0% 2025-02 · M6: 0% 2025-02 · M7: 0% 2025-02 · M8: 0% 2025-02 · M9: 0% 2025-02 · M10: 0% 2025-02 · M11: 0% 2025-02 · M12: 0% 2025-03 · M0: 91.4% 2025-03 · M1: 76.5% 2025-03 · M2: 58.1% 2025-03 · M3: 40.3% 2025-03 · M4: 0% 2025-03 · M5: 0% 2025-03 · M6: 0% 2025-03 · M7: 0% 2025-03 · M8: 0% 2025-03 · M9: 0% 2025-03 · M10: 0% 2025-03 · M11: 0% 2025-03 · M12: 0% 2025-04 · M0: 91.2% 2025-04 · M1: 77.8% 2025-04 · M2: 57.9% 2025-04 · M3: 0% 2025-04 · M4: 0% 2025-04 · M5: 0% 2025-04 · M6: 0% 2025-04 · M7: 0% 2025-04 · M8: 0% 2025-04 · M9: 0% 2025-04 · M10: 0% 2025-04 · M11: 0% 2025-04 · M12: 0% 2025-05 · M0: 90.8% 2025-05 · M1: 78.2% 2025-05 · M2: 0% 2025-05 · M3: 0% 2025-05 · M4: 0% 2025-05 · M5: 0% 2025-05 · M6: 0% 2025-05 · M7: 0% 2025-05 · M8: 0% 2025-05 · M9: 0% 2025-05 · M10: 0% 2025-05 · M11: 0% 2025-05 · M12: 0% 2025-06 · M0: 93.2% 2025-06 · M1: 0% 2025-06 · M2: 0% 2025-06 · M3: 0% 2025-06 · M4: 0% 2025-06 · M5: 0% 2025-06 · M6: 0% 2025-06 · M7: 0% 2025-06 · M8: 0% 2025-06 · M9: 0% 2025-06 · M10: 0% 2025-06 · M11: 0% 2025-06 · M12: 0% 0 100%
Выводы
  • Через 1 месяц активны 76.3–82.4 % когорты, через 6 месяцев — 24.9–29.3 %, через 12 месяцев — лишь 3.9–8.6 %.
  • Когорта 2024-01 падает с 79.7 % на M1 до 6.7 % на M12 — отток 73.0 п.п. за год.

Рост MRR

Суммарный месячный MRR по активным подпискам, январь 2024 — июнь 2025. На конец периода активны подписки 1086 пользователей.

0 50000 100000 mrr 2024-01 — mrr: 4564 2024-02 — mrr: 10512 2024-03 — mrr: 17452 2024-04 — mrr: 25646 2024-05 — mrr: 32453 2024-06 — mrr: 36003 2024-07 — mrr: 46290 2024-08 — mrr: 49454 2024-09 — mrr: 58050 2024-10 — mrr: 62800 2024-11 — mrr: 65660 2024-12 — mrr: 69173 2025-01 — mrr: 70577 2025-02 — mrr: 75337 2025-03 — mrr: 81433 2025-04 — mrr: 84280 2025-05 — mrr: 89003 2025-06 — mrr: 94312 2024-01 2024-02 2024-03 2024-04 2024-05 2024-06 2024-07 2024-08 2024-09 2024-10 2024-11 2024-12 2025-01 2025-02 2025-03 2025-04 2025-05 2025-06 Месяц MRR, $
Выводы
  • MRR вырос с $4564 в январе 2024 до $94312 в июне 2025 — в 20.7 раза за 18 месяцев.
  • На конец периода вклад планов: enterprise $35964 (38.1 %), pro $33075 (35.1 %), business $25273 (26.8 %).

Конверсия signup→paid по каналам

Доля пользователей канала, дошедших до подписки: платящие / пользователи канала × 100 %.

0 5 10 15 email — conversion: 12.1 12.1 organic — conversion: 13.2 13.2 paid_search — conversion: 14.6 14.6 referral — conversion: 11.7 11.7 social — conversion: 14.8 14.8 email organic paid_search referral social Канал привлечения Конверсия, %
Выводы
  • Конверсия выше всего у social (14.8 %) и paid_search (14.6 %), ниже всего — у referral (11.7 %) и email (12.1 %).
  • Organic даёт больше всего платящих в абсолюте: 427 из 1086 (39.3 % всех платящих) при 3223 пользователях канала.

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

Карта связей

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