CertNote/ 출퇴근 학습 노트
로드맵
KOEN
CLF-C02 · FoundationalCloud Practitioner - Foundational
DVA-C02 · AssociateDeveloper - Associate
SAA-C03 · AssociateSolutions Architect - Associate
SOA-C02 · AssociateCloudOps Engineer - Associate
SAP-C02 · ProfessionalSolutions Architect - Professional
DOP-C02 · ProfessionalDevOps Engineer - Professional
SCS-C03 · SpecialtySecurity - Specialty
MLA-C01 · AssociateMachine Learning Engineer - Associate
  • Week 1
    • 1.ML 수명주기와 ML 엔지니어의 역할
    • 2.ML 문제 유형과 평가 지표 기초
    • 3.AWS ML 스택 한눈에 보기
    • 4.SageMaker 개요: Studio, 학습/추론, 빌트인 알고리즘
    • 5.Week 1 종합 — ML 기초·AWS 스택 복습
  • Week 2
  • Week 3
    • 1.특성 공학: 모델이 읽을 수 있는 숫자로 바꾸는 기술
    • 2.SageMaker Data Wrangler: 코드 없이 끝내는 데이터 준비
    • 3.SageMaker Feature Store: 특성을 자산으로 관리하기
    • 4.데이터 편향·품질: Clarify, 불균형 처리, 데이터 분할
    • 5.Week 3 종합 — 특성 공학·데이터 품질 복습
  • Week 4
  • Week 5
  • Week 6
  • Week 7
  • Week 8
  • Week 9
  • Week 10
AIF-C01 · FoundationalAI Practitioner - Foundational
DEA-C01 · AssociateData Engineer - Associate
MLS-C01 · SpecialtyMachine Learning - Specialty
합격 후기

© CertNote · 주간랩스

  • 소개
  • 수정 기록
  • 문의
  • 이용약관
  • 개인정보처리방침
← MLA-C01/Week 3/Day 4

기준: MLA-C01 시험 가이드·오류 제보

MLA-C01· AssociateWeek 3 · Day 4읽기 약 12분
핵심 정리
  • SageMaker Clarify는 학습 전 데이터 편향과 학습 후 예측 편향·설명가능성(SHAP)을 분석한다.
  • 편향 분석의 기준은 민감 속성(facet). 대표 지표는 CI(그룹 간 표본 불균형)와 DPL(긍정 레이블 비율 차이).
  • 클래스 불균형은 언더/오버샘플링·SMOTE·class weight로 다룬다. 반드시 분할 후 학습 셋에만 적용.
  • 분할은 train/validation/test 3분할. test는 마지막에 단 한 번만 본다.
  • 불균형이면 층화 분할, 시계열이면 시간 분할. 데이터가 적으면 k-fold 교차검증.

Day 4 - 데이터 편향·품질: Clarify, 불균형 처리, 데이터 분할

SageMaker Clarify: 편향 탐지와 설명가능성

특성을 잘 만들어도 데이터 자체가 한쪽으로 치우쳐 있으면 모델은 그 편향을 그대로 학습한다. 대출 심사 모델이 특정 성별에 불리하게 판단하거나, 사기 탐지 모델이 0.1%뿐인 사기를 전부 놓치는 일이 대표적이다.

SageMaker Clarify는 두 가지 일을 한다.

시점무엇을 분석하나대표 산출물
학습 전 (pre-training)데이터 자체의 그룹 간 불균형CI, DPL 등 편향 지표
학습 후 (post-training)모델 예측의 그룹 간 차이, 특성 기여도예측 편향 지표, SHAP 값

핵심 개념은 민감 속성(facet)이다. 성별·인종·나이처럼 공정성을 따져야 하는 컬럼을 지정하면, Clarify가 그 그룹 간 데이터·예측이 균형 잡혔는지 지표로 보여준다.

from sagemaker import clarify
 
clarify_processor = clarify.SageMakerClarifyProcessor(
    role=role, instance_count=1, instance_type="ml.m5.xlarge", sagemaker_session=session
)
 
bias_config = clarify.BiasConfig(
    label_values_or_threshold=[1],      # 긍정 결과 (예: 대출 승인)
    facet_name="gender",                # 민감 속성
    facet_values_or_threshold=[0],      # 보호 그룹
)
 
clarify_processor.run_pre_training_bias(   # 학습 전 데이터 편향
    data_config=data_config, data_bias_config=bias_config,
)

대표적 편향 지표는 둘이다.

지표무엇을 재나높으면
Class Imbalance (CI)그룹 간 표본 수가 얼마나 치우쳤나한 그룹의 데이터가 훨씬 적음
Difference in Positive Proportions in Labels (DPL)그룹 간 긍정 레이블 비율 차이한 그룹만 유리한 결과를 많이 받았음

머신러닝 편향은 데이터에서 시작한다. "garbage in, garbage out"의 공정성 버전이다. 과거 데이터에 사회적 편향(예: 특정 그룹의 낮은 승인율)이 담겨 있으면, 모델은 그것을 "패턴"으로 학습해 편향을 자동화·증폭한다. 학습 전 편향 측정이 중요한 이유다 — 모델을 만들기 전에 데이터의 불균형을 먼저 잡지 않으면, 아무리 정확한 모델도 불공정한 결정을 빠르게 대량으로 내린다.

Clarify의 학습 후 분석은 SHAP(SHapley Additive exPlanations) 값으로 "각 특성이 예측에 얼마나 기여했나"를 계산한다. 게임이론의 Shapley 값에서 온 개념으로, 특성을 넣고 빼며 예측 변화의 공정한 몫을 배분한다. 규제 산업(금융·의료)에서 "왜 이 고객이 거절됐나"를 설명해야 할 때, SHAP 기반 특성 기여도가 그 근거가 된다.

클래스 불균형 처리

분류 데이터에서 한 클래스가 극단적으로 적은 것이 클래스 불균형이다. 사기(0.1%), 희귀 질병, 장비 고장처럼 정작 중요한 쪽이 소수인 경우가 많다. 그대로 두면 모델이 다수 클래스만 찍어도 높은 정확도가 나와 소수 클래스를 무시한다.

기법방식데이터 양주의점
언더샘플링다수 클래스를 줄임감소정보 손실 가능
오버샘플링(복제)소수 클래스를 복제증가같은 점 반복 → 과적합 위험
SMOTE소수 클래스 합성 샘플 생성증가단순 복제보다 일반화↑, 클래스가 겹치면 노이즈 합성
class weight소수 클래스 오답에 큰 페널티그대로데이터를 안 늘려 메모리·시간 이득
from imblearn.over_sampling import SMOTE
 
# SMOTE: 소수 클래스의 합성 샘플을 보간으로 생성
smote = SMOTE(random_state=42)
X_resampled, y_resampled = smote.fit_resample(X_train, y_train)
print(y_resampled.value_counts())   # 두 클래스가 균형을 이룸
[원본]        다수 ●●●●●●●●●●●●●●●●  소수 ▲▲
[언더샘플링]  다수 ●●●●             소수 ▲▲     ← 다수를 버림(정보 손실)
[복제]        다수 ●●●●●●●●●●●●●●●●  소수 ▲▲▲▲▲▲▲▲  ← 같은 점 반복
[SMOTE]       다수 ●●●●●●●●●●●●●●●●  소수 ▲△△▲△△▲△  ← △는 이웃 사이 보간점

⚠️ 함정: 리샘플링은 반드시 분할 후 학습 데이터에만 적용한다. 분할 전에 전체 데이터에 SMOTE를 돌리면, 합성된 샘플이 검증·테스트 셋에 섞여 데이터 누수가 생기고 성능이 과대평가된다. 검증·테스트 셋은 실제 운영 분포(불균형 그대로)를 반영해야 평가가 정직하다.

SMOTE(Synthetic Minority Over-sampling Technique)는 2002년 제안된 기법으로, 소수 클래스 표본 사이를 보간(interpolation)해 새 합성 샘플을 만든다. 단순 복제는 같은 점을 여러 번 놓아 모델이 그 점을 외우게(과적합) 하지만, SMOTE는 이웃 표본 사이의 새로운 점을 만들어 결정 경계를 부드럽게 한다. 다만 특성 공간에서 클래스가 겹치면 노이즈를 합성할 수 있어 만능은 아니다.

불균형 대응은 리샘플링만이 아니다 — 지표와 임계값도 함께 조정한다.

축조치
데이터언더/오버샘플링, SMOTE
손실 함수class weight, scale_pos_weight
평가 지표Accuracy 대신 PR-AUC, F1, Recall
임계값0.5 대신 비즈니스 비용에 맞춰 조정

train/validation/test 분할

모델 평가가 정직하려면 데이터를 세 덩어리로 나눠야 한다. 각 셋의 역할이 다르다.

셋용도비율(예시)사용 횟수
Train모델 파라미터 학습70%매 epoch
Validation하이퍼파라미터 튜닝·모델 선택15%여러 번
Test최종 성능 1회 평가 (절대 학습에 안 씀)15%단 한 번

Test 셋은 마지막에 단 한 번만 본다. 테스트 결과를 보고 모델을 고치기 시작하면 테스트 셋이 사실상 검증 셋이 되어버려, 일반화 성능을 더는 정직하게 못 잰다.

from sklearn.model_selection import train_test_split
 
# 1차: train+val vs test / 2차: train vs val (불균형이면 stratify로 비율 유지)
X_temp, X_test, y_temp, y_test = train_test_split(
    X, y, test_size=0.15, stratify=y, random_state=42
)
X_train, X_val, y_train, y_val = train_test_split(
    X_temp, y_temp, test_size=0.176, stratify=y_temp, random_state=42
)

stratify=y는 분할 시 각 셋의 클래스 비율을 원본과 같게 유지하는 층화 분할(stratified split)이다. 불균형 데이터에서 무작위 분할하면 어떤 셋엔 소수 클래스가 거의 안 들어갈 수 있어, 반드시 층화한다.

데이터 성격별 분할 방식

데이터 성격분할 방식이유
일반 정형, 균형무작위 분할단순하고 충분
클래스 불균형층화 분할(stratify)각 셋의 클래스 비율 유지
시계열시간 분할(과거=train, 미래=test)미래로 과거를 예측하면 누수
그룹형(같은 사용자 여러 행)그룹 단위 분할같은 사용자가 흩어지면 성능 부풀려짐
데이터가 적음k-fold 교차검증분할 운에 따른 변동을 줄임
[시계열 올바른 분할]
  ──────── train ────────┤── val ──┤── test ──▶ 시간
                     (과거로 학습, 미래로 평가)

[시계열 잘못된 분할 — 무작위]
  ░█░░█░█░░█░█░█░░█░█░  ← 미래 조각이 train에 섞여 look-ahead bias 발생

시계열 데이터는 무작위 분할이 금물이다. 미래 데이터로 학습해 과거를 예측하는 미래 누수(look-ahead bias)가 생기기 때문이다. 시계열은 시점을 기준으로 "과거=train, 미래=test"로 나누는 시간 분할을 쓴다. 또 데이터가 적을 땐 단일 분할 대신 k-fold 교차검증으로 데이터를 k번 나눠 평균 성능을 본다.

누수를 만드는 순서 실수

이번 주 내내 반복되는 주제는 "순서를 틀리면 누수가 난다"이다.

잘못된 순서무슨 누수올바른 순서
전체에 스케일러 fit → 분할변환 누수분할 → train에만 fit
전체에 SMOTE → 분할합성 누수분할 → train에만 SMOTE
전체로 특성 선택 → 분할선택 누수분할 → train 기준으로 선택
미래 값을 특성에 사용미래 누수Event Time 기준 point-in-time
test로 모델을 계속 고침평가 누수test는 마지막 한 번만

⚠️ 함정: 이 다섯 가지는 모두 같은 증상을 낳는다 — 검증 성능은 훌륭한데 배포하면 무너진다. 시험에서 "오프라인 지표는 좋았는데 실서비스에서 성능이 나오지 않는다"는 지문이 나오면 거의 항상 누수 계열을 의심해야 한다.

편향은 어느 단계에서 다루나

편향 완화는 한 지점의 일이 아니다. 데이터·학습·예측 세 시점에서 각각 손댈 수 있고, 시험은 "어느 단계의 조치인가"를 구분시킨다.

시점무엇을 바꾸나예장단점
학습 전(pre-processing)데이터 자체리샘플링, 그룹별 표본 보강, 편향 유발 특성 제거근본적이지만 데이터 확보가 필요
학습 중(in-processing)학습 목표class weight, 공정성 제약을 손실에 반영데이터를 안 바꿔도 됨, 구현이 복잡
학습 후(post-processing)예측 결과그룹별 임계값 조정빠르게 적용, 근본 원인은 남음

Clarify는 이 중 학습 전 데이터 편향과 학습 후 예측 편향을 측정하는 역할을 한다. 측정과 완화는 다른 일이라는 점을 구분해야 한다.

편향 지표를 읽는 법

관측해석다음 행동
CI가 크다한 그룹의 표본이 현저히 적다데이터 보강, 층화 샘플링
DPL이 크다과거 결정이 한 그룹에 유리했다라벨 생성 과정 검토, 특성 재검토
학습 전은 균형인데 학습 후 편향모델·특성이 편향을 만들어냈다특성 기여도(SHAP) 확인
특정 특성의 SHAP이 민감 속성과 강한 연관대리 변수(proxy) 가능성해당 특성 제거 검토

민감 속성 컬럼을 데이터에서 지우면 공정해진다는 생각은 흔한 오해다. 우편번호·직업처럼 민감 속성과 강하게 연관된 대리 변수(proxy)가 남아 있으면 모델은 여전히 같은 편향을 학습한다. 지우는 것이 아니라 측정하고 검증하는 접근이 필요하다.

불균형·분할 순서 총정리

① 데이터 확보
   │
② 분할 (층화 / 시간 / 그룹)          ← 가장 먼저!
   │
   ├─ train ─→ ③ 변환기 fit  ─→ ④ 리샘플링(SMOTE 등)  ─→ ⑤ 학습
   │
   ├─ validation ─→ 변환기 transform만 ─→ 하이퍼파라미터 선택
   │
   └─ test ──────→ 변환기 transform만 ─→ 최종 1회 평가
이 순서를 어기면결과
②보다 ③이 먼저변환 누수
②보다 ④가 먼저합성 누수
test로 ⑤를 반복 조정평가 누수
시계열을 무작위로 ②미래 누수

평가 셋은 운영 분포를 반영해야 한다

  • 학습 셋은 균형을 맞춰도 되지만, 검증·테스트 셋은 실제 운영에서 만나는 불균형 그대로 두어야 한다.
  • 테스트 셋까지 균형을 맞추면 "사기가 절반인 세상"에서의 성능을 재는 셈이라 현실과 무관한 숫자가 나온다.
  • 임계값 결정도 운영 분포 위에서 해야 실제 정밀도·재현율이 예측대로 나온다.

다음 글에서는 이번 주 특성 공학과 데이터 품질 전체 — Data Wrangler, Feature Store, Clarify — 를 종합 복습하며 Week 3을 마무리한다.

📖 용어

  • SageMaker Clarify : 학습 전후로 데이터·예측의 편향을 측정하고 예측 근거를 설명해주는 도구.
  • 민감 속성(facet) : 성별·인종·나이처럼 공정성을 따져야 하는 컬럼. 편향 분석의 기준축이 된다.
  • CI(Class Imbalance) : 민감 속성 그룹 간 표본 수가 얼마나 치우쳤는지 재는 편향 지표.
  • DPL : 그룹 간 긍정 레이블 비율의 차이. 과거 결정이 한쪽에 유리했는지 보여준다.
  • SHAP : 각 특성이 예측에 기여한 몫을 게임이론적으로 공정하게 배분해 계산한 설명 지표.
  • 설명가능성(explainability) : 모델이 왜 그렇게 예측했는지 사람이 이해할 수 있게 만드는 성질.
  • 클래스 불균형 : 한 클래스가 극단적으로 적은 상태. 정확도 지표를 무의미하게 만든다.
  • 언더샘플링 / 오버샘플링 : 다수 클래스를 줄이기 / 소수 클래스를 늘리기.
  • SMOTE : 소수 클래스 표본 사이를 보간해 새 합성 샘플을 만드는 오버샘플링 기법.
  • class weight : 소수 클래스를 틀렸을 때 손실을 더 크게 매겨 모델이 신경 쓰게 하는 설정.

📝 연습 문제

선택지를 클릭하면 정답·해설이 펼쳐집니다.

문제 1

대출 승인 모델을 만들기 전에 데이터가 성별 그룹 간 균형 잡혀 있는지, 긍정 레이블 비율에 차이가 없는지 측정하려 한다. 적합한 도구와 단계는?

문제 2

사기 거래가 전체의 0.2%뿐인 불균형 데이터에서 소수 클래스의 합성 샘플을 보간으로 생성해 단순 복제보다 일반화를 높이려 한다. 적합한 기법은?

문제 3

불균형 데이터에 SMOTE를 적용하려 한다. 데이터 누수를 막기 위한 올바른 순서는?

문제 4

train/validation/test 분할에서 test 셋의 올바른 사용 원칙은?

문제 5

클래스가 심하게 불균형한 데이터를 train/test로 나눌 때, 각 셋이 원본의 클래스 비율을 유지하도록 분할하려 한다. 적합한 방법은?

이전SageMaker Feature Store: 특성을 자산으로 관리하기Week 3 · Day 3다음 Week 3 종합 — 특성 공학·데이터 품질 복습Week 3 · Day 5

참고 공식 자료

  • MLA-C01 공식 시험 안내(새 탭에서 열림)
  • Amazon SageMaker AI 공식 문서(새 탭에서 열림)

이 페이지

  • SageMaker Clarify: 편향 탐지와 설명가능성
  • 클래스 불균형 처리
  • train/validation/test 분할
  • 누수를 만드는 순서 실수
  • 편향은 어느 단계에서 다루나
  • 편향 지표를 읽는 법
  • 불균형·분할 순서 총정리
  • 평가 셋은 운영 분포를 반영해야 한다
  • 용어
  • 연습 문제