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

Проектируем и внедряем системы искусственного интеллекта: от прототипа до 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% качества модели по сравнению с обучением на реальных данных того же объёма.