Product Analytics Dashboard (Streamlit)
Business Context
Аналитическое портфолио должно показывать весь AARRR-цикл на одном согласованном датасете, а не одну метрику изолированно. Этот дашборд — self-contained приложение: данные генерируются детерминированно, метрики воспроизводимы между запусками.
Pages
| 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 по сегменту / каналу / стране / устройству |
Data & Method
Данные: синтетический SaaS-датасет, 8 000 пользователей, Jan 2024 – Jun 2025. Генерируется in-memory с детерминированным seed = 42 и кэшируется через @st.cache_data — датасет идентичен между запусками и разделяем между страницами в рамках сессии.
Запуск:
uv sync
uv run streamlit run app.py
Insight
Одна согласованная база для всех AARRR-вопросов — это и есть суть. Детерминированный seed означает, что Funnel, Retention, Revenue и Segments говорят об одних и тех же пользователях, а числа можно проверить. Позже этот же UI стал слоем презентации для full-stack Supabase-проекта — сменился только слой данных.
Impact
- Весь AARRR — 5 страниц на одном датасете из 8 000 пользователей.
- Воспроизводимость — детерминированный seed = 42,
@st.cache_data. - Переиспользование UI — слой презентации перенесён в Supabase-проект.
- Self-contained — без внешних зависимостей данных, запускается одной командой.