Розробка системи генерації синтетичних табличних даних

Проектуємо та впроваджуємо системи штучного інтелекту: від прототипу до production-ready рішення. Наша команда поєднує експертизу в машинному навчанні, дата-інжинірингу та MLOps, щоб AI працював не в лабораторії, а в реальному бізнесі.
Показано 1 з 1Усі 1566 послуг
Розробка системи генерації синтетичних табличних даних
Середній
~2-4 тижні
Часті запитання

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

Етапи розробки AI-рішення

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

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

Розробка системи генерації синтетичних табличних даних

Синтетичні табличні дані - найбільш практично затребуваний тип синтетики в бізнесі. Фінансові транзакції, медичні записи, профілі користувача - все це структуровані дані, які потрібні для навчання моделей, але обмежені compliance вимогами.

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

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

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,  # Packing size для улучшения режима
    )

    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)  # 5x синтетических данных

# Проверка соотношения fraud (важно для несбалансированных датасетов)
print(f"Real fraud rate: {financial_data['is_fraud'].mean():.4f}")
print(f"Synthetic fraud rate: {synthetic['is_fraud'].mean():.4f}")

Обробка специфічних типів даних

from sdv.single_table import CTGANSynthesizer
from sdv.metadata import SingleTableMetadata

# Специальная обработка временных рядов и ID
metadata = SingleTableMetadata()
metadata.add_column('user_id', sdtype='id', regex_format='user_[0-9]{6}')
metadata.add_column('email', sdtype='email')
metadata.add_column('phone', sdtype='phone_number')
metadata.add_column('ip_address', sdtype='ipv4_address')
metadata.add_column('amount', sdtype='numerical', computer_representation='Float')
metadata.add_column('created_at', sdtype='datetime',
                    datetime_format='%Y-%m-%d %H:%M:%S')
metadata.add_column('category', sdtype='categorical')

synthesizer = CTGANSynthesizer(metadata, epochs=500)
synthesizer.fit(real_df)

Умовна генерація

# Генерация только определённых сегментов
# Например: только premium клиенты с транзакциями > $1000
synthetic_premium = synthesizer.sample(
    num_rows=50_000,
    conditions=[
        Condition({'customer_tier': 'premium', 'amount_gt_1000': True})
    ]
)

Валідація статистичної якості

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  # Цель: < 0.05

    return results

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