AI 의사결정 공정성 지표와 편향 완화 운영 전략
Demographic Parity, Equalized Odds, Equal Opportunity의 차이와 편향 평가·완화·모니터링 운영 방법을 정리한다.
2026-08-14 · 최초 발행 2024-04-29
모델의 판단을 공정성 기준으로 검토하는 이유
AI/ML 모델은 보호 속성(Protected Attribute)인 성별, 연령, 인종 등에 따라 특정 집단에 체계적인 불이익을 만들 수 있다. 공정성 평가는 이런 차이를 줄이는 데 목적이 있으며, 그룹 공정성(Group Fairness)과 개별 공정성(Individual Fairness) 중 여기서는 그룹 공정성을 다룬다.
Demographic Parity(DP, Statistical Parity)는 그룹별 긍정 예측 비율 P(Ŷ=1 | A=a)이 같아야 한다는 기준이다. 라벨 없이도 확인할 수 있고 적용이 단순한 편이지만, 집단 간 실제 양성 비율(Base rate)이 크게 다르면 왜곡될 수 있다.
Equalized Odds(EO)는 그룹별 TPR과 FPR을 동시에 균등하게 맞춘다. 오류율 관점의 형평성을 확보할 수 있지만, 라벨이 필요하고 구현도 복잡해진다.
Equal Opportunity(EOpp)는 EO에서 TPR만 같게 두는 완화된 조건이다. 거부 비용이 큰 긍정 사례를 우선해야 하는 분야에서 실용적일 수 있다.
데이터 진단부터 배포 이후 감시까지
공정성 평가는 학습 전 데이터와 라벨부터 살펴야 한다. 표본이 각 집단을 충분히 대표하는지, 레이블링 편향은 없는지, 희소집단의 크기는 어떤지를 확인한다. 데이터 드리프트나 라벨 시차(Delayed outcome)가 있으면 평가 주기와 윈도도 함께 관리해야 한다.
업무 위험도와 규제 환경에 따라 DP, EO, EOpp를 하나 또는 조합으로 선택한다. 허용 격차는 |DP diff| ≤ 0.1, |EO diff| ≤ 0.1처럼 둘 수 있으며, 유틸리티와 공정성 사이의 프런티어도 정의해야 한다.
운영 파이프라인에서는 그룹별 선택율, TPR/FPR, 정밀도·재현율을 분해해 리포트하고, 샘플 수 검정과 신뢰구간으로 통계적 유의성을 점검한다. 완화 수단은 사전(Pre), 학습 중(In), 사후(Post) 계층에서 조합할 수 있다.
변경관리와 감사 추적성을 확보하고, 기준에 미달한 모델은 릴리스 게이트에서 배포를 막는다. 배포 후에는 성능과 공정성을 함께 추적하며 위반을 감지했을 때 다시 완화 단계로 돌아가는 루프가 필요하다.
지표별 제약과 운영상 차이
| 항목 | Demographic Parity (DP) | Equalized Odds (EO) | Equal Opportunity (EOpp) |
|---|---|---|---|
| 성능 영향 | 중간~높음, Base rate 차이 클수록 정확도 손실 가능 | 중간, 오류율 균형으로 합리적 트레이드오프 | 낮음~중간, 긍정 사례 중심 분야에 적합 |
| 확장성 | 높음, 라벨 불필요, 대규모 배치 용이 | 보통, 라벨 필요, 다소 계산 증가 | 높음, 부분 제약으로 적용 용이 |
| 일관성 | 라벨 시프트에 취약 | Base rate 변화에도 상대적 일관성 우수 | EO 대비 간결, 목적 정합성 높음 |
| 안정성 | 임계값 민감성 높음 | 임계값·모델 변경에 비교적 안정 | 중간, 임계값 설정 용이 |
| 운영 편의 | 구현 단순, 해석 용이 | 구현 복잡, 해석·커뮤니케이션 비용 상승 | 중간, 규제·현업 수용성 높음 |
도메인별로 달라지는 선택 기준
신용평가와 대출에서는 연령·성별 그룹 간 승인율 또는 오류율의 균등화가 목표가 된다. 승인 거절의 비용과 규제를 고려해 EO 또는 EOpp를 우선할 수 있다.
채용과 입사지원 선별에서는 초기 스크리닝에 DP를 적용하고, 이후 단계에서 EO를 보완하는 접근이 가능하다. 현행 시스템의 변경을 최소화하려면 Post-processing 기반의 Threshold 조정을 검토할 수 있다.
보험 언더라이팅과 리스크 가격에서는 가격·승인 결정의 EO 기반 형평성이 대상이다. Exponentiated Gradient를 이용한 In-processing은 모델과 제약을 함께 최적화하는 방식이다.
의료 진단 지원에서는 민감 집단의 미검출, 즉 낮은 TPR을 줄이는 일이 핵심이 될 수 있다. EOpp를 중심으로 두고 임상 안전성을 우선하며 보수적으로 임계값을 설정한다.
Fairlearn으로 평가 결과 만들기
이항 분류 환경에서 이산형 보호 속성 A를 사용하고, 학습 데이터와 평가 데이터가 분리되어 있다고 가정한다. 환경은 Python 3.10+, scikit-learn 1.3+, fairlearn 0.10+이며 설치 명령은 pip install scikit-learn fairlearn이다.
# Python 3.10+, scikit-learn 1.3+, fairlearn 0.10+
from sklearn.metrics import accuracy_score
from fairlearn.metrics import (
MetricFrame, selection_rate, true_positive_rate, false_positive_rate,
demographic_parity_difference, equalized_odds_difference
)
# y_true: 실제 라벨(0/1), y_pred: 예측(0/1), A: 보호 속성 벡터(예: 0/1)
def fairness_report(y_true, y_pred, A):
mf = MetricFrame(
metrics={
"selection_rate": selection_rate,
"TPR": true_positive_rate,
"FPR": false_positive_rate
},
y_true=y_true,
y_pred=y_pred,
sensitive_features=A
)
dp_diff = demographic_parity_difference(y_true, y_pred, sensitive_features=A)
eo_diff = equalized_odds_difference(y_true, y_pred, sensitive_features=A)
acc = accuracy_score(y_true, y_pred)
return {
"accuracy_overall": acc,
"by_group": mf.by_group.to_dict(),
"DP_difference": dp_diff,
"EO_difference": eo_diff
}
# 사용 예
# report = fairness_report(y_true, y_pred, A)
# print(report)
운영 기준 예시로 |DP_difference| ≤ 0.1, |EO_difference| ≤ 0.1을 유지할 수 있다.
학습 단계에서 EO 제약을 적용하는 방법
In-processing은 학습 시점에 모델과 공정성 제약을 함께 최적화한다. 명시적인 공정성 보장을 제공하지만 학습 시간이 늘어나고 해석이 복잡해질 수 있다.
from sklearn.linear_model import LogisticRegression
from fairlearn.reductions import ExponentiatedGradient, DemographicParity, EqualizedOdds
# X_train, y_train, A_train 준비 가정
base_est = LogisticRegression(max_iter=1000, n_jobs=-1)
constraint = EqualizedOdds() # 또는 DemographicParity()
mitigator = ExponentiatedGradient(estimator=base_est, constraints=constraint)
mitigator.fit(X_train, y_train, sensitive_features=A_train)
y_pred_mitigated = mitigator.predict(X_test)
# 사후 평가
# fairness_report(y_test, y_pred_mitigated, A_test)
기존 모델 뒤에 임계값 보정을 붙이는 방법
Post-processing은 이미 학습된 모델을 교체하지 않고 적용할 수 있다. 대신 그룹별 임계값을 관리해야 하며, 온라인 서빙에서는 구현상 주의가 필요하다.
from sklearn.linear_model import LogisticRegression
from fairlearn.postprocessing import ThresholdOptimizer
# 확률 출력 가능한 추정기 학습
clf = LogisticRegression(max_iter=1000).fit(X_train, y_train)
# EO 또는 DP 제약 선택
postproc = ThresholdOptimizer(
estimator=clf,
constraints="equalized_odds", # 또는 "demographic_parity"
predict_method="predict_proba"
)
postproc.fit(X_train, y_train, sensitive_features=A_train)
y_pred_post = postproc.predict(X_test, sensitive_features=A_test)
# 사후 평가
# fairness_report(y_test, y_pred_post, A_test)
공정성 제약을 운영 지표로 연결하기
규제·감사 대응에서는 EO/DP 격차 ≤ 0.1 같은 기준의 충족률을 높이고, 감사 대응 시간을 30~50% 단축하는 효과를 기대할 수 있다.
비즈니스 관점에서는 공정성 제약 아래 정확도 손실을 ≤ 1~3% 범위에서 관리하고, 민감 집단의 TPR 격차를 20~60% 개선할 수 있다. 운영 측면에서는 드리프트 감지를 바탕으로 재튜닝 주기를 만들고 SLA 기반 배포 게이팅을 정착시킨다. 경고와 차단 레벨을 나누면 사고율 감소에도 활용할 수 있다.
의료·안전 분야는 EOpp를, 금융 리스크는 EO를 우선하는 방식처럼 업무 손실함수와 공정성 지표의 정합성을 먼저 확인해야 한다. 정확도-공정성 프런티어 곡선을 만든 뒤 경영층 승인 하에 임계값을 선택하고, 그룹 우선순위와 리프트 기준을 정해 투명성을 확보한다.
보호 속성의 합법적 수집·활용 여부와 대리 변수(Proxy)도 검토 대상이다. 라벨 지연과 노이즈를 보정하고, 표본이 부족할 때는 신뢰구간 보고를 의무화한다. Post-processing을 쓰는 경우에는 그룹 식별 필요성에 따른 개인정보·보안 검토와, 온라인 추론에서 그룹이 확정되지 않은 경우의 기본 임계값 폴백이 필요하다.
DP, EO, EOpp는 어느 하나가 항상 우선하는 기준이 아니다. 초기에는 Post-processing으로 위험을 줄이고, 중장기적으로는 In-processing으로 구조적 개선을 추진할 수 있다.