Оценка качества данных перед аналитическим отчётом помогает обнаружить пропуски, ошибки форматов, дубликаты, устаревшие записи и несоответствия источникам. Начните с определения полей, критичных для выводов, затем проверьте полноту, корректность, уникальность, актуальность и происхождение данных. Результат зафиксируйте в таблице проблем с приоритетами и ответственными.
Краткий обзор ключевых критериев качества данных
- Полнота: обязательные поля заполнены, а пропуски классифицированы по причине.
- Корректность: значения соответствуют форматам, справочникам, диапазонам и бизнес-правилам.
- Уникальность: дубликаты не искажают количество объектов, суммы и агрегаты.
- Согласованность: одинаковые показатели совпадают между таблицами и источниками.
- Актуальность: даты загрузки и события позволяют использовать данные для нужного периода.
- Трассируемость: понятно, откуда получено каждое поле и какие преобразования выполнены.
Оценка полноты: как искать и классифицировать пропуски
Этот этап подходит для любого отчёта, особенно если расчёты зависят от идентификаторов, дат, сумм, статусов и категорий. Не стоит механически заполнять пропуски, если пустое значение имеет смысл: например, отсутствие даты закрытия может означать, что процесс ещё продолжается.
| Признак | Проверка | Порог | Действие |
|---|---|---|---|
| Пропуски в ключевом поле | Доля NULL и пустых строк | 0% для идентификатора | Исключить запись из расчёта или восстановить из источника |
| Пропуски в показателе | Сравнение с обязательностью поля | По правилам отчёта | Отделить неизвестное от нулевого значения |
| Неравномерность пропусков | Разрез по периоду, региону, каналу | Без резких необъяснимых всплесков | Проверить источник или этап загрузки |
Разделите пропуски на случайные, системные, технические и смысловые. Для отчёта отдельно укажите количество затронутых строк и метрики, которые могут измениться.
Проверка корректности: правила валидации и контрольные значения
Для проверки понадобятся доступ к исходной и подготовленной таблицам, описание полей, допустимые справочники, правила расчёта и безопасная копия данных. Используйте SQL для массовых проверок, Python - для профилирования и повторяемых тестов, а результаты сохраняйте в отдельный журнал.
Примеры SQL-проверок
-- Пропуски в обязательном поле
SELECT
COUNT(*) AS total_rows,
SUM(CASE WHEN customer_id IS NULL THEN 1 ELSE 0 END) AS missing_ids
FROM sales;
-- Отрицательные суммы и неизвестные статусы
SELECT *
FROM sales
WHERE amount < 0
OR status NOT IN ('new', 'paid', 'cancelled');
-- Даты вне допустимого периода
SELECT *
FROM sales
WHERE sale_date < DATE '2024-01-01'
OR sale_date > CURRENT_DATE;
Пример проверки в Python
import pandas as pd
df = pd.read_csv("sales.csv")
errors = {
"missing_id": df["customer_id"].isna(),
"negative_amount": df["amount"] < 0,
"invalid_status": ~df["status"].isin(
["new", "paid", "cancelled"]
)
}
quality_report = {
name: int(mask.sum())
for name, mask in errors.items()
}
| Признак | Проверка | Порог | Действие |
|---|---|---|---|
| Недопустимый формат | Тип, длина, маска значения | 0 критических ошибок | Исправить преобразование или отклонить строку |
| Нарушение диапазона | Минимум, максимум, знак числа | По бизнес-правилу | Проверить единицы измерения и источник |
| Неизвестная категория | Сопоставление со справочником | 0 значений вне справочника | Обновить справочник или отправить запись на разбор |
| Неверная связь | Проверка внешнего ключа | 0 потерянных ссылок | Найти причину рассинхронизации таблиц |
Выявление и обработка дубликатов и несоответствий
Не удаляйте записи сразу: сначала определите, является ли повтор техническим дубликатом, повторной операцией или законным событием. Все исправления выполняйте в копии и сохраняйте исходный идентификатор строки.
-
Определите ключ записи.
Выберите одно или несколько полей, которые должны однозначно описывать объект: например, идентификатор заказа или комбинацию клиента, даты и номера операции.
- Проверьте, действительно ли ключ уникален в исходной системе.
- Не используйте только имя или дату, если они могут повторяться.
-
Найдите точные повторы.
Сгруппируйте строки по ключу и посчитайте количество записей. Повторы вынесите в отдельный набор для проверки.
-
Сравните конфликтующие значения.
Если у одинакового ключа различаются сумма, статус или дата, определите правило выбора: последняя версия, запись из доверенного источника или ручная проверка.
-
Сопоставьте записи между таблицами.
Проверьте, не исчезают ли строки при объединении и не размножаются ли они из-за связи один-ко-многим.
-
Зафиксируйте решение.
Сохраните причину удаления, объединения или исключения каждой группы и пересчитайте итоговые показатели после очистки.
| Признак | Проверка | Порог | Действие |
|---|---|---|---|
| Повтор ключа | GROUP BY по идентификатору | 0 повторов, если ключ уникален | Объединить или оставить по правилу версий |
| Размножение после JOIN | Сравнение числа строк до и после объединения | Рост объясним структурой связи | Агрегировать дочернюю таблицу до JOIN |
| Расхождение показателей | Сверка сумм и количества строк | В пределах согласованного допуска | Найти фильтр, период или единицу измерения |
Проверка источников: оценка точности и доверия к данным
Точность нельзя подтвердить только внутренней проверкой файла. Сопоставьте данные с владельцем источника, документацией и независимым контрольным срезом, если он доступен.
- Зафиксируйте название источника, владельца и дату выгрузки.
- Проверьте, совпадает ли период данных с периодом отчёта.
- Сверьте определения показателей и единицы измерения.
- Сопоставьте контрольные суммы, количество строк и число уникальных объектов.
- Проверьте историю изменений схемы и правил преобразования.
- Убедитесь, что фильтры не исключили нужные сегменты.
- Отделите первичные значения от производных расчётов.
| Признак | Проверка | Порог | Действие |
|---|---|---|---|
| Неясное происхождение | Есть ли владелец и описание поля | Для критичных полей - обязательно | Запросить паспорт данных |
| Расхождение с источником | Контрольная выборка и агрегаты | Без необъяснимых отличий | Проверить фильтры и преобразования |
| Изменение схемы | Сравнение версий структуры | Все изменения документированы | Обновить тесты загрузки |
Тайминг и актуальность: анализ временных меток и устаревших записей
Актуальность зависит от задачи: оперативный отчёт требует свежих данных, а годовая аналитика - стабильного исторического среза. Проверяйте не только дату события, но и дату загрузки, обновления и закрытия периода.
- Перепутаны часовые пояса или локальное и UTC-время.
- Дата события позже даты загрузки из-за отложенной передачи.
- В набор попали будущие даты.
- Периоды имеют пропуски или повторяются.
- Открытые записи ошибочно считаются закрытыми.
- Поздние корректировки не отражены в итоговом срезе.
- Граница периода включена или исключена непоследовательно.
| Признак | Проверка | Порог | Действие |
|---|---|---|---|
| Старое обновление | Разница между текущей датой и updated_at | По SLA отчёта | Обновить выгрузку или пометить срез как устаревший |
| Будущая дата | Сравнение с текущим моментом | 0 без объяснения | Проверить часовой пояс и источник |
| Неполный период | Проверка покрытия календаря | Все ожидаемые интервалы | Добавить отсутствующие загрузки в журнал |
Метрики качества и отчётность: что измерять и как документировать
Выберите метрики, связанные с риском для конкретного отчёта. Порог должен быть согласован до публикации, а критические нарушения - блокировать выпуск либо сопровождаться явным предупреждением.
| Признак | Проверка | Порог | Действие |
|---|---|---|---|
| Полнота | Доля заполненных обязательных полей | 100% для ключей; остальные - по договорённости | Остановить расчёт при критическом нарушении |
| Корректность | Доля строк без ошибок правил | 100% для критичных ограничений | Исправить источник или исключить ошибочные строки |
| Уникальность | Доля уникальных ключей | 100% при требовании уникальности | Разобрать повторы до агрегации |
| Актуальность | Возраст последнего обновления | В пределах SLA | Показать дату среза и предупреждение |
Подходы к отчётности
- Краткий контрольный лист: подходит для разового отчёта и ручной приёмки.
- Паспорт набора данных: удобен для регулярных публикаций и передачи между командами.
- Автоматические тесты: уместны для ежедневных загрузок и критичных показателей.
- Панель мониторинга: полезна, когда нужно отслеживать динамику ошибок и просроченные исправления.
Приоритизируйте исправления по влиянию на выводы: сначала ошибки, меняющие итоговые суммы, сегментацию или период отчёта; затем проблемы, влияющие на отдельные несущественные поля. В журнале укажите правило, результат, дату проверки, владельца и статус.
Частые затруднения и быстрые практические решения
Можно ли считать пустое значение нулём?
Нет, если бизнес-логика не подтверждает это правило. Пустое значение может означать отсутствие измерения, неизвестность или ошибку загрузки.
Как выбрать порог допустимых ошибок?
Для ключей, идентификаторов и критичных ограничений обычно требуется отсутствие ошибок. Для менее важных полей порог согласуют с владельцем отчёта и связывают с возможным влиянием на выводы.
Что делать, если источники показывают разные суммы?
Сначала сравните период, фильтры, валюту, единицы измерения и правила агрегации. Затем назначьте один источник эталонным для конкретного показателя и задокументируйте решение.
Как отличить дубликат от повторной операции?
Сравните идентификатор события, временные метки, статус и бизнес-контекст. Повторная операция имеет самостоятельный смысл, а технический дубликат обычно повторяет ту же сущность и атрибуты.
Какие инструменты для проверки качества данных выбрать?
Для разовой проверки достаточно SQL и Python с журналом результатов. Для регулярного контроля используйте автоматические тесты, расписание запусков, уведомления и версионирование правил.
Нужно ли исправлять все ошибки до публикации?
Критические ошибки необходимо устранить или явно заблокировать публикацию. Некритичные можно принять с предупреждением, если их влияние оценено и отражено в документации.


