코드 구성과 리팩터링

DVC로 배우는 데이터 버저닝 입문

Ravi Bhadauria

Machine Learning Engineer

프로토타이핑 vs 프로덕션 코드

  • 프로토타이핑 코드는 빠른 반복에 유리함
  • 그러나 프로덕션에는 부적합
    • 미검증으로 오류 가능성 높음
    • 모듈화 부족, 중복 코드 다수
    • 재현성 낮음
DVC로 배우는 데이터 버저닝 입문

좋은 프로덕션 코드의 특징

  • 재현 가능: 다른 환경·시간에도 동일한 출력 재생성

  • 모듈형: 독립적이고 테스트 가능한 모듈로 구성

  • 일관성: 모든 매개변수의 단일 출처 유지

    • 구성/매개변수 파일 활용

프로덕션 코드의 세 가지 특성을 보여주는 개략도

DVC로 배우는 데이터 버저닝 입문

구성 파일과 YAML

  • 파일은 지원 형식이어야 함

    • YAML, JSON, TOML, Python
    • 기본은 params.yaml
  • 우리는 YAML 사용

    • YAML Ain't Markup Language
    • 언어나 애플리케이션 간 표준 데이터 교환 형식 제공
    • 단순하고 가독성 높음
    • 유효한 확장자: .yaml, .yml
1 https://dvc.org/doc/command-reference/params#description
DVC로 배우는 데이터 버저닝 입문

YAML 문법

  • 매개변수는 딕셔너리로 지정

    • 키와 값은 :로 구분
  • 주석은 #로 시작

  • 데이터 타입:

    • 정수, 실수, 문자열
  • 데이터 구조:

    • 배열
    • 중첩 딕셔너리
  • 들여쓰기가 중요

# Key-value pairs
a: 1
b: 1.2
c: "String value"
# Arrays
a: [1, 2.2, 3, 4.8]
b:
  - 5
  - "String value"
# Nested dictionaries
a:
  b: "Some value"
  c: "Some other value"
DVC로 배우는 데이터 버저닝 입문

구성 파일 예시

# 데이터 전처리 매개변수
preprocess:
  ...
  target_column: RainTomorrow
  categorical_features:
    - Location
    - WindGustDir
    - ...

# 모델 학습/평가 매개변수 train_and_evaluate: rfc_params: n_estimators: 2 ...
DVC로 배우는 데이터 버저닝 입문

모듈형 함수 예시

# model.py 내
def evaluate_model(model, X_test, y_test):
    """테스트 세트로 모델을 평가하고 지표를 반환합니다."""
    y_pred = model.predict(X_test)
    precision = precision_score(y_test, y_pred)
    ...
    return { "accuracy": accuracy, "precision": precision,
        "recall": recall, "f1_score": f1 }
# 엔트리포인트 코드 (train_and_evaluate.py)
from model import evaluate_model
metrics = evaluate_model(model, X_test, y_test)
DVC로 배우는 데이터 버저닝 입문

프로젝트 코드 레이아웃 예시

머신러닝 저장소의 코드 레이아웃 이미지

DVC로 배우는 데이터 버저닝 입문

실습해 봅시다!

DVC로 배우는 데이터 버저닝 입문

Preparing Video For Download...