Синтетичні табличні дані: навчання моделей CTGAN та TabDDPM

Припустимо, у вас є 10 000 записів про клієнтів, але цільовий клас — відтік — становить жалюгідні 2%. Модель на реальних даних дає AUC 0,65 — це провал. Або ви не можете передати датасет підряднику, тому що там номери паспортів та кредитки. Знайомо? Ми вирішуємо це за допомогою генерації табличних д

Напрямки 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
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    997
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1264
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    712
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    1002

Припустимо, у вас є 10 000 записів про клієнтів, але цільовий клас — відтік — становить жалюгідні 2%. Модель на реальних даних дає AUC 0,65 — це провал. Або ви не можете передати датасет підряднику, тому що там номери паспортів та кредитки. Знайомо? Ми вирішуємо це за допомогою генерації табличних даних. За 5+ років досвіду ми виконали понад 50 проєктів для fintech, e-commerce та medtech. Результат: AUC 0.9+ та повна анонімізація.

Які проблеми вирішуємо

Дисбаланс класів. Коли цільовий клас становить 1–5% вибірки, модель на реальних даних дає AUC нижче 0.7. Ми використовуємо SMOTE та його варіації (Borderline-SMOTE, SMOTETomek) для балансування класів — AUC зростає до 0.9+.

Недостатність даних для тестування. Ручне створення тестових кейсів займає тижні. Генеративна модель може синтезувати 10 000+ рядків за годину з тими самими статистичними властивостями, що й реальні дані. Синтетичний датасет можна використовувати для валідації.

Анонімізація. Замінюємо чутливі поля (номери карток, паспортів) на синтетичні, зберігаючи кореляції. Це дозволяє передавати дані підрядникам без порушення GDPR/152-ФЗ.

Як обрати метод генерації?

Метод Розмірність даних Час навчання Якість (ML utility gap) Ресурси
CTGAN До 50 ознак 1–2 години < 5% CPU/GPU 8GB
SMOTE До 20 ознак 5–30 хвилин Залежить від дисбалансу CPU
TabDDPM Будь-яка (до 1000+) 4–12 годин < 3% GPU 16GB+

Ми починаємо з CTGAN — він дає хороші результати в 80% проєктів. Якщо дані складні (модальні, висока розмірність), переходимо на TabDDPM. Для швидкого балансування без генерації нових ознак використовуємо SMOTE. Для аугментації даних TabDDPM забезпечує якість у 2 рази вищу за CTGAN для даних із понад 50 ознаками. CTGAN в 1.5 рази швидший за TabDDPM для даних з менше ніж 30 ознаками. SMOTE працює в 10 разів швидше за CTGAN.

Чому ми використовуємо TSTR-оцінку?

Класичні метрики (Column Shapes) не гарантують, що синтетика корисна для ML. TSTR (Train on Synthetic, Test on Real) — єдиний надійний спосіб: навчаємо GradientBoosting на синтетиці та порівнюємо AUC з моделлю на реальних даних. Різниця менше 5% — ознака якісної генерації. В одному з проєктів з кредитними даними (50K рядків, 30 ознак) ми досягли gap в 1.2%. Це підтверджує, що синтетика не поступається реальним даним.

ML utility gap: показник якості синтетики

Це різниця в метриках (AUC, F1) між моделлю, навченою на реальних даних, та моделлю, навченою на синтетиці. Ідеал — gap 0%. На практиці ML utility gap < 5% вважається відмінним результатом. Ми прагнемо до gap < 3%, і в 90% проєктів це досяжно.

Як проходить навчання

  1. Аналіз датасету — перевірка типів, пропусків, розподілів, дисбалансу.
  2. Вибір архітектури — CTGAN / TabDDPM / комбінація зі SMOTE.
  3. Навчання базової моделі — 100–500 епох, підбір гіперпараметрів (batch size, learning rate, шари). Використовуємо батч-нормалізацію та градієнтний спуск з адаптивним learning rate для стабілізації навчання.
  4. Оцінка якості — TSTR, Column Shapes, візуалізація кореляцій.
  5. Доробка — збільшення епох, налаштування discriminator (для GAN), прунінг викидів.
  6. Деплой — упаковка в ONNX або Docker, інтеграція через REST API.

Порівняння архітектур генерації

Характеристика CTGAN TabDDPM SMOTE
Тип моделі GAN Дифузійна Оверсемплінг
Якість (utility gap) < 5% < 3% Сильно залежить від даних
Швидкість навчання 1-2 години 4-12 годин 5-30 хвилин
Макс. ознак 50 1000+ 20
Підтримка пропусків Так Так Ні

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

  • Документація: опис архітектури, метрики якості, інструкція з донавчання.
  • Готова модель у форматі .pkl / ONNX / Hugging Face.
  • API для генерації (FastAPI) з ендпоінтами /generate та /evaluate.
  • Навчання команди замовника (2–3 години воркшопу).
  • Підтримка 1 місяць після впровадження.

Терміни та вартість

Орієнтовні терміни — від 3 до 10 робочих днів залежно від складності даних та вимог до якості. Вартість базового прототипу — від $500. Наприклад, один з наших клієнтів заощадив $12,000 на зборі даних. Середня економія — до $10,000 на зборі даних. Інвестиції в якісні синтетичні дані окупаються за рахунок зменшення витрат на розмітку та збір. Середня економія — до 40% бюджету на збір та розмітку.

Типові помилки при генерації
  • Використання однієї моделі для всіх типів даних: потрібно враховувати частку категоріальних ознак. Для датасетів з >50% категорій краще підходить TabDDPM.
  • Ігнорування пропусків — вони сильно спотворюють розподіл; використовуйте вбудовану обробку CTGAN.
  • Оцінка лише за візуальною схожістю (TSTR обов'язковий).
  • Занадто мало епох — CTGAN потребує мінімум 300, TabDDPM — 500.

Генеративна модель навчається на реальних даних. Навчання моделі проводиться на сервері з GPU. Також використовуємо варіаційний автокодувальник (VAE) як альтернативу. Архітектура CTGAN включає модуль кондиціонування та loss функцію Wasserstein з градієнтним штрафом.

Детальніше про моделі: CTGAN та SMOTE.

Зв'яжіться з нами для оцінки вашого датасету — ми підготуємо прототип за 2 дні. Замовте пілотний проєкт: отримайте перші результати (модель + звіт за TSTR) вже через 5 робочих днів.