본문 바로가기
C.W.K.
Stream
Lesson 04 of 12 · published

데이터 검증

~11 min · data, validation, quality

Level 0견습생
0 XP0/101 lessons0/10 achievements
0/120 XP to next level120 XP to go0% complete

데이터도 빌드 아티팩트야

서비스가 데이터셋(학습 데이터, RAG 코퍼스, 지식 베이스)에 의존한다면 데이터도 배포되는 산출물의 일부야. 코드처럼 CI에서 검증해.

검사 항목

  • 스키마 — 모든 행이 예상한 컬럼이나 필드와 타입을 갖추고 있는지 확인.
  • 카디널리티 — 행 개수가 예상 범위 안에 들어오는지 확인해서 조용한 데이터 손실을 방지.
  • 널 값과 완전성 — 필수 필드가 빠짐없이 채워졌는지 확인.
  • 분포 — 기준선 대비 기본 통계(평균, 레이블 균형)에 큰 변화나 이탈이 없는지 확인.
  • 개인정보와 민감 데이터 — 노출된 이메일, 전화번호, API 키가 없는지 확인.
  • 인코딩과 형식 — UTF-8 인코딩, CSV에 BOM 없음, 줄바꿈 문자 혼합 없음을 확인.

도구

  • Great Expectations — 선언형 기대 조건으로 전체 리포트를 생성.
  • Pandera — 파이썬 데코레이터로 스키마를 검증.
  • dbt 테스트 — SQL 기반 파이프라인에 사용.
  • 커스텀 pytest — 작은 데이터셋에 사용.

Code

CI의 Pandera 스키마 검사·python
# tests/test_data_validity.py
import pandera.pandas as pa
import pandas as pd

schema = pa.DataFrameSchema({
    'id': pa.Column(int, unique=True),
    'text': pa.Column(str, checks=pa.Check.str_length(min_value=1)),
    'label': pa.Column(str, checks=pa.Check.isin(['pos', 'neg', 'neu'])),
    'lang': pa.Column(str, checks=pa.Check.str_matches(r'^(en|ko|ja|zh)$')),
})

def test_dataset_conforms():
    df = pd.read_parquet('data/training.parquet')
    schema.validate(df, lazy=True)  # raises with all errors collected
    assert 1000 < len(df) < 1_000_000   # cardinality bounds

External links

Exercise

배포하는 데이터셋 하나에 CI 데이터 검증 단계를 추가해. 스키마, 예상 행 개수 범위, 개인정보 검사를 정의해. 푸시하고 나서 검증이 통과하는지, 아니면 몰랐던 문제가 드러나는지 확인해 봐.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.