Fast-revision cheatsheet for Data Engineering interviews. Tailored for Senior/Lead Data Management Professional / Data Engineer roles focused on automation/AI/ML/statistical techniques for ingestion, enrichment, validation, and monitoring.
Шпаргалка для быстрого повторения перед Data Engineering интервью. Заточена под Senior/Lead Data Management Professional / Data Engineer роли с фокусом на автоматизацию/AI/ML/статистические методы для приёма, обогащения, валидации и мониторинга данных.
Lead every answer here with the same meta-point: DQ is a layered system, and you climb from cheap deterministic checks to expensive AI only when the cheaper layer demonstrably fails.
Начинай каждый ответ с общего тезиса: DQ — это многослойная система, ты поднимаешься от дешёвых детерминистских проверок к дорогому AI только тогда, когда более дешёвый слой наглядно не справляется.
Frame every technique around client-facing reliability: the failure you prevent is "a wrong economic indicator / data point reaches a client." Bring up false-positive cost and human-in-the-loop unprompted; that is what separates someone who has run AI in production (you: Syntea, Untangler) from someone who has only read about it.
Обрамляй каждую технику в контексте надёжности для клиента: сбой, который ты предотвращаешь — это «неверный экономический показатель / точка данных доходит до клиента». Упоминай цену ложных срабатываний и human-in-the-loop без подсказки; это отличает того, кто запускал AI в продакшне (ты: Syntea, Untangler), от того, кто только читал.
When asked "how would you add AI/ML to validation," do not name one algorithm. Show the ladder and say you climb only when forced.
Когда спрашивают «как бы ты добавил AI/ML к валидации», не называй один алгоритм. Покажи лестницу и скажи, что ты поднимаешься только когда вынужден.
| Rung | What it handles | Cost / explainability |
|---|---|---|
| Rules | Schema, not-null, type, freshness, row-count, referential, arithmetic identities (components sum to total) | Free, fully explainable, auditable |
| Robust stats | Value outliers per series: median+MAD, IQR, STL residual, S-H-ESD, forecast intervals | Cheap, explainable thresholds |
| Classical ML | Text classification / mapping with labels (TF-IDF + LogReg/GBM), Isolation Forest for multivariate | Cheap, mostly explainable, needs labels |
| Embeddings | Semantic mapping when surface forms differ (vendor desc → canonical series) | Moderate, less explainable |
| LLM | Ambiguous residual: schema mapping, doc gen, anomaly triage, code refactor | Expensive, non-deterministic, needs guardrails |
| Ступень | Что обрабатывает | Цена / объяснимость |
|---|---|---|
| Правила | Схема, not-null, тип, свежесть, row-count, ссылочная целостность, арифметические тождества (компоненты дают сумму) | Бесплатно, полностью объяснимо, аудируемо |
| Робастная статистика | Выбросы значений на серию: median+MAD, IQR, остаток STL, S-H-ESD, интервалы прогноза | Дёшево, объяснимые пороги |
| Классический ML | Текстовая классификация / маппинг с метками (TF-IDF + LogReg/GBM), Isolation Forest для многомерных | Дёшево, в основном объяснимо, нужны метки |
| Embeddings | Семантический маппинг, когда поверхностные формы различаются (описание вендора → канонический ряд) | Умеренно, менее объяснимо |
| LLM | Неоднозначный остаток: маппинг схем, генерация документации, триаж аномалий, рефакторинг кода | Дорого, недетерминистично, нужны ограничители |
| Method | Idea | Use when | Watch out |
|---|---|---|---|
| Z-score | z=(x-μ)/σ, flag |z|>3 | Roughly normal, stationary | Skew breaks it; outliers inflate σ and hide themselves |
| Robust z | median + MAD instead of μ,σ | Same, but outlier-resistant | Still assumes stationarity |
| IQR fences | Q1−1.5·IQR, Q3+1.5·IQR | Skewed, distribution-free default | Flags normal seasonal peaks |
| STL residual | Split trend+seasonal+resid, test resid | Seasonal econ series (employment, retail) | Needs enough history per period |
| S-H-ESD | De-seasonalize → Generalized ESD on resid | Seasonal + multiple anomalies | More params; Twitter's method |
| Forecast interval | Prophet/SARIMA predict + flag outside band | Forecastable, "expected-range" check | Refit on revisions; cold start |
| Isolation Forest | Tree-based, isolates rare points | Multivariate (each field fine alone) | Less explainable; harder threshold |
| Метод | Идея | Когда использовать | Подводные камни |
|---|---|---|---|
| Z-score | z=(x-μ)/σ, флаг |z|>3 | Примерно нормальное, стационарное | Скошенность ломает; выбросы раздувают σ и прячут себя |
| Robust z | median + MAD вместо μ,σ | То же, но устойчиво к выбросам | Всё ещё предполагает стационарность |
| IQR fences | Q1−1.5·IQR, Q3+1.5·IQR | Скошенное, distribution-free по умолчанию | Флагает нормальные сезонные пики |
| STL residual | Разделить тренд+сезон+остаток, тестить остаток | Сезонные эконом. ряды (занятость, розница) | Нужно достаточно истории на период |
| S-H-ESD | Десезонализация → Generalized ESD на остатке | Сезонность + множественные аномалии | Больше параметров; метод Twitter |
| Forecast interval | Prophet/SARIMA прогноз + флаг вне полосы | Прогнозируемое, проверка «ожидаемого диапазона» | Переобучение на ревизиях; холодный старт |
| Isolation Forest | На деревьях, изолирует редкие точки | Многомерное (каждое поле само по себе ОК) | Менее объяснимо; сложнее порог |
Rule of thumb: stationary → robust z / IQR · seasonal/trending → STL residual or S-H-ESD · forecastable → prediction interval · multivariate combos → Isolation Forest.
Эмпирика: стационарное → robust z / IQR · сезонное/с трендом → остаток STL или S-H-ESD · прогнозируемое → интервал прогноза · многомерные комбо → Isolation Forest.
import numpy as np def robust_z_flags(x, k=3.5): med = np.median(x) mad = np.median(np.abs(x - med)) # 0.6745 makes MAD comparable to σ# 0.6745 делает MAD сопоставимым с σ z = 0.6745 * (x - med) / (mad or 1e-9) return np.abs(z) > k
from statsmodels.tsa.seasonal import STL res = STL(series, period=12).fit() resid = res.resid # IQR on the residual, not the raw series# IQR на остатке, а не на сыром ряде q1, q3 = np.percentile(resid, [25,75]) iqr = q3 - q1 flags = (resid < q1-1.5*iqr) | (resid > q3+1.5*iqr)
Keep these cleanly separate; conflating them is a junior tell.
Держи их чётко раздельно; их смешение — признак джуна.
| Anomaly / outlier | Drift | |
|---|---|---|
| Grain | Point / window | Distribution over a batch |
| Question | "Is this observation unexpected vs the series's own history?" | "Did the shape of incoming data change vs a reference?" |
| Catches | Fat-finger value, spike, missing release | Vendor changed units (% → bps), rescaled, methodology revision, schema/semantic shift, rebasing |
| Methods | z / IQR / STL / forecast interval | PSI, KS test, chi-square, mean/variance shift |
| Reaction | Can auto-reject/quarantine | Fires a review — drift may be real regime change |
| Аномалия / выброс | Дрифт | |
|---|---|---|
| Зерно | Точка / окно | Распределение на батче |
| Вопрос | «Это наблюдение неожиданно относительно собственной истории ряда?» | «Изменилась ли форма входящих данных относительно эталона?» |
| Ловит | Опечатка в значении, всплеск, пропущенный релиз | Вендор поменял единицы (% → б.п.), пересчитал, ревизия методологии, сдвиг схемы/семантики, ребейзинг |
| Методы | z / IQR / STL / интервал прогноза | PSI, тест KS, chi-square, сдвиг mean/variance |
| Реакция | Может авто-отклонить/карантин | Запускает ревью — дрифт может быть настоящей сменой режима |
# bin both windows, compare proportions PSI = Σ (actual% − expected%) * ln(actual% / expected%) # <0.10 stable · 0.10–0.25 moderate shift · >0.25 significant
# разбиваем оба окна, сравниваем пропорции PSI = Σ (actual% − expected%) * ln(actual% / expected%) # <0.10 стабильно · 0.10–0.25 умеренный сдвиг · >0.25 значимый
KS test for continuous distributions, chi-square for categorical. For an ML model add feature drift, prediction drift (early warning when labels are delayed), and concept drift (input→output relationship changed — the textbook driver in finance is regime change).
Тест KS для непрерывных распределений, chi-square для категориальных. Для ML-модели добавь feature drift, prediction drift (раннее предупреждение, когда метки запаздывают) и concept drift (изменилось отношение вход→выход — в финансах типичный драйвер — смена режима).
Use cases: map a vendor's free-text series description → standard indicator/country/frequency; resolve entities across vendors; parse units / seasonal-adjustment flags from text; dedupe near-identical series.
Кейсы: маппинг текстового описания ряда вендора → стандартный индикатор/страна/частота; резолв сущностей между вендорами; парсинг единиц / флагов сезонной корректировки из текста; дедупликация почти идентичных рядов.
Auto-accept above a confidence threshold; route low confidence to a human; feed corrections back as training labels. Track mapping accuracy as a DQ metric.
Авто-приём выше порога уверенности; направляй низкую уверенность на человека; подавай исправления обратно как обучающие метки. Отслеживай точность маппинга как метрику DQ.
One-liner: an LLM is a high-recall, low-precision proposer; you wrap it in deterministic precision (schema constraints, validation, or a human).
Одной строкой: LLM — это proposer с высоким recall, низким precision; ты оборачиваешь его в детерминистский precision (ограничения схемы, валидация или человек).
| Risk | Control |
|---|---|
| Non-determinism | Low temperature; pin model + prompt versions in version control; reproducible enough to audit |
| Hallucination | Constrain to schema (function calling / JSON mode); reject off-schema; validate against deterministic check or cross-source |
| Cost & latency | Batch, cache; invoke LLM only on the residual cheap heuristics couldn't resolve |
| Model drift (vendor changes API model) | Pin versions; run an eval set on every model/prompt bump |
| Wrong value to client | Human-in-the-loop for anything client-facing until measured accuracy + safe fallback justify automation |
| Риск | Контроль |
|---|---|
| Недетерминизм | Низкая temperature; закрепить версии модели + промпта в version control; достаточно воспроизводимо для аудита |
| Галлюцинации | Ограничить схемой (function calling / JSON mode); отклонять вне схемы; валидировать против детерминистской проверки или перекрёстного источника |
| Цена и задержка | Батчинг, кеш; вызывать LLM только на остаток, который не разрешили дешёвые эвристики |
| Дрифт модели (вендор меняет API-модель) | Закрепить версии; прогонять eval-набор на каждом изменении модели/промпта |
| Неверное значение клиенту | Human-in-the-loop для всего клиентского, пока измеренная точность + безопасный фолбэк не оправдают автоматизацию |
Days of manual mapping collapse into a reviewed draft; once approved it is plain config. This is the Untangler propose-then-critique idea applied to ingestion.
Дни ручного маппинга сворачиваются в отревьюенный черновик; после одобрения это просто конфиг. Это идея Untangler «предложить, затем скритиковать», применённая к ingestion.
Alert fatigue means the monitor is effectively offline. Put false-positive cost in the objective, not the footnotes. If a monitor fires too much:
Усталость от алертов означает, что монитор фактически офлайн. Ставь цену ложных срабатываний в цель, а не в сноски. Если монитор срабатывает слишком часто:
Config-driven so adding a feed is config, not code. Block-on-fail vs warn-only is a per-check policy decision sized by blast radius.
Управляется конфигом, поэтому добавить фид — это конфиг, а не код. Block-on-fail vs warn-only — решение политики на проверку, калибруемое по радиусу поражения.
| Story | Lead number | Use it for |
|---|---|---|
| Untangler (multi-agent AI) | Hackathon win, adopted internally | "AI applied to data workflows" — your flagship LLM story |
| Syntea GPT-4 ingestion | 80,000+ students, MS case study | LLM in production at scale; Kafka/streaming/semi-structured |
| Entity-resolution fix | 6.2B records, 100+ metrics/ML features restored | Silent DQ defect, blast-radius thinking, consumer-facing validation |
| 10-system consolidation | 3.6B events/day, 47% redundancy cut | DQ monitors on a consolidated model; canonical mapping |
| Default-prediction model | 50% loss reduction | End-to-end ML in prod; point-in-time correctness; money attached |
| Telco segmentation/uplift | +20% ARPU, 40+ campaigns | Rigorous measurement; concept drift via regime change |
| История | Главная цифра | Использовать для |
|---|---|---|
| Untangler (multi-agent AI) | Победа на хакатоне, принят внутренне | «AI применённый к дата-воркфлоу» — твоя флагманская LLM-история |
| Syntea GPT-4 ingestion | 80 000+ студентов, кейс MS | LLM в продакшне на масштабе; Kafka/streaming/полуструктурированное |
| Фикс entity-resolution | 6.2B записей, 100+ метрик/ML-фич восстановлено | Тихий дефект DQ, мышление радиусом поражения, валидация для потребителей |
| Консолидация 10 систем | 3.6B событий/день, −47% избыточности | Мониторы DQ на консолидированной модели; канонический маппинг |
| Модель предсказания дефолта | −50% потерь | End-to-end ML в продакшне; точность на момент времени; деньги привязаны |
| Сегментация/uplift в телекоме | +20% ARPU, 40+ кампаний | Строгие измерения; concept drift через смену режима |
Tap a card to flip. Answer out loud first.
Тапни карточку, чтобы перевернуть. Сначала ответь вслух.