capstone-dsc (데이터 품질 점수가 모델 성능을 예측하는가)
데이터 품질 점수가 모델 성능을 예측하는지 오염 실험으로 검증
- 기간
- 2026.04 ~ 2026.06
- 구성
- 팀 프로젝트, 캡스톤, 점수 엔진과 실험 담당
- 내 역할
- DSC 점수 엔진, 오염 실험 파이프라인, 통계 검증, 이미지와 텍스트 셀 확장
- 결과
- 정형 데이터 435건에서 점수와 F1의 상관 r 0.598 (p 1.6e-43), hold-out 5/5 통과
먼저 볼 글
-
DSC가 노이즈를 '품질 양호'로 읽었다: 데이터 품질 점수의 사각지대와 signal_integrity
데이터 품질 점수가 노이즈를 오히려 좋게 읽었다. 빼는 열화만 보던 지표 열 개에 노이즈 지표 하나를 더해 상관을 −0.16에서 +0.95로
-
가장 무거운 지표를 뺀 이유: value_accuracy 제거와 DSC 엔진 v4 (ADR-009)
상관을 올려 준 지표가 정작 원본 없이는 계산이 안 된다는 모순을 인정하고, 검증 조건을 먼저 적은 뒤 지표를 교체한 결정
4학년 캡스톤. 데이터에 품질 점수(DSC)를 매기는 도구가 있을 때, 그 점수가 실제로 그 데이터로 학습한 모델의 성능을 예측하는지를 실험으로 확인한 프로젝트입니다. 팀 캡스톤이고, 점수 엔진과 실험 파이프라인, 통계 검증은 제가 맡았습니다.
공개 데이터셋 3개(Telco 고객 이탈, 남독일 신용, letter)에 DQ4AI로 오염 5종(결측, 중복, 값 오류, 표현 불일치, 클래스 불균형)을 단계별로 넣고, 설정마다 DSC 점수와 모델 5개(LR, RF, XGB, SVC, MLP)의 F1을 짝지어 상관을 봤습니다. 이후 이미지와 텍스트 셀로 확장했습니다.
기술적 의사결정
점수 엔진을 세 번 뜯어고침 (v1 → v2 → v3.2 → v4) 첫 엔진은 오염을 75% 넣어도 점수가 2점도 안 움직였고, 고친 뒤에는 이상치 지표가 노이즈에 거꾸로 반응했습니다. 매번 오염 종류별로 상관을 쪼개 어느 지표가 문제인지 찾고 그 지표만 고쳤습니다. 전체 r은 0.08 → 0.42 → 0.60.
원본 의존 지표 제거 (ADR-009)
상관을 올려 준 value_accuracy가 원본 없이는 계산이 안 되는 drift 지표라서, “데이터 품질 점수”라는 정의를 지키기 위해 뺐습니다.
대신 kNN 라벨 일관성과 상호정보량 지표를 넣었고, 검증 조건 4개를 결과 보기 전에 먼저 적었습니다.
split-first와 누수 자동 검증 오염된 파일을 나누던 구조가 test에 train 복제본을 흘려 RF F1 0.99가 나왔습니다. 먼저 나누고 train만 오염시키는 구조로 바꾸고, 학습 전에 split 인덱스와 행 해시로 누수를 검사해 실패하면 학습을 멈추게 했습니다.
한계를 지표로 남김 Telco의 약한 상관(onehot 13,615차원)과 uniqueness 오염의 무반응은 고치지 않고 원인과 함께 README에 명시했습니다.
결과
정형 데이터: 오염 설정 87개 × 모델 5개 = 435건, Pearson r 0.598, Spearman 0.628, 등급별 F1 평균 A 0.88 / B 0.78 / C 0.60 / D 0.52, 오염 종류 hold-out 5/5 통과. 이미지 회귀 셀은 노이즈 지표 추가 후 held-out 데이터셋에서 r 0.95.
참고
이 프로젝트 관련 글 (5편)
-
DSC가 노이즈를 '품질 양호'로 읽었다: 데이터 품질 점수의 사각지대와 signal_integrity
데이터 품질 점수가 노이즈를 오히려 좋게 읽었다. 빼는 열화만 보던 지표 열 개에 노이즈 지표 하나를 더해 상관을 −0.16에서 +0.95로
-
가장 무거운 지표를 뺀 이유: value_accuracy 제거와 DSC 엔진 v4 (ADR-009)
상관을 올려 준 지표가 정작 원본 없이는 계산이 안 된다는 모순을 인정하고, 검증 조건을 먼저 적은 뒤 지표를 교체한 결정
-
노이즈가 심할수록 점수가 올랐다: 자기 IQR로 이상치를 재던 지표
전체 상관이 0.08로 나온 원인을 오염 종류별로 쪼개 찾고, 이상치 지표의 기준을 원본 분포에 고정해 0.42까지 올린 기록
-
RandomForest F1 0.99는 학습이 아니라 누수였다: split-first로 바꾼 기록
오염된 파일을 나누던 파이프라인이 test에 train 복제본을 흘리고 있어서, 먼저 나누고 train만 오염시키는 구조로 바꾼 기록
-
오염을 넣어도 점수가 안 떨어졌다: DSC 엔진 첫 버전이 결측을 못 센 이유
데이터를 75%까지 오염시켜도 품질 점수가 2점도 안 움직이던 첫 엔진의 원인 세 가지와 같은 날 고친 기록