NAQTY DATA.
ТеорияПрактика
О школе →Создать аккаунт
ТЕОРИЯ ←

Глоссарий

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

Actionable Metric

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

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

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

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

Aha Moment

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

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

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

Attribution

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

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

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

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

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

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 геолокации
→ idempotency→ etl→ data-quality

Base Rate Neglect

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

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

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

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
→ ml→ evaluation→ best-practices

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²
→ probability→ independence→ collisions

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
→ joins→ sql→ aggregation

Cohort (Когорта)

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

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

Зачем нужны:

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

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
→ ltv→ cohort→ retention→ marketing

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 под капотом, читает только нужные колонки
→ olap-vs-oltp→ data-warehouse

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)
→ ab-tests→ variance-reduction→ sample-size

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-lineage→ data-quality→ etl

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-quality→ data-lineage→ machine-learning

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
→ train-test-split→ sklearn→ machine-learning

Data Lineage

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

Зачем нужна:

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

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

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

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
→ data-quality→ etl→ monitoring

DAU / MAU

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

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

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

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

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

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
→ ml→ data-cleaning→ time-series

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 в банковском приложении (заявка → одобрение → выдача)
→ conversion→ cohort→ retention

Gaps and Islands

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

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

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

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

Goodhart's Law

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

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

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

Guardrail Metric

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

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

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

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
→ ab-tests→ validity→ long-term-impact

HTE (Heterogeneous Treatment Effect)

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

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

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

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 не пошлёт дважды
→ etl→ data-contract

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
→ attribution→ roas→ marketing→ incrementality

Incrementality

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

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

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

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
→ retention→ growth→ referral

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 графиков
→ visualization→ truncated-axis→ design

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
  • Маркетинг любит длинные окна (больше атрибуции), финансы — короткие (честная цена клика)
→ attribution

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
→ attribution→ cohort→ segment

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 метрики
→ saas→ ltv→ cac→ metrics

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
→ postgresql→ performance→ dwh

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 метрик → скорее всего это шум, без поправки
→ p-hacking→ peeking

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
→ vacuum→ isolation→ postgresql

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
→ guardrail-metric→ vanity-metric

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
→ ab-tests→ primacy-effect→ long-term-impact

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
→ columnar-storage→ etl→ data-warehouse

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%
→ multiple-testing→ peeking

P-value misinterpretation

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

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

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

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

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
→ sql→ security→ sql-injection

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 покажет какие партиции включены
→ partitioning→ postgresql→ performance

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, результат под вопросом
→ ab-test→ srm→ sequential-testing

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 безопасный
→ peeking→ ab-tests→ p-hacking

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
→ ml→ interpretability→ feature-importance

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э-ются
→ data-quality→ etl→ testing→ monitoring

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
→ hte→ ab-tests→ confounder

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, не из ноутбука аналитика
→ data-lineage

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" за прошлый год
→ data-lineage

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
→ security→ sql→ best-practices

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. Не катим, разбираемся с трекингом.
→ ab-test→ peeking

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
→ python→ functions→ basics

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
→ data-modeling→ olap-vs-oltp→ columnar-storage

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
→ stats→ sampling→ survey→ ab-tests

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
→ aha-moment→ onboarding→ retention

Vanity Metric

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

Классика:

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

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

ПРИМЕРЫ
  • Followers в Instagram, total signups, "1M users by Q4" в питч-деке — всё vanity без сопроводительных метрик
→ north-star-metric→ actionable-metric
NAQTY DATA — Школа аналитики данных
Проверка сертификатаДоговор офертыПолитика конфиденциальностиКонтакты
Telegram-канал @naqty_data →WhatsApp-канал →Instagram @naqty_data →
© 2026 ИП «СЕЙЛҚАНОВ» · naqty-data.kz
NAQTY DATA.
ТеорияПрактика
О школе →Создать аккаунт