개요

**합성 데이터 생성(Synthetic Data Generation)**은 실제 데이터를 사용하지 않고 통계적 특성이나 패턴을 모방한 인공 데이터를 만드는 기법. 개인정보 보호, 데이터 부족, 레이블 비용 문제를 해결하는 핵심 전략.


주요 생성 방법

방법설명대표 도구
GAN생성자-판별자 적대적 학습StyleGAN, CycleGAN
VAE잠재 공간 샘플링다양한 VAE 구현체
확산 모델노이즈 → 데이터 역방향 생성Stable Diffusion
LLM 기반GPT 등으로 텍스트 데이터 생성GPT-4, Claude
통계적 방법분포 기반 샘플링Faker, SDV
시뮬레이션물리 엔진, 게임 엔진 활용CARLA, Unity

활용 분야

분야용도
의료환자 데이터 대체 (개인정보 보호)
자율주행엣지 케이스 시뮬레이션 데이터
금융사기 탐지 학습 데이터 (불균형 해소)
NLP텍스트 데이터 증강, 번역 학습
컴퓨터 비전이미지 증강, 라벨 자동 생성
음성 AITTS로 대화 훈련 데이터 생성

주요 라이브러리

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

주의사항

  • 편향 증폭: 원본 데이터의 편향이 합성 데이터에도 반영될 수 있음
  • 분포 외 샘플: 실제 엣지 케이스를 충분히 커버 못 할 수 있음
  • 법적 이슈: 일부 규제에서 합성 데이터도 개인정보로 취급 가능
  • 검증 필수: 합성 데이터만으로 학습 시 실제 환경 성능 저하 위험

관련 항목