Измерение полноты данных
Введение
Completeness (полнота) — самое фундаментальное измерение качества данных. Если данные отсутствуют, остальные измерения бессмысленны: нельзя оценить accuracy несуществующего значения. В этом уроке мы научимся программно измерять completeness на трёх уровнях: по полям, по строкам и по всему датасету.
Три уровня измерения полноты
Field-level completeness
Доля заполненных (non-null) значений для каждого поля. Это наиболее детальная метрика:
# Field-level completeness
def field_completeness(data, field):
total = len(data)
non_null = sum(1 for row in data if row.get(field) is not None)
return round(non_null / total, 2) if total > 0 else 0.0
В SQL:
SELECT
'email' AS field,
COUNT(*) AS total,
COUNT(email) AS non_null,
ROUND(100.0 * COUNT(email) / COUNT(*), 1) AS completeness_pct
FROM customers;
Row-level completeness
Доля строк, в которых все обязательные поля заполнены. Строка с одним пропуском считается неполной:
def row_completeness(data, required_fields):
total = len(data)
complete = sum(
1 for row in data
if all(row.get(f) is not None for f in required_fields)
)
return round(complete / total, 2) if total > 0 else 0.0
Overall completeness
Отношение заполненных ячеек к общему количеству ячеек:
def overall_completeness(data):
if not data:
return 0.0
total_cells = len(data) * len(data[0])
null_cells = sum(
1 for row in data for v in row.values() if v is None
)
return round((total_cells - null_cells) / total_cells, 2)
Проверка знанийТаблица customers: 1000 строк, 4 поля (name, email, phone, department). name заполнен на 100%, email на 80%, phone на 60%, department на 90%. Чему равна overall completeness?
Completeness Gauge: визуализация
Gauge показывает, что DataTech далеко от целевого порога (95%). Красная зона (менее 50%) означает критическую проблему, оранжевая (50-80%) — требует внимания, зелёная (более 95%) — в норме.
Threshold Alerts
Completeness без пороговых значений — просто число. Чтобы превратить метрику в actionable insight, определяют Data Quality SLA (SLA качества данных):
def check_completeness_sla(data, field, threshold=0.95):
score = field_completeness(data, field)
status = "OK" if score >= threshold else "ALERT"
return {
"field": field,
"completeness": score,
"threshold": threshold,
"status": status,
"gap": round(threshold - score, 2) if score < threshold else 0
}
Пример вывода для DataTech customers:
[
{"field": "name", "completeness": 0.98, "threshold": 0.95, "status": "OK", "gap": 0},
{"field": "email", "completeness": 0.70, "threshold": 0.95, "status": "ALERT", "gap": 0.25},
{"field": "phone", "completeness": 0.55, "threshold": 0.80, "status": "ALERT", "gap": 0.25},
{"field": "department", "completeness": 0.90, "threshold": 0.90, "status": "OK", "gap": 0}
]
Сценарий: ДатаТех
Сценарий: DataTech Solutions (ДатаТех Солюшенз)
Data Engineer Алексей запустил completeness-анализ таблицы
customers(50,000 записей):
name: 98% (975 пропусков из-за анонимных заказов)phone: 55% (22,500 NULL — необязательное поле, но нужно для SMS-уведомлений)created_at: 100% (системное поле, всегда заполнено)Вопрос для Data Steward: какие поля обязательные? Если email не обязателен для checkout, то 70% completeness — не проблема. Но если маркетинг строит email-кампании на этих данных, 70% — это 15,000 недоступных клиентов. Completeness без бизнес-контекста — просто число.
Проверка знанийПоле phone заполнено на 55%. VP Marketing требует повысить до 95% для SMS-кампаний. Какой governance-процесс должен произойти до технической реализации?
Итоги
- Completeness измеряется на трёх уровнях: field-level, row-level, overall
- Field-level completeness =
COUNT(non_null) / COUNT(total)для каждого поля - Row-level completeness = доля строк с заполненными required fields
- Threshold alerts превращают метрику в actionable insight: OK / Warning / Critical
- Completeness без бизнес-контекста бессмысленна — Data Owner определяет, какие поля обязательные
В следующем уроке мы перейдём от измерения к обнаружению нарушений: SQL-запросы для поиска некорректных значений, нарушений referential integrity и бизнес-правил.
Проверьте понимание
Закончили урок?
Отметьте его как пройденный, чтобы отслеживать свой прогресс
Войдите чтобы оценить урок