Перейти к содержанию

BI-модуль: функциональная спецификация и архитектура (Cohorts, Funnel, Churn, GMV, CAC vs LTV)

Цели

  • Единая BI-ready архитектура для продуктовой, маркетинговой и финансовой аналитики
  • Быстрые, консистентные витрины без тяжёлых ад-хок пересчётов
  • Стандартизованные определения метрик и единый семантический слой

Область

  • Cohort analysis (регистрация, первый платёж и другие события)
  • Conversion funnel (настраиваемые шаги, конверсии, дриллдауны)
  • Churn/Retention (активность/подписки, удержание, отток)
  • GMV dashboard (основные деньги: GMV, Net Revenue, Margin, AOV, ARPU)
  • CAC vs LTV (сопоставление маркетинговых затрат и жизненной ценности)
  • Материализованные витрины и инкрементальные сборки
  • Оркестрация, тесты качества данных, производительность и безопасность

Архитектура DWH

  • Слои данных
  • raw: приземление из источников без значимых трансформаций
  • staging: нормализация, дедупликация, приведение типов и идентификаторов
  • core: звёздная схема (факты и измерения), единые определения метрик
  • marts: специализированные витрины для BI-дашбордов и отчётов
  • Хранилище
  • Postgres/BigQuery/ClickHouse (в зависимости от требований по объёму/стоимости/латентности)
  • Обновление
  • Инкрементальные модели в dbt + расписание (Airflow/Prefect/GitHub Actions/dbt Cloud)
  • Материализованные представления для тяжёлых агрегаций

Домейн: маркетплейс (ядро)

  • Измерения (dim)
  • dim_date: календарь и производные поля
  • dim_user: пользователи, атрибуты, канал/кампания привлечения
  • dim_merchant: продавцы, атрибуты
  • dim_product: товары, категория, принадлежность продавцу
  • dim_campaign: каналы/кампании, UTM-метки
  • Факты (fact)
  • fact_events: события поведения (визиты, регистрации, корзины, покупки)
  • fact_orders: заказы (статусы, суммы, даты)
  • fact_order_items: позиции заказа (товары, количество, цена, выручка)
  • fact_marketing_spend: рекламные расходы, клики, показы
  • Вспомогательные core-таблицы
  • user_cohort: принадлежность пользователей к когортам (type/date/month/channel/campaign)
  • user_activity_periods: активность по периодам (месяц/неделя/день)
  • dim_funnel_step: конфигурация воронки (шаги ↔ события)
  • funnel_user_steps_daily: фактическое прохождение шагов пользователями по дням

Витрины (marts)

  • Cohort Retention
  • Ввод: user_cohort, fact_events, dim_date
  • Вывод: retained_users, cohort_size, retention_rate, revenue_per_user, периодность (месяцы/недели)
  • Conversion Funnel
  • Ввод: dim_funnel_step, fact_events/funnel_user_steps_daily
  • Вывод: users_entered_step, users_completed_next_step, conversion_to_next_step, конверсии по каналам/датам/продуктам
  • Churn/Retention
  • Ввод: user_activity_periods (или подписки)
  • Вывод: users_active, users_retained_next_period, users_churned, churn_rate, retention_rate
  • GMV Daily
  • Ввод: fact_orders
  • Вывод: gmv, net_revenue, margin, orders_count, unique_buyers, aov, arpu, сегменты
  • CAC by Cohort/Campaign
  • Ввод: user_cohort, fact_marketing_spend
  • Вывод: acquired_users, marketing_cost, cac
  • LTV by Cohort/Campaign
  • Ввод: user_cohort, fact_orders, dim_date
  • Вывод: period_number, revenue, revenue_per_user, cumulative_ltv

dbt‑проект

  • Структура
  • sources: определения источников (prod/events/marketing)
  • staging: нормализация сырых таблиц
  • core: dim_, fact_, user_cohort, activity, funnel
  • marts: mv_* витрины для отчётов
  • Конфигурации
  • BigQuery: partition_by (по timestamp/int date_key), cluster_by (user_id, event_name, order_id, campaign_id)
  • ClickHouse: MergeTree с PARTITION BY месяц, ORDER BY по ключам фильтрации/джоинов
  • Postgres: партиции по дате, btree индексы на ключах (date_key, user_id, campaign_id)
  • Пайплайн
  • dbt deps → dbt seed → dbt build (или dbt run/test по тегам: staging → core → marts)
  • Инкрементальные модели для больших витрин, полные пересборки при изменении логики

Тесты качества данных

  • Schema tests
  • not_null, unique, relationships (fact ↔ dim)
  • Data tests
  • gmv_non_negative: суммы не отрицательные
  • net_revenue_le_gmv: чистая выручка не превышает GMV
  • churn_rate_in_0_1, retention_rate_in_0_1
  • no_duplicate_events: уникальность event_id
  • Freshness
  • контроль задержки поставки данных из источников и SLA обновления витрин

BI‑семантика и дашборды

  • Semantic layer
  • Единые меры: GMV, Net Revenue, Margin, AOV, ARPU, CAC, LTV, Churn, Retention, Funnel Conversion
  • Роли доступа (страна/бренд/мерчант)
  • Дашборды
  • CEO Overview: GMV, CAC vs LTV, Funnel, Churn, ключевые когорты
  • Growth: Acquisition, CAC/LTV, когорты
  • Product: Retention, события, воронки
  • Finance: GMV/Net/Margin, возвраты, сравнение с планом

Производительность

  • Индексация/кластерация
  • Ключи по самым частым фильтрам: date_key, user_id, event_name, order_id, campaign_id
  • Партиционирование
  • По дате события/заказа; ограничение диапазонов при запросах
  • Инкрементальные сборки
  • Пересчёт только новых периодов; периодические full refresh для консистентности
  • Материализация
  • Тяжёлые витрины как materialized view/table; контроль веса и времени

Безопасность и доступ

  • RBAC
  • Разграничение прав по слоям: raw/staging только инженерным ролям, core/marts для BI‑аналитиков
  • PII
  • Минимизация и псевдонимизация пользовательских данных в DWH
  • Секреты
  • Хранение учётных данных в секрет‑менеджере; запрет логирования ключей и токенов

Наблюдаемость

  • Логирование
  • Логи оркестрации, длительность задач, объёмы данных
  • Метрики
  • SLA обновления витрин, стоимость запросов (BQ), нагрузка (CH)
  • Алармы
  • Падение тестов, задержки поставки данных, аномалии в метриках

API/Интеграции

  • Чтение
  • BI‑инструменты подключаются к marts/core
  • Автоматизация
  • Webhooks/Jobs для принудительного пересчёта витрин при крупных импортах или смене определения метрик

Роадмап доработок (видение)

  • Атрибуция маркетинга
  • Модели атрибуции: first‑touch, last‑touch, position‑based; конфигурируемые окна
  • Identity Resolution
  • Сведение user_external_id, device_id, email/phone в единый user_id; граф связности, приоритеты источников
  • SCD Type 2 для измерений
  • История изменений категорий, кампаний, мерчантов
  • Валюта и курсы
  • Нормализация мультивалютности, таблица курсов, пересчёт в базовую валюту
  • Возвраты и корректировки
  • Флаги возвратов, сторно, промо; согласованные правила GMV/Net/Margin
  • Конфигурируемые воронки
  • Разные funnel_id по продуктам/странам/платформам, динамическая смена шагов без переписывания кода
  • Семантические определения
  • Централизованный каталог метрик (Data Catalog), версионирование и аудит изменений
  • Когортные ревенью‑модели
  • Cumulative LTV с дисконтированием, удержание по revenue‑кохортам
  • Кросс‑DWH переносимость
  • Макросы dbt для унификации логики под BQ/CH/PG; единые тесты
  • Стоимость и оптимизация
  • В BigQuery: кластеризация, денормализация витрин, safe_divide, ограничения bytes billed
  • В ClickHouse: грамотные ORDER BY, материализация промежуточных агрегатов, TTL для сырых партиций

Definition of Done

  • Реализованы слои raw/staging/core/marts
  • Наполнены dim_ и fact_; созданы вспомогательные core‑таблицы
  • Собраны витрины cohorts/funnel/churn/gmv/cac_ltv
  • Настроены dbt tests (schema+data), проходят без ошибок
  • Оркестрация ежедневно/ежечасно; мониторинг SLA
  • BI‑дашборды подключены и отражают согласованные определения метрик

Точные определения метрик (оцифровка)

  • GMV: сумма order.gmv для статусов paid/finished за период/сегмент
  • Net Revenue: сумма order.net_revenue для статусов paid/finished
  • Margin: сумма order.margin для статусов paid/finished
  • AOV: GMV / количество заказов
  • ARPU: Net Revenue / количество уникальных покупателей
  • Cohort Size: количество уникальных пользователей в когорте
  • Retained Users (period n): пользователи когорты с активностью/покупкой в период n
  • Retention Rate (n): Retained Users(n) / Cohort Size
  • Churn Rate (n): 1 − Retention Rate(n) для периода n+1 относительно n
  • CAC (по когорте/кампании): Marketing Cost / Acquired Users
  • LTV_N: суммарная Net Revenue пользователей когорты за первые N периодов / Cohort Size
  • Funnel Conversion (step i→i+1): Users Completed Next Step / Users Entered Step(i)

Готовые шаблоны dbt для BigQuery (структура и конфиг)

  • Корневой проект: analytics_dwh
  • Конфигурация:
  • seeds: схема staging
  • sources: схемы staging/raw_* (для теста источники указывают на seeds)
  • core: таблицы с partition_by/cluster_by
  • marts: инкрементальные модели с partition_by/cluster_by
  • Пайплайн:
  • dbt deps → dbt seed → dbt build
  • или по тегам: staging → core → marts

ClickHouse specifics и dbt-шаблоны

  • DWH
  • Таблицы фактов: MergeTree или ReplicatedMergeTree
  • Партиционирование: PARTITION BY toYYYYMM(event_timestamp/order_created_at)
  • ORDER BY: по ключам фильтрации и джоинов (date_key, user_id, event_name, order_id, campaign_id)
  • Профиль dbt
  • Адаптер: dbt-clickhouse
  • Тип подключения: native или http
  • Пример профиля
  • name: analytics_dwh_clickhouse
  • type: clickhouse
  • schema: analytics
  • host: clickhouse
  • port: 8123
  • user: default
  • password: пусто или из секретов
  • Примеры моделей
  • fact_orders: MergeTree с PARTITION BY месяц и ORDER BY (order_date_key, user_id, order_id)
  • fact_events: MergeTree с PARTITION BY месяц и ORDER BY (event_date_key, user_id, event_name, event_timestamp)
  • fact_marketing_spend: MergeTree с PARTITION BY date_key и ORDER BY (campaign_id, date_key)
  • Seeds и tests
  • Используются те же CSV seeds, что и для BigQuery
  • dbt tests: schema tests и data tests на тех же моделях

Тестовый набор данных и data tests

  • Seeds (CSV): пользователи, заказы, события, маркетинг
  • Примеры data tests:
  • gmv_non_negative: нет отрицательных сумм
  • retention_rate_between_0_and_1: ретеншн в пределах [0,1]
  • Запуск:
  • dbt deps; dbt seed; dbt build
  • или dbt test --select tag:marts

Доработки для полноценного сервиса

  • Атрибуция маркетинга с конфигурируемыми окнами и моделями
  • Identity Resolution и единый user_id
  • Историзация измерений (SCD2)
  • Мультивалютность и курсы
  • Возвраты/сторно/промо в Net/Margin
  • Конфигурируемые воронки и семантика в каталоге метрик
  • Макросы dbt для кросс‑DWH переносимости
  • Оптимизация стоимости и производительности (BQ/CH/PG)