Strategi Mitigasi Bias: Pra-pemrosesan, Pemrosesan, dan Pascapemrosesan
Peserta didik akan menerapkan pembobotan ulang (pra-pemrosesan), menambahkan kendala keadilan saat pelatihan (pemrosesan), dan mengalibrasi ambang keputusan untuk setiap kelompok (pascapemrosesan), lalu membandingkan komprominya.
Strategi Mitigasi Bias: Pra-pemrosesan, Pemrosesan, dan Pascapemrosesan adalah pelajaran Machine Learning Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Machine Learning Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Machine Learning Academy mencakup 4 pelajaran total.
Tiga Tahap Mitigasi Bias
Strategi mitigasi bias terbagi menjadi tiga kategori berdasarkan tahap pipeline ML tempat strategi tersebut diterapkan. Metode pra-pemrosesan mengubah data pelatihan sebelum model apa pun dilatih. Metode selama pemrosesan mengubah algoritme pembelajaran itu sendiri untuk menegakkan keadilan selama pelatihan. Metode pasca-pemrosesan menyesuaikan keluaran model setelah pelatihan tanpa mengubah model. Setiap pendekatan memiliki pertukaran yang berbeda dalam hal akurasi, fleksibilitas, dan biaya komputasi.
Pra-pemrosesan: Pembobotan Ulang
Pembobotan ulang memberikan bobot sampel yang berbeda pada contoh pelatihan agar distribusi berbobot bersifat adil terhadap atribut yang dilindungi. Contoh dari kombinasi (label, kelompok) yang kurang terwakili menerima bobot lebih tinggi; kombinasi yang terlalu terwakili menerima bobot lebih rendah. Model kemudian dilatih menggunakan bobot ini melalui parameter sample_weight, yang diterima oleh sebagian besar estimator scikit-learn. Tidak diperlukan perubahan pada algoritme.
from fairlearn.preprocessing import CorrelationRemover
import numpy as np
import pandas as pd
from sklearn.linear_model import LogisticRegression
from sklearn.preprocessing import StandardScaler
# Reweighing: compute weights to balance (group, label) combinations
def compute_reweighing_weights(y, sensitive):
n = len(y)
weights = np.ones(n)
for label in np.unique(y):
for group in np.unique(sensitive):
mask = (y == label) & (sensitive == group)
expected = (y == label).mean() * (sensitive == group).mean()
actual = mask.mean()
if actual > 0:
weights[mask] = expected / actual
return weights
# Usage: model.fit(X_train, y_train, sample_weight=weights)Pra-pemrosesan: Menghapus Fitur Proksi
Bahkan tanpa atribut yang dilindungi, fitur proksi seperti kode pos atau nama keluarga dapat menyandikan informasi demografis. Penghapusan korelasi memproyeksikan fitur untuk mengurangi korelasinya dengan atribut sensitif. fairlearn.preprocessing.CorrelationRemover menerapkan hal ini dengan mengurangkan proyeksi setiap fitur terhadap atribut sensitif, sehingga menghasilkan fitur yang tidak berkorelasi. Cara ini mengurangi kemampuan model untuk mempelajari pola diskriminatif melalui proksi.
from fairlearn.preprocessing import CorrelationRemover
import numpy as np
X = np.random.randn(500, 5)
sensitive = np.random.choice([0, 1], 500)
# Project out correlation with sensitive attribute
cr = CorrelationRemover(sensitive_feature_ids=[0]) # column 0 is sensitive
X_fair = cr.fit_transform(X)
print('Original correlation with sensitive:', np.corrcoef(X[:, 0], sensitive)[0, 1])
print('After removal:', np.corrcoef(X_fair[:, 0], sensitive)[0, 1])Selama Pemrosesan: Exponentiated Gradient
Algoritme Exponentiated Gradient dari fairlearn merupakan meta-algoritme yang membungkus pengklasifikasi scikit-learn apa pun dan melatihnya secara berulang dengan bobot sampel yang disesuaikan untuk memenuhi batasan keadilan (misalnya, equalized odds). Algoritme ini menyelesaikan masalah optimisasi dengan batasan: meminimalkan kesalahan klasifikasi dengan syarat batasan keadilan tetap berada dalam toleransi epsilon. Hasilnya adalah ensembel pengklasifikasi acak yang menyeimbangkan akurasi dan keadilan.
from fairlearn.reductions import ExponentiatedGradient, EqualizedOdds
from sklearn.linear_model import LogisticRegression
import numpy as np
np.random.seed(42)
X = np.random.randn(600, 4)
sensitive = np.random.choice(['A', 'B'], 600)
y = (X[:, 0] + np.random.randn(600) * 0.5 > 0).astype(int)
base_estimator = LogisticRegression(max_iter=1000)
mitigator = ExponentiatedGradient(
base_estimator,
constraints=EqualizedOdds(),
eps=0.05 # allowed violation
)
mitigator.fit(X, y, sensitive_features=sensitive)
y_pred_fair = mitigator.predict(X)
print('Predictions generated:', y_pred_fair[:10])Selama Pemrosesan: Keadilan dengan GridSearch
fairlearn.reductions.GridSearch adalah alternatif yang lebih sederhana. Cara ini melakukan pencarian kisi atas pengali Lagrange untuk batasan keadilan, dengan melatih model terpisah untuk setiap nilai pengali. Hasilnya adalah sekumpulan titik pertukaran (akurasi, keadilan) yang membentuk frontier Pareto. Anda kemudian dapat memilih model yang memenuhi ambang keadilan minimum dengan akurasi maksimum. Cara ini sepenuhnya kompatibel dengan estimator sklearn apa pun.
from fairlearn.reductions import GridSearch, DemographicParity
from sklearn.tree import DecisionTreeClassifier
gs = GridSearch(
DecisionTreeClassifier(max_depth=4),
constraints=DemographicParity(),
grid_size=10
)
gs.fit(X, y, sensitive_features=sensitive)
# Inspect trade-off frontier
for pred in gs.predictors_:
y_hat = pred.predict(X)
acc = (y_hat == y).mean()
dp_diff = abs(
y_hat[sensitive == 'A'].mean() - y_hat[sensitive == 'B'].mean()
)
print(f'Accuracy={acc:.3f} | DP difference={dp_diff:.3f}')Pasca-pemrosesan: Kalibrasi Ambang per Kelompok
Kalibrasi ambang menerapkan ambang keputusan yang berbeda pada setiap kelompok demografis agar kriteria keadilan yang dipilih terpenuhi. Misalnya, untuk mencapai kesempatan yang setara, Anda menurunkan ambang bagi kelompok yang kurang beruntung sampai tingkat positif benarnya sama dengan kelompok yang lebih diuntungkan. Ini merupakan pendekatan pasca-pemrosesan yang paling sederhana dan tidak memerlukan pelatihan ulang, sehingga mudah diterapkan pada model apa pun yang telah diterapkan.
import numpy as np
from sklearn.metrics import recall_score
# Assume model outputs probabilities: proba_A, proba_B for each group
np.random.seed(0)
proba = np.random.beta(2, 5, 600) # model probability scores
y_true = (proba > 0.3 + np.random.randn(600) * 0.1).astype(int)
mask_A = sensitive == 'A'
mask_B = sensitive == 'B'
# Find threshold for group B to match group A's TPR at threshold 0.5
base_tpr = recall_score(y_true[mask_A], (proba[mask_A] >= 0.5).astype(int))
for thresh in np.arange(0.2, 0.7, 0.01):
tpr_B = recall_score(y_true[mask_B], (proba[mask_B] >= thresh).astype(int))
if abs(tpr_B - base_tpr) < 0.02:
print(f'Equal-opportunity threshold for group B: {thresh:.2f} (TPR={tpr_B:.3f})')
breakPasca-pemrosesan: ThresholdOptimizer dalam fairlearn
fairlearn.postprocessing.ThresholdOptimizer mengotomatiskan kalibrasi ambang per kelompok. Komponen ini menerima estimator yang telah dilatih, membungkusnya, lalu menemukan ambang khusus kelompok yang meminimalkan tujuan yang dipilih (misalnya, akurasi seimbang) dengan syarat batasan keadilan. Pada waktu prediksi, setiap sampel diarahkan ke ambang yang sesuai berdasarkan keanggotaannya dalam kelompok — transparan dan dapat diaudit.
from fairlearn.postprocessing import ThresholdOptimizer
from fairlearn.metrics import equalized_odds_difference
from sklearn.linear_model import LogisticRegression
base_model = LogisticRegression(max_iter=1000)
base_model.fit(X, y)
to = ThresholdOptimizer(
estimator=base_model,
constraints='equalized_odds',
objective='balanced_accuracy_score',
predict_method='predict_proba'
)
to.fit(X, y, sensitive_features=sensitive)
y_pred_to = to.predict(X, sensitive_features=sensitive)
print('EO difference before:', equalized_odds_difference(y, base_model.predict(X), sensitive_features=sensitive))
print('EO difference after:', equalized_odds_difference(y, y_pred_to, sensitive_features=sensitive))Membandingkan Ketiga Pendekatan
Setiap tahap intervensi memiliki implikasi praktis. Pra-pemrosesan tidak bergantung pada model dan dapat diterapkan sekali untuk semua model berikutnya, tetapi mungkin menghilangkan informasi. Selama pemrosesan mengintegrasikan keadilan ke dalam tujuan optimisasi, dan sering kali mencapai keseimbangan akurasi-keadilan terbaik, tetapi memerlukan pelatihan ulang. Pasca-pemrosesan paling mudah ditambahkan ke model yang sudah diterapkan tanpa pelatihan ulang, tetapi mungkin kurang efektif ketika skor probabilitas tidak terkalibrasi dengan baik di antara berbagai kelompok.
comparison = {
'Pre-processing (reweighing/removal)': {
'requires_retraining': True,
'model_agnostic': True,
'typical_accuracy_cost': 'Low to medium'
},
'In-processing (Exp. Gradient)': {
'requires_retraining': True,
'model_agnostic': True,
'typical_accuracy_cost': 'Medium'
},
'Post-processing (threshold optimizer)': {
'requires_retraining': False,
'model_agnostic': True,
'typical_accuracy_cost': 'Low (if scores are calibrated)'
}
}
for method, props in comparison.items():
print(method, '->', props)Mengukur Efektivitas Mitigasi
Setelah menerapkan strategi mitigasi apa pun, jalankan kembali seluruh rangkaian metrik keadilan untuk memastikan adanya perbaikan. Ukur juga biaya akurasi: perbedaan akurasi keseluruhan antara model tanpa mitigasi dan model yang telah dimitigasi. Buat plot kurva pertukaran keadilan-akurasi untuk berbagai tingkat kekuatan mitigasi guna membantu pemangku kepentingan memilih titik operasi. Dokumentasikan titik yang dipilih beserta alasannya dalam kartu model.
from fairlearn.metrics import MetricFrame, demographic_parity_difference
from sklearn.metrics import accuracy_score
import numpy as np
results = []
for threshold_offset in [0.0, -0.05, -0.10, -0.15]:
y_hat = np.where(
sensitive == 'B',
(proba >= 0.5 + threshold_offset).astype(int),
(proba >= 0.5).astype(int)
)
acc = accuracy_score(y_true, y_hat)
dp = demographic_parity_difference(y_true, y_hat, sensitive_features=sensitive)
results.append({'offset': threshold_offset, 'accuracy': acc, 'dp_diff': abs(dp)})
print(f'offset={threshold_offset:.2f}: accuracy={acc:.3f}, dp_diff={abs(dp):.3f}')Keadilan Melampaui Metrik Teknis
Mitigasi teknis diperlukan, tetapi belum cukup untuk AI yang bertanggung jawab. Komunitas yang terdampak harus dilibatkan dalam menentukan makna keadilan dalam konteks mereka. Tim penerapan harus menetapkan pemantauan berkelanjutan terhadap perubahan keadilan seiring perubahan distribusi populasi. Audit pihak ketiga secara berkala, mekanisme banding yang jelas bagi individu yang terdampak, dan pengungkapan yang transparan tentang pendekatan mitigasi semuanya merupakan bagian dari praktik AI yang bertanggung jawab secara menyeluruh.
# Non-technical checklist for responsible deployment
checklist = [
'Affected community consulted on fairness definition',
'Model card documents protected attributes, metrics, and mitigation',
'Fairness metrics monitored in production alongside accuracy',
'Individual appeal process exists for adverse decisions',
'Third-party audit scheduled before high-stakes deployment',
'Data provenance documented to detect historical bias sources'
]
for item in checklist:
print('[x]', item)Pipeline Keadilan Menyeluruh
Pipeline ML yang sepenuhnya memperhatikan keadilan menggabungkan semua tahap. Mulailah dengan pra-pemrosesan (menghapus fitur proksi, menerapkan pembobotan ulang), lakukan pelatihan dengan batasan selama pemrosesan untuk memasukkan keadilan ke dalam tujuan, lalu terapkan kalibrasi ambang pasca-pemrosesan jika masih terdapat kesenjangan. Setelah penerapan, integrasikan pemantauan untuk mendeteksi perubahan metrik keadilan akibat pergeseran distribusi, dan picu pelatihan ulang ketika ambang terlampaui.
# Sketch of a full fairness-aware pipeline
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from fairlearn.reductions import ExponentiatedGradient, EqualizedOdds
from sklearn.linear_model import LogisticRegression
# Step 1: pre-process (reweighing done externally via sample_weight)
preprocessor = StandardScaler()
X_scaled = preprocessor.fit_transform(X)
# Step 2: in-processing with fairness constraint
mitigator = ExponentiatedGradient(
LogisticRegression(max_iter=1000),
constraints=EqualizedOdds(),
eps=0.05
)
mitigator.fit(X_scaled, y, sensitive_features=sensitive)
# Step 3: evaluate and document
y_fair = mitigator.predict(X_scaled)
print('Fair model accuracy:', (y_fair == y).mean().round(3))Pemeriksaan Singkat
Uji pemahaman Anda tentang konsep Pembelajaran Mesin dengan Python dari pelajaran ini.
Ringkasan Pelajaran
Dalam pelajaran ini Anda mempelajari bahwa: metode pra-pemrosesan (pembobotan ulang, penghapusan korelasi) mengubah data pelatihan sebelum pemasangan model, metode selama pemrosesan (Exponentiated Gradient, GridSearch) memasukkan batasan keadilan ke dalam tujuan pembelajaran, dan metode pasca-pemrosesan (ThresholdOptimizer) mengalibrasi ambang per kelompok setelah pelatihan. Secara bersama-sama, alat-alat ini memungkinkan Anda mengurangi bias secara sistematis, yang diukur melalui paritas demografis, kesempatan yang setara, dan equalized odds. Selanjutnya, kita akan memulai proyek akhir dengan menentukan ruang lingkup masalah ML nyata secara menyeluruh.
Belajar Python dengan tutor AI — gratis
Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.
- Kursus
- 30
- Pelajaran
- 120
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Strategi Mitigasi Bias: Pra-pemrosesan, Pemrosesan, dan Pascapemrosesan” gratis?
Ya — teks lengkap “Strategi Mitigasi Bias: Pra-pemrosesan, Pemrosesan, dan Pascapemrosesan” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Machine Learning Academy, upgrade ke CoddyKit PRO. Kursus Machine Learning Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Strategi Mitigasi Bias: Pra-pemrosesan, Pemrosesan, dan Pascapemrosesan”?
Peserta didik akan menerapkan pembobotan ulang (pra-pemrosesan), menambahkan kendala keadilan saat pelatihan (pemrosesan), dan mengalibrasi ambang keputusan untuk setiap kelompok (pascapemrosesan), l… Kamu berlatih Machine Learning Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Machine Learning Academy?
Tidak diperlukan pengalaman sebelumnya. Machine Learning Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.
Berapa lama pelajaran “Strategi Mitigasi Bias: Pra-pemrosesan, Pemrosesan, dan Pascapemrosesan” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Machine Learning Academy ini?
Ya. Setiap pelajaran Machine Learning Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Nilai SHAP: Kepentingan Fitur Global dan Lokal
- LIME: Penjelasan Lokal yang Dapat Diinterpretasikan dan Agnostik terhadap Model
- Metrik Keadilan: Paritas Demografis dan Kesempatan yang Setara
- Strategi Mitigasi Bias: Pra-pemrosesan, Pemrosesan, dan Pascapemrosesan