Measuring fairness is fundamental to detecting and mitigating bias in AI systems. This chapter explores the mathematical foundations of fairness metrics, their applications, limitations, and practical implementation.
Before we can address bias, we must be able to measure it. Fairness metrics provide quantitative ways to assess whether an AI system treats different groups equitably. However, fairness is not a single monolithic concept—there are multiple, sometimes competing definitions of what constitutes fair treatment.
Research has shown that except in trivial cases, it is mathematically impossible to satisfy all fairness criteria simultaneously. This means practitioners must make informed choices about which fairness definitions are most appropriate for their specific context and use case.
Group fairness metrics compare outcomes across different demographic groups. These metrics typically focus on ensuring statistical parity or equal treatment between groups defined by protected attributes.
Demographic parity requires that the proportion of positive predictions is equal across all groups. In other words, the decision should be independent of the protected attribute.
Where Ŷ is the prediction and A is the protected attribute (e.g., race, gender).
# Implementation of Demographic Parity
import numpy as np
def demographic_parity(y_pred, protected_attribute):
"""
Calculate demographic parity metric
Returns ratio of minimum to maximum positive rate
"""
groups = np.unique(protected_attribute)
positive_rates = {}
for group in groups:
mask = protected_attribute == group
positive_rate = np.mean(y_pred[mask])
positive_rates[group] = positive_rate
print(f"Group {group}: {positive_rate:.3f}")
rates = list(positive_rates.values())
parity_ratio = min(rates) / max(rates) if max(rates) > 0 else 1.0
print(f"\nDemographic Parity Ratio: {parity_ratio:.3f}")
print(f"Status: {'PASS' if parity_ratio >= 0.8 else 'FAIL'}")
return parity_ratio, positive_rates
# Example usage
y_pred = np.array([1, 1, 0, 1, 0, 1, 0, 0, 1, 1])
protected = np.array(['A', 'A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', 'B'])
ratio, rates = demographic_parity(y_pred, protected)
Advantages:
Limitations:
Equalized odds requires that both true positive rate (TPR) and false positive rate (FPR) are equal across groups. This ensures that the model's errors are distributed equally.
# Implementation of Equalized Odds
def equalized_odds(y_true, y_pred, protected_attribute):
"""
Calculate True Positive Rate and False Positive Rate
for each group to assess equalized odds
"""
groups = np.unique(protected_attribute)
results = {}
for group in groups:
mask = protected_attribute == group
# True Positive Rate
tp = np.sum((y_true[mask] == 1) & (y_pred[mask] == 1))
fn = np.sum((y_true[mask] == 1) & (y_pred[mask] == 0))
tpr = tp / (tp + fn) if (tp + fn) > 0 else 0
# False Positive Rate
fp = np.sum((y_true[mask] == 0) & (y_pred[mask] == 1))
tn = np.sum((y_true[mask] == 0) & (y_pred[mask] == 0))
fpr = fp / (fp + tn) if (fp + tn) > 0 else 0
results[group] = {'tpr': tpr, 'fpr': fpr}
print(f"Group {group}:")
print(f" TPR: {tpr:.3f}, FPR: {fpr:.3f}")
# Check disparities
tprs = [r['tpr'] for r in results.values()]
fprs = [r['fpr'] for r in results.values()]
tpr_disparity = max(tprs) - min(tprs)
fpr_disparity = max(fprs) - min(fprs)
print(f"\nTPR Disparity: {tpr_disparity:.3f}")
print(f"FPR Disparity: {fpr_disparity:.3f}")
print(f"Status: {'PASS' if (tpr_disparity < 0.1 and fpr_disparity < 0.1) else 'FAIL'}")
return results
# Example usage
y_true = np.array([1, 1, 0, 1, 0, 0, 1, 0, 1, 0])
y_pred = np.array([1, 1, 0, 1, 0, 1, 1, 0, 0, 0])
protected = np.array(['A', 'A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', 'B'])
results = equalized_odds(y_true, y_pred, protected)
Advantages:
Limitations:
Equal opportunity is a relaxed version of equalized odds that only requires equal true positive rates across groups. This is particularly relevant when false negatives are more harmful than false positives.
# Implementation of Equal Opportunity
def equal_opportunity(y_true, y_pred, protected_attribute):
"""
Calculate True Positive Rate for each group
"""
groups = np.unique(protected_attribute)
tprs = {}
for group in groups:
mask = protected_attribute == group
positives = y_true[mask] == 1
if positives.sum() == 0:
tprs[group] = None
print(f"Group {group}: No positive samples")
continue
tp = np.sum((y_true[mask] == 1) & (y_pred[mask] == 1))
tpr = tp / positives.sum()
tprs[group] = tpr
print(f"Group {group} TPR: {tpr:.3f}")
# Calculate disparity
valid_tprs = [t for t in tprs.values() if t is not None]
if len(valid_tprs) > 1:
disparity = max(valid_tprs) - min(valid_tprs)
print(f"\nTPR Disparity: {disparity:.3f}")
print(f"Status: {'PASS' if disparity < 0.1 else 'FAIL'}")
return tprs
Predictive parity requires that precision (positive predictive value) is equal across groups. This ensures that a positive prediction has the same meaning regardless of group membership.
# Implementation of Predictive Parity
def predictive_parity(y_true, y_pred, protected_attribute):
"""
Calculate Precision (PPV) for each group
"""
groups = np.unique(protected_attribute)
precisions = {}
for group in groups:
mask = protected_attribute == group
predicted_positive = y_pred[mask] == 1
if predicted_positive.sum() == 0:
precisions[group] = None
continue
tp = np.sum((y_true[mask] == 1) & (y_pred[mask] == 1))
precision = tp / predicted_positive.sum()
precisions[group] = precision
print(f"Group {group} Precision: {precision:.3f}")
# Check disparity
valid_prec = [p for p in precisions.values() if p is not None]
if len(valid_prec) > 1:
disparity = max(valid_prec) - min(valid_prec)
print(f"\nPrecision Disparity: {disparity:.3f}")
print(f"Status: {'PASS' if disparity < 0.1 else 'FAIL'}")
return precisions
Individual fairness takes a different approach from group fairness. Instead of comparing groups, it requires that similar individuals receive similar predictions.
The principle of individual fairness states: "Similar individuals should be treated similarly." The challenge lies in defining what constitutes "similarity" in a way that is both meaningful and doesn't encode bias.
# Example: Individual Fairness Check
from sklearn.metrics.pairwise import cosine_similarity
def check_individual_fairness(X, y_pred, threshold=0.9):
"""
Check if similar individuals receive similar predictions
"""
# Calculate pairwise similarity
similarities = cosine_similarity(X)
fairness_violations = 0
total_pairs = 0
for i in range(len(X)):
for j in range(i + 1, len(X)):
if similarities[i, j] > threshold:
total_pairs += 1
if y_pred[i] != y_pred[j]:
fairness_violations += 1
violation_rate = fairness_violations / total_pairs if total_pairs > 0 else 0
print(f"Similar pairs: {total_pairs}")
print(f"Fairness violations: {fairness_violations}")
print(f"Violation rate: {violation_rate:.3f}")
return violation_rate
Disparate impact (also known as adverse impact) is a legal concept used to assess discrimination. The "80% rule" or "four-fifths rule" is commonly used as a threshold.
A ratio below 0.8 (80%) is often considered evidence of disparate impact.
# Disparate Impact Calculation
def disparate_impact(y_pred, protected_attribute, reference_group):
"""
Calculate disparate impact ratio
Reference group is typically the majority or advantaged group
"""
groups = np.unique(protected_attribute)
selection_rates = {}
for group in groups:
mask = protected_attribute == group
selection_rate = np.mean(y_pred[mask])
selection_rates[group] = selection_rate
reference_rate = selection_rates[reference_group]
print("Selection Rates:")
for group, rate in selection_rates.items():
di_ratio = rate / reference_rate if reference_rate > 0 else 0
status = "PASS" if di_ratio >= 0.8 else "FAIL"
print(f" {group}: {rate:.3f} (DI Ratio: {di_ratio:.3f}) [{status}]")
return selection_rates
# Example
y_pred = np.array([1, 1, 1, 1, 0, 1, 0, 0, 1, 0])
protected = np.array(['majority', 'majority', 'majority', 'majority', 'majority',
'protected', 'protected', 'protected', 'protected', 'protected'])
rates = disparate_impact(y_pred, protected, 'majority')
For models that output probability scores rather than hard classifications, calibration is an important fairness consideration.
A model is calibrated if predictions reflect true probabilities. Group calibration requires this to hold separately for each demographic group.
# Check Calibration by Group
def calibration_by_group(y_true, y_score, protected_attribute, n_bins=10):
"""
Assess calibration separately for each group
"""
from sklearn.calibration import calibration_curve
import matplotlib.pyplot as plt
groups = np.unique(protected_attribute)
for group in groups:
mask = protected_attribute == group
prob_true, prob_pred = calibration_curve(
y_true[mask],
y_score[mask],
n_bins=n_bins,
strategy='uniform'
)
print(f"\nGroup {group} Calibration:")
for i, (true_p, pred_p) in enumerate(zip(prob_true, prob_pred)):
print(f" Bin {i+1}: Predicted={pred_p:.3f}, Actual={true_p:.3f}")
return True
Selecting appropriate fairness metrics depends on your application domain, legal requirements, and ethical considerations:
| Application | Recommended Metrics | Rationale |
|---|---|---|
| Criminal Justice | Equalized Odds, Equal Opportunity | Both false positives and false negatives have serious consequences |
| Lending/Credit | Disparate Impact, Demographic Parity | Legal compliance (ECOA), equal access requirements |
| Hiring | Disparate Impact, Equal Opportunity | Legal compliance (EEOC), focus on qualified candidates |
| Healthcare | Equal Opportunity, Calibration | Minimize missed diagnoses, reliable risk scores |
| Content Recommendation | Demographic Parity, Individual Fairness | Equal exposure, personalized treatment |
In practice, you should evaluate multiple fairness metrics to get a complete picture:
# Comprehensive Fairness Report
def fairness_report(y_true, y_pred, protected_attribute):
"""
Generate comprehensive fairness assessment
"""
print("=" * 60)
print("FAIRNESS ASSESSMENT REPORT")
print("=" * 60)
# 1. Demographic Parity
print("\n1. DEMOGRAPHIC PARITY")
print("-" * 60)
dp_ratio, _ = demographic_parity(y_pred, protected_attribute)
# 2. Equalized Odds
print("\n2. EQUALIZED ODDS")
print("-" * 60)
eo_results = equalized_odds(y_true, y_pred, protected_attribute)
# 3. Equal Opportunity
print("\n3. EQUAL OPPORTUNITY")
print("-" * 60)
eop_results = equal_opportunity(y_true, y_pred, protected_attribute)
# 4. Predictive Parity
print("\n4. PREDICTIVE PARITY")
print("-" * 60)
pp_results = predictive_parity(y_true, y_pred, protected_attribute)
# Summary
print("\n" + "=" * 60)
print("SUMMARY")
print("=" * 60)
print("Review all metrics above to make informed fairness assessment.")
print("Remember: Different metrics may conflict. Choose based on your")
print("specific use case and stakeholder values.")
print("\n弘益人間 - Ensure your AI benefits all humanity equitably")
print("=" * 60)
return {
'demographic_parity': dp_ratio,
'equalized_odds': eo_results,
'equal_opportunity': eop_results,
'predictive_parity': pp_results
}
Korea operates its industrial ecosystem and standardization system through the following core infrastructure. Korea Top 5 Groups: Samsung, Hyundai Motor, LG, SK, Lotte. Each group operates standardization committees and ISO/IEC TC Korean secretariats. Samsung Electronics (semiconductors, displays, home appliances, telecom)·Hyundai Motor (automobiles, mobility)·LG Electronics (home appliances, displays, OLED)·SK hynix (memory)·LG Energy Solution·Samsung SDI (batteries)·POSCO Future M (materials)·Hyundai Mobis (parts). Korean IT Big Tech: NAVER (search, cloud, AI HyperCLOVA)·Kakao (messenger, payment, mobility, banking)·Coupang (e-commerce, logistics)·Karrot Market·Toss·Woowa Brothers. Korea Telcos: SK Telecom·KT·LG U+. 5G·5G dedicated networks·B2B cloud·AI businesses operating. Korea Top 7 Research Universities: Seoul National University·KAIST·POSTECH·Yonsei University·Korea University·UNIST·DGIST·GIST. All serve as standardization R&D bases and ISO/IEC/IEEE Korean chairs. Korea Government-affiliated National Research Institutes (26): KIST, KAERI, KIMM, KIER, KFRI, KRICT, KRIBB, KARI, KASI, KIGAM, KICT, KISTI, KETI, ETRI, NIMS, KIMS, KISDI, KOTRA, STEPI, KOEN, KICCE, KIET, KIPF, KIHASA, KICJ, KLRI. Korea Industrial Complexes / Tech Valleys: Pangyo Techno Valley·Dongtan·Gwanggyo·Songdo IBD·Yeouido·Gangnam·Sihwa·Banwol·Gumi·Ulsan·Changwon·Geoje·Yeosu·Onsan·Cheongju·Iksan·Gwangyang·POSCO Gwangyang Steel Mill·Asan Bay·Seosan·Songdo·Incheon Airport·Sejong·Cheongna·Geomdan. Korea Trade and Finance Infrastructure: Korea International Trade Association (KITA)·Korea Trade-Investment Promotion Agency (KOTRA)·Export-Import Bank of Korea (KEXIM)·Bank of Korea·Kookmin Bank·Shinhan·Hana·Woori·NH Nonghyup·IBK Industrial Bank·SC First Bank·Citi Bank Korea·HSBC Korea·DBS Korea — 14 Korean major banks and foreign banks. Korea K-POP / K-Content: HYBE·SM·YG·JYP 4 major entertainment companies·CJ ENM·tvN·MBC·KBS·SBS·EBS·YTN·Yonhap News TV·JTBC Korean broadcasting·NETFLIX Korea·Disney Plus·TVING·Wavve·Watcha·Coupang Play. Korea Gaming Industry: Nexon·NCsoft·Krafton·Netmarble·Kakao Games·Pearl Abyss·Com2uS·Gamevil·NHN·Smilegate·Webzen. Korea Automotive / Battery: Hyundai Motor·Kia·Genesis·LG Energy Solution·Samsung SDI·SK On·POSCO Future M·EcoPro·L&F battery cathode material suppliers. Korea Semiconductor: Samsung Electronics (HBM3E·HBM4)·SK hynix (HBM3E 12-Hi)·DB HiTek·SK siltron·SK Enpulse·Dongjin Semichem·Seoul Semiconductor·Simmtech·Samsung Display·LG Display.
Korea operates a comprehensive standards governance system through inter-ministerial cooperation. National Standards Council (under Prime Minister's Office, per Framework Act on National Standards Article 5) coordinates KATS (Korean Agency for Technology and Standards), MFDS (Ministry of Food and Drug Safety), MOTIE (Ministry of Trade, Industry and Energy), MSIT (Ministry of Science and ICT), MOIS (Ministry of the Interior and Safety), MOE (Ministry of Environment), MOHW (Ministry of Health and Welfare), MND (Ministry of National Defense), MCST (Ministry of Culture, Sports and Tourism), MOFA (Ministry of Foreign Affairs), MOJ (Ministry of Justice), and FSC (Financial Services Commission). Accreditation and Testing: KOLAS (Korea Laboratory Accreditation Scheme) accredits 800+ testing laboratories. KAS (Korea Accreditation System) accredits 50+ certification bodies. KTC (Korea Testing Certification), KTR (Korea Testing & Research Institute), KTL (Korea Testing Laboratory), and KCL (Korea Conformity Laboratories) provide conformance testing. Telecom and Cyber: KCC (Korea Communications Commission), KCA (Korea Communications Agency), TTA (Telecommunications Technology Association), IITP (Institute for Information & Communications Technology Planning & Evaluation), NIPA (National IT Industry Promotion Agency), KISA (Korea Internet & Security Agency), KCMVP (Korea Cryptographic Module Validation Program), NIS (National Intelligence Service), NSR (National Security Research Institute), and NCSC (National Cyber Security Center). National R&D Centers: KIST, ETRI, KAIST, Seoul National University, Yonsei University, Korea University, POSTECH, UNIST, GIST, DGIST, KISTI, KIER, KIMM, KRICT, KFRI, KRIBB. International Standards Cooperation: ISO TC/SC Korean secretariats, IEC TC/SC Korean secretariats, ITU-T Study Group Korean chairs, 3GPP RAN/SA Korean chairs, IEEE 802 Korean chairs, W3C Korea office, OASIS Korea office, IETF Korea cooperation, OECD CSTP, UN ESCAP, APEC SCSC Korean cooperation. Korean Industrial Standards (KS) Catalog: KS X (Information) 25,000+, KS A (Basic) 15,000+, KS B (Machinery) 25,000+, KS C (Electrical) 18,000+, KS D (Metallurgy) 12,000+, KS E (Mining) 5,000+, KS F (Construction) 18,000+, KS H (Food) 8,000+, KS I (Environment) 5,000+, KS J (Biology) 3,000+, KS K (Textile) 15,000+, KS L (Ceramics) 7,000+, KS M (Chemistry) 12,000+, KS P (Medical) 5,000+, KS Q (Quality Mgmt) 4,000+, KS R (Transport) 12,000+, KS S (Service) 3,000+, KS T (Packaging) 4,000+, KS V (Shipbuilding) 5,000+, KS W (Aerospace) 3,000+ — totaling 220,000+ Korean Industrial Standards. Key Acts: Personal Information Protection Act (Act 19234, effective Sept 15, 2024), Electronic Government Act, Electronic Signature Act, Act on Promotion of Information and Communications Network Utilization and Information Protection, Information and Communications Infrastructure Protection Act, Data Industry Act, Public Data Act, AI Framework Act (Act 20212, effective July 2026), Industrial Technology Innovation Promotion Act, Framework Act on Science and Technology — 70+ Korean standardization-related laws.
Korea operates digital transformation through a comprehensive governance system. Digital Government: Digital Platform Government Committee (established September 2022, under the President)·Ministry of the Interior and Safety Digital Government Bureau·e-Government Support Center·Gov.kr·National Citizen Service·KDIS (Korea Digital Information Society)·NIA (National Information Society Agency)·MOIS (Ministry of the Interior and Safety). K-DNS Infrastructure: Korea Internet & Security Agency (KISA) Korea Internet Center·KISA DNS Root Server·KRNIC (Korea Network Information Center)·BGP Korea·National Cyber Security Center (NCSC)·KCC (Korea Communications Commission)·MSIT (Ministry of Science and ICT)·NIA·NIPA. Korean Cloud Infrastructure: KT Cloud·NAVER Cloud (NCloud)·Samsung SDS Cloud·LG U+ Cloud·NHN Cloud·Kakao Enterprise Cloud·SK Telecom Cloud·KISA Cloud Security Assurance Program (CSAP)·KCMVP-validated cloud·ISMS-P (Information Security & Personal Information Management System). Korean Security Certifications: KISA ISMS-P certification·KCMVP (Korean Cryptographic Module Validation Program)·NIS (National Intelligence Service) "National Cryptographic Technology Operation Standards"·NCSC "National Cyber Security Strategy 2024-2028"·CC (Common Criteria) Korean evaluation bodies·EAL4·EAL5·KS X ISO/IEC 15408·19790·24759 Korean Profile. Korean Data Standards: NIA AI Hub·National Data Standardization Committee·Statistics Korea (KOSTAT)·MyData 4 Designated Combination Specialists (Samsung SDS, KICI, KOSTAT, KFTC)·National Institute of Korean Language·National Law Information Center·National Spatial Information Platform·National Spatial Data Center·Korean Spatial Information Standards. Finance and Fintech Standards: FSC (Financial Services Commission)·FSS (Financial Supervisory Service)·FIU (Financial Intelligence Unit)·BOK (Bank of Korea)·FSEC (Financial Security Institute)·KFTC (Korea Financial Telecommunications)·KSD (Korea Securities Depository)·KRX (Korea Exchange) 8-agency cooperation. 5G/6G Communications Infrastructure: 5G subscribers 35 million (2024)·5G base stations 350,000·6G commercialization target 2028·5G dedicated networks 16 operators·6G Acceleration Council (MSIT, 2024). K-Content: KOCCA (Korea Creative Content Agency)·MCST (Ministry of Culture, Sports and Tourism)·KCA (Korea Communications Agency)·Korea Culture Information Service Agency·Korean Film Archive·Korea Publishing Industry Promotion Agency. Data 3 Acts (Personal Information Protection Act·Credit Information Act·Telecommunications Network Act, 2020 enforcement)·Data Industry Act (2021)·Public Data Act (2013)·AI Framework Act (2026)·Digital Platform Government Framework Act (2024 proposed) — Korea digital transformation core legislation.