개요
**합성 데이터 생성(Synthetic Data Generation)**은 실제 데이터를 사용하지 않고 통계적 특성이나 패턴을 모방한 인공 데이터를 만드는 기법. 개인정보 보호, 데이터 부족, 레이블 비용 문제를 해결하는 핵심 전략.
주요 생성 방법
| 방법 | 설명 | 대표 도구 |
|---|
| GAN | 생성자-판별자 적대적 학습 | StyleGAN, CycleGAN |
| VAE | 잠재 공간 샘플링 | 다양한 VAE 구현체 |
| 확산 모델 | 노이즈 → 데이터 역방향 생성 | Stable Diffusion |
| LLM 기반 | GPT 등으로 텍스트 데이터 생성 | GPT-4, Claude |
| 통계적 방법 | 분포 기반 샘플링 | Faker, SDV |
| 시뮬레이션 | 물리 엔진, 게임 엔진 활용 | CARLA, Unity |
활용 분야
| 분야 | 용도 |
|---|
| 의료 | 환자 데이터 대체 (개인정보 보호) |
| 자율주행 | 엣지 케이스 시뮬레이션 데이터 |
| 금융 | 사기 탐지 학습 데이터 (불균형 해소) |
| NLP | 텍스트 데이터 증강, 번역 학습 |
| 컴퓨터 비전 | 이미지 증강, 라벨 자동 생성 |
| 음성 AI | TTS로 대화 훈련 데이터 생성 |
주요 라이브러리
Python
# Faker - 개인정보 형태의 더미 데이터
from faker import Faker
fake = Faker('ko_KR')
for _ in range(5):
print(fake.name(), fake.phone_number(), fake.email())
# SDV (Synthetic Data Vault) - 테이블형 데이터
from sdv.tabular import GaussianCopula
model = GaussianCopula()
model.fit(real_data)
synthetic_data = model.sample(num_rows=1000)
# CTGAN - GAN 기반 테이블형
from ctgan import CTGAN
model = CTGAN()
model.fit(real_data, discrete_columns=['category'])
synthetic = model.sample(500)
데이터 품질 평가
| 지표 | 설명 |
|---|
| 통계적 유사성 | 분포·상관관계가 원본과 유사한가 |
| 프라이버시 | 원본 데이터 재식별 가능성 없는가 |
| 다운스트림 성능 | 합성 데이터로 학습한 모델이 실제 잘 작동하는가 |
| 시각적 검사 | 도메인 전문가가 봤을 때 자연스러운가 |
# SDMetrics로 품질 평가
from sdmetrics.reports.single_table import QualityReport
report = QualityReport()
report.generate(real_data, synthetic_data, metadata)
print(report.get_score())
LLM을 활용한 텍스트 합성 데이터
from anthropic import Anthropic
client = Anthropic()
def generate_training_examples(topic, n=10):
"""LLM으로 파인튜닝용 합성 학습 데이터 생성"""
response = client.messages.create(
model="claude-opus-4-6",
max_tokens=2000,
messages=[{
"role": "user",
"content": f"""다음 주제에 대해 질문-답변 쌍 {n}개를 JSON 배열로 생성해주세요.
주제: {topic}
형식: [{{"question": "...", "answer": "..."}}]"""
}]
)
return response.content[0].text
주의사항
- 편향 증폭: 원본 데이터의 편향이 합성 데이터에도 반영될 수 있음
- 분포 외 샘플: 실제 엣지 케이스를 충분히 커버 못 할 수 있음
- 법적 이슈: 일부 규제에서 합성 데이터도 개인정보로 취급 가능
- 검증 필수: 합성 데이터만으로 학습 시 실제 환경 성능 저하 위험
관련 항목