← all posts
AI 2026.05.03 · 12 min read Intermediate

데이터 품질은 왜 단일 숫자로 측정할 수 없는가

Schema drift와 data drift의 근본적 차이부터 Confident Learning의 노이즈 추정까지, ML 파이프라인의 첫 번째 방어선을 4개 차원으로 해부한다.


ML 파이프라인에서 가장 조용히 쌓이는 부채는 코드가 아니라 데이터다. 모델은 깨진 입력에 대해 경고 없이 잘못된 예측을 내놓고, 라벨이 틀려도 학습은 계속된다. 데이터 품질을 “낮다”고 말하는 것으로는 어떤 액션도 나오지 않는다. 어떻게 분해해야 측정 가능하고, 어디서 막아야 하는가?

Validation의 3층 구조

데이터 검증은 단일 관문이 아니라 세 층위로 이루어진다.

1. Schema layer    — column / dtype / nullability  (결정론적)
2. Statistics layer — mean, std, missing rate      (통계적)
3. Business rule   — end_date > start_date 등      (논리적)

세 층을 전부 통과해야 데이터가 유효하다. TFDV(Polyzotis et al. 2017)는 Statistics 층을 자동 추론 방식으로 처리하고, Great Expectations는 세 층 전체를 사용자가 선언(declarative)하는 방식으로 처리한다. 두 도구는 철학이 다르다. TFDV는 “데이터에서 schema를 추론하고 이탈을 감지”하며, GE는 “사람이 계약을 먼저 쓰고 데이터가 그것을 만족하는지 확인”한다.

Validation 비용의 비대칭

Validation gate를 두는 비용은 작다. 없을 때의 손실은 downstream 전체로 퍼져 누적된다. Gate가 늦을수록 오염 범위가 커지므로, 가장 효과적인 위치는 데이터 쓰기 직후 — lake/warehouse 진입 시점이다.

Schema Drift vs Data Drift — 왜 구분해야 하는가

흔한 실수는 “drift = 분포 변화”로 단순화하고 schema 변경을 암묵적으로 넘기는 것이다. 그러나 두 drift는 탐지 방법과 대응 시간이 본질적으로 다르다.

Schema drift는 두 시점의 schema 메타데이터 비교만으로 O(d)O(d)에 즉시 탐지된다. 통계 검정이 필요 없다. column rename, dtype 변경은 즉시 차단(page)해야 할 breaking change다.

Data drift는 동일 schema에서 분포 pt1(x)pt2(x)p_{t_1}(x) \neq p_{t_2}(x)를 검정해야 하며, 검정력은 sample size와 effect size에 의존한다. 즉시 탐지가 불가능하고 threshold 기반 모니터링의 대상이다.

더 중요한 사실은, schema drift를 잡지 못하면 data drift처럼 보이는 cascade가 발생한다는 것이다. ageint에서 str로 바뀌면 파싱 후 NaN이 0으로 채워져 분포가 통째로 이동한다. 원인은 schema이지만 symptom은 statistics다. 따라서 schema gate가 data drift 측정보다 반드시 앞에 와야 한다.

“data quality가 낮다”라고 말하면 어떤 팀도 움직이지 않는다. DAMA-DMBOK의 6차원으로 분해하면 책임이 명확해진다.

차원단순 metric문제 귀속
Completeness1nnull/n1 - n_\text{null}/n수집 / pipeline
Uniquenessndistinct/nn_\text{distinct}/ndedup / join key
Validityrule pass rate입력 검증
Accuracyvs ground truth측정 / 라벨링
Consistencycross-source 일치율동기화
Timelinessfreshness lag < SLAplatform

여기서 치명적인 함정이 있다. 6차원의 단순 평균은 한 차원이 0이어도 전체 점수가 80%처럼 보인다. Validity가 40%인 데이터를 다른 5개 차원이 높다는 이유로 사용할 수 없다.

Quality=min(C, U, V, A, Cons, T)\text{Quality} = \min(C,\ U,\ V,\ A,\ \text{Cons},\ T)

데이터 사용은 모든 차원이 충족되어야 하므로, 집계는 평균이 아니라 weakest-link — 가장 약한 고리다.

Label Noise — 모델이 조용히 배우는 오답

Validity와 Accuracy는 외부 데이터에만 적용되는 것이 아니다. 학습 라벨 자체도 데이터 품질 문제다. ImageNet의 6%, IMDB의 10% — 표준 벤치마크조차 라벨이 틀려 있다(Northcutt et al. 2021). Noise rate η\eta가 있을 때 test error의 하한은

Errtestη+ErrBayes\text{Err}_\text{test} \geq \eta + \text{Err}_\text{Bayes}

이므로, noise는 모델 성능의 ceiling을 직접 낮춘다.

Confident Learning(Northcutt et al. 2021)은 모델 자체를 사용해 noisy label을 자동 감지하는 방법이다. 핵심 아이디어는 다음과 같다.

  1. K-fold CV로 모든 샘플의 out-of-sample predicted probability p^(yx)\hat{p}(y \mid x)를 계산한다.
  2. class jjself-confidence threshold tjt_j — label이 jj인 샘플들의 p^(y=jx)\hat{p}(y=j \mid x) 평균 — 을 계산한다.
  3. noisy label y~=i\tilde{y} = i이지만 p^(y=jx)tj\hat{p}(y=j \mid x) \geq t_j인 샘플을 카운트해 confident joint C[i,j]C[i, j]를 추정한다.
  4. C[i,j]C[i,j]를 정규화하면 noise transition matrix ρ^ij\hat{\rho}_{ij}가 된다.
명제 1 · Confident Joint의 일관성

Class-conditional noise 가정 Pr(y~=jy=i,x)=ρij\Pr(\tilde{y}=j \mid y^*=i, x) = \rho_{ij} 와 calibrated p^\hat{p} 하에서, nn \to \infty이면

C[i,j]jC[i,j]pρij\frac{C[i, j]}{\sum_j C[i, j]} \xrightarrow{p} \rho_{ij}
▷ 증명

Out-of-sample probability는 in-sample처럼 자기 라벨에 편향되지 않는다. 따라서 p^(y=jx)\hat{p}(y=j \mid x)는 unbiased 신호를 제공하고, threshold tjt_j 기준으로 “confident”하게 jj로 분류되는 샘플 비율이 ρij\rho_{ij}로 수렴한다. \square

flagged된 샘플에 대한 대응은 dataset 크기와 class 불균형에 따라 달라진다. 큰 dataset에서는 drop이 효율적이고, 작은 dataset에서는 re-label, class 불균형이 심하면 reweight를 택한다.

트레이드오프

데이터 검증 시스템 자체도 부채가 될 수 있다.

트레이드오프

False positive(정상인데 거부): Validation rule이 지나치게 strict하면 alert fatigue가 쌓이고, 팀이 알림을 무시하기 시작한다. False negative(문제인데 통과): rule이 너무 느슨하면 오염된 데이터가 학습과 서빙 전체로 퍼진다. 총 비용 =αK+βC= \alpha K + \beta C (false alarm 비용 KK, 인시던트 비용 CC). Schema violation은 즉시 차단(page), statistics anomaly는 경고(warn), business rule 위반은 티켓으로 분리하는 것이 현실적인 균형이다.

마찬가지로, 너무 많은 expectation은 그 자체로 maintenance 부채가 된다. 도메인이 변화하면 rule도 갱신해야 하고, 갱신하지 않으면 false positive가 쌓인다. 도구 선택도 동일한 원칙이 적용된다 — 작은 팀에 GE를 강제 도입하면 suite 관리 비용이 실익을 넘어선다.

정리

  • Validation은 Schema + Statistics + Business rule 세 층이며, 가장 효과적인 gate 위치는 데이터 쓰기 직후다.
  • Schema drift는 메타데이터 비교로 즉시 탐지해 차단하고, data drift는 통계 검정 기반으로 모니터링한다. 순서를 바꾸면 alert이 노이즈에 묻힌다.
  • 6차원 품질 점수는 평균이 아니라 weakest-link로 집계해야 한다. 한 차원이 0이면 전체가 0이다.
  • Label noise는 모델 성능의 ceiling을 직접 낮추며, Confident Learning의 confident joint가 noise transition을 일관 추정한다.

데이터 품질을 단일 숫자로 측정하려는 시도는 항상 가장 심각한 차원을 숨긴다.

REF
Northcutt et al. · 2021 · Pervasive Label Errors in Test Sets Destabilize Machine Learning Benchmarks · NeurIPS Datasets and Benchmarks