← Назад к вопросам

Что такое качество данных?

1.7 Middle🔥 201 комментариев
#ETL и качество данных

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Качество данных (Data Quality)

Качество данных — это совокупность характеристик и свойств данных, которые определяют, насколько хорошо эти данные подходят для использования в бизнес-процессах, аналитике и принятии решений. Высокое качество данных обеспечивает надежность, точность и полезность анализа.

Основные измерения качества данных

1. Точность (Accuracy)

Данные соответствуют действительности. Например, город клиента в системе совпадает с его фактическим местом проживания.

-- Проверка точности: сопоставление с источником истины
SELECT COUNT(*) as mismatches
FROM customers_staging s
LEFT JOIN customers_source r ON s.customer_id = r.customer_id
WHERE s.city != r.city;

2. Полнота (Completeness)

Присутствуют все необходимые данные, отсутствуют пропуски (NULL).

-- Проверка полноты
SELECT 
    COUNT(CASE WHEN email IS NULL THEN 1 END) as missing_emails,
    COUNT(CASE WHEN phone IS NULL THEN 1 END) as missing_phones,
    COUNT(*) as total_records
FROM customers;

-- Результат должен показать процент пропусков
-- Если пропусков > 5%, это проблема качества

3. Непротиворечивость (Consistency)

Данные согласованы в разных системах и таблицах.

-- Проверка консистентности между системами
SELECT COUNT(*) as inconsistent
FROM orders o
LEFT JOIN customers c ON o.customer_id = c.customer_id
WHERE o.customer_city != c.city;

-- Если суммы в разных таблицах расходятся
SELECT SUM(amount) FROM fact_sales;
SELECT SUM(amount) FROM fact_sales_backup;

4. Уникальность (Uniqueness)

Нет дублирующихся записей одной сущности.

-- Проверка дублей
SELECT customer_id, COUNT(*) as count
FROM customers
GROUP BY customer_id
HAVING COUNT(*) > 1;

-- Или проверка на дубли по всей таблице
SELECT COUNT(*) as total,
       COUNT(DISTINCT customer_id, email) as unique_records
FROM customers;

5. Своевременность (Timeliness)

Данные доступны вовремя для использования. Свежесть данных.

# Проверка задержки обновления данных
import pandas as pd
from datetime import datetime, timedelta

def check_data_freshness(last_update_time):
    lag = datetime.now() - last_update_time
    if lag > timedelta(hours=1):
        alert("Data is stale! Last update: " + str(last_update_time))

6. Валидность (Validity)

Данные соответствуют определённым форматам и диапазонам.

-- Проверка валидности: email формат
SELECT COUNT(*) as invalid_emails
FROM customers
WHERE email NOT REGEXP '^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}$';

-- Проверка диапазона: возраст должен быть 0-120
SELECT COUNT(*) as invalid_ages
FROM customers
WHERE age < 0 OR age > 120;

Метрики качества данных

class DataQualityMetrics:
    def __init__(self, df):
        self.df = df
        self.total_records = len(df)
    
    def completeness(self):
        """Процент заполненных полей"""
        total_cells = self.df.shape[0] * self.df.shape[1]
        non_null_cells = self.df.count().sum()
        return (non_null_cells / total_cells) * 100
    
    def uniqueness(self):
        """Проверка дублей"""
        duplicates = self.df.duplicated().sum()
        return ((self.total_records - duplicates) / self.total_records) * 100
    
    def validity(self):
        """Проверка форматов данных"""
        # Проверка типов, диапазонов и т.д.
        pass
    
    def get_quality_score(self):
        """Итоговый балл качества"""
        return (
            self.completeness() * 0.4 +
            self.uniqueness() * 0.3 +
            self.validity() * 0.3
        )

# Использование
metrics = DataQualityMetrics(df)
print(f"Quality Score: {metrics.get_quality_score()}%")

Мониторинг качества в Data Warehouse

-- Создать таблицу для отслеживания метрик качества
CREATE TABLE data_quality_metrics (
    check_date TIMESTAMP,
    table_name VARCHAR(100),
    metric_name VARCHAR(100),
    metric_value FLOAT,
    threshold FLOAT,
    status VARCHAR(20) -- PASS, WARN, FAIL
);

-- Процедура проверки качества
CREATE PROCEDURE check_data_quality()
BEGIN
    -- Проверка полноты
    INSERT INTO data_quality_metrics
    SELECT 
        NOW(),
        'customers',
        'completeness',
        (COUNT(email) / COUNT(*)) * 100,
        95.0,
        CASE WHEN (COUNT(email) / COUNT(*)) * 100 >= 95 THEN 'PASS' ELSE 'FAIL' END
    FROM customers;
    
    -- Проверка дублей
    INSERT INTO data_quality_metrics
    SELECT 
        NOW(),
        'customers',
        'uniqueness',
        (1 - COUNT(DISTINCT customer_id) / COUNT(*)) * 100,
        0.5,
        CASE WHEN COUNT(DISTINCT customer_id) = COUNT(*) THEN 'PASS' ELSE 'FAIL' END
    FROM customers;
END;

Инструменты проверки качества

Great Expectations — фреймворк для валидации данных:

import great_expectations as ge

df = ge.read_csv("customers.csv")

# Основные проверки
df.expect_column_values_to_not_be_null("email")
df.expect_column_values_to_match_regex("email", r"^[^@]+@[^@]+\.[^@]+$")
df.expect_column_values_to_be_in_set("status", ["active", "inactive"])
df.expect_column_values_to_be_between("age", 0, 120)

# Запуск валидации
results = df.validate()
print(results)

dbt (data build tool) — тестирование трансформаций:

# schema.yml
version: 2
models:
  - name: customers
    columns:
      - name: customer_id
        tests:
          - not_null
          - unique
      - name: email
        tests:
          - not_null
          - unique
      - name: age
        tests:
          - dbt_utils.accepted_values:
              values: [0, 120]

Процесс улучшения качества

def data_quality_pipeline():
    # 1. Оценить текущее качество
    baseline_score = evaluate_quality(data)
    
    # 2. Выявить проблемные области
    issues = identify_issues(data)
    
    # 3. Реализовать исправления
    for issue in issues:
        apply_fix(issue)
    
    # 4. Переоценить качество
    new_score = evaluate_quality(data)
    
    # 5. Установить мониторинг
    setup_monitoring(data, threshold=new_score * 0.95)
    
    return new_score > baseline_score

SLA по качеству данных

Availability: 99.5% (должны быть доступны)
Completeness: > 95% (не более 5% пропусков)
Accuracy: > 98% (макс 2% ошибок)
Timeliness: < 1 часа (свежесть данных)
Uniqueness: 100% (нет дублей)

Ключевые выводы

  • Качество данных = основа аналитики. Плохие данные = плохие выводы
  • Мониторинг постоянный. Недостаточно одноразовой проверки
  • Автоматизировать проверки. Использовать Great Expectations, dbt, custom scripts
  • SLA по качеству. Согласовать с бизнесом минимальные требования
  • Корневой анализ. Если качество упало, нужно найти источник проблемы

Качество данных — это инвестиция в надежность и доверие к аналитике.

Что такое качество данных? | PrepBro