Synthetic Data Generation for Tabular Data¶
| 항목 | 내용 |
|---|---|
| 분야 | Data Augmentation, Privacy-Preserving ML, Generative Models |
| 주요 기법 | CTGAN, TVAE, TabDDPM, TabSyn, Gaussian Copula |
| 핵심 라이브러리 | SDV (Synthetic Data Vault), Synthcity |
| 대표 논문 | CTGAN (NeurIPS 2019), TabDDPM (ICML 2023), TabSyn (ICLR 2024) |
개요¶
합성 데이터 생성(Synthetic Data Generation)은 원본 데이터의 통계적 특성을 보존하면서 새로운 가상 데이터를 생성하는 기법이다.
활용 목적¶
| 목적 | 설명 |
|---|---|
| 프라이버시 보호 | 민감 정보 없이 데이터 공유 가능 |
| 데이터 증강 | 불균형 클래스 해결, 학습 데이터 확대 |
| 테스트 데이터 | 개발/테스트 환경용 현실적 데이터 |
| 규제 준수 | GDPR, HIPAA 등 데이터 보호 규정 대응 |
품질 요구사항¶
+-------------------+ +-------------------+ +-------------------+
| Statistical | | Privacy | | Utility |
| Fidelity | | Preservation | | Maintenance |
+-------------------+ +-------------------+ +-------------------+
| | |
v v v
+-------------------+ +-------------------+ +-------------------+
| 분포, 상관관계, | | 개인 식별 불가, | | 하위 ML 모델에서 |
| 범주 비율 유지 | | 멤버십 추론 방어 | | 유사한 성능 |
+-------------------+ +-------------------+ +-------------------+
주요 기법 비교¶
기법별 특성 요약¶
| 기법 | 기반 | 장점 | 단점 | 적합 상황 |
|---|---|---|---|---|
| Gaussian Copula | 통계 | 빠름, 해석 용이 | 복잡한 분포 한계 | 정규 분포에 가까운 데이터 |
| CTGAN | GAN | 복잡한 분포 학습 | 학습 불안정 | 혼합형 데이터 |
| TVAE | VAE | 안정적 학습 | 분포 블러링 | 연속형 위주 데이터 |
| TabDDPM | Diffusion | 고품질, 안정적 | 느린 샘플링 | 품질 중시 |
| TabSyn | Diffusion + VAE | SOTA 품질 | 복잡한 구조 | 대규모, 고품질 필요 |
성능 벤치마크 (OpenML-CC18 기준)¶
| 기법 | ML Efficiency | Statistical Similarity | Detection Score |
|---|---|---|---|
| TabDDPM | 0.91 | 0.89 | 0.52 |
| TabSyn | 0.93 | 0.92 | 0.51 |
| CTGAN | 0.84 | 0.81 | 0.58 |
| TVAE | 0.86 | 0.83 | 0.56 |
| GaussianCopula | 0.79 | 0.76 | 0.62 |
(Detection Score: 낮을수록 실제 데이터와 구분 어려움)
CTGAN (Conditional Tabular GAN)¶
핵심 아이디어¶
NeurIPS 2019에서 발표된 CTGAN은 tabular 데이터의 두 가지 주요 문제를 해결한다:
- Mode-specific Normalization: 연속형 변수의 다중 모드 분포 처리
- Training-by-Sampling: 범주형 변수의 불균형 문제 해결
아키텍처¶
+------------------+ +------------------+ +------------------+
| Real Data | | Generator G | | Discriminator D |
| (x_real) | | | | |
+------------------+ +------------------+ +------------------+
| | |
v v v
+------------------+ +------------------+ +------------------+
| Mode-specific | | Noise z | | Real vs Fake |
| Normalization | | + Condition c | | Classification |
+------------------+ +------------------+ +------------------+
| | |
v v v
+------------------+ +------------------+ +------------------+
| Transformed | | G(z, c) | | D(x) -> [0, 1] |
| x_transformed | | = x_fake | | |
+------------------+ +------------------+ +------------------+
Mode-specific Normalization¶
연속형 변수의 다중 모드 분포를 처리하기 위해:
원본 값 x_j (j번째 연속형 컬럼)
|
v
+---------------------------+
| Variational GMM (VGM) |
| K개 모드로 분해 |
+---------------------------+
|
v
+---------------------------+
| 각 값 x_j에 대해: |
| 1. 모드 선택 확률 계산 |
| 2. 가장 높은 모드 k 선택 |
| 3. 모드 k 내 정규화 |
+---------------------------+
|
v
출력: (alpha_k, beta_k)
- alpha_k: 모드 선택 one-hot
- beta_k: 모드 내 정규화된 값
Training-by-Sampling¶
범주형 변수의 불균형 해결:
전통적 학습:
Category A (90%) -> 90% 샘플링
Category B (10%) -> 10% 샘플링
Training-by-Sampling:
Category A (90%) -> ~50% 샘플링
Category B (10%) -> ~50% 샘플링
(로그 빈도 기반 리샘플링)
TVAE (Tabular VAE)¶
구조¶
TVAE는 Variational Autoencoder를 tabular 데이터에 적용한 모델이다:
+------------------+ +------------------+ +------------------+
| Input x | | Latent z | | Reconstructed x' |
| (transformed) | --> | ~ N(mu, sigma) | --> | (transformed) |
+------------------+ +------------------+ +------------------+
| | |
v v v
+------------------+ +------------------+ +------------------+
| Encoder | | Reparameterization| | Decoder |
| q(z|x) | | z = mu + sigma*e | | p(x|z) |
+------------------+ +------------------+ +------------------+
손실 함수¶
L_TVAE = L_reconstruction + beta * L_KL
L_reconstruction:
- 연속형: Gaussian NLL 또는 MSE
- 범주형: Cross-Entropy
L_KL = KL(q(z|x) || p(z))
= -0.5 * sum(1 + log(sigma^2) - mu^2 - sigma^2)
TabDDPM (Tabular Denoising Diffusion)¶
핵심 아이디어¶
ICML 2023에서 발표된 TabDDPM은 diffusion model을 tabular 데이터에 적용했다:
- Gaussian Diffusion: 연속형 변수
- Multinomial Diffusion: 범주형 변수
Forward Process (Noise 추가)¶
연속형 변수 (Gaussian):
x_t = sqrt(alpha_bar_t) * x_0 + sqrt(1 - alpha_bar_t) * epsilon
epsilon ~ N(0, I)
범주형 변수 (Multinomial):
q(x_t | x_0) = Cat(x_t; p = alpha_bar_t * x_0 + (1 - alpha_bar_t) / K)
K = 범주 수
Reverse Process (Denoising)¶
+------------------+ +------------------+ +------------------+
| x_T ~ N(0,I) | | x_t | | x_0 |
| or Uniform | --> | Iterative | --> | Generated |
+------------------+ | Denoising | | Sample |
+------------------+ +------------------+
|
v
+------------------+
| MLP Network |
| epsilon_theta( |
| x_t, t, cond) |
+------------------+
학습 목표¶
연속형: L = E[|| epsilon - epsilon_theta(x_t, t) ||^2]
범주형: L = E[-log p_theta(x_0 | x_t)]
(x_0 예측 후 cross-entropy)
TabSyn: VAE + Diffusion Hybrid¶
핵심 아이디어¶
ICLR 2024에서 발표된 TabSyn은 VAE와 Diffusion을 결합한 2단계 접근법이다:
+------------------+ +------------------+ +------------------+
| Stage 1: VAE | | Stage 2: | | Generated |
| Encoder/Decoder | --> | Latent Diffusion | --> | Tabular Data |
+------------------+ +------------------+ +------------------+
Stage 1 (VAE Pre-training):
- 원본 데이터 -> Latent space 학습
- 연속형/범주형 각각 임베딩
Stage 2 (Latent Diffusion):
- Latent space에서 diffusion 수행
- 차원 감소로 효율성 향상
장점¶
| 항목 | TabDDPM | TabSyn |
|---|---|---|
| 샘플링 공간 | 원본 차원 | 압축된 latent |
| 샘플링 속도 | 느림 | 빠름 |
| 범주형 처리 | 직접 multinomial | 임베딩 후 연속 |
| 품질 | 우수 | SOTA |
평가 메트릭¶
Statistical Fidelity¶
| 메트릭 | 측정 대상 | 계산 방법 |
|---|---|---|
| KS Statistic | 연속형 분포 | max |
| TVD | 범주형 분포 | 0.5 * sum( |
| Correlation Diff | 변수 간 상관 | |
| Mutual Info Gap | 비선형 관계 |
Machine Learning Utility¶
+------------------+ +------------------+ +------------------+
| Train on | | Train on | | Compare |
| Real Data | vs | Synthetic Data | --> | Performance |
| Test on Real | | Test on Real | | Gap |
+------------------+ +------------------+ +------------------+
ML Efficiency = Performance(Train Syn, Test Real)
/ Performance(Train Real, Test Real)
목표: ML Efficiency >= 0.9
Privacy Metrics¶
| 메트릭 | 의미 | 위험 기준 |
|---|---|---|
| DCR (Distance to Closest Record) | 가장 가까운 실제 데이터와의 거리 | DCR < 0.01 |
| NNDR (Nearest Neighbor Distance Ratio) | 1등/2등 거리 비율 | NNDR < 0.5 |
| Membership Inference | 멤버십 추론 공격 성공률 | > 55% |
Python 구현¶
SDV (Synthetic Data Vault) 기본 사용¶
from sdv.single_table import CTGANSynthesizer, TVAESynthesizer, GaussianCopulaSynthesizer
from sdv.metadata import SingleTableMetadata
import pandas as pd
# 데이터 로드
df = pd.read_csv("data.csv")
# 메타데이터 자동 감지
metadata = SingleTableMetadata()
metadata.detect_from_dataframe(df)
# 모델 선택 및 학습
# Option 1: CTGAN
synthesizer = CTGANSynthesizer(
metadata,
epochs=300,
batch_size=500,
generator_dim=(256, 256),
discriminator_dim=(256, 256),
verbose=True
)
# Option 2: TVAE
synthesizer = TVAESynthesizer(
metadata,
epochs=300,
batch_size=500,
compress_dims=(128, 128),
decompress_dims=(128, 128)
)
# Option 3: GaussianCopula (빠른 baseline)
synthesizer = GaussianCopulaSynthesizer(metadata)
# 학습
synthesizer.fit(df)
# 합성 데이터 생성
synthetic_df = synthesizer.sample(num_rows=1000)
Conditional Sampling¶
from sdv.sampling import Condition
# 특정 조건으로 생성
conditions = [
Condition(
num_rows=500,
column_values={'category': 'A', 'region': 'Seoul'}
),
Condition(
num_rows=500,
column_values={'category': 'B', 'region': 'Busan'}
)
]
conditional_samples = synthesizer.sample_from_conditions(conditions)
품질 평가¶
from sdv.evaluation.single_table import evaluate_quality, run_diagnostic
# 품질 점수 계산
quality_report = evaluate_quality(
real_data=df,
synthetic_data=synthetic_df,
metadata=metadata
)
print(f"Overall Score: {quality_report.get_score()}")
# 상세 진단
diagnostic = run_diagnostic(
real_data=df,
synthetic_data=synthetic_df,
metadata=metadata
)
diagnostic.get_results()
TabDDPM 구현 (tab-ddpm 라이브러리)¶
# pip install tab-ddpm
from tab_ddpm import GaussianMultinomialDiffusion
from tab_ddpm.utils import get_model, train, sample
import torch
import numpy as np
# 데이터 준비
X_num = np.array(...) # 연속형 변수 (N, D_num)
X_cat = np.array(...) # 범주형 변수 (N, D_cat), integer-encoded
# 모델 설정
num_numerical = X_num.shape[1]
num_classes = [len(np.unique(X_cat[:, i])) for i in range(X_cat.shape[1])]
model = get_model(
model_type='mlp',
num_numerical_features=num_numerical,
num_classes=num_classes,
d_in=128,
num_layers=4,
d_hidden=256,
dropout=0.0,
)
# Diffusion 설정
diffusion = GaussianMultinomialDiffusion(
num_classes=num_classes,
num_numerical_features=num_numerical,
denoise_fn=model,
num_timesteps=1000,
gaussian_loss_type='mse',
device='cuda'
)
# 학습
train(
diffusion=diffusion,
X_num=X_num,
X_cat=X_cat,
batch_size=256,
num_epochs=100,
lr=1e-3
)
# 샘플링
samples = sample(
diffusion=diffusion,
num_samples=1000,
batch_size=256
)
실제 활용 사례¶
1. 의료 데이터 공유¶
+------------------+ +------------------+ +------------------+
| Hospital A | | Synthetic EHR | | Research |
| (Original EHR) | --> | Generation | --> | Institution |
+------------------+ +------------------+ +------------------+
|
v
+------------------+
| Privacy |
| Guaranteed |
+------------------+
2. 클래스 불균형 해결¶
# 소수 클래스만 조건부 생성
minority_condition = Condition(
num_rows=len(majority_class),
column_values={'fraud': True}
)
synthetic_fraud = synthesizer.sample_from_conditions([minority_condition])
# 균형 잡힌 데이터셋 구성
balanced_df = pd.concat([
df[df['fraud'] == False],
synthetic_fraud
])
3. 개발/테스트 환경¶
| 환경 | 데이터 유형 | 장점 |
|---|---|---|
| 개발 | 합성 데이터 | 민감 정보 노출 없음 |
| 스테이징 | 합성 데이터 | 프로덕션과 유사한 분포 |
| 프로덕션 | 실제 데이터 | 검증된 파이프라인 |
선택 가이드¶
+-------------------+
| 데이터 특성? |
+-------------------+
|
+----------------+----------------+
| |
v v
+------------------+ +------------------+
| 연속형 위주 | | 혼합형/범주 다수 |
+------------------+ +------------------+
| |
v v
+------------------+ +------------------+
| GaussianCopula | | 품질 vs 속도? |
| 또는 TVAE | +------------------+
+------------------+ |
+-------------+-------------+
| |
v v
+------------------+ +------------------+
| 속도 중시 | | 품질 중시 |
+------------------+ +------------------+
| |
v v
+------------------+ +------------------+
| CTGAN | | TabDDPM/TabSyn |
+------------------+ +------------------+
참고문헌¶
-
Xu, L. et al. (2019). "Modeling Tabular Data using Conditional GAN." NeurIPS 2019. arXiv:1907.00503
-
Kotelnikov, A. et al. (2023). "TabDDPM: Modelling Tabular Data with Diffusion Models." ICML 2023. arXiv:2209.15421
-
Zhang, H. et al. (2024). "Mixed-Type Tabular Data Synthesis with Score-based Diffusion in Latent Space." ICLR 2024. arXiv:2310.09656
-
SDV Documentation. https://docs.sdv.dev/
-
Synthcity Documentation. https://synthcity.readthedocs.io/
-
Figueira, A. & Vaz, B. (2022). "Survey on Synthetic Data Generation, Evaluation Methods and GANs." Mathematics, 10(15), 2733.