Machine Learning Academy · บทเรียน

ตัวชี้วัดความเป็นธรรม: ความเสมอภาคทางประชากรและโอกาสที่เท่าเทียม

ผู้เรียนจะวัดความแตกต่างด้านความเสมอภาคทางประชากรและความแตกต่างด้านโอกาสที่เท่าเทียมในโมเดลอนุมัติสินเชื่อ และระบุว่าโมเดลทำให้กลุ่มที่ได้รับการคุ้มครองเสียเปรียบหรือไม่

บทเรียน 3 จาก 413 ขั้นตอน

ตัวชี้วัดความเป็นธรรม: ความเสมอภาคทางประชากรและโอกาสที่เท่าเทียม เป็นบทเรียน Machine Learning Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Machine Learning Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Machine Learning Academy มีบทเรียนทั้งหมด 4 บทเรียน

เหตุใดความเป็นธรรมในการเรียนรู้ของเครื่องจึงสำคัญ

โมเดลการเรียนรู้ของเครื่องที่ฝึกด้วยข้อมูลในอดีตอาจสืบทอดและขยายอคติที่มีอยู่ในสังคม โมเดลอนุมัติสินเชื่อที่ฝึกจากการอนุมัติในอดีตอาจปฏิเสธสินเชื่อแก่กลุ่มที่ได้รับการคุ้มครองอย่างเป็นระบบ ไม่ใช่เพราะความน่าเชื่อถือด้านสินเชื่อ แต่เพราะรูปแบบการเลือกปฏิบัติในอดีตที่อยู่ในข้อมูลฝึก เมตริกความเป็นธรรมใช้วัดระดับที่โมเดลปฏิบัติต่อกลุ่มประชากรที่แตกต่างกันไม่เหมือนกัน ช่วยให้ผู้ตรวจสอบและวิศวกรตรวจพบและแก้ไขพฤติกรรมการเลือกปฏิบัติได้

คุณลักษณะและกลุ่มที่ได้รับการคุ้มครอง

คุณลักษณะที่ได้รับการคุ้มครองคือคุณลักษณะด้านประชากรศาสตร์ที่ไม่ควรมีอิทธิพลต่อการตัดสินใจที่มีผลกระทบสูง โดยทั่วไปได้แก่ เชื้อชาติ เพศ อายุ ศาสนา หรือสถานะความพิการ กลุ่มที่ได้รับการคุ้มครองคือกลุ่มย่อยของตัวอย่างที่มีค่าของคุณลักษณะนั้นร่วมกัน (เช่น ผู้สมัครเพศหญิง) การวิเคราะห์ความเป็นธรรมจะเปรียบเทียบผลลัพธ์ของโมเดลระหว่างกลุ่มเหล่านี้ แม้จะนำคุณลักษณะที่ได้รับการคุ้มครองออกจากชุดคุณลักษณะแล้ว คุณลักษณะตัวแทน (เช่น รหัสไปรษณีย์) ก็ยังอาจเข้ารหัสคุณลักษณะนั้นไว้ได้

import pandas as pd
import numpy as np

# Toy loan dataset
np.random.seed(42)
df = pd.DataFrame({
    'income': np.random.normal(50000, 15000, 1000),
    'credit_score': np.random.normal(650, 80, 1000),
    'gender': np.random.choice(['M', 'F'], 1000),
    'approved': np.random.choice([0, 1], 1000, p=[0.4, 0.6])
})

# Simulate a biased approval: female applicants approved 10% less
df.loc[df['gender'] == 'F', 'approved'] = (
    df.loc[df['gender'] == 'F', 'approved'] * 0.85
).round().astype(int).clip(0, 1)
print(df.groupby('gender')['approved'].mean())

ความเท่าเทียมทางประชากรศาสตร์

ความเท่าเทียมทางประชากรศาสตร์ (เรียกอีกอย่างว่าความเท่าเทียมทางสถิติ) กำหนดให้สัดส่วนของการทำนายเชิงบวกเท่ากันในทุกกลุ่มประชากร หากโมเดลอนุมัติผู้สมัครชาย 70% แต่อนุมัติผู้สมัครหญิงเพียง 55% แสดงว่าละเมิดความเท่าเทียมทางประชากรศาสตร์ ผลต่างความเท่าเทียมทางประชากรศาสตร์คือช่องว่างสัมบูรณ์ระหว่างอัตราการทำนายเชิงบวกของกลุ่มต่าง ๆ โดยค่าเป็นศูนย์หมายถึงมีความเท่าเทียมอย่างสมบูรณ์

from sklearn.linear_model import LogisticRegression
from sklearn.preprocessing import StandardScaler

features = ['income', 'credit_score']
X = df[features].values
y = df['approved'].values
g = df['gender'].values

scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

model = LogisticRegression()
model.fit(X_scaled, y)
y_pred = model.predict(X_scaled)

# Demographic parity difference
rate_M = y_pred[g == 'M'].mean()
rate_F = y_pred[g == 'F'].mean()
print(f'Approval rate M: {rate_M:.3f}')
print(f'Approval rate F: {rate_F:.3f}')
print(f'Demographic parity difference: {abs(rate_M - rate_F):.3f}')

โอกาสที่เท่าเทียมกัน

โอกาสที่เท่าเทียมกันกำหนดให้อัตราผลบวกที่แท้จริง (การเรียกคืน)เท่ากันในทุกกลุ่ม กล่าวคือ ผู้สมัครที่มีคุณสมบัติเหมาะสมจากทุกกลุ่มควรมีโอกาสได้รับการอนุมัติอย่างถูกต้องเท่ากัน ซึ่งแตกต่างจากความเท่าเทียมทางประชากรศาสตร์ เพราะโอกาสที่เท่าเทียมกันพิจารณาเงื่อนไขจากป้ายกำกับจริง จึงไม่จำเป็นต้องอนุมัติผู้สมัครที่ไม่มีคุณสมบัติเหมาะสมเพื่อให้เกิดความเท่าเทียม แนวคิดนี้มุ่งแก้ข้อผิดพลาดจากการพลาดสมาชิกที่มีคุณสมบัติเหมาะสมของกลุ่มที่ได้รับการคุ้มครองโดยเฉพาะ

from sklearn.metrics import recall_score

# True positive rate per group (recall among actually qualified)
mask_M = g == 'M'
mask_F = g == 'F'

tpr_M = recall_score(y[mask_M], y_pred[mask_M])
tpr_F = recall_score(y[mask_F], y_pred[mask_F])

print(f'True positive rate M (recall): {tpr_M:.3f}')
print(f'True positive rate F (recall): {tpr_F:.3f}')
print(f'Equal opportunity difference: {abs(tpr_M - tpr_F):.3f}')
# A value > 0.05 is often flagged as meaningful unfairness

Equalized Odds

Equalized odds เป็นเกณฑ์ที่เข้มงวดยิ่งขึ้น โดยกำหนดให้ทั้งอัตราผลบวกที่แท้จริง AND อัตราผลบวกลวงเท่ากันในทุกกลุ่ม วิธีนี้ป้องกันไม่ให้แบบจำลองอนุมัติผู้สมัครส่วนน้อยที่มีคุณสมบัติเหมาะสมน้อยเกินไปพร้อมกับอนุมัติผู้สมัครส่วนใหญ่ที่ไม่มีคุณสมบัติเหมาะสมมากเกินไป เกณฑ์นี้เป็นมาตรฐานด้านความเป็นธรรมที่ใช้ในบริบททางกฎหมาย เช่น กฎหมายโอกาสด้านสินเชื่อที่เท่าเทียมกันของ US

from sklearn.metrics import confusion_matrix

def false_positive_rate(y_true, y_pred):
    tn, fp, fn, tp = confusion_matrix(y_true, y_pred).ravel()
    return fp / (fp + tn) if (fp + tn) > 0 else 0.0

fpr_M = false_positive_rate(y[mask_M], y_pred[mask_M])
fpr_F = false_positive_rate(y[mask_F], y_pred[mask_F])

print(f'FPR M: {fpr_M:.3f}  TPR M: {tpr_M:.3f}')
print(f'FPR F: {fpr_F:.3f}  TPR F: {tpr_F:.3f}')
print(f'Equalized odds: TPR diff={abs(tpr_M-tpr_F):.3f}, FPR diff={abs(fpr_M-fpr_F):.3f}')

การแลกเปลี่ยนระหว่างความเป็นธรรมกับความแม่นยำ

การปฏิบัติตามข้อจำกัดด้านความเป็นธรรมมักต้องแลกกับความแม่นยำโดยรวมหรือผลกำไร นี่คือการแลกเปลี่ยนระหว่างความเป็นธรรมกับความแม่นยำ ทฤษฎีบทความเป็นไปไม่ได้ (Chouldechova 2017, Kleinberg 2016) แสดงให้เห็นว่าไม่สามารถทำให้ความเท่าเทียมทางประชากรศาสตร์ โอกาสที่เท่าเทียมกัน และการปรับเทียบสอดคล้องกันทั้งหมดได้พร้อมกัน เมื่ออัตราพื้นฐานของแต่ละกลุ่มแตกต่างกัน ดังนั้นการเลือกเกณฑ์ความเป็นธรรมที่จะปรับให้เหมาะสมจึงเป็นการตัดสินเชิงคุณค่าที่ต้องอาศัยผู้เชี่ยวชาญด้านนั้นและชุมชนที่ได้รับผลกระทบ ไม่ใช่เพียงนักวิทยาศาสตร์ข้อมูล

# Visualise trade-off: adjust threshold per group
import numpy as np

proba = model.predict_proba(X_scaled)[:, 1]

# Without fairness: single 0.5 threshold
y_single = (proba >= 0.5).astype(int)

# With equal opportunity: lower threshold for F to equalise TPR
# Find threshold for F that gives same TPR as M
tpr_target = recall_score(y[mask_M], y_single[mask_M])
print(f'Target TPR from M group: {tpr_target:.3f}')
for thresh in np.arange(0.3, 0.7, 0.01):
    y_adj = proba[mask_F] >= thresh
    if recall_score(y[mask_F], y_adj) >= tpr_target:
        print(f'Threshold for F to achieve equal opportunity: {thresh:.2f}')
        break

ไลบรารี fairlearn

ไลบรารี fairlearn ของ Microsoft มีเมตริกด้านความเป็นธรรมและอัลกอริทึมลดผลกระทบที่ไม่เป็นธรรมผ่านส่วนติดต่อ API ที่เข้ากันได้กับ scikit-learn ใช้ MetricFrame เพื่อคำนวณเมตริกใด ๆ โดยแยกตามกลุ่มได้ในคำสั่งเดียว ทำให้เห็นความแตกต่างของเมตริกทั้งหมดโดยไม่ต้องสร้างดัชนีด้วยตนเอง ติดตั้งด้วย pip install fairlearn

from fairlearn.metrics import MetricFrame, demographic_parity_difference
from fairlearn.metrics import equalized_odds_difference
from sklearn.metrics import accuracy_score, precision_score, recall_score

mf = MetricFrame(
    metrics={
        'accuracy': accuracy_score,
        'precision': precision_score,
        'recall': recall_score
    },
    y_true=y,
    y_pred=y_pred,
    sensitive_features=g
)
print(mf.by_group)
print('Demographic parity diff:', demographic_parity_difference(y, y_pred, sensitive_features=g))
print('Equalized odds diff:', equalized_odds_difference(y, y_pred, sensitive_features=g))

การปรับเทียบระหว่างกลุ่ม

การปรับเทียบกำหนดว่า ในบรรดาผู้สมัครทั้งหมดที่ได้รับค่าความน่าจะเป็นทำนาย X% ควรมีประมาณ X% ที่อยู่ในกลุ่มบวกจริง และเงื่อนไขนี้ต้องเป็นจริงแยกกันภายในแต่ละกลุ่มประชากร การปรับเทียบที่ไม่ดีในบางกลุ่มหมายความว่าแบบจำลองมีความมั่นใจมากหรือน้อยเกินไปอย่างเป็นระบบสำหรับกลุ่มที่ได้รับการคุ้มครอง ซึ่งทำให้การตัดสินใจโดยอิงความเสี่ยง เช่น การให้คะแนนสินเชื่อ บิดเบือนได้ ใช้แผนภาพความน่าเชื่อถือหรือ sklearn.calibration.calibration_curve แยกตามกลุ่มเพื่อตรวจสอบ

from sklearn.calibration import calibration_curve
import matplotlib.pyplot as plt

fig, ax = plt.subplots()
for group in ['M', 'F']:
    mask = g == group
    prob_true, prob_pred = calibration_curve(
        y[mask], proba[mask], n_bins=5
    )
    ax.plot(prob_pred, prob_true, marker='o', label=f'gender={group}')
ax.plot([0, 1], [0, 1], 'k--', label='Perfect calibration')
ax.set(xlabel='Mean predicted probability', ylabel='Fraction of positives')
ax.legend()
plt.title('Calibration curves by gender')
plt.tight_layout()
plt.savefig('calibration_by_group.png', dpi=150)

ความเป็นธรรมเชิงจุดตัด

ความเป็นธรรมเชิงจุดตัดพิจารณาการผสมกันของคุณลักษณะที่ได้รับการคุ้มครองพร้อมกัน แบบจำลองอาจบรรลุความเท่าเทียมทางประชากรศาสตร์สำหรับเพศและเชื้อชาติแยกกัน แต่ยังคงเลือกปฏิบัติต่อผู้หญิงผิวดำในฐานะกลุ่มย่อยได้ fairlearn MetricFrame จัดการกรณีนี้โดยอัตโนมัติเมื่อส่งคอลัมน์อ่อนไหวหลายคอลัมน์ในรูปแบบ DataFrame และคำนวณเมตริกสำหรับทุกการผสม (เพศ × เชื้อชาติ)

import pandas as pd
from fairlearn.metrics import MetricFrame
from sklearn.metrics import accuracy_score

# Add a second protected attribute
df['race'] = np.random.choice(['A', 'B'], len(df))
sensitive_df = df[['gender', 'race']]

mf_intersect = MetricFrame(
    metrics={'accuracy': accuracy_score},
    y_true=y,
    y_pred=y_pred,
    sensitive_features=sensitive_df
)
print(mf_intersect.by_group)
print('Worst accuracy subgroup:', mf_intersect.by_group.min())

การเลือกเกณฑ์ความเป็นธรรมที่เหมาะสม

การใช้งานแต่ละประเภทต้องการเกณฑ์ความเป็นธรรมที่แตกต่างกัน สำหรับการทำนายการกระทำผิดซ้ำ โอกาสที่เท่าเทียมกัน (ทำให้การเรียกคืนเท่ากันในกลุ่มผู้ที่ไม่กระทำผิดซ้ำ) มีความสำคัญสูงสุด สำหรับเครื่องมือคัดเลือกบุคลากร ความเท่าเทียมทางประชากรศาสตร์ช่วยป้องกันการมีตัวแทนของบางกลุ่มต่ำกว่าระบบอย่างเป็นระบบ สำหรับการคัดกรองทางการแพทย์ Equalized odds ช่วยให้มั่นใจว่าไม่มีการพลาดผู้ป่วยในกลุ่มใดกลุ่มหนึ่งอย่างไม่สมส่วน การบันทึกว่าเลือกเกณฑ์ใดและเพราะเหตุใดเป็นส่วนสำคัญของแนวปฏิบัติด้านปัญญาประดิษฐ์ที่มีความรับผิดชอบและเอกสารกำกับแบบจำลอง

# Decision guide: which metric to use
criteria_guide = {
    'hiring / college admission': 'Demographic parity — equal representation',
    'medical screening': 'Equal opportunity — equalise recall (catch all sick patients)',
    'fraud / recidivism': 'Equalized odds — control both FPR and TPR',
    'credit scoring': 'Calibration — predicted risk reflects actual risk per group'
}
for use_case, criterion in criteria_guide.items():
    print(f'{use_case}: {criterion}')

ข้อจำกัดของเมตริกความเป็นธรรม

เมตริกความเป็นธรรมวัดความแตกต่างทางสถิติ ไม่ใช่สาเหตุรากฐาน แบบจำลองอาจเป็นไปตามความเท่าเทียมทางประชากรศาสตร์ แต่ยังคงตัดสินใจรายบุคคลโดยอาศัยคุณลักษณะที่ได้รับการคุ้มครองผ่านตัวแปรแทนที่มีความสัมพันธ์กัน นอกจากนี้ เมตริกเหล่านี้ยังสมมติว่าคุณลักษณะอ่อนไหวและผลลัพธ์เป็นแบบทวิภาคทั้งหมด ขณะที่ความเป็นธรรมในโลกจริงซับซ้อนกว่านั้น ควรใช้เมตริกร่วมกับวิธีเชิงคุณภาพ ได้แก่ การมีส่วนร่วมของชุมชน การตรวจสอบกระบวนการ และการประเมินผลกระทบก่อนนำไปใช้งาน

# Summary of limitations
limitations = [
    'Proxy features (zip code, surname) can encode protected attributes even when removed',
    'Satisfying one fairness criterion can violate another (impossibility theorem)',
    'Metrics are group-level averages; individual unfairness can persist',
    'Binary group splits may hide variation within groups',
    'Historical data reflects past discrimination; fair training data is often unavailable'
]
for i, lim in enumerate(limitations, 1):
    print(f'{i}. {lim}')

ตรวจสอบความเข้าใจอย่างรวดเร็ว

ทดสอบความเข้าใจแนวคิดการเรียนรู้ของเครื่องด้วย Python จากบทเรียนนี้

ทบทวนบทเรียน

ในบทเรียนนี้ คุณได้เรียนรู้ว่า ความเท่าเทียมทางประชากรศาสตร์กำหนดให้อัตราการทำนายผลบวกเท่ากันในทุกกลุ่ม โอกาสที่เท่าเทียมกันกำหนดให้การเรียกคืน (อัตราผลบวกที่แท้จริง) เท่ากัน และ Equalized odds กำหนดเพิ่มเติมให้อัตราผลบวกลวงเท่ากัน นอกจากนี้ คุณยังได้เห็นว่าเกณฑ์เหล่านี้ไม่สามารถเป็นจริงพร้อมกันทั้งหมดเมื่ออัตราพื้นฐานแตกต่างกัน และไลบรารี fairlearn ช่วยให้คำนวณเมตริกระดับกลุ่มได้โดยง่าย ต่อไป เราจะสำรวจกลยุทธ์ที่เป็นรูปธรรมเพื่อลดอคติที่เมตริกเหล่านี้เปิดเผย

เริ่มต้นได้ฟรี

เรียนรู้ Python ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
30
บทเรียน
120

คำถามที่พบบ่อย

บทเรียน “ตัวชี้วัดความเป็นธรรม: ความเสมอภาคทางประชากรและโอกาสที่เท่าเทียม” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “ตัวชี้วัดความเป็นธรรม: ความเสมอภาคทางประชากรและโอกาสที่เท่าเทียม” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Machine Learning Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Machine Learning Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “ตัวชี้วัดความเป็นธรรม: ความเสมอภาคทางประชากรและโอกาสที่เท่าเทียม”

ผู้เรียนจะวัดความแตกต่างด้านความเสมอภาคทางประชากรและความแตกต่างด้านโอกาสที่เท่าเทียมในโมเดลอนุมัติสินเชื่อ และระบุว่าโมเดลทำให้กลุ่มที่ได้รับการคุ้มครองเสียเปรียบหรือไม่ คุณปฏิบัติ Machine Learning Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Machine Learning Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Machine Learning Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน

บทเรียน “ตัวชี้วัดความเป็นธรรม: ความเสมอภาคทางประชากรและโอกาสที่เท่าเทียม” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Machine Learning Academy นี้ได้ไหม

ได้ บทเรียน Machine Learning Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. ค่า SHAP: ความสำคัญของคุณลักษณะระดับภาพรวมและเฉพาะกรณี
  2. LIME: คำอธิบายโมเดลเฉพาะกรณีที่ตีความได้โดยไม่ยึดติดกับโมเดล
  3. ตัวชี้วัดความเป็นธรรม: ความเสมอภาคทางประชากรและโอกาสที่เท่าเทียม
  4. กลยุทธ์ลดอคติ: ก่อนประมวลผล ระหว่างประมวลผล และหลังประมวลผล
← กลับไปที่ Machine Learning Academy