Головна▸Статті▸Приватність, справедливість та відповідність

ML Fairness

Побудова справедливих ML систем - виявлення упередженості, метрики справедливості, стратегії пом'якшення та практики відповідального AI.

mysimulator teamОновлено 2026-01≈ 4 хв читання▶ Open the simulation

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

Що ви робите на практиці

  1. Ідентифікуйте захищені атрибути - Раса, стать, вік, інвалідність тощо
  2. Аудит на упередженість - Виміряйте диспропорції в поточній системі
  3. Оберіть критерії справедливості - На основі контексту та цінностей
  4. Зрозумійте компроміси - Справедливість vs точність, справедливість vs справедливість
  5. Оберіть підхід пом'якшення - Pre, in або post-processing
  6. Імплементуйте та виміряйте - Кількісно оцініть покращення
  7. Моніторте безперервно - Справедливість може деградувати з часом
  8. Документуйте рішення - Обґрунтуйте вибори для stakeholders
  9. Залучіть stakeholders - Включіть постраждалі спільноти
  10. Плануйте апеляції - Процес для оскарження рішень

Стратегії пом'якшення упередженості

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

Типові помилки та чек-лист

Чек-лист для продакшену

Перед деплоєм: - [ ] 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 досягнуто

Пов'язані сторінки

Додаткові матеріали

Спробуйте наживо

Дослідіть пов'язану модель на практиці: відкрийте AI Fairness Simulator: Demographic Parity & Simulation Speed і змінюйте параметри під час роботи. Усе лишається у вашому браузері.

▶ Відкрити симуляцію AI Fairness Simulator: Demographic Parity & Simulation Speed

Що ви знайшли?

Додати кроки відтворення (опційно)