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

Реальные данные часто нельзя использовать из-за требований GDPR, HIPAA или корпоративных политик, что тормозит разработку ML-моделей. Мы разрабатываем синтетические табличные данные, которые сохраняют статистические свойства оригиналов, но исключают риски утечки. Наша команда реализует проект под ключ — от генерации и кода до валидации, с последующей поддержкой.
Часто задаваемые вопросы

Сбор реальных данных для 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 недель в зависимости от сложности датасета. Стоимость рассчитывается индивидуально. Получите консультацию по выбору метода генерации для вашего датасета — свяжитесь с нами. Закажите разработку пайплайна под ваши данные.

Направления AI-разработки

Последние работы

  • Разработка сайта компании B2B ADVANCE
    Разработка сайта компании B2B ADVANCE
    1542
  • Разработка веб-приложения для компании FEEDME
    Разработка веб-приложения для компании FEEDME
    1394
  • Разработка веб-сайта для компании БЕЛФИНГРУПП
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    1081
  • Разработка интернет магазина для компании FURNORO
    Разработка интернет магазина для компании FURNORO
    1369
  • Разработка логотипа компании B2B Advance
    Разработка логотипа компании B2B Advance
    816
  • Разработка веб-приложения для компании Enviok
    Разработка веб-приложения для компании Enviok
    1142