12+
Книга по качеству данных

Объем: 138 бумажных стр.

Формат: epub, fb2, pdfRead, mobi

Подробнее

О том, как написана эта книга

Добро пожаловать. Прежде чем мы перейдём к метрикам, пайплайнам и правилам, которые экономят бизнесу время и деньги, важно честно рассказать, как появился этот текст.

Эту книгу создал не один человек в одиночку. Она родилась в тандеме живого автора-куратора и большой языковой модели. Мы работали по принципу «архитектор + строитель»:

— Человек задавал вектор, формулировал промпты, оттачивал метафоры, придумывал запоминающиеся акронимы (ЧПУ, НДУНФ, СВУПК+Д и другие) и собирал разрозненные фрагменты в единую логическую цепочку.

— ИИ выступал в роли неутомимого соавтора: генерировал черновики глав, писал примеры кода, составлял таблицы, чек-листы и формулировал «якорные фразы».

Тем не менее, IT-инструменты развиваются быстрее, чем печатаются книги. Синтаксис библиотек, интерфейсы Great Expectations или Airflow могут измениться. Все примеры кода — это рабочие шаблоны и концепции, а не готовые production-решения. Перед внедрением обязательно адаптируйте их под ваш стек и протестируйте.

Если вы цените честность, практическую пользу и отсутствие воды — вы в правильном месте. Переворачивайте страницу. Впереди только то, что действительно работает.

И еще: в книге могут встречаться мелкие опечатки, неидеальные формулировки или устаревшие нюансы — следствие того, что книга создавалась с установкой на практическую пользу, а не академический лоск. Я прошу простить эти шероховатости. Пока — пусть книга будет полезной, даже если где-то чуть шероховатой.

ВАЖНО

Все пороговые значения в этой книге — примеры. В вашем бизнесе 95% может быть критично, а 99% — избыточно. Устанавливайте пороги вместе с владельцем данных.

ЮРИДИЧЕСКОЕ ПРЕДУПРЕЖДЕНИЕ И ОГРАНИЧЕНИЕ ОТВЕТСТВЕННОСТИ

1. Относительно примеров кода

Все скрипты, SQL-запросы и фрагменты кода, приведенные в этой книге, носят исключительно иллюстративный и учебный характер. Они демонстрируют концепции, но не являются готовыми решениями для промышленной эксплуатации (продакшена). Использование этих примеров в ваших системах осуществляется на ваш собственный риск. Автор не несет ответственности за любые убытки, потерю данных, сбои в работе систем или инциденты безопасности, возникшие в результате применения, модификации или интеграции предоставленного кода. Перед внедрением обязательно: (1) адаптируйте код под свой стек, (2) протестируйте в среде, изолированной от боевых данных (staging), (3) получите одобрение вашей команды инженеров и безопасности.

2. Относительно законодательства и регуляторики
Упоминания законов (включая, но не ограничиваясь, 152-ФЗ, GDPR), штрафов и требований регуляторов приведены исключительно для иллюстрации бизнес-рисков. Юридические нормы динамичны, их толкование варьируется в разных юрисдикциях и зависит от конкретной деятельности компании. Данная книга не является юридической консультацией и не заменяет профессиональных комплаенс-специалистов. Для обеспечения правовой чистоты ваших процессов настоятельно рекомендуем обращаться к квалифицированным юристам.

3. Относительно бизнес-решений и финансовых показателей
Советы по оценке ROI, матрицы приоритетов и рекомендации по взаимодействию с руководством основаны на отраслевом опыте, но не гарантируют конкретного финансового результата. Любые управленческие решения, принятые на основе материалов книги, остаются на ответственности лица, их принимающего.

Почему качество данных — это отдельная дисциплина

Метафора

Представьте, что 100 лет назад вы строите дом. Вам нужны: плотник, каменщик, кровельщик. Но вам не нужен отдельный специалист по качеству гвоздей.

Почему? Потому что:

— Гвоздей мало (десяток коробок на дом)

— Их можно пересчитать вручную

— Если гвоздь кривой — это видно сразу

— Ошибка стоит недорого (заменил гвоздь — и дальше работаешь)

А теперь представьте, что вы строите небоскрёб. Вам нужны миллионы крепёжных элементов. Вы не можете проверить каждый. Ошибка в одном типе болта может обрушить этаж. И вы вынуждены нанять отдельного человека, который знает стандарты, проверяет сертификаты, тестирует выборку и отслеживает, откуда пришли детали.

Качество данных — это тот же «специалист по болтам». Он появился не потому, что люди стали ленивее. А потому, что масштаб, скорость и цена ошибки выросли в миллионы раз.

Как менялись данные и почему контроль перестал быть ручным

Эпоха перфокарт (1960–1980): Данных было мало. Их можно было проверить глазами. За качество отвечал программист, который их и вводил.

Эпоха баз данных (1990–2010): Данных стало больше. Появились CHECK, FOREIGN KEY. База начала сама «не пускать» очевидный мусор. За качество отвечали администраторы и аналитики.

Эпоха Big Data и ИИ (2010–сейчас): Миллиарды записей, сотни источников, решения в реальном времени. Здесь человеческий контроль уже не работает. Появилась роль Data Quality Engineer.

Пять причин, почему DQ выделилось в отдельное направление

— Масштаб: Раньше — 10 000 строк в Excel. Сейчас — 10 миллионов событий в час. Никакой человек не проверит это вручную. Нужны автоматические конвейеры.

— Скорость: Раньше отчёт строился раз в месяц. Сейчас кредитный скоринг, фрод-детекция и персонализация работают в реальном времени. Ошибка стоит денег здесь и сейчас.

— Разнообразие источников: Раньше данные вводились в одну систему. Сейчас они летят из CRM, ERP, мобильных приложений, IoT-датчиков и внешних API. Каждый источник — свой формат и свои ошибки.

— Регуляторика. Раньше «ошиблись в отчёте — пересдадим». Сейчас 152-ФЗ, GDPR, отчётность в ЦБ и ФНС. Ошибка в данных — это штраф до 4% от оборота или блокировка счёта.

— ИИ и ML. Раньше данные шли в отчёты. Сейчас они кормят модели. Ошибка в обучающей выборке означает, что модель выучит неправильные паттерны и будет ошибаться автоматически и уверенно.

Короткая история профессии

DQ выросло из практики. В 1990-х появились хранилища (DWH) — и данные начали «портиться» при переносе. В 2000-х закон SOX в США заставил компании юридически отвечать за точность финансов. В 2010-х Big Data сделал ручной контроль невозможным. В 2015-м GDPR превратил качество из «хорошо бы» в юридическое требование. А сегодня генеративный ИИ усилил принцип GIGO: мусор на входе теперь порождает не просто ошибку, а уверенную галлюцинацию.

Что изменилось для вас лично?

Раньше вы могли быть «просто аналитиком» или «просто инженером», и качество данных было побочной задачей. Сейчас, если вы работаете с данными, вы автоматически отвечаете за их пригодность. Вопрос только в том, будете ли вы делать это осознанно — с инструментами и процессами — или продолжите «тушить пожары» вручную.

Почему эта книга написана сейчас?

Не потому, что DQ стало «модным». А потому, что практика опередила литературу:

DQ вышло из IT-подвала.

Это больше не техническая задача «админа базы». Это бизнес-дисциплина, которая напрямую влияет на выручку, комплаенс и устойчивость ИИ-моделей.

Инструменты готовы к продакшену.

Great Expectations, dbt, Data Contracts — это не эксперименты, а рабочий стек. Но знания о них размазаны по официальной документации, форумам и разрозненным статьям.

Между академикой и практикой — пустота.

Когда я сам искал материал, выбор был таким: либо 600-страничные энциклопедии стандартов (вроде DAMA DMBOK), либо фрагментарные посты без связной системы. Не хватало одного компактного руководства, которое соединяет теорию, код и реальные процессы без воды, пустых обещаний и попытки объять необъятное.

Эта книга — попытка заполнить этот пробел. Практический минимум для тех, кому нужно начать настраивать проверки, считать ROI и выстраивать процессы завтра, а не через полгода изучения теории.

⚓ Якорная фраза

Качество данных выделилось в отдельное направление не потому, что люди стали ленивее. А потому, что масштаб, скорость и цена ошибки выросли в миллионы раз. DQ — это не мода. Это ответ на объективную реальность.

Вы спросите: «Хорошо, я понял, что качество данных — это отдельная дисциплина. Но зачем мне, обычному аналитику или инженеру, в это вникать? У меня и так отчёты горят».

Затем, чтобы не быть голословным, перейдём к самому убедительному аргументу — деньгам. Одна ошибка в таблице может стоить миллионов. И сейчас вы увидите это на цифрах.

Почему качество данных — это деньги

Перед тем как нырять в технические детали, давайте договоримся о главном. Качество данных — это не про «нравится / не нравится». Это про деньги. Одна ошибка в таблице может стоить миллионов. Прочитайте эту главу — и вы никогда не скажете «подумаешь, опечатка».

Метафора

Представьте, что вы курьер в доставке еды. Навигатор показывает адрес, но координаты сбиты на 200 метров. Вы едете не туда. Клиент не получает пиццу. Компания теряет 500 рублей. За день так 10 раз. За месяц — 150 000 рублей. За год — почти 2 миллиона. И никто специально не врал. Просто данные чуть-чуть ошиблись.

Качество данных — это не про перфекционизм. Это про деньги, время и доверие.

Важное уточнение: чистота ≠ полезность

Перед тем как мы перейдём к страшным историям о потерянных деньгах, давайте зафиксируем одну тонкость, о которой молчат 90% статей по качеству данных.

Можно добиться 100% полноты, уникальности и валидности. Можно убрать все NULL, все дубликаты, все неверные форматы. И при этом данные останутся бесполезными для принятия бизнес-решений. Почему? Потому что вы чистили не те поля, не с той тщательностью и не для той задачи.

Пример

Команда полгода наводила порядок в справочнике «Товары»: убрала дубликаты, проставила все категории, унифицировала единицы измерения. Гордость отдела качества данных. Приходит аналитик и говорит: «Мне для прогноза продаж нужна история цен за последние 3 года. А у вас хранится только текущая цена. Ваш чистый справочник бесполезен».

Вывод

Чистота ради чистоты — это игрушки. Полезность для решения — это деньги. Перед тем как чистить данные, спросите себя: «Какое бизнес-решение будет принято на основе этих данных?» Если ответа нет — возможно, вы чистите не то.

Три страшных истории из реальной жизни

Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения

Эти истории не случайность. Их объединяет один и тот же механизм — закон GIGO. Давайте разберёмся, почему так происходит и как с этим жить.

Принцип GIGO (Garbage In, Garbage Out)

Вы наверняка слышали эту фразу. Но давайте честно: в неё верят, когда речь о чужом коде, и забывают, когда речь о своих данных.

GIGO расшифровывается как Garbage In, Garbage Out — «мусор на входе, мусор на выходе».

Что это значит: Если в вашу систему попали грязные данные — на выходе вы получите грязные отчёты, предсказания и решения. Система не может «додумать» чистоту. Она честно переработает мусор в мусор.

И вот что важно понять: Это не метафора и не философия. Это инженерный факт. Алгоритм не знает, что 01.01.1900 — это не реальная дата рождения, а заглушка NULL. Модель не догадается, что возраст 999 — это опечатка. Система сделает ровно то, что вы сказали. А вы сказали: «возьми эти данные и обработай их как есть». Мусор на входе порождает не просто ошибку, а уверенную ошибку — компьютер не сомневается, он выдаёт результат с той же самоуверенностью, как если бы данные были идеальными. Именно поэтому GIGO — главный закон, с которого начинается любое качество данных.

Три уровня GIGO (как это выглядит в реальности)

Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения

Почему GIGO — это не просто поговорка, а закон

«Вы не можете „очистить“ данные волшебством. Алгоритм не догадается, что 01.01.1900 — это не реальная дата рождения, а заглушка NULL. Модель не поймёт, что возраст 999 — это опечатка. Система сделает ровно то, что вы сказали. А вы сказали: возьми эти данные и обработай их как есть.»

Что делать с GIGO (коротко)

Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения

 Якорная фраза:

Мусор на входе — мусор на выходе. И компьютер не скажет «фу», он просто сделает свою работу.

Главная формула

Качество = пригодность для конкретной задачи

Данные не бывают «чистыми» или «грязными». Они бывают достаточно хорошими, чтобы принять правильное решение.

Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения

⚓ Якорная фраза

Чистота данных измеряется не в процентах, а в рублях и минутах простоя.

Шпаргалка по терминам

Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения

Итак, мы поняли, что грязные данные дорого стоят. Теперь закономерный вопрос: а откуда они вообще берутся? Кто виноват? Ответ — в следующей главе.

Но прежде чем кидаться чинить, давайте разберёмся: откуда вообще берутся эти дыры в данных? Спойлер: виноваты не только люди. Открываем первую дверь — «Комнату слухов».

ГЛАВА 1. Комната слухов (почему данные врут)

Из предыдущей главы мы вынесли: грязные данные — это дорого. Но прежде чем чинить, нужно понять, откуда берутся искажения. Представьте, что данные проходят через длинную цепочку рук — как в игре «испорченный телефон». Вот где они портятся.

Метафора

Представьте игру в «испорченный телефон» в офисе из 50 человек. Вы шепчете: «В пятницу в 15:00 встреча в переговорной А». На выходе: «В пятницу 15 человек встречаются в переговорной, нужен торт».

С данными — то же самое. Каждый шаг вносит искажения:

— Человек вводит номер телефона в компьютер → может опечататься

— Сайт записывает действие в файл лога (журнал событий) → может потерять долю секунды

— Программа переноса данных (ETL) соединяет две таблицы → может случайно размножить строки

— Программа для отчётов (BI) строит график → может не так сгруппировать данные

Итог: вы смотрите на экран с графиками (дашборд), а там неправда. И никто специально не врал.

И здесь кроется главная ловушка: мы привыкли искать виноватого. «Кто ошибся? Кто не досмотрел?» Но в 70% случаев виноват не человек, а процесс, который не защищает от ошибки, или устройство, которое теряет данные на физическом уровне. Если каждый шаг цепочки добавляет по 1% искажений, на выходе вы получите не 99% правды, а 96% — и это уже критично для бизнеса. Поэтому вместо поиска «стрелочника» мы будем разбирать корневые причины. Их ровно три — и они скрываются за аббревиатурой ЧПУ. О них — дальше.

Почему данные врут?

Три корневые причины (далее — ЧПУ)

ЧПУ расшифровывается как Человек — Процесс — Устройство.

Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения

70% проблем — из Процесса и Устройства. Не вините людей.

Пять типов грязи (далее — НДУНФ)

НДУНФ расшифровывается как Неполнота — Дубликаты — Устарелость — Неверный формат — Физическая ошибка.

Важно: в аббревиатуре НДУНФ две буквы «Н» — это разные типы грязи (Неполнота и Неверный формат). Это не опечатка. Это напоминание: проблемы с данными могут выглядеть похоже, но лечиться по-разному.

Как думать об этих пяти типах грязи (короткое правило)

— Неполнота — «чего-то не хватает». Самая частая проблема. Начинайте проверку с неё. NULL в поле — самый очевидный свидетель того, что с данными что-то не так.

— Дубликаты — «одно и то же дважды». Бьёт по карману: две отгрузки, два начисления бонусов, двойной расчёт комиссии. Один дубликат в таблице заказов может обойтись компании в сотни тысяч рублей.

— Устарелость — «данные есть, но они старые». Коварная проблема: ошибку видно не сразу. Вы смотрите на цену в отчёте, она корректна по формату, но на самом деле уже не актуальна. Устарелость — единственный тип грязи, который убивает качество даже при 100% заполненности всех полей.

— Неверный формат — «данные есть, но их нельзя прочитать». Ломает интеграции. Если поле email содержит строку без @, а поле date — текст вместо даты, ваш ETL упадёт, и данные не загрузятся. Это самый «громкий» тип грязи — система сообщает об ошибке явно.

— Физическая ошибка — «данные есть, но они сломаны». Редко, но больно. Битые сектора на диске, повреждённые файлы, сбой при записи. Это уже не про бизнес-логику, а про инфраструктуру.

Почему порядок букв именно такой: Неполнота — самая частая проблема, с неё начинают. Дубликаты — самая дорогая, они идут второй. Устарелость — самая коварная, она третья. Неверный формат — самый «громкий», его нельзя игнорировать. Физическая ошибка — редкая, но фатальная, она замыкает список. Проверяйте данные в этом же порядке: сначала полноту, потом дубликаты, потом актуальность, потом форматы, и только в конце — физическую сохранность.

⚓ Якорная фраза

Никто Данные Уважать Не Фурычит

Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения

Если вы не знаете, с чего начать — начните с Неполноты. NULL — самый очевидный свидетель того, что с данными что-то не так.

Важное пояснение

В этой главе мы говорим об «Устарелости» как о типе грязи (буква «У» в НДУНФ). В главе 2 вы встретите «Своевременность» как одно из измерений качества (буква «С» в СВУПК+Д).

Это «одно и то же явление», просто мы смотрим на него с двух сторон:

— «Как тип грязи» (НДУНФ) → «В данных есть проблема: цены не обновлены».

— «Как измерение качества» (СВУПК+Д) → «Мы измеряем, насколько данные свежие, в днях».

Это не дублирование, а разный угол обзора. Как молоток: можно сказать «это инструмент», а можно — «это предмет весом 500 граммов». Оба утверждения верны, просто для разных задач.

Матрица «Боль × Частота»

Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения

Не каждая проблема одинаково опасна.

Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения

Правило: прежде чем чистить данные, ответьте на два вопроса:

— Что случится, если мы это не починим? (боль)

— Как часто это случается? (частота)

Что делать с найденным (чиним по типам грязи НДУНФ)

Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения

Мы разобрались, откуда берётся грязь и как её классифицировать. Но чтобы говорить о качестве данных на языке бизнеса, нам нужны измерения. Переходим к семи дверям.

ГЛАВА 2. Семь дверей в подвале (измерения качества)

В предыдущей главе мы научились узнавать грязь в лицо: неполнота, дубликаты, устарелость… Но менеджер спросит: «Насколько плохо? А это критично?» Для этого нужны измерения. Но есть одна проблема. Прежде чем измерять качество, нужно убедиться, что данные вообще можно читать. Что фундамент не треснул. Поэтому мы начнём с фундамента дома. А потом откроем семь дверей в подвале.

Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения

Метафора

Вы решили купить дом. Заходите — красиво. Но вы идёте в подвал. Там семь дверей. За каждой — скрытый дефект. Но прежде чем их открывать, вы проверяете фундамент. Если фундамент треснул — остальные двери не имеют значения. В мире данных фундамент — это целостность данных (Data Integrity).

Седьмая дверь раньше была заперта — за ней лежала доступность данных. Мы её открыли.

Итого у нас:

— Основа — Фундамент (целостность)

— Двери 1–6 — Классические измерения качества

— Дверь 7 — Доступность (раньше была заперта)

Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения

Часть 1. Фундамент дома (Data Integrity)

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

Что такое Data Integrity (простым языком)

Data Integrity (целостность данных) — это набор правил на уровне базы данных, которые гарантируют, что:

— Данные физически сохранены правильно (не битые, не потерянные)

— Связи между таблицами не сломаны (нет заказа без клиента)

— Значения не нарушают базовые ограничения (возраст не отрицательный, email содержит @)

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

Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения

СВУПК+Д

С — Своевременность, В — Валидность, У — Уникальность, П — Полнота, К — Консистентность, Д — Доступность

Важное пояснение: Порядок букв в акрониме — не случайный. Он выстроен от «внешних» характеристик данных (когда пришли, как выглядят) к «внутренним» (не противоречат ли сами себе) и заканчивается доступностью — тем, без чего все остальные измерения бессмысленны.

DBA (Database Administrator, администратор баз данных) — специалист, который отвечает за физическое здоровье базы данных: резервные копии, права доступа, производительность, настройку серверов. В контексте качества данных DBA отвечает за физическую целостность

Четыре кита целостности

Ссылочная — Структурная — Семантическая — Физическая

Четыре типа целостности выстроены в иерархию — от самого «строгого» (база данных не даст нарушить) к самому «гибкому» (человек решает, что считать правильным). Каждый следующий тип надстраивается над предыдущим. Нельзя проверить семантическую целостность, если сломана структурная. И нельзя проверить структурную, если нарушена физическая.

Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения

⚓ Якорная фраза для Integrity

Целостность — это когда база данных не даст вам выстрелить себе в ногу. Качество — когда вы сами не целитесь в ногу.

Разберём каждый тип

1. Ссылочная целостность (Referential Integrity)

Вопрос: Каждый customer_id в таблице orders существует в таблице customers?

Как проверяется: Внешними ключами (FOREIGN KEY) в базе данных.

sql

— Правильно: внешний ключ защищает от сиротских записей

CREATE TABLE orders (

order_id INT PRIMARY KEY,

customer_id INT,

FOREIGN KEY (customer_id) REFERENCES customers (customer_id)

);

— Теперь нельзя вставить заказ с customer_id = 999, если такого нет в customers

Что происходит без ссылочной целостности

Важно: Многие компании отключают внешние ключи «для скорости». Это как снять ремни безопасности, чтобы быстрее ехать. Работает до первого удара.

2. Структурная целостность (Structural Integrity)

Вопрос: Соответствуют ли данные схеме таблицы?

Что проверяет:

Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения

Пример без структурной целостности

sql

— Плохо: никаких ограничений

CREATE TABLE users (

email VARCHAR (255),

age INT

);

— Можно вставить что угодно

INSERT INTO users VALUES (NULL, -500); — email пустой, возраст -500

INSERT INTO users VALUES (’a’, 200); — email без @, возраст 200

Пример со структурной целостностью

sql

— Хорошо: ограничения на месте

CREATE TABLE users (

email VARCHAR (255) NOT NULL UNIQUE CHECK (email LIKE '%@%»),

age INT NOT NULL CHECK (age BETWEEN 0 AND 120)

);

— Следующие вставки не пройдут:

INSERT INTO users VALUES (NULL, 30); — NOT NULL violation

INSERT INTO users VALUES (’a’, 30); — CHECK (email) violation

INSERT INTO users VALUES ('a@b.com’, -5); — CHECK (age) violation

3. Семантическая целостность (Semantic Integrity)

Вопрос: Имеют ли значения смысл в реальном мире?

Это бизнес-правила, которые база данных не знает, но вы можете добавить через CHECK или триггеры.

Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения

Отличие от валидности (В из СВУПК+Д): Валидность проверяет формат (email содержит @). Семантическая целостность проверяет смысл (дата рождения не в будущем).

4. Физическая целостность (Physical Integrity)

Вопрос: Данные физически сохранены и доступны?

Это уже не про SQL, а про инфраструктуру.

Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения

Простым языком

Физическая целостность — это когда вы можете спать спокойно, зная, что база данных не исчезнет за ночь.

Матрица «Integrity vs Quality»

Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения

Золотое правило: Сначала Integrity, потом Quality. Бесполезно чистить полноту телефона, если база данных может хранить возраст -500.

Чек-лист «Проверка фундамента» (Integrity Audit)

Перед тем как заниматься качеством данных, проверьте:

Ссылочная целостность

— На все ли внешние ключи (FOREIGN KEY) созданы индексы?

— Есть ли сиротские записи? (заказы без клиентов, платежи без заказов)

— Можно ли удалить клиента, если у него есть заказы? (ON DELETE RESTRICT или CASCADE?)

Структурная целостность

— Во всех ли критических полях стоит NOT NULL?

— Есть ли дубликаты там, где должен быть UNIQUE?

— Есть ли первичные ключи (PRIMARY KEY) во всех таблицах?

Семантическая целостность

— Есть ли CHECK на возраст, даты, email, телефон?

— Есть ли правила, которые проверяют согласованность связанных полей? (статус и дата)

Физическая целостность

— Настроены ли автоматические бэкапы? Когда последний успешный?

— Есть ли мониторинг здоровья дисков?

— Поддерживают ли транзакции ACID?

Если хотя бы на один вопрос «нет» — начинайте с Integrity, а не с Quality.

Часть 2. Семь дверей качества (СВУПК+Д)

Фундамент проверили. Теперь можно открывать семь дверей в подвале. За каждой — одно измерение качества данных. Запомнить их поможет акроним.

Акроним для запоминания: «СВУПК + Д»

⚓ Якорная фраза

Семь Врат Указывают Путь: Качество Достигается

Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения

Примечание про Точность

Точность (совпадение с реальностью) требует внешнего эталона — например, сверки с бумажным документом или выезда на склад для пересчёта товаров. Поэтому она не вошла в основной акроним, но мы разберём её отдельно в конце главы.

Качество — это всегда компромисс

Теперь, когда вы знаете семь измерений качества, у вас может возникнуть соблазн: «Давайте везде выставим строгие пороги! 99.9% полноты! 100% уникальности! Никаких NULL!»

Не торопитесь. Качество данных конфликтует с тремя другими важными вещами.

Первое — скорость

Чем больше проверок вы добавите, тем медленнее данные будут загружаться. Если вы навесите 10 CHECK-ограничений на таблицу, вставка 1000 строк может замедлиться в 3–5 раз.

Второе — гибкость

Жёсткие правила мешают быстро менять процессы. Вы запретили NULL в новом поле — а через месяц бизнес говорит: «Это поле теперь необязательное, мы от него отказались». Ваше правило придётся переписывать.

Третье — стоимость

Качество требует ресурсов. Лицензия на Monte Carlo — $50 000 в год. Время инженера, который настраивает Great Expectations, — тоже деньги. Иногда дешевле терпеть 5% NULL, чем строить систему, которая их ловит.

Реальность

Вы не можете иметь одновременно идеальное качество, максимальную скорость, абсолютную гибкость и низкую стоимость. Выбирайте любые два с половиной. Остальным придётся пожертвовать.

Практический совет

Используйте слоёную защиту. На сырых данных (Bronze) — минимум проверок (только «не сломалось ли»). На витринах (Gold) — максимум проверок (потому что туда идёт бизнес). И всегда заранее договаривайтесь с бизнесом: чем мы жертвуем?

А теперь вернемся к СВУПК + Д и пройдемся по каждой двери с инструментами в руках.

Итак, мы договорились: не нужно гнаться за 100% везде. Но как тогда выбирать, что проверять, а что — нет? Для этого нам и нужны наши семь дверей — каждое измерение подскажет, где компромисс приемлем, а где — нет. Давайте пройдём по ним по порядку.

Детали за каждой дверью

С — Своевременность

Вопрос: Не устарели ли данные?

sql

SELECT

MAX (order_date) as последний_заказ,

CURRENT_DATE — MAX (order_date) as дней_без_обновления

FROM orders

Метрика: сколько дней прошло с последнего обновления.

Порог тревоги: если больше 7 дней — данные умерли.

В — Валидность

Вопрос: Соответствует ли значение правильному формату?

sql

SELECT *

FROM users

WHERE email NOT LIKE '%@%' — в email нет собачки

OR age NOT BETWEEN 0 AND 120 — возраст 200 лет

OR gender NOT IN («M», «F») — пол не М и не Ж

Метрика: доля правильных значений / все значения.

Порог тревоги: если меньше 98% — много ошибок.

У — Уникальность

Вопрос: Нет ли двух одинаковых ключей?

sql

SELECT order_id, COUNT (*) as количество_дублей

FROM orders

GROUP BY order_id

HAVING COUNT (*)> 1 — оставляем только дубликаты

Метрика: 1 — (количество дубликатов / общее количество строк).

Порог тревоги: если меньше 99% — дубликатов слишком много.

П — Полнота

Вопрос: Все ли данные на месте (нет пустых значений NULL)?

sql

SELECT

COUNT (*) as всего_строк,

COUNT (phone) as заполнено_телефонов,

(COUNT (*) — COUNT (phone)) * 100.0 / COUNT (*) as процент_пустот

FROM users

Метрика: количество заполненных клеток / общее количество строк.

Порог тревоги: если меньше 95% — слишком много пустот.

К — Консистентность (согласованность)

Вопрос: Не противоречат ли данные сами себе?

sql

SELECT *

FROM orders

WHERE status = «Доставлен» — статус «доставлен»

AND delivery_date IS NULL — но даты доставки нет

Метрика: количество противоречий / общее количество строк.

Порог тревоги: если больше 1% — серьёзные противоречия.

Д — Доступность

Вопрос: Может ли бизнес-пользователь получить данные?

Что проверяем:

— Есть ли у пользователя права на чтение таблицы?

— Открывается ли отчёт (дашборд) быстрее чем за 10 секунд?

— Не упал ли сервер с базой данных?

Метрики:

— Время выполнения запроса (должно быть <5 секунд)

— Доступность дашборда (должна быть> 99% времени)

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

Т — Точность (отдельно, требует внешнего эталона)

Вопрос: Соответствуют ли данные реальности?

sql

SELECT COUNT (*) as несовпадения

FROM crm_clients c

JOIN passport_data p ON c.client_id = p.client_id

WHERE c.age!= p.age — возраст в CRM не совпадает с паспортными данными

Проблема: вы не можете проверить точность, если у вас нет правильного источника (эталона). Им может быть:

— Бумажный документ

— Данные из государственного реестра

— Ручной пересчёт товаров на складе

Метрики качества данных (шпаргалка)

Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения

⚓ Якорная фраза

Сначала Integrity — потом Quality. Сначала фундамент — потом семь дверей.

А для запоминания измерений

Семь Врат Указывают Путь: Качество Достигается

Своевременность — Валидность — Уникальность — Полнота — Консистентность — плюс Доступность и Точность (отдельно).

Вопросы для самопроверки (после глав 1–2)

— Вы нашли ошибку в отчёте. Руководитель говорит: «Подумаешь, пара ошибок». Что вы ответите?

Ответ

«Чистота данных измеряется не в процентах, а в рублях и минутах простоя. Давайте посчитаем, во сколько обходится эта ошибка за год.»

— (Глава 1) Вы смотрите на таблицу. В поле «телефон» много пустых строк, в поле «email» — строки без @, а один заказ записан дважды. Как классифицировать эти три проблемы по НДУНФ?

Ответ

— Пустые строки в телефоне → Н (Неполнота, NULL)

— Email без @ → Н (Неверный формат) — да, та же буква, но другой тип

— Дубликат заказа → Д (Дубликаты)

— (Глава 1) Прежде чем чинить проблему, вы должны ответить на два вопроса. Какие?

Ответ

— Что случится, если мы это не починим? (боль)

— Как часто это случается? (частота)

Матрица «Боль × Частота»: чините то, что болит и часто встречается.

— (Глава 2) В чём разница между Integrity (целостностью) и Quality (качеством) данных? Приведите по одному примеру для каждого.

Ответ

Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения

Золотое правило

Сначала Integrity, потом Quality. Бесполезно чистить полноту телефона, если в базе данных можно хранить возраст -500.

Мы научились измерять качество данных по семи дверям. Но теория — это одно. А как на практике быстро оценить новую таблицу, когда вы не знаете, что означают её столбцы?

Для этого нужен рентген. Переходим к профилированию данных.

ГЛАВА 3. Рентген багажа в аэропорту (профилирование данных)

В предыдущей главе мы узнали семь измерений качества. Теперь представьте: вам дали новую таблицу. Вы не знаете, что означают столбцы. Но за 10 минут нужно сказать — «с данными всё в порядке» или «тут что-то гнилое». Это называется профилированием. Как рентген в аэропорту.

Метафора

Вы — инспектор в аэропорту. Перед вами чемодан. Вы не знаете, что внутри. Но за 30 секунд нужно решить: «Обычный багаж или требует досмотра?»

Вы просвечиваете его рентгеном. На экране:

— Плотные области (много однотипного — например, 100 одинаковых флаконов) → в данных это столбцы с малым количеством уникальных значений. Например, поле gender со значениями только «M» и «F». Нормально, если так и задумано. Но если поле order_id тоже имеет всего два уникальных значения — это подозрительно.

— Пустоты (ничего нет — как NULL в данных) → рентген сразу показывает пустые зоны. В данных вы видите столбцы, где 40%, 60% или 90% значений — NULL. Это не обязательно проблема, но это место, куда вы посмотрите в первую очередь.

— Странные формы (выбросы — например, что-то очень большое или очень маленькое) → в данных это значения, которые выбиваются из общего ряда. Возраст 999 лет. Сумма заказа -5000 рублей. Email без @. Рентген не говорит, что именно это за предмет, но он говорит: «Здесь что-то не так, проверь».

Профилирование данных — это тот же рентген. Вы ещё не знаете бизнес-смысла столбцов, но уже видите их статистическую структуру. Вы не знаете, что означает столбец status_code, но видите, что в нём 95% значений — «1», а остальные 5% — «2», «3» и «9». Это подозрительно. Вы не знаете, что такое order_amount, но видите, что есть строки с отрицательными значениями и одна строка на миллиард. Это подозрительно. Вы не знаете бизнес-контекста, но ваши глаза уже нашли проблемы.

И вот что важно: Профилирование не требует знания предметной области. Оно требует только внимательности и системного подхода. Вы смотрите на статистику — и находите аномалии. Не «это неправильно», а «это странно, давай проверим». Именно так работает рентген в аэропорту: инспектор не знает, что в чемодане, но он знает, как выглядит норма. Всё, что выбивается из нормы, идёт в досмотр.

Что такое профилирование данных

Профилирование — это быстрая диагностика таблицы без знания бизнес-контекста. Вы смотрите на статистику и находите подозрительные места за 5–10 минут.

Как применять семь измерений (СВУПК + Д) при рентгене

Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения

Вы не знаете бизнес-смысла столбцов, но уже можете сказать, где искать проблемы. Смотрите на столбец с датами — если максимальная дата — прошлый год, данные умерли. Смотрите на столбец с email — если есть строки без @, формат сломан. Смотрите на столбец с ценой — если есть отрицательные значения или миллиарды, это выбросы. Рентген не требует контекста, только внимательности.

Выберите инструмент по вкусу. Для быстрой проверки подойдёт SQL, для автоматической — Python, для маленьких таблиц — Excel.

Три инструмента для рентгена

1. SQL (если вы работаете с базами данных)

sql

SELECT

COUNT (*) as всего_строк,

COUNT (DISTINCT column) as уникальных_значений,

COUNT (column) as заполнено_не_NULL,

MIN (column) as минимум,

MAX (column) as максимум,

AVG (CAST (column AS FLOAT)) as среднее

FROM your_table

2. Python (если вы программист)

python

import pandas as pd

from ydata-profiling import ProfileReport

df = pd.read_csv (’your_data. csv’)

profile = ProfileReport (df, title=«Рентген багажа»)

profile.to_file("report.html»)

Это создаст HTML-отчёт со всей статистикой автоматически.

3. Ручной (Excel / Google Sheets) — для маленьких таблиц

— Выделите столбец → внизу Excel покажет количество значений, пустых клеток, уникальных значений

— Сортировка → посмотрите на минимальное и максимальное значение

— Фильтр → найдите странные значения

Не нужно использовать все три инструмента сразу. Если таблица маленькая (до 100 000 строк) — откройте Excel. Если вы знаете SQL — напишите один запрос. Если вы программист и работаете с данными каждый день — установите ydata-profiling, он сделает отчёт за вас. Инструмент подбирайте под размер данных и ваши навыки, не наоборот.

Чек-лист рентгена

Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения

Это ваш главный инструмент при знакомстве с новой таблицей. Распечатайте его или сохраните в закладки. Каждый раз, когда вам дают новую таблицу, проходите по буквам С-В-У-П-К-Д-Т за 5–10 минут. Вы будете удивлены, как часто «чистые» данные оказываются грязными после такой проверки.

Живой пример

Таблица orders (заказы). Рентген по семи измерениям:

Здесь есть иллюстрация

Зарегистрируйтесь или войдите, чтобы увидеть ее и другие изображения

В реальной таблице вы редко встретите все семь проблем сразу. Чаще всего будет 2–3. Не пытайтесь чинить всё. Найдите самое больное (матрица «Боль × Частота» из главы 1) и начните с него. В примере самая критичная проблема — дубликаты заказов (потеря денег) и NULL в customer_id (потеря клиентов). Даты в будущем и выбросы — подождут.

И вот что важно понять: Если вы попытаетесь починить всё сразу, вы не почините ничего. Каждая проблема требует времени, внимания и, главное, понимания корневой причины. Начните с одной — той, которая чаще всего болит. Почините её так, чтобы проблема не возвращалась. И только потом переходите к следующей. Это называется терапевтический, а не хирургический подход — вы лечите не все симптомы разом, а самые опасные, постепенно двигаясь к менее критичным.

Бесплатный фрагмент закончился.

Купите книгу, чтобы продолжить чтение.