핵심 요약
합성 데이터는 실제 데이터를 수집하는 비용과 개인정보 보호 문제를 해결하면서도 모델 성능 실험과 소프트웨어 테스트를 가능하게 한다. 이 아티클은 Faker나 SDV 같은 외부 라이브러리 대신 Python의 기본 모듈을 사용하여 데이터의 편향과 오류가 어떻게 발생하는지 직접 이해하며 데이터를 생성하는 방법을 다룬다. 단순 무작위 데이터부터 비즈니스 로직이 포함된 시뮬레이션, 시계열, 이벤트 로그, 텍스트 데이터까지 5가지 핵심 시나리오별 구현 코드를 제공한다. 이를 통해 개발자는 데이터 간의 상관관계와 비즈니스 규칙을 반영한 더 정교한 테스트 데이터셋을 구축할 수 있다.
배경
Python 기초 문법, random 및 datetime 모듈 이해
대상 독자
데이터 사이언티스트, ML 엔지니어, 테스트 자동화 엔지니어
의미 / 영향
외부 라이브러리 없이도 고품질의 합성 데이터를 생성할 수 있는 능력을 갖추면 데이터의 편향을 더 잘 제어하고 보안 리스크를 줄일 수 있다. 이는 특히 초기 모델 검증이나 개인정보가 민감한 도메인에서 유용하다.
섹션별 상세
def choose_plan():
roll = random.random()
if roll < 0.5: return "Free"
elif roll < 0.8: return "Basic"
elif roll < 0.95: return "Pro"
else: return "Enterprise"
def generate_spend(age, plan):
base = {"Free": 0, "Basic": 20, "Pro": 50, "Enterprise": 200}[plan]
if plan != "Free":
base += random.uniform(0, 50)
if age >= 40:
base *= 1.15
return round(base, 2)가중치 기반 선택과 컬럼 간 상관관계를 반영하여 현실적인 고객 지출 데이터를 생성하는 로직
for ts in (start + timedelta(hours=i) for i in range(24 * 7)):
base = 80
hour = ts.hour
if 8 <= hour <= 11:
base += 60
elif 18 <= hour <= 21:
base += 40
elif 0 <= hour <= 5:
base -= 30
visits = max(0, int(random.gauss(base, 15)))
rows.append({"timestamp": ts.isoformat(), "visits": visits})시간대별 피크 타임과 가우시안 노이즈를 결합하여 웹 트래픽 시계열 데이터를 생성하는 예시
for user_id in range(1, 201):
event_count = random.randint(5, 30)
current_time = start + timedelta(days=random.randint(0, 10))
for _ in range(event_count):
event = random.choice(events)
if event == "purchase" and random.random() < 0.6:
value = round(random.uniform(10, 300), 2)
else:
value = 0.0
rows.append({
"user_id": f"USER{user_id:04d}",
"event_time": current_time.isoformat(),
"event_name": event,
"event_value": value
})
current_time += timedelta(minutes=random.randint(1, 180))사용자별 세션 유지 시간과 행동 의존성을 반영한 이벤트 로그 생성 스크립트
실무 Takeaway
- 단순 무작위 추출 대신 가중치와 조건부 로직을 사용하여 데이터 간의 상관관계를 구현해야 현실적인 테스트가 가능하다.
- 프로세스 시뮬레이션 방식을 도입하면 비즈니스 규칙이 반영된 동적인 상태 변화 데이터를 생성할 수 있어 시스템 검증에 유리하다.
- 합성 데이터 생성 시 비즈니스 로직 위반이나 지나치게 깨끗한 데이터 생성을 피해야 실제 환경의 엣지 케이스를 제대로 테스트할 수 있다.
AI 요약 · 북마크 · 개인 피드 설정 — 무료