ML fairness забезпечує що моделі не дискримінують захищені групи. Упередженість може входити через дані, фічі, мітки або дизайн моделі - часто ненавмисно. Справедливий ML вимагає вимірювання диспропорцій, розуміння компромісів між визначеннями справедливості та імплементації стратегій пом'якшення що балансують точність зі справедливістю.
Де використовується
Справедливість критична у high-stakes рішеннях:
- Кредитування: Кредитні рішення, схвалення позик
- Найм: Скринінг резюме, ранжування кандидатів
- Охорона здоров'я: Рекомендації лікування, оцінка ризиків
- Кримінальна юстиція: Оцінка ризику, винесення вироків
- Страхування: Ціноутворення премій, рішення по претензіях
- Житло: Заявки на оренду, оцінка нерухомості
- Реклама: Таргетинг реклами, розподіл можливостей
Регуляції: GDPR, ECOA, Fair Housing Act, EEOC guidelines.
Джерела упередженості
| Джерело | Опис | Приклад |
|---|---|---|
| Історична упередженість | Минула дискримінація в даних | Дані найму відображають минулу дискримінацію |
| Упередженість представлення | Перекошені тренувальні дані | Недопредставлені меншини |
| Упередженість вимірювання | Проксі для захищених атрибутів | Zip code як проксі для раси |
| Упередженість агрегації | Одна модель для різних груп | Єдина модель ризику для всіх віків |
| Упередженість оцінки | Упереджені тестові набори | Бенчмарки не репрезентативні |
| Упередженість деплойменту | Неправильне використання | Модель використана для непередбаченої цілі |
Визначення справедливості
Немає єдиного визначення справедливості - вони можуть конфліктувати.
Метрики групової справедливості:
| Метрика | Визначення | Коли використовувати |
|---|---|---|
| Demographic parity | Рівні позитивні rates між групами | Коли selection rates мають бути рівними |
| Equalized odds | Рівні TPR та FPR між групами | Коли error rates мають бути рівними |
| Equal opportunity | Рівні TPR між групами | Коли false negatives дорогі |
| Calibration | Однакова ймовірність → однаковий outcome rate | Коли ймовірності використовуються напряму |
| Predictive parity | Рівні PPV між групами | Коли precision важлива |
def demographic_parity(y_pred, protected_attribute):
"""Різниця позитивних rates між групами."""
group_a = y_pred[protected_attribute == 0].mean()
group_b = y_pred[protected_attribute == 1].mean()
return abs(group_a - group_b)
def equalized_odds(y_true, y_pred, protected_attribute):
"""TPR та FPR різниця між групами."""
results = {}
for group in [0, 1]:
mask = protected_attribute == group
tpr = y_pred[(mask) & (y_true == 1)].mean()
fpr = y_pred[(mask) & (y_true == 0)].mean()
results[group] = {'tpr': tpr, 'fpr': fpr}
tpr_diff = abs(results[0]['tpr'] - results[1]['tpr'])
fpr_diff = abs(results[0]['fpr'] - results[1]['fpr'])
return tpr_diff, fpr_diff
Індивідуальна справедливість: Подібні індивіди повинні отримувати подібні прогнози.
def individual_fairness(X, y_pred, similarity_metric, threshold=0.1):
"""Подібні входи повинні мати подібні виходи."""
violations = 0
for i in range(len(X)):
for j in range(i+1, len(X)):
input_similarity = similarity_metric(X[i], X[j])
output_difference = abs(y_pred[i] - y_pred[j])
if input_similarity > 0.9 and output_difference > threshold:
violations += 1
return violations
Що ви робите на практиці
- Ідентифікуйте захищені атрибути - Раса, стать, вік, інвалідність тощо
- Аудит на упередженість - Виміряйте диспропорції в поточній системі
- Оберіть критерії справедливості - На основі контексту та цінностей
- Зрозумійте компроміси - Справедливість vs точність, справедливість vs справедливість
- Оберіть підхід пом'якшення - Pre, in або post-processing
- Імплементуйте та виміряйте - Кількісно оцініть покращення
- Моніторте безперервно - Справедливість може деградувати з часом
- Документуйте рішення - Обґрунтуйте вибори для stakeholders
- Залучіть stakeholders - Включіть постраждалі спільноти
- Плануйте апеляції - Процес для оскарження рішень
Стратегії пом'якшення упередженості
Pre-processing (зміна даних):
# Ресемплінг для балансування груп
from imblearn.over_sampling import SMOTE
def balance_groups(X, y, protected):
smote = SMOTE()
X_balanced, y_balanced = smote.fit_resample(X, y)
return X_balanced, y_balanced
# Видалення упереджених фіч
def remove_proxies(df, proxy_features):
return df.drop(columns=proxy_features)
In-processing (зміна моделі):
# Fairness constraints під час тренування
from fairlearn.reductions import ExponentiatedGradient, DemographicParity
from sklearn.linear_model import LogisticRegression
constraint = DemographicParity()
mitigator = ExponentiatedGradient(
estimator=LogisticRegression(),
constraints=constraint
)
mitigator.fit(X_train, y_train, sensitive_features=A_train)
Post-processing (зміна прогнозів):
# Коригування порогу за групою
def equalize_odds_threshold(y_prob, y_true, protected):
thresholds = {}
for group in [0, 1]:
mask = protected == group
best_threshold = find_optimal_threshold(
y_prob[mask], y_true[mask],
target_tpr=0.8
)
thresholds[group] = best_threshold
return thresholds
Типові помилки та чек-лист
- [ ] Вибір неправильної метрики: Метрики справедливості конфліктують
- [ ] Ігнорування proxy features: Zip code корелює з расою
- [ ] Одноразовий аудит: Справедливість деградує з часом
- [ ] Fairwashing: Використання fairness лише для PR
- [ ] Відсутність stakeholder input: Не залучення постраждалих
Чек-лист для продакшену
Перед деплоєм: - [ ] Fairness аудит з відповідними метриками - [ ] Документація вибору метрик - [ ] Юридичний review - [ ] Stakeholder consultation
Після деплою: - [ ] Моніторинг fairness метрик - [ ] Процес апеляцій - [ ] Регулярні аудити - [ ] Оновлення мітигацій за потреби
Інструменти та стек
| Категорія | Інструменти |
|---|---|
| Бібліотеки | Fairlearn, AIF360, Aequitas |
| Аудит | What-If Tool, SHAP |
| Моніторинг | Fiddler, Arthur AI |
Приклад міні-кейсу
Сценарій: Кредитний скоринг з fairness constraints.
Підхід: - Equalized odds constraint - Fairlearn ExponentiatedGradient - Аудит за расою та віком
Результати: - TPR різниця: 15% → 3% - Accuracy drop: лише 1.5% - Regulatory compliance досягнуто
Пов'язані сторінки
- Індекс: ML Field Guide
- Privacy-Preserving ML
- Моніторинг моделей
Додаткові матеріали
Спробуйте наживо
Дослідіть пов'язану модель на практиці: відкрийте AI Fairness Simulator: Demographic Parity & Simulation Speed і змінюйте параметри під час роботи. Усе лишається у вашому браузері.
▶ Відкрити симуляцію AI Fairness Simulator: Demographic Parity & Simulation Speed