AI 편향의 이해
AI 모델의 편향은 학습 데이터, 알고리즘, 평가 방법 등 다양한 단계에서 발생합니다. 공정한 AI를 만들기 위해서는 편향의 유형을 이해하고 체계적으로 대응해야 합니다.
편향의 주요 유형
- 데이터 편향: 학습 데이터가 특정 집단을 과대/과소 대표
- 선택 편향: 데이터 수집 과정에서 특정 표본만 선택
- 측정 편향: 대리 변수(proxy)가 실제 목표와 괴리
- 알고리즘 편향: 모델 구조나 최적화 방식에 의한 편향
- 확증 편향: 기존 패턴을 강화하는 피드백 루프
공정성 지표
import numpy as np
from sklearn.metrics import confusion_matrix
def demographic_parity(y_pred, sensitive_attr):
"""인구 통계적 동등성"""
groups = np.unique(sensitive_attr)
rates = {}
for group in groups:
mask = sensitive_attr == group
rates[group] = y_pred[mask].mean()
return rates
def equalized_odds(y_true, y_pred, sensitive_attr):
"""균등 기회"""
groups = np.unique(sensitive_attr)
metrics = {}
for group in groups:
mask = sensitive_attr == group
tn, fp, fn, tp = confusion_matrix(
y_true[mask], y_pred[mask]).ravel()
metrics[group] = {
'tpr': tp / (tp + fn) if (tp + fn) > 0 else 0,
'fpr': fp / (fp + tn) if (fp + tn) > 0 else 0
}
return metrics
def disparate_impact(y_pred, sensitive_attr, privileged=1):
"""차별적 영향"""
priv_mask = sensitive_attr == privileged
unpriv_mask = ~priv_mask
priv_rate = y_pred[priv_mask].mean()
unpriv_rate = y_pred[unpriv_mask].mean()
return unpriv_rate / priv_rate if priv_rate > 0 else 0
편향 완화 기법
# 전처리 기법: 리웨이팅(Reweighting)
from aif360.algorithms.preprocessing import Reweighing
rw = Reweighing(
unprivileged_groups=[{'gender': 0}],
privileged_groups=[{'gender': 1}]
)
dataset_reweighed = rw.fit_transform(dataset)
# 학습 중 기법: 적대적 편향 제거
class AdversarialDebiasing(nn.Module):
def __init__(self, input_dim, hidden_dim):
super().__init__()
self.classifier = nn.Sequential(
nn.Linear(input_dim, hidden_dim),
nn.ReLU(),
nn.Linear(hidden_dim, 1)
)
self.adversary = nn.Sequential(
nn.Linear(hidden_dim, hidden_dim // 2),
nn.ReLU(),
nn.Linear(hidden_dim // 2, 1)
)
def forward(self, x):
features = self.classifier[:-1](x)
pred = self.classifier[-1](features)
adv_pred = self.adversary(features.detach())
return pred, adv_pred
# 후처리 기법: 임계값 조정
def calibrated_threshold(y_prob, sensitive_attr, target_rate=0.5):
thresholds = {}
for group in np.unique(sensitive_attr):
mask = sensitive_attr == group
probs = np.sort(y_prob[mask])[::-1]
n_positive = int(len(probs) * target_rate)
thresholds[group] = probs[n_positive]
return thresholds
공정성 도구 비교
| 도구 | 개발사 | 주요 기능 |
|---|---|---|
| AI Fairness 360 | IBM | 70+ 공정성 지표, 다양한 완화 알고리즘 |
| Fairlearn | Microsoft | sklearn 통합, 대시보드 시각화 |
| What-If Tool | 대화형 시각화, TensorBoard 통합 | |
| Responsible AI Toolkit | 모델 카드, 데이터 카드 생성 |
실무 체크리스트
- 데이터 수집 단계에서 대표성 검토 및 문서화
- 민감 속성(성별, 인종, 연령 등)에 대한 교차 분석
- 모델 성능을 전체 평균이 아닌 하위 그룹별로 평가
- 편향 지표를 CI/CD 파이프라인에 통합하여 자동 검사
- 모델 카드(Model Card) 작성으로 투명성 확보
- 배포 후에도 지속적으로 편향 모니터링 및 재학습
댓글 0