Глоссарий

Сленг и термины которые услышишь на собесе или в чатах команды. Ctrl+F для быстрого поиска.

Actionable Metric

Метрика, изменение которой запускает конкретное действие в команде.

«Conversion rate упал с 5% до 4%» → actionable: разобраться где в воронке провал, починить, отчитаться.

«У нас 100k registered users» → НЕ actionable (что с этим делать?).

ПРИМЕРЫ
  • Хороший дашборд содержит только actionable metrics. Vanity убираешь — экономишь время команды на интерпретацию.

Aha Moment

Конкретное действие в продукте после которого юзер осознаёт ценность и retention резко возрастает.

Часто связан с моментом первой ценности (first time-to-value).

ПРИМЕРЫ
  • Facebook 2008: 7 друзей за 10 дней
  • Slack: 2000 сообщений на команду
  • Dropbox: первый shared folder

Attribution

Процесс определения какому маркетинговому каналу засчитывается полученная конверсия / выручка.

Модели атрибуции:

  • Last touch — последний клик до покупки = весь кредит. Простая, перекошена в performance.
  • First touch — первый клик. Хороша для top-of-funnel.
  • Linear — поровну между всеми касаниями.
  • Time-decay — больше веса свежим, меньше старым.
  • Data-driven (Markov, Shapley) — алгоритм считает «вклад» каждого канала.

В реальности никакая модель не «правильная» — все упрощения. Главное: выбери одну и используй последовательно для сравнения каналов.

ПРИМЕРЫ
  • Если каждый отдел использует свою модель атрибуции — sum of channels > 100%, никто не знает где правда

Backfill

Процесс пересчёта исторических данных в таблице. Обычно потому что:

  1. Поменялась формула / логика (новая версия аналитики)
  2. Был bug — нужно перезаписать прошлое
  3. Добавили колонку — нужно заполнить для всех существующих рядов
  4. Новая таблица — нужно загрузить старые события

Pitfalls:

  • Long lock: backfill 1B рядов в одной транзакции = простой prod на часы
  • Inconsistency: во время backfill могут писаться новые данные параллельно
  • Resource overload: backfill ест CPU/IO которое нужно prod

Pattern: batched backfill (по 10K рядов), in off-peak hours, с продолжением state в отдельной таблице.

ПРИМЕРЫ
  • Поменяли LTV-формулу → backfill всех cohorts за 2 года
  • Bug в is_premium флаге → backfill correct values
  • Новая колонка country_code в users → backfill по IP геолокации

Base Rate Neglect

Когнитивный bias: люди игнорируют базовую частоту события и фокусируются на specific data.

Классический пример: Bayes-задача с редкой болезнью — «99% точный тест → 99% больна» (правильный ответ: ~9%).

ПРИМЕРЫ
  • Fraud-модель precision 95% → 90% помеченных НЕ fraud
  • Поиск иголки в стоге — точность 99% не помогает на 0.01% true positives
  • Стереотипы → пренебрегаем base rate

Baseline Model

Самая простая возможная модель для задачи. Используется для сравнения с complex models — без baseline нельзя определить «good ли» complex performance.

Типы: random, majority class, rule-based, simple LogisticRegression. Если complex model не превосходит baseline — значит её сложность не оправдана.

ПРИМЕРЫ
  • Majority class baseline для fraud (99%): trivial
  • Простой Logistic Regression до XGBoost
  • Rule-based: "no activity 30 days" → churn

Birthday Paradox

В группе 23 человек вероятность совпадения дней рождения у двух — около 50%. Counterintuitive.

Применение: hash collisions, UUID, idempotency keys.

ПРИМЕРЫ
  • 23 человек → 50% совпадение, 50 → 97%
  • UUID4 на N pieces → collision вероятна при √M
  • Database UNIQUE-violation rate increases ~N²

Cardinality Bug

Ошибка в SQL/pandas: после JOIN-а нескольких таблиц with one-to-many relationships суммы и средние искажаются из-за дублирования строк.

Самый частый bug в analytical queries.

ПРИМЕРЫ
  • JOIN orders + deposits с дублями → SUM(amount) умножается
  • pandas: validate="one_to_one" — защита через assertion
  • Решение: агрегировать каждую таблицу до JOIN

Cohort (Когорта)

Группа пользователей, объединённая общим временным окном или другим признаком.

Чаще всего — когорта по дате регистрации: «зарегистрировавшиеся в неделю 14 мая 2026».

Зачем нужны:

  • Сравнивать retention новых vs старых юзеров честно (нельзя сравнить юзера 2-летней давности и неделю назад регнувшегося — они разные)
  • Видеть тренд: улучшается ли продукт со временем?
ПРИМЕРЫ
  • Cohort heatmap retention — стандарт для продуктовой аналитики
  • Можно разрезать когорты не только по дате, но и по acquisition channel

Cohort LTV Curve

Кумулятивный revenue per user в зависимости от месяцев с момента acquisition. Построена per cohort (например, месяц регистрации).

Показывает: shape value extraction (linear / decay / step), payback period, comparison cohorts (улучшается ли продукт). Используется для forecasting future cohorts через extrapolation.

ПРИМЕРЫ
  • Месяц 0: 500₸, M12: 4200₸ кумулятивно
  • Survivor bias — старые cohorts только survived users
  • Pareto/NBD models для forecasting

Columnar Storage

Способ хранения таблиц в БД — по колонкам, не по строкам.

Row-based (PostgreSQL OLTP): строка хранится непрерывно. Хорошо для SELECT * WHERE id = ?.

Column-based (ClickHouse, BigQuery, Parquet): значения одной колонки лежат вместе. Хорошо для аналитики:

  • SELECT SUM(amount) FROM transactions читает только колонку amount, остальное игнорирует
  • Сжатие в 10-100× лучше (повторяющиеся значения)
  • Быстро для агрегаций, медленно для row-level lookups

Format: Parquet (Apache), ORC, Avro — стандарт data lakes.

ПРИМЕРЫ
  • ClickHouse — columnar, SELECT SUM в 100× быстрее чем PostgreSQL
  • Parquet файлы в S3 для data lake
  • BigQuery — columnar под капотом, читает только нужные колонки

CUPED

Controlled experiment Using Pre-Existing Data — техника снижения variance метрики в A/B-тестах с помощью pre-period данных.

Идея: контролируешь на «исходный уровень» юзера (его revenue/engagement до теста), оставшаяся variance ниже → меньше выборка нужна для той же мощности.

Может уменьшить выборку в 2-3 раза. Внедрён в Microsoft, Booking, Netflix, Каспи.

ПРИМЕРЫ
  • Y_cuped = Y - θ(X - X̄), где X — pre-period revenue
  • Эффект сильнее для continuous metrics (ARPU, GMV)
  • Не работает для binary outcomes (conversion)

Data Contract

Соглашение между producer и consumer данных о структуре, частоте, качестве данных.

Включает:

  • Schema (column names, types)
  • SLA (frequency, freshness)
  • Quality guarantees (no nulls in X, uniqueness of Y)
  • Breaking change policy

Зачем: producer не может тихо удалить колонку или изменить тип — это сломает downstream pipelines. Data contract фиксирует обязательства.

Tools: dbt contracts, Schema Registry, Great Expectations.

ПРИМЕРЫ
  • Order producer гарантирует: order_id NOT NULL, created_at UTC, schema versioned
  • Если хочет deprecate колонку — нужно объявить за 30 дней
  • Каспи: data contracts через Confluent Schema Registry

Data Drift (дрейф данных)

Постепенное изменение распределения входных данных модели/процесса, из-за чего модель ухудшается без явного бага.

Типы:

  • Covariate drift: меняется распределение features (например, средний возраст клиентов вырос с 30 до 40)
  • Label drift: меняется распределение target (была 5% конверсия, стала 3%)
  • Concept drift: меняется связь между features и target (раньше высокий доход → купит, теперь — нет)

Мониторинг: statistical tests (KS-test, PSI), мониторинг feature distributions over time.

ПРИМЕРЫ
  • Каспи ML-модель оттока тренирована на 2020 — в 2024 поведение клиентов другое
  • COVID 2020 → drastic concept drift во всех ML-моделях
  • Sezonality: model trained on summer фейлит зимой

Data Leakage

Ошибка в ML-pipeline когда модель получает информацию из test set (или будущего) во время тренировки. Результат — overfitted метрики, плохая производительность в продакшене.

Самые частые leaks: preprocessing на всех данных, target encoding без CV, random split на time-series.

ПРИМЕРЫ
  • StandardScaler.fit_transform(X) до train_test_split → leak
  • Random split на time-series → модель «видит» будущее
  • Target encoding с использованием test target — катастрофический leak

Data Lineage

Карта происхождения данных: откуда пришли, какие трансформации прошли, где сейчас используются.

Зачем нужна:

  • Impact analysis — «если я изменю эту колонку, какие дашборды сломаются?»
  • Debug — «почему в этом отчёте странная цифра? Какие источники и шаги?»
  • Compliance — для GDPR / Закона о персданных нужно знать где хранятся данные юзера.

Инструменты: dbt строит lineage автоматически из SQL-моделей. DataHub, Atlas, Marquez — отдельные платформы.

ПРИМЕРЫ
  • Хороший dbt-проект показывает: dim_users ← raw.signups + raw.profile_updates + raw.deletions, и какие dashboards её используют

Data Observability

Practice мониторинга здоровья данных в продакшене по 5 pillars: freshness, volume, schema, distribution, lineage.

В отличие от backend observability (metrics/logs/traces) — фокус на data quality, не на performance/availability.

Tools: Great Expectations (validation), dbt (testing), DataHub (catalog/lineage), Monte Carlo / Datafold (managed observability).

ПРИМЕРЫ
  • 5 pillars: freshness, volume, schema, distribution, lineage
  • MTTD (mean time to detect) — main KPI
  • Great Expectations + dbt — open-source stack

DAU / MAU

  • DAU (Daily Active Users) — уникальные юзеры за день
  • MAU (Monthly Active Users) — за месяц
  • WAU — за неделю

«Активный» = совершил core action (открыл ленту, выполнил заказ — зависит от продукта).

DAU/MAU ratio = stickiness — насколько часто месячный юзер возвращается.

Бенчмарки stickiness: соцсети 50%+, мессенджеры 70%+, банкинг 20%.

ПРИМЕРЫ
  • Если DAU растёт но MAU не растёт — ядро становится более лояльным, но новых нет
  • Если оба растут одинаково — здоровый рост, продукт привлекает и удерживает

Dogfooding

«Eating your own dog food» — практика когда команда сама пользуется своим продуктом в боевых условиях, до выпуска.

Зачем: ловишь UX-проблемы которые в QA не видны. Чувствуешь продукт как юзер.

В data-команде: используй свои дашборды для своих же решений. Если ты сам не открываешь дашборд каждое утро — он плохой.

ПРИМЕРЫ
  • Стартапы где продакты не используют свой же продукт — обычно проваливаются. Это red flag.

Feature Engineering

Процесс создания input variables для ML-моделей из сырых данных. Часто important чем выбор модели — хорошие features + simple model > сложная модель на сыром.

Включает: extraction (timestamp → hour, dayofweek), aggregation (groupby + transform), encoding (categorical → one-hot, target encoding), normalization, interaction features.

ПРИМЕРЫ
  • timestamp → hour, dayofweek, is_weekend, hour_sin/cos
  • user_avg_amount_30d, user_unique_merchants
  • category one-hot, target encoding с cross-validation

Funnel (воронка)

Последовательность шагов пользователя к целевому действию — с измерением конверсии на каждом шаге.

Классический ecommerce funnel:

Landing → Product page → Add to cart → Checkout → Completed
100%      40%            10%          7%          5%

Каждый «шаг» — drop-off рейт. Цель аналитика — найти наибольший drop и понять почему.

Типы funnels:

  • Linear funnel — строго последовательный
  • Branching funnel — могут быть параллельные пути
  • Loop funnel — можно вернуться на предыдущий шаг
ПРИМЕРЫ
  • Onboarding funnel: signup → email confirm → first action → D1 return
  • Checkout funnel в Каспи Магазин — 4 шага
  • Purchase funnel в банковском приложении (заявка → одобрение → выдача)

Gaps and Islands

Classic SQL-задача: найти consecutive runs значений (islands) в данных где могут быть пропуски (gaps).

Пример: даты активности юзера. Найти самую длинную серию подряд идущих дней (streak).

Trick: для consecutive дат, разница date - ROW_NUMBER даёт одинаковое значение для последовательных. Группируешь по этому и считаешь.

ПРИМЕРЫ
  • Самая длинная streak активности юзера
  • Подряд идущие месяцы с продажами
  • Detect downtime intervals в monitoring data

Goodhart's Law

«Когда метрика становится target — она перестаёт быть хорошей метрикой.»

Юзеры (сотрудники, агенты, юзеры) оптимизируют именно ту цифру, иногда в ущерб реальной цели.

ПРИМЕРЫ
  • Support time-to-resolve KPI → быстрые ответы без качества
  • Sales calls/day quota → дозваниваются ради счёта
  • Citation count для ученых → publishing low-quality papers

Guardrail Metric

«Метрики-ограничители» — те которые не должны просесть пока ты гонишь рост основной метрики.

Допустим, главная — конверсия в paid. Guardrails:

  • Refund rate (если конверсия выросла за счёт обмана)
  • Customer support tickets (если упростили UX так что юзеры путаются)
  • p99 latency (если новый код медленнее)
  • Retention D30 (если поднимаешь конверсию, но юзеры быстро уходят)
ПРИМЕРЫ
  • Установи guardrails для каждого A/B-теста — если они проседают, тест не катим даже при росте primary

Holdout group

Группа пользователей которым не показывают новую фичу для измерения её долгосрочного эффекта.

Отличается от A/B-теста тем, что holdout продолжается месяцы или годы, а A/B обычно 1-4 недели.

Зачем:

  • Измерить lasting impact — некоторые фичи имеют новизны эффект (растёт первый месяц, потом затухает)
  • Базовая линия для долгосрочных сравнений
  • Регулярные holdouts (например 1% постоянно) — для contiunousного валидации продукта
ПРИМЕРЫ
  • Каспи Магазин держит 1% holdout без рекомендательной системы — мерить её impact
  • Длительный holdout: год без нового onboarding flow → сравнить retention
  • Holdout vs traditional A/B — holdout fixed group, A/B rotates

HTE (Heterogeneous Treatment Effect)

Ситуация когда эффект эксперимента/treatment различается для разных подгрупп пользователей. Противоположность Average Treatment Effect (ATE) — единое среднее.

Современный ML-подход — uplift modeling: предсказать кто из юзеров получит положительный эффект, target треатмент именно на них.

ПРИМЕРЫ
  • Premium-подписка увеличивает retention для тех кто платил много, не влияет на casual
  • Реклама работает на 30% юзеров, бесполезна для остальных
  • Uplift modeling (causalml, EconML) — Microsoft uplift library

Idempotency (идемпотентность)

Свойство операции: многократное выполнение даёт тот же результат, что и однократное.

Пример:

  • UPDATE users SET status = 'active' WHERE id = 1 — idempotent (можно запустить 100 раз — результат тот же)
  • UPDATE users SET balance = balance + 100 WHERE id = 1 — НЕ idempotent (каждый запуск +100)

Где критично:

  • Cron jobs которые могут запуститься 2 раза (network retry)
  • API endpoints (header Idempotency-Key)
  • ETL pipelines — должны быть restartable без дублей
  • Webhooks — partner может прислать одно событие 3 раза

Pattern: добавляй уникальный ключ + INSERT ... ON CONFLICT DO NOTHING / ON CONFLICT DO UPDATE.

ПРИМЕРЫ
  • Cron retry: idempotent processing спасает от дублей
  • Payment API: header Idempotency-Key защищает от double-charge
  • NAQTY DATA: email_log с UNIQUE (user_id, email_type) — drip не пошлёт дважды

Incremental ROAS

ROAS (Return on Ad Spend) но учитывая что часть конверсий случилась бы без рекламы.

Last-click ROAS: 4.5x. Incremental ROAS: 2.8x (часть юзеров пришли бы organic). Это реальная эффективность рекламы.

ПРИМЕРЫ
  • Branded search ads — incremental ROAS часто <1.5x (юзеры всё равно нашли бы вас)
  • Display awareness — высокий incremental на новых юзерах
  • Measure через geo-holdout или causal modelling

Incrementality

Дополнительная ценность от treatment, по сравнению с тем что было бы без него.

Опровергает observational «correlation»: если retain'ятся юзеры с фичей — может быть selection bias, нужно causal experiment чтобы доказать incrementality.

ПРИМЕРЫ
  • Геохолдаут tests: отключаем TikTok в регионе на месяц → measure real impact
  • Каспи: incrementality testing для маркетинг каналов
  • CUPED measures incremental effect more precisely

K-factor (viral coefficient)

Метрика виральности продукта. Сколько новых юзеров в среднем приводит один существующий.

K = (invites per user) × (conversion rate of invite).

Если K > 1 — продукт растёт экспоненциально без paid marketing.

ПРИМЕРЫ
  • WhatsApp K ≈ 0.7-1.0 в начале
  • Dropbox K ≈ 0.5 (но с long lifetime → большой кумулятивный эффект)
  • Tinder K зависит от gender ratio in market

Lie Factor (Tufte)

Соотношение визуального эффекта на графике к реальному эффекту в данных. Lie factor 1.0 = честный график. >1.05 = манипулирующий.

Источник: Edward Tufte, «Visual Display of Quantitative Information».

ПРИМЕРЫ
  • Bar chart с y-axis 9.5M-11M → 10% разница выглядит как 2x
  • 3D графики искажают proportions
  • Журналистика — типичный source lie factor графиков

Look-back Window

Период, за который мы смотрим назад чтобы атрибутировать событие к источнику.

Пример: юзер кликнул рекламу 1 января. Купил 15 января. Если look-back window = 7 дней — покупка не атрибутируется к этому клику (15 - 1 = 14 дней). Если 30 дней — атрибутируется.

Окно сильно влияет на ROI каналов:

  • Короткое (24h, 7d) — атрибутируется только импульсивные покупки. Performance ads выигрывают.
  • Длинное (30d, 90d) — атрибутируется reasoned. Brand ads, SEO выигрывают.
ПРИМЕРЫ
  • Google Analytics дефолт = 30d window. Facebook Ads дефолт = 7d
  • Маркетинг любит длинные окна (больше атрибуции), финансы — короткие (честная цена клика)

Lookalike audience

Маркетинговая техника: находишь аудиторию похожую на твоих лучших клиентов по характеристикам и таргетируешь на неё.

Источник аудитории — твой CRM с топ-юзерами (например high LTV, frequent buyers). Платформа (Facebook, Google) ищет других пользователей со схожим behavior pattern.

Pitfall: если seed-аудитория мала (<1000) — lookalike модель плохо обобщает. Чем больше seed — тем точнее матчинг, но менее «глубокий» (захватывает больше похожих, но менее похожих).

ПРИМЕРЫ
  • Каспи: lookalike по топ-10K юзерам по LTV → новая аудитория похожая по поведению
  • Facebook lookalike 1% — самые похожие, 10% — широкие
  • Halyk использует lookalike для credit card targeting

Magic Number (SaaS metric)

Метрика efficiency growth investments в SaaS. Показывает сколько annualized recurring revenue приносит каждый ₸ S&M spend.

Magic Number = (Net New ARR × 4) / S&M spend в том же квартале

Benchmarks: < 0.75 (cut budget), 0.75-1.5 (healthy), > 1.5 (invest more).

ПРИМЕРЫ
  • Net New ARR 30M, S&M spend 15M → Magic Number 8 (great)
  • Каспи Pay public estimate ~1.2 (healthy)
  • Соавтор Scale Venture Partners метрики

Materialized View

Сохранённый результат SQL-запроса как физическая таблица. В отличие от обычной view (пересчитывается на каждое чтение), materialized view возвращает данные мгновенно.

Trade-off: данные устаревшие. Нужно явное REFRESH MATERIALIZED VIEW (часто через cron). Альтернатива: summary tables, OLAP cubes.

ПРИМЕРЫ
  • Daily dashboard на 500M строк → materialized view, refresh каждый час
  • REFRESH MATERIALIZED VIEW CONCURRENTLY — без read locks
  • pg_ivm extension — incremental refresh

Multiple Testing Problem

Проблема: если ты делаешь много статистических тестов одновременно — растёт шанс хотя бы одного ложного срабатывания, даже если все нулевые гипотезы верны.

20 тестов при α=0.05: 1 - (1 - 0.05)^20 ≈ 64% шанс false positive.

Поправки:

  • Bonferroni — α / N. Консервативно (часто слишком строго).
  • Benjamini-Hochberg (FDR) — контролирует долю ложно-положительных среди отвергнутых. Лучше для аналитики.

В A/B-тестах: если тестируешь 5 secondary метрик одновременно с primary — применяй FDR.

ПРИМЕРЫ
  • Дашборд показал статзначимое улучшение в 3 из 50 метрик → скорее всего это шум, без поправки

MVCC (Multi-Version Concurrency Control)

Механизм PostgreSQL для concurrent доступа без блокировок read-операций. Каждая транзакция видит snapshot базы — её собственную консистентную версию.

Под капотом: каждая строка имеет версии. UPDATE не overwrite — пишет новую версию. DELETE помечает текущую как dead. VACUUM освобождает место от dead versions.

Trade-off: bloat (растущий size без cleanup), но zero locking для reads.

ПРИМЕРЫ
  • UPDATE accounts SET balance = balance + 100 — пишет новую version, старая dead
  • pg_stat_user_tables.n_dead_tup — счётчик dead tuples
  • pg_repack — alternative VACUUM FULL без locks

North Star Metric

Главная метрика компании, отражающая создаваемую ценность для пользователя, к росту которой стремится весь продукт.

Не путать с финансовыми метриками (revenue, ARR) — Северная звезда опережает деньги.

Примеры:

  • Airbnb: nights booked
  • Spotify: hours listened
  • Slack: messages sent in teams of 3+
ПРИМЕРЫ
  • Если North Star ↑ — компания развивается, даже если в этом квартале выручка ровная
  • NSM должна быть **leading indicator** revenue, не lagging

Novelty Effect

Кратковременное повышение engagement в A/B-тесте просто из-за того что что-то изменилось, без долгосрочного improvement.

Пример: новый дизайн → юзеры активно исследуют первые недели → метрика +15%. После 4-8 недель эффект затухает.

Противоположность — primacy effect (power users привыкли к старому → новое работает хуже первое время, потом нормализуется).

ПРИМЕРЫ
  • Каспи: новый главный экран — engagement +20% первую неделю, +0% через 2 месяца
  • Solution: длинный test minimum 4 недели, holdout group для long-term effect
  • Известно из Microsoft research papers

OLAP vs OLTP

Два класса баз данных под разные задачи.

OLTP (Online Transaction Processing):

  • Назначение: live транзакции (платежи, заказы, регистрации)
  • Оптимизировано под: many small writes, low latency
  • Структура: нормализованная (3NF), row-based storage
  • Примеры: PostgreSQL, MySQL, Oracle

OLAP (Online Analytical Processing):

  • Назначение: аналитика, отчёты, ETL
  • Оптимизировано под: big aggregations, complex queries
  • Структура: denormalized (star/snowflake), columnar storage
  • Примеры: ClickHouse, BigQuery, Snowflake, Redshift

Правило: не делай аналитику на OLTP — повесишь продакшен. Реплицируй данные в OLAP для analytics.

ПРИМЕРЫ
  • Каспи: транзакции в PostgreSQL (OLTP), аналитика в ClickHouse (OLAP)
  • Halyk: Oracle для банкинг operations, Snowflake для DWH
  • Glovo: PostgreSQL → дampнaя репликация → ClickHouse → dashboards

p-hacking

Подгонка анализа под желаемый результат через множественные сравнения или выбор данных до тех пор пока p-value не упадёт ниже 0.05.

Способы p-hacking (не делай так):

  • Тестировать 20 гипотез на одной выборке, найти 1 с p<0.05 (по чистой случайности)
  • Менять размер выборки пока не появится «значимость»
  • Выбирать только удобный сегмент данных
  • Изменять primary metric задним числом

Решения:

  • Pre-registration — гипотезы и план анализа зафиксированы до теста
  • Bonferroni correction для множественных сравнений
  • Достаточный sample size заранее
ПРИМЕРЫ
  • "Тестировали 20 фичей, 1 показала p<0.05 — она работает!" → p-hacking, шанс ложно-положительного при 20 тестах ~64%

P-value misinterpretation

Одна из самых частых ошибок в data science: p-value НЕ говорит вероятность что результат случаен или что фича работает.

p = 0.03 означает: «при условии что эффекта НЕТ, вероятность увидеть такую разницу = 3%».

Это не «фича работает с вероятностью 97%».

ПРИМЕРЫ
  • p < 0.05 не значит "доказали"
  • CI и effect size часто информативнее
  • ASA statement 2016 — официальное предупреждение от American Statistical Association

Parameterized Query

SQL запрос где user input передаётся отдельно от шаблона SQL. Драйвер БД сам экранирует значения — injection невозможен.

Все драйверы (psycopg2, sqlalchemy, supabase) поддерживают. Не использовать string concatenation никогда.

ПРИМЕРЫ
  • db.execute("SELECT WHERE id = %s", (user_id,))
  • supabase.from("users").select("*").eq("id", user_id)
  • ORM (Django, SQLAlchemy) защищают by default

Partition Pruning

Оптимизация PostgreSQL когда планировщик автоматически исключает партиции которые не нужны для конкретного запроса.

WHERE created_at >= '2026-05-01' → читаются только партиции за май+, остальные ignored. Дает огромный speedup для time-range queries на партиционированных таблицах.

ПРИМЕРЫ
  • Monthly партиции: WHERE date >= "Apr" → читаем только 4 партиции из 24
  • enable_partition_pruning = on (default)
  • EXPLAIN покажет какие партиции включены

Peeking

Смотреть на p-value до окончания запланированного A/B-теста и принимать решение остановить рано.

Почему плохо: классические t-test и z-test предполагают одну проверку в конце. Если ты проверяешь ежедневно, шанс ложного срабатывания растёт с 5% до 25–30% за 2 недели.

Решения:

  • Зафиксируй sample size, смотри только в конце
  • Используй sequential testing (mSPRT, always-valid p-values)
  • Bayesian A/B-тесты (можно смотреть когда угодно)
ПРИМЕРЫ
  • "Я каждое утро открывал дашборд, на 4-й день увидел p=0.04 и катнул" → peeking, результат под вопросом

Sequential Testing

Дизайн A/B-теста который позволяет подсматривать результаты и останавливать тест досрочно без потери валидности.

В отличие от fixed-horizon test (где смотришь только в конце), sequential design корректирует пороги по мере накопления данных.

Методы: mSPRT, Group Sequential Testing (GST), Bayesian A/B.

ПРИМЕРЫ
  • Optimizely использует mSPRT — можно catit' winner раньше
  • Group Sequential: pre-defined checkpoints (например 4 проверки за 2 недели)
  • Bayesian: непрерывное обновление posterior — peeking безопасный

SHAP (SHapley Additive exPlanations)

Метод interpretability для ML-моделей. Считает вклад каждой фичи в predict для конкретного samples — based on game theory Shapley values.

Преимущества над feature_importances_:

  • Local (per-sample) explanation, не только global
  • Учитывает correlations
  • Sign aware (positive/negative effect)
  • Math rigorous
ПРИМЕРЫ
  • shap.TreeExplainer + shap_values
  • shap.summary_plot — global feature importance
  • shap.force_plot — explain ONE prediction

Silent Failure

Ситуация когда ETL/процесс завершился успешно по логам, но данные неверные или неполные. Самый опасный тип bug потому что не triggert alerts.

Типичные causes: schema evolution без updates, type coercion, batch boundary issues, pagination missed, deduplication bug, floating-point precision.

Защита: cross-validation (source vs DWH totals), audit logs, anomaly detection.

ПРИМЕРЫ
  • ETL upсtream добавил column → silent loss of data
  • INSERT ON CONFLICT DO NOTHING для updated rows
  • Timezone confusion — данные на boundaries дня лоsэ-ются

Simpson's Paradox

Статистический парадокс: эффект, видный в каждой подгруппе, исчезает или меняет направление в общей суммарной выборке (и наоборот).

Причина — confounder (mediator) который коррелирован и с группой, и с outcome.

ПРИМЕРЫ
  • A/B-тест: на iOS +1.5pp, Android -1pp, overall ~0 — Simpson's
  • Berkeley admissions paradox 1973 — гендер vs department
  • Bayes treatment effect: каждый сегмент positive, average negative

Single Source of Truth (SSOT)

Принцип: для каждого факта существует ровно одно место в системе которое его хранит и обновляет.

Без SSOT: в финансовом дашборде revenue = 10М, в маркетинговом = 12М, у CEO в Excel = 11М. Все используют разные источники, никто не знает правду.

С SSOT: есть одна таблица core.revenue, все дашборды смотрят туда. Любое расхождение = баг конкретного дашборда, не «у нас данные разные».

Признаки нарушения SSOT:

  • Аналитики тратят 50% времени на «почему у меня и у тебя разные цифры»
  • Метрики имеют разные определения в разных отделах
  • KPI пересчитывают вручную в Excel
ПРИМЕРЫ
  • Modern data stack стремится к SSOT через semantic layer (dbt, LookML)
  • Слайды для совета директоров — всегда из dashboards, не из ноутбука аналитика

Slowly Changing Dimension (SCD)

Тип измерения в DWH, значения которого меняются со временем, и нужно решить как хранить историю.

Например, юзер сменил город с Алматы на Астану. Что хранить?

SCD Type 1 — перезаписать. Истории нет. Простой, но теряем «откуда юзер пришёл». SCD Type 2 — добавить новую строку с effective_from / effective_to. История есть, но таблица растёт. SCD Type 3 — добавить колонки previous_city, current_city. Только одна предыдущая версия.

Для аналитики юзеров чаще всего SCD Type 2 — он позволяет правильно атрибутировать события («юзер на момент покупки был в Алматы»).

ПРИМЕРЫ
  • Если в данных юзеров нет SCD Type 2 — нельзя честно посчитать "revenue by city" за прошлый год

SQL Injection

Vulnerability когда атакующий внедряет произвольный SQL через user input. Возникает когда query строится через string concatenation вместо parameterized queries.

Защита: всегда использовать parameterized queries (driver сам экранирует). Для dynamic column/table names — whitelist подход.

ПРИМЕРЫ
  • f-string concatenation в SQL — vulnerable
  • db.execute("WHERE name = %s", (name,)) — safe (parameterized)
  • OWASP Top 10 #3 — injection vulnerabilities

SRM (Sample Ratio Mismatch)

В A/B-тесте: фактическое распределение трафика не соответствует запланированному (50/50, 80/20).

Признак: пропорция в группах статистически отличается от заданной (p < 0.001 в chi-square).

Что значит: в твоей рандомизации баг. Юзеры распределены не случайно — значит группы не сравнимы, и результаты теста нельзя доверять.

Причины:

  • Юзеры из B чаще «вылетают» (баг в SDK)
  • Кеширование на CDN перекосило assignment
  • Bot-трафик пошёл только в одну группу
ПРИМЕРЫ
  • Запустили A/B 50/50, увидели 47/53 распределение → SRM. Не катим, разбираемся с трекингом.

star * и ** в Python

Питон-операторы для unpacking аргументов.

  • *args — variable positional arguments → tuple
  • **kwargs — variable keyword arguments → dict
  • При вызове: func(*list) распаковывает в позиционные, func(**dict) в keyword
  • Single * в signature — после него только keyword-only args
ПРИМЕРЫ
  • def func(a, b, *args, **kwargs): args = (3, 4, 5), kwargs = {x: 1}
  • pd.concat([df1, df2, df3]) → pd.concat([dataframes])
  • def func(*, mode): mode= keyword-only

Star Schema

Архитектурный pattern data warehouse: одна центральная fact table + несколько dimension tables вокруг неё.

Стандарт для Power BI, BigQuery, Snowflake аналитических моделей. Альтернатива — snowflake (dim'ы join'ятся между собой) — обычно хуже.

ПРИМЕРЫ
  • fact_transactions + dim_customer + dim_product + dim_date
  • Power BI VertiPaq оптимизирован под star
  • OLAP cubes — реализация star schema

Stratified Sampling

Sampling technique где populace делится на strata (сегменты) по ключевым признакам, потом sample проводится внутри каждой страты отдельно (часто equal или proportional allocation).

Зачем: equal precision per segment. Простая случайная выборка может underrepresent small segments (например VIP клиентов).

ПРИМЕРЫ
  • Survey 1000 customers: 200 VIP + 300 Premium + 500 Regular
  • sklearn StratifiedShuffleSplit
  • A/B tests: stratify by tenure, device, region

Time to Value (TTV)

Время от регистрации до первого «aha moment». Чем короче — тем выше activation и retention.

Цель UX-команды — снижать TTV. Long onboarding с tutorials часто увеличивает TTV — лучше «learn by doing».

ПРИМЕРЫ
  • Каспи: первый перевод за 60 секунд после регистрации = TTV 1 min
  • Slack: первое сообщение в канале — TTV 5 min
  • SaaS B2B: время до первого active workspace

Vanity Metric

Метрика, которая выглядит впечатляюще, но не помогает принимать решения.

Классика:

  • "Total registered users" — а сколько активны?
  • "Page views" — а конвертят?
  • "App downloads" — а удерживаются?

Главный тест: «если эта метрика вырастет в 2 раза, что я сделаю по-другому?». Если ответа нет — vanity.

ПРИМЕРЫ
  • Followers в Instagram, total signups, "1M users by Q4" в питч-деке — всё vanity без сопроводительных метрик