Методология
Методология сквозной аналитики
5 KPI и их формулы
| KPI | Определение | Формула | Ограничения |
|---|---|---|---|
| Охват | Уникальные компании с любым сигналом за 30 д | COUNT DISTINCT(companies WHERE last_signal >= today−30d) |
Сигнал = email open/click OR site visit OR TG activity OR webinar |
| Глубина | Из Охвата — активны в 2+ каналах | COUNT DISTINCT(companies WHERE channels_active_30d >= 2) |
Измеряет кросс-канальную интеграцию. Не «во всех каналах» — структура каналов разная |
| Вовлечение | Weighted open rate email за 30 д | SUM(opens_unique_7d) / SUM(sent) × 100 |
Apple MPP и Gmail image-prefetch инфлируют open rate на iOS. CTOR точнее |
| Действие | Клики по контенту magazine.sibur.ru / sibured.ru | COUNT(clicks WHERE host IN (content_sk) AND date >= today−30d) |
В Google Sheet G5 считается с шумом (ya.ru, соцсети, foquz) — там 654 |
| Горячих → KAM | Компании с composite score ≥ 0.5 | COUNT DISTINCT(companies WHERE segment = 'Горячий') |
Передаются менеджерам отношений (Key Account Managers) |
5 каналов и их статус
startURLPath=@'/businesspractices', 6 658 визитов за 30д.MTS_LINK_TOKEN — после подключения появятся 30+ событий в месяц.Composite score и сегментация
composite = 0.6 × email_score + 0.4 × tg_score
email_score = [ log1p(clickers_90d) + 0.15 × log1p(max(0, openers_90d − clickers_90d)) ]
× 0.5^(days_since_last_event / 60)
tg_score = min(1, msgs_lifetime/5 + rx_on_admin/20)
× 0.5^(days_since_last_event / 60)
Log-шкала без capping. Крупные компании не «слипаются» в 0.99 — сохраняется разрешение в топе, топ-5 реально ранжируется.
Decay 60 дней. B2B-цикл, а не 14 дней как для consumer-email: клиенты СИБУРа реагируют медленнее, решение о закупке занимает недели.
Ratio click:open = 6.7×. Кликер весомее просто открывателя в 6.7 раза (1 / 0.15), потому что клик = интент.
SIBUR-домены отфильтрованы. 696 адресов из внутреннего домена не участвуют в email_score (иначе искажали бы топ).
Снапшоты email-кампаний 24h / 72h / 7d
Зачем нужны. Метрики email «дотекают» первые 3 суток — открытия, клики и отписки приходят волной. Нельзя сравнивать open rate новой кампании (2 часа назад) с ней же через неделю: это будут разные цифры для одного и того же события.
Как работает. Коллектор dashamail_snapshots.py фризит значения
в трёх точках: +24h, +72h, +7d после send_date.
Записывает 21 колонку в data_campaigns
(opens/clicks/ctor/unsub/bounce × 3 точки + служебные).
Финальные метрики. Все цифры на Dashboard считаются только по _7d,
и только для кампаний в окне [today−30, today−7] — чтобы у каждой было
не меньше 7 суток «дотекания».
Preliminary. Кампании младше 7 дней помечаются «предварительно» и показываются отдельным блоком, чтобы не искажать weighted average.
Три источника TG-сообщества
is_in_community и tenure_days.Ограничения и честные оговорки
- Apple MPP / Gmail image-prefetch инфлируют open rate на iOS — авто-открытия без участия человека.
- Δ (динамика MoM) везде
nullдо накопления 2+ snapshot history (ожидается к концу апреля 2026). - Email-атрибуция БПС отсутствует — блокер на внешнюю зависимость, ждём правильный файл от коллеги.
- Вебинары БПС не подключены — после получения
MTS_LINK_TOKENдобавится ~30 событий в месяц. - content_clicks_weekly — только по СК. БПС появится после подключения email→company атрибуции (П6).
data_companies.last_signalхранится как дата черезRAW+ numberFormat. Без этого Google Sheet превратил бы дату в serial 46129.xx при пересчёте.
Словарь русификации
| Open rate | % открытий |
| CTR | % кликов |
| CTOR | % кликов от открытий |
| Unsub rate | % отписок |
| Bounce | % отказов |
| Reach | Охват |
| Depth | Глубина |
| Risers | Активизировались |
| Tier | Сегмент |
| Hot / Warm / Cold | Горячий / Тёплый / Холодный |
Почему так — 6 ключевых архитектурных решений
- Одна Google-таблица, не PG. MVP-подход — пользователь видит данные сразу, без деплоя БД и фронта. Миграция на PostgreSQL возможна при превышении ~1 млн строк.
- Мульти-базные рассылки = 1 строка с конкатенацией имён баз. Согласовано 18.04. Альтернатива (строка-per-база) дала бы дубли в weighted averages.
-
Resends = отдельные строки с
parent_campaign_id. Видно uplift от досылки; при этом фильтр поsend_type=originalдаёт чистые метрики оригинальной рассылки. - Классификация по базам, не по subject. БПС часто шлёт без префикса в теме («Вебинары в апреле»), а имя базы всегда содержит «бпс» — надёжнее.
-
Сайт БПС = только
/businesspractices. Без фильтра ловит весь sibured.ru — корпоративный трафик к нашей аудитории отношения не имеет. -
Email-фильтр SIBUR — 696 адресов не попадают в
email_score. Иначе сотрудники СИБУРа, массово открывающие внутренние рассылки, инфлировали бы сегмент «Горячих».