Clarify는 학습 전·학습 후·운영 중 세 지점에 붙는다. 같은 편향 지표 엔진이 단계만 바꿔 재사용된다고 보면 된다.
① 학습 전 (데이터) ② 학습 후 (모델) ③ 운영 중 (엔드포인트) ───────────────── ───────────────── ────────────────────── 원본 데이터 편향 예측 편향 · SHAP Bias Drift Monitor CI · DPL · KL/JS ──▶ DPPL · DI · AD ──▶ Feature Attribution (라벨 분포를 본다) (예측 결과를 본다) Drift Monitor │ │ │ ▼ ▼ ▼ 샘플링·재수집 모델·임계치 조정 베이스라인 대비 이탈 감지 │ CloudWatch 지표 → 알람
왜 편향과 설명을 운영 중에도 봐야 할까? 학습 시점에 공정했던 모델도, 들어오는 데이터 분포가 바뀌면 특정 그룹에 불리해질 수 있다. 또 모델이 의존하는 피처의 중요도가 시간이 지나며 달라지면, 그것 자체가 모델 행동이 변했다는 경고 신호다. MLA-C01은 "책임 있는 AI(responsible AI)"와 모니터링을 엮어 이 부분을 묻는다.
설명가능성은 SHAP(SHapley Additive exPlanations) 값으로 계산한다. SHAP는 게임 이론에서 나온 개념으로, 각 피처가 예측값을 베이스라인에서 얼마나 밀어올리거나 끌어내렸는지를 공정하게 분배해 수치화한다.
💡 관련 이론: 편향 지표 중 시험에서 다루는 것은 사전(pre-training) 단계의 CI(Class Imbalance, 클래스 불균형), DPL(Difference in Positive Proportions in Labels)과 사후(post-training) 단계의 DPPL(예측에서의 양성 비율 차이), DI(Disparate Impact) 등이다. 핵심은 "학습 전 데이터 편향"과 "학습 후 모델 예측 편향"을 분리해서 본다는 점이다. Bias Drift Monitor는 사후 편향 지표가 운영 중 베이스라인 대비 얼마나 벌어지는지를 추적한다.
지표 이름을 전부 외울 필요는 없지만, "라벨을 보는 지표인가, 예측을 보는 지표인가" 그리고 "차(difference)인가 비(ratio)인가" 두 축은 구분해 두면 문제가 쉬워진다.
단계
지표
무엇을 비교
읽는 법
사전
CI (Class Imbalance)
그룹 간 표본 수 자체의 불균형
0에 가까울수록 균형
사전
DPL
그룹별 실제 라벨의 양성 비율 차이
0이면 라벨 분포가 대등
사전
KL / JS
그룹별 라벨 분포 간 거리
클수록 두 그룹 분포가 다름
사후
DPPL
그룹별 예측 양성 비율 차이
0이면 예측이 대등 · 라벨 불필요
사후
DI (Disparate Impact)
그룹별 예측 양성 비율의 비율
1이면 대등 · 라벨 불필요
사후
AD / RD
그룹별 정확도 / 재현율 차이
0이면 대등 · 정답 라벨 필요
같은 "사후 편향"이라도 라벨 요구가 갈린다. DPPL·DI는 예측만 있으면 계산되므로 운영 중 실시간 감시가 가능하다. 반면 AD·RD처럼 정확도·재현율을 그룹별로 비교하는 지표는 ground truth가 있어야 한다. Bias Drift Monitor가 "일부 라벨 불필요"로 분류되는 이유가 여기에 있다.
피처 기여도(Feature Attribution) 드리프트는 각 피처의 중요도 순위·크기가 베이스라인과 얼마나 달라졌는가를 본다. 결정적 장점은 정답 레이블이 필요 없다는 것이다. 모델이 어떤 피처에 의존하는지는 입력과 예측만으로 SHAP로 계산할 수 있기 때문이다.
예를 들어 신용 평가 모델이 학습 시에는 "소득"을 가장 중요하게 봤는데, 운영 중 갑자기 "우편번호"의 기여도가 치솟았다면, 정답을 모르더라도 "모델 행동이 바뀌었다"는 강력한 경고다.
베이스라인 SHAP 중요도 운영 중 SHAP 중요도 ──────────────────── ──────────────────── 소득 ████████ 0.41 소득 ███ 0.15 신용점수 █████ 0.27 우편번호 ███████ 0.34 ← 순위 역전 거래횟수 ███ 0.18 신용점수 ████ 0.22 우편번호 ██ 0.09 거래횟수 ███ 0.17 │ ▼ 중요도 "순위"가 얼마나 흐트러졌는지를 점수화 → 임계치 초과 시 위반
from sagemaker.model_monitor import ModelExplainabilityMonitorfrom sagemaker.clarify import SHAPConfig, ModelConfig, ExplainabilityAnalysisConfigexplainability_monitor = ModelExplainabilityMonitor( role=role, instance_count=1, instance_type="ml.m5.xlarge",)shap_config = SHAPConfig( baseline="s3://my-bucket/shap-baseline.csv", num_samples=100, agg_method="mean_abs", # 피처별 절대 SHAP 평균으로 중요도 집계)explainability_monitor.suggest_baseline( data_config=..., # 입력 데이터 구성 model_config=ModelConfig(model_name="my-model", instance_type="ml.m5.xlarge", instance_count=1), explainability_config=shap_config,)
baseline은 SHAP 계산의 기준점(참조 데이터). 이 기준 대비 각 피처가 예측을 얼마나 움직였는지를 잰다.
num_samples를 키우면 SHAP 추정이 안정되지만 Processing Job 시간과 비용이 함께 오른다.
agg_method="mean_abs"는 부호를 없앤 절대값 평균 — "방향 말고 영향력 크기"로 중요도를 매기겠다는 뜻이다.
피처 기여도 드리프트의 강점은 "조기 경보"에 있다. 모델 품질 모니터는 ground truth가 모일 때까지(며칠~몇 주) 기다려야 성능 저하를 확인할 수 있다. 반면 피처 기여도는 정답 없이 즉시 계산되므로, 성능이 실제로 떨어지기 전에 "모델이 다른 피처에 의존하기 시작했다"는 선행 신호를 준다. 라벨 수집이 느린 도메인에서 특히 가치 있다.
편향 드리프트 모니터는 운영 데이터에서 사후 편향 지표(예: DPPL, DI)를 주기적으로 재계산해, 학습 시점 베이스라인 대비 편향이 커졌는지 추적한다. 민감 속성(facet)과 양성 결과를 지정해야 한다.
from sagemaker.model_monitor import ModelBiasMonitorfrom sagemaker.clarify import BiasConfigbias_monitor = ModelBiasMonitor(role=role, instance_count=1, instance_type="ml.m5.xlarge")bias_config = BiasConfig( label_values_or_threshold=[1], # 양성(긍정) 결과 값 facet_name="gender", # 민감 속성(facet) facet_values_or_threshold=[0], # 비교 대상 그룹)
facet: 공정성을 따질 민감 속성 컬럼(성별·연령대·지역 등). 어떤 컬럼을 facet으로 볼지는 비즈니스·규제가 정한다. 기술적으로 자동 선택되지 않는다.
label_values_or_threshold: 무엇을 "유리한 결과"로 볼지. 대출 승인=1, 거절=0 같은 정의.
연속형 속성(예: 나이)은 임계값으로 그룹을 가른다.
편향 드리프트는 ground truth 없이 예측만으로 계산하는 지표(예: DPPL)도 있어, 운영 중 라벨이 없어도 일부 감시가 가능하다.
⚠️ 함정: "운영 중 특정 인구 그룹에 대한 모델의 공정성 변화를 감시"는 Bias Drift Monitor(Clarify), "운영 중 각 피처의 중요도 변화를 감시"는 Feature Attribution Drift Monitor(Clarify)다. 둘을 데이터 품질 모니터(단순 분포 통계)와 혼동하기 쉽다. 데이터 품질은 "피처 X의 평균이 변했다"를 잡고, 피처 기여도는 "피처 X가 예측에 미치는 영향이 변했다"를 잡는다 — 후자가 모델 행동에 더 직접적이다.