본문 바로가기
AI2026년 2월 20일6분 읽기

AI 윤리와 편향 — 공정한 모델을 만드는 기술적 접근

YS
김영삼
조회 299

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 360IBM70+ 공정성 지표, 다양한 완화 알고리즘
FairlearnMicrosoftsklearn 통합, 대시보드 시각화
What-If ToolGoogle대화형 시각화, TensorBoard 통합
Responsible AI ToolkitGoogle모델 카드, 데이터 카드 생성

실무 체크리스트

  • 데이터 수집 단계에서 대표성 검토 및 문서화
  • 민감 속성(성별, 인종, 연령 등)에 대한 교차 분석
  • 모델 성능을 전체 평균이 아닌 하위 그룹별로 평가
  • 편향 지표를 CI/CD 파이프라인에 통합하여 자동 검사
  • 모델 카드(Model Card) 작성으로 투명성 확보
  • 배포 후에도 지속적으로 편향 모니터링 및 재학습

댓글 0

아직 댓글이 없습니다.
Ctrl+Enter로 등록