Синтетичні табличні дані для ML: генерація, код, валідація

Збір реальних даних для ML часто впирається в compliance-обмеження: GDPR, HIPAA або корпоративні політики забороняють передавати сирі датасети розробникам. У проекті з банківськими транзакціями ми не могли використовувати реальні записи — довелося генерувати синтетику, що зберегла розподіли та корел

Напрямки 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
    1002

Збір реальних даних для ML часто впирається в compliance-обмеження: GDPR, HIPAA або корпоративні політики забороняють передавати сирі датасети розробникам. У проекті з банківськими транзакціями ми не могли використовувати реальні записи — довелося генерувати синтетику, що зберегла розподіли та кореляції до KS p-value > 0.4. Синтетичні дані вирішують цю проблему: розширюють датасети, балансують класи (наприклад, 1% шахрайських транзакцій перетворити на 50%), тестують моделі без ризику витоку. За час роботи ми впровадили генерацію для 15+ проектів у фінансах, медицині та ритейлі. Кожен проект потребує індивідуального підходу — універсального рішення не існує. Особливо гостро проблема стоїть із незбалансованими датасетами: якщо цільовий клас менше 1%, без синтетики модель не навчити. Ми використовуємо CTGAN із conditional sampling, щоб генерувати приклади потрібного класу в потрібній пропорції. Економія на зборі даних — до 40%, а на compliance-аудиті — до 30%.

Чому синтетичні табличні дані необхідні для ML?

Ключовий біль — дефіцит якісних розмічених даних. Навіть якщо дані є, вони часто містять персональну інформацію, недоступну для зовнішніх команд. Синтетика знімає ці обмеження: ви отримуєте датасет із тими ж статистичними властивостями, але без ризику витоку. Для незбалансованих задач (fraud detection, рідкісні захворювання) це єдиний спосіб отримати представницьку вибірку minority class. Економія на зборі даних може досягати 40%, а швидкість розробки зростає в рази.

Як синтетичні табличні дані вирішують проблему незбалансованих класів?

CTGAN використовує conditional vector, який задає бажане співвідношення категорій у згенерованому датасеті. Наприклад, для fraud detection ми фіксуємо частку шахрайських транзакцій у 50% — це різко покращує recall моделі. Генератор і дискримінатор змагаються: перший вчиться створювати реалістичні записи, другий — відрізняти їх від реальних. У результаті розподіли та кореляції зберігаються з високою точністю. Для фінансових даних типовий KS p-value за числовими ознаками становить 0.2–0.6.

Вибір методу генерації — синтетичні табличні дані

Вибір залежить від типу даних і вимог до приватності. На основі нашого досвіду:

Метод Швидкість Якість Приватність Підходить для
Gaussian Copula Швидко Добре Висока Числові дані, нормальні розподіли
CTGAN Повільно Відмінна Середня Категоріальні + числові
TVAE Середньо Відмінна Середня Висока розмірність
REaLTabFormer Повільно Чудова Потребує DP Складні залежності

Gaussian Copula працює в 10 разів швидше за CTGAN, але CTGAN краще зберігає складні мультимодальні розподіли. Для незбалансованих класів CTGAN гарантує точне співвідношення класів після генерації за рахунок conditional vector. Ми налаштовуємо hyperparameters (embedding_dim, generator_dim) під кожен датасет — GPU utilization досягає 90% на епоху.

Як покращити якість синтетичних даних за допомогою fine-tuning?

Fine-tuning генеративної моделі на специфічному домені підвищує якість. Для медичних даних ми донавчаємо попередньо навчений CTGAN на 10 епохах зі зменшеним learning rate. Результат: KS p-value покращується з 0.05 до 0.4. Але важливо не перенавчитися — використовуємо early stopping за метриками SDMetrics. Для кожного проекту ми створюємо model card, де фіксуємо hyperparameters, метрики та умови генерації.

Як оцінити якість синтетичних даних?

Валідація — ключовий етап. Ми використовуємо SDMetrics та scipy для перевірки розподілів і кореляцій. Мета — щоб синтетичні дані були статистично невідмінними від реальних (p-value > 0.05).

from scipy.stats import ks_2samp import matplotlib.pyplot as plt def validate_synthetic_quality(real: pd.DataFrame, synthetic: pd.DataFrame) -> dict: results = {} for col in real.select_dtypes(include=np.number).columns: ks_stat, p_value = ks_2samp(real[col].dropna(), synthetic[col].dropna()) results[col] = { 'real_mean': real[col].mean(), 'synthetic_mean': synthetic[col].mean(), 'real_std': real[col].std(), 'synthetic_std': synthetic[col].std(), 'ks_stat': ks_stat, 'distribution_match': p_value > 0.05 } real_corr = real.select_dtypes(np.number).corr() synth_corr = synthetic.select_dtypes(np.number).corr() corr_diff = (real_corr - synth_corr).abs().mean().mean() results['correlation_mae'] = corr_diff return results 

Типові пороги якості, досяжні на практиці:

Метрика Цільове значення Типовий результат (CTGAN)
KS p-value (числові) > 0.05 0.10–0.60
Correlation MAE < 0.05 0.02–0.04
Coverage категорій > 95% 98–100%

Для більшості задач ML синтетичні дані, згенеровані CTGAN з score > 0.85 за SDMetrics, дозволяють досягти 95–98% якості моделі порівняно з навчанням на реальних даних того ж обсягу.

Розгорнути приклад коду CTGAN
import pandas as pd from ctgan import CTGAN import numpy as np def train_ctgan_synthesizer( data: pd.DataFrame, discrete_columns: list, epochs: int = 300 ) -> CTGAN: synthesizer = CTGAN( embedding_dim=128, generator_dim=(256, 256), discriminator_dim=(256, 256), batch_size=500, epochs=epochs, verbose=True, pac=10, ) synthesizer.fit(data, discrete_columns=discrete_columns) return synthesizer financial_data = pd.read_parquet("transactions.parquet") discrete_cols = ['merchant_category', 'transaction_type', 'currency', 'is_fraud'] synth = train_ctgan_synthesizer(financial_data, discrete_cols) n_real = len(financial_data) synthetic = synth.sample(n_real * 5) print(f"Real fraud rate: {financial_data['is_fraud'].mean():.4f}") print(f"Synthetic fraud rate: {synthetic['is_fraud'].mean():.4f}") 

CTGAN: Modeling Tabular Data using Conditional GAN (Xu et al., 2019)

Коли валідація критична: типові помилки

  • Перенавчання генератора: якщо модель запам'ятала реальні рядки, KS p-value аномально високий (> 0.9). Перевіряємо на дублікати.
  • Неправильний вибір метрики: лише KS-тесту недостатньо — обов'язково дивимося кореляційну MAE та coverage категорій.
  • Ігнорування типів даних: категоріальні ознаки з рідкісними значеннями потребують збільшення batch_size та epochs.

Що входить у розробку пайплайну синтетичних даних?

Ми пропонуємо повний цикл робіт:

  1. Аналіз датасету: оцінка розподілів, кореляцій, пропусків та викидів.
  2. Вибір та налаштування моделі: підбір архітектури (CTGAN, TVAE, Gaussian Copula) та гіперпараметрів.
  3. Навчання та валідація: використання SDMetrics, KS-тестів, кореляційного аналізу.
  4. Інтеграція: створення пайплайну на Airflow або Docker, API для генерації.
  5. Документація: model card з метриками, інструкція з експлуатації, звіт про якість.
  6. Навчання команди: воркшоп з використання синтезатора та інтерпретації метрик.
  7. Гарантійна підтримка: 2 тижні після впровадження.

Терміни — від 2 до 4 тижнів залежно від складності датасету. Вартість розраховується індивідуально. Отримайте консультацію з вибору методу генерації для вашого датасету — зв'яжіться з нами. Замовте розробку пайплайну під ваші дані.