AI-контроль якості даних: автоматизація та виявлення аномалій

Реалізація AI-контролю якості даних Ваш ETL-пайплайн завантажує 10+ таблиць з CRM, ERP та зовнішніх API. У кожній — NULL-поля, дублікати, часові мітки відстають на добу, а унікальність не гарантована. Ручна перевірка таких обсягів займає 6–8 годин на день. Інциденти з даними виникають 2–3 рази на

Напрямки AI-розробки

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1440
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1301
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    998
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1264
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    713
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    1003

Реалізація AI-контролю якості даних

Ваш ETL-пайплайн завантажує 10+ таблиць з CRM, ERP та зовнішніх API. У кожній — NULL-поля, дублікати, часові мітки відстають на добу, а унікальність не гарантована. Ручна перевірка таких обсягів займає 6–8 годин на день. Інциденти з даними виникають 2–3 рази на місяць, кожен вимагає 4–8 годин діагностики та виправлення. Така ситуація знайома багатьом data-інженерам.

Ми будуємо AI-системи контролю якості даних, які автоматично виявляють аномалії, дублікати та невідповідності на етапі завантаження. Наші інженери з 10+ річним досвідом використовують LLM (Claude, GPT-4) та MLOps (Kubeflow, MLflow), щоб забезпечити 95% охоплення проблем до потрапляння в продакшн. Результат: 85–95% проблем виявляються автоматично, а інциденти скорочуються в 10 разів.

Проблеми, які вирішує AI-контроль якості даних

Зріла система покриває 7 вимірів якості: повнота, унікальність, актуальність, достовірність, узгодженість, точність та валідність. AI-підхід додає автоматичну генерацію правил з історичних даних та розумну класифікацію важливості проблем. Наприклад, для фінтех-компанії ми скоротили кількість інцидентів з даними з 12 до 0 на місяць, автоматизувавши 90% перевірок. Економія часу команди data engineers — 40 годин на тиждень.

Параметр Ручний контроль AI-контроль
Час на перевірку 1 млн рядків 8 годин 3 хвилини (в 160 разів швидше)
Повнота покриття правил 60-70% 95-98%
Пропущені аномалії 1 на 1000 1 на 50000
Адаптація до нових даних тижні 1 день

Як працює AI-агент для генерації правил?

Приклад коду для автоматичної генерації правил через LLM
import pandas as pd import numpy as np from anthropic import Anthropic from dataclasses import dataclass from enum import Enum import great_expectations as gx class Severity(Enum): CRITICAL = "critical" # Блокирует пайплайн WARNING = "warning" # Алерт, пайплайн продолжается INFO = "info" # Логируется @dataclass class QualityCheck: name: str column: str check_type: str params: dict severity: Severity description: str class AIQualityController: def __init__(self): self.llm = Anthropic() self.checks = [] self.context = gx.get_context() def generate_checks_from_data(self, df: pd.DataFrame, domain_context: str = "") -> list[QualityCheck]: """Автогенерация правил качества из статистики данных""" # Профиль данных profile = {} for col in df.columns: s = df[col] col_profile = { 'dtype': str(s.dtype), 'null_pct': s.isnull().mean(), 'unique_pct': s.nunique() / len(s), } if pd.api.types.is_numeric_dtype(s): q1, q3 = s.quantile(0.01), s.quantile(0.99) col_profile.update({'q01': float(q1), 'q99': float(q3), 'min': float(s.min()), 'max': float(s.max())}) else: col_profile['sample_values'] = s.dropna().value_counts().head(5).index.tolist() profile[col] = col_profile import json response = self.llm.messages.create( model="claude-3-5-sonnet-20241022", max_tokens=800, messages=[{ "role": "user", "content": f"""Generate data quality checks as JSON array. Data profile: {json.dumps(profile, indent=2)[:1500]} Domain context: {domain_context} Return JSON array of checks: [ {{ "name": "user_id_not_null", "column": "user_id", "check_type": "not_null", "params": {{}}, "severity": "critical", "description": "User ID must never be null" }}, {{ "name": "amount_positive", "column": "amount", "check_type": "value_range", "params": {{"min": 0, "max": 1000000}}, "severity": "critical", "description": "Transaction amount must be positive" }}, ... ]""" }] ) try: checks_data = json.loads(response.content[0].text) return [QualityCheck(**c) for c in checks_data] except Exception: return [] def run_checks(self, df: pd.DataFrame, checks: list[QualityCheck] = None) -> dict: """Выполнение всех проверок""" if checks is None: checks = self.checks results = { 'passed': [], 'failed_critical': [], 'failed_warning': [], 'stats': { 'total': len(checks), 'passed': 0, 'failed': 0 } } for check in checks: try: passed, details = self._execute_check(df, check) if passed: results['passed'].append({'check': check.name, 'details': details}) results['stats']['passed'] += 1 else: result_entry = { 'check': check.name, 'column': check.column, 'severity': check.severity.value, 'description': check.description, 'details': details } if check.severity == Severity.CRITICAL: results['failed_critical'].append(result_entry) else: results['failed_warning'].append(result_entry) results['stats']['failed'] += 1 except Exception as e: results['failed_warning'].append({ 'check': check.name, 'error': str(e) }) # AI-диагностика критических ошибок if results['failed_critical']: results['ai_diagnosis'] = self._diagnose_failures(results['failed_critical'], df) results['quality_score'] = results['stats']['passed'] / max(results['stats']['total'], 1) return results def _execute_check(self, df: pd.DataFrame, check: QualityCheck) -> tuple[bool, dict]: """Выполнение одной проверки""" col = df[check.column] if check.column in df.columns else None if check.check_type == 'not_null': if col is None: return False, {'error': f"Column {check.column} not found"} null_count = col.isnull().sum() return null_count == 0, {'null_count': int(null_count)} elif check.check_type == 'unique': if col is None: return False, {'error': f"Column {check.column} not found"} dup_count = col.duplicated().sum() return dup_count == 0, {'duplicate_count': int(dup_count)} elif check.check_type == 'value_range': if col is None: return False, {} min_val = check.params.get('min') max_val = check.params.get('max') violations = 0 if min_val is not None: violations += (col.dropna() < min_val).sum() if max_val is not None: violations += (col.dropna() > max_val).sum() return violations == 0, {'violations': int(violations)} elif check.check_type == 'regex': if col is None: return False, {} pattern = check.params.get('pattern', '.*') matches = col.dropna().astype(str).str.match(pattern) non_matching = (~matches).sum() return non_matching == 0, {'non_matching': int(non_matching)} elif check.check_type == 'accepted_values': if col is None: return False, {} accepted = set(check.params.get('values', [])) invalid = ~col.dropna().isin(accepted) invalid_count = invalid.sum() return invalid_count == 0, { 'invalid_count': int(invalid_count), 'invalid_sample': col[col.notna() & invalid].head(3).tolist() } elif check.check_type == 'freshness': if col is None: return False, {} max_age_hours = check.params.get('max_age_hours', 24) latest = pd.to_datetime(col).max() age_hours = (pd.Timestamp.now() - latest).total_seconds() / 3600 return age_hours <= max_age_hours, {'age_hours': round(age_hours, 1)} return True, {} def _diagnose_failures(self, failures: list[dict], df: pd.DataFrame) -> str: """LLM-диагностика причин сбоев""" import json response = self.llm.messages.create( model="claude-3-5-sonnet-20241022", max_tokens=400, messages=[{ "role": "user", "content": f"""Diagnose these data quality failures and suggest root causes. Failures: {json.dumps(failures, indent=2)} Dataset shape: {df.shape} Provide: likely root cause for each failure group, recommended immediate actions.""" }] ) return response.content[0].text 

Як впровадити AI-контроль якості даних: покрокова інструкція

  1. Аудит поточного стану: профілювання всіх джерел даних, виявлення «вузьких місць» та типових аномалій.
  2. Генерація правил через LLM: на основі статистики даних AI-агент створює набір перевірок (not null, unique, range, regex, freshness).
  3. Інтеграція в пайплайн: підключаємо REST API або Python SDK до Airflow, Prefect, Kubeflow. Налаштовуємо алерти в Telegram/Slack.
  4. Тестування та калібрування: проганяємо правила на історичних даних, коригуємо пороги спрацювання. Зазвичай потрібно 2–3 ітерації.
  5. Моніторинг та адаптація: LLM-агент аналізує нові дані та автоматично пропонує оновлення правил. Доучування моделі не потрібне.

Весь цикл займає від 2 до 6 тижнів, залежно від кількості джерел та складності бізнес-логіки. Для швидкої оцінки вашого проекту отримайте консультацію.

Чому AI-контроль швидший за ручні перевірки?

Ручна перевірка даних масштабується погано: зі зростанням обсягів та кількості джерел кількість пропущених аномалій зростає експоненційно. AI-контроль дає стабільну якість на будь-якому обсязі. Порівняйте: перевірка 10 млн рядків вручну займає 80 годин, AI-система справляється за 30 хвилин. Економія — 79.5 годин чистого часу інженерів. У грошовому вираженні це сотні тисяч гривень щомісяця.

Great Expectations інтеграція

def setup_gx_suite(df: pd.DataFrame, suite_name: str) -> gx.ExpectationSuite: """Створення GE suite з даних""" context = gx.get_context() suite = context.add_expectation_suite(expectation_suite_name=suite_name) validator = context.get_validator( batch_request=gx.RuntimeBatchRequest( datasource_name="pandas_datasource", data_connector_name="runtime_data_connector", data_asset_name="training_data", batch_identifiers={"default_identifier_name": "default_identifier"}, runtime_parameters={"batch_data": df} ), expectation_suite_name=suite_name ) # Автогенерація expectations через GE profiler from great_expectations.profile.user_configurable_profiler import UserConfigurableProfiler profiler = UserConfigurableProfiler(profile_dataset=validator) suite, _ = profiler.build_suite() context.save_expectation_suite(suite) return suite 

Що входить в роботу

  • Профілювання даних та аналіз поточних аномалій (повнота, дублікати, викиди)
  • Розробка AI-агента для генерації правил якості на основі LLM
  • Інтеграція з пайплайнами (Airflow, Prefect, Kubeflow) через REST API або SDK
  • Дашборд моніторингу метрик якості в Grafana з алертами
  • Документація та навчання команди роботі з системою
  • Гарантія безперебійної роботи 99.5% SLA
Етап Тривалість Результат
Аудит даних 2-5 днів Профіль джерел, список типових аномалій
Генерація правил 1-2 дні 50-200 правил, охоплення 90% проблем
Інтеграція 1-3 тижні Працюючий пайплайн з алертами
Тестування 3-5 днів Метрики якості, скориговані пороги
Моніторинг постійно Дашборд, автоматичне оновлення правил

Строки та початок роботи

Строк впровадження — від 2 до 6 тижнів залежно від складності джерел та необхідної кількості правил. Вартість розраховується індивідуально після аудиту. Наші сертифіковані інженери мають 10+ років досвіду в ML та Data Engineering — концепція якості даних описана в Wikipedia.

Для попередньої оцінки вашого проекту та точного плану робіт зв'яжіться з нами. Ми допоможемо автоматизувати контроль якості даних та скоротити інциденти в 10 разів. Замовте консультацію вже сьогодні.