Урок 53. Этика и справедливость в ML
Зачем тебе этот урок
В уроке 3 ты смотрел на риски ИИ глазами пользователя: галлюцинации, утечки, предвзятые ответы чат-бота. Здесь другая позиция. Ты инженер, и твоя модель решает про людей: кому одобрить кредит, кого позвать на собеседование, кого отправить на дообследование. Ошибка в данных, помноженная на миллион решений, — это уже не баг, а системная дискриминация. Причём без единой злой строчки кода.
К концу урока ты:
- Будешь знать шесть мест, через которые предвзятость попадает в модель.
- Увидишь на реальных данных, почему «просто уберём пол из признаков» не работает.
- Посчитаешь четыре метрики справедливости и поймёшь, чем они отличаются.
- Разберёшься, почему все метрики сразу выполнить невозможно, — и что с этим делать.
1. Шесть дверей, через которые входит предвзятость
В 2021 году Харини Суреш и Джон Гуттаг из MIT разложили по этапам жизненного цикла модели, где именно возникает вред, — у них получилось семь источников. Вот пять главных и ещё одна дверь, о которой нельзя забывать, — петли обратной связи:
| Дверь | Что происходит | Пример |
|---|---|---|
| Историческая | Мир был несправедлив, данные это честно записали, модель выучила | Модель найма учится на решениях, которые принимали люди со своими привычками |
| Представленность | Какой-то группы в данных мало, и на ней модель ошибается чаще | Распознавание лиц, обученное в основном на светлокожих мужчинах |
| Измерение | Вместо настоящей цели берут удобную замену — прокси | «Число арестов» вместо «числа преступлений»: аресты зависят и от того, где патрулируют |
| Агрегация | Одна модель на всех, хотя группы устроены по-разному | Один скоринг для мегаполиса и маленького города, где доходы и траты устроены иначе |
| Оценка | Тестовая выборка не похожа на тех, для кого модель работает | Проверяли на жителях одного региона, запустили на всю страну |
| Петли обратной связи | Решения модели меняют будущие данные | Патрули идут туда, где модель предсказала преступления, находят там больше — модель уверяется в своей правоте |
Последняя дверь самая коварная. Модель, которая влияет на мир, начинает учиться на последствиях собственных решений и сама себя подтверждает.
2. Три истории, которые стоит знать
COMPAS, 2016. В американских судах система COMPAS оценивала риск, что обвиняемый совершит новое преступление. Журналисты ProPublica проверили её на двух годах данных и нашли: среди тех, кто повторно не нарушил закон, чернокожих обвиняемых ошибочно записывали в группу высокого риска почти вдвое чаще, чем белых — 44,9% против 23,5%. Разработчик ответил, что модель откалибрована: при одной и той же оценке доля повторных нарушений в обеих группах одинакова. Самое удивительное — в каком-то смысле правы оказались обе стороны. В уроке 3 COMPAS упоминался одной строкой как пример предвзятости. Почему спор о нём на самом деле сложнее, объясняет раздел 5.
Найм в Amazon. В 2018 году Reuters рассказал, как Amazon несколько лет строил модель для отбора резюме. Её учили на резюме, присланных за десять лет, большинство из которых были от мужчин. Модель научилась снижать оценку за слово «женский» — например, «капитан женского шахматного клуба» — и понижать выпускниц двух женских колледжей. Разработчики пытались это вычистить, не смогли гарантировать, что модель не найдёт другой способ, и проект закрыли.
Медицинский алгоритм, 2019. Зиад Обермейер с соавторами разобрал в журнале Science алгоритм, который в американских больницах решал, кого из пациентов включить в программу дополнительной помощи. Модель предсказывала будущие расходы на лечение, а расходы использовали как замену «насколько человек болен». Но на лечение чернокожих пациентов с теми же болезнями в среднем тратили меньше. В итоге при одинаковой оценке алгоритма чернокожие пациенты были больны заметно серьёзнее. Авторы посчитали: если устранить этот перекос, доля чернокожих пациентов среди получающих помощь вырастет с 17,7% до 46,5%. А когда модель научили предсказывать вместо расходов показатели здоровья, перекос сократился на 84%. Ошибка была не в модели — в выборе того, что она предсказывает. Это ровно тот случай из урока 52, когда культура «понять, как устроены данные» важнее культуры «лишь бы точно предсказывало»: модель точно предсказывала расходы — и именно поэтому вредила.
3. «Просто уберём пол» — проверяем на данных
Самая частая первая реакция: раз модель не должна учитывать пол, удалим этот столбец. Проверим на датасете Adult — это данные переписи населения США 1994 года, задача — предсказать, зарабатывает ли человек больше 50 тысяч долларов в год. Датасет давно стал учебным стандартом для таких проверок.
import pandas as pd
from sklearn.datasets import fetch_openml
adult = fetch_openml("adult", version=2, as_frame=True).frame
adult["y"] = (adult["class"] == ">50K").astype(int)
print(len(adult), round(adult["y"].mean(), 3)) # 48842 0.239
print(adult.groupby("sex", observed=True)["y"].mean().round(3)) # Female 0.109, Male 0.304
Уже в данных доля высоких доходов у мужчин почти втрое выше. Это и есть историческая дверь: модель, обученная на 1994 годе, будет воспроизводить рынок труда 1994 года.
Обучим логистическую регрессию — подробно она будет в уроке 58, здесь важен не метод, а аудит. Для аудита есть библиотека fairlearn — её начинали в Microsoft, сейчас это открытый проект сообщества. В Colab её надо поставить: !pip install fairlearn.
from sklearn.model_selection import train_test_split
from sklearn.compose import ColumnTransformer
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler, OneHotEncoder
from sklearn.impute import SimpleImputer
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, precision_score
from fairlearn.metrics import MetricFrame, selection_rate, true_positive_rate, false_positive_rate
num = ["age", "education-num", "capital-gain", "capital-loss", "hours-per-week"]
train, test = train_test_split(adult, test_size=0.3, stratify=adult["y"], random_state=42)
def audit(cat_cols):
prep = ColumnTransformer([
("num", StandardScaler(), num),
("cat", make_pipeline(SimpleImputer(strategy="most_frequent"),
OneHotEncoder(handle_unknown="ignore")), cat_cols),
])
model = make_pipeline(prep, LogisticRegression(max_iter=2000)).fit(train, train["y"])
mf = MetricFrame(
metrics={"accuracy": accuracy_score, "selection": selection_rate,
"TPR": true_positive_rate, "FPR": false_positive_rate, "PPV": precision_score},
y_true=test["y"], y_pred=model.predict(test), sensitive_features=test["sex"],
)
print("общая accuracy:", round(mf.overall["accuracy"], 3))
print(mf.by_group.round(3))
full = ["workclass", "marital-status", "occupation", "relationship", "race", "sex"]
audit(full)
Результат с полным набором признаков, общая точность 0.854. «Одобрение» здесь — ответ модели «доход выше 50 тысяч»: в кредитной задаче на его месте было бы одобрение заявки.
| Группа | accuracy | Доля одобренных | TPR | FPR | PPV |
|---|---|---|---|---|---|
| Женщины | 0.926 | 7,5% | 0.505 | 0.020 | 0.769 |
| Мужчины | 0.818 | 24,9% | 0.611 | 0.093 | 0.739 |
Сначала обрати внимание на accuracy: модель «точнее» для женщин. Это обман того же рода, что разберём в уроке 54. Когда высокий доход только у 11% группы, ответ «нет» почти всегда верен, и высокая точность достаётся даром. Смотреть надо на TPR: среди женщин, которые действительно зарабатывают больше 50 тысяч, модель узнаёт только половину. Среди мужчин — 61%.
Теперь убираем пол:
audit([c for c in full if c != "sex"])
Общая точность та же, 0.854. Доля одобренных: женщины 7,8% вместо 7,5%, мужчины 24,4% вместо 24,9%. Почти ничего не изменилось. Почему — видно из одной таблицы:
print(pd.crosstab(adult["relationship"], adult["sex"]))
| relationship | Female | Male |
|---|---|---|
| Husband | 1 | 19 715 |
| Wife | 2 328 | 3 |
| Not-in-family | 5 870 | 6 713 |
| Own-child | 3 376 | 4 205 |
| Unmarried | 3 928 | 1 197 |
| Other-relative | 689 | 817 |
«Муж» — это 19 715 мужчин и одна женщина. Пол никуда не делся, он переехал в соседний столбец. Такие столбцы называют прокси. В реальных системах прокси — это район проживания, имя, вуз, история покупок, хобби, сайт, с которого пришёл человек.
Уберём вместе с полом и очевидные прокси — семейное положение и роль в семье:
audit(["workclass", "occupation", "race"])
Общая точность упала до 0.823. Разрыв в доле одобренных сократился вдвое: 8,1% против 17,2%. Но посмотри на TPR: у женщин он упал с 0.505 до 0.385, у мужчин — с 0.611 до 0.435. Модель стала хуже распознавать высокие доходы у всех. А разрыв всё равно остался: часы работы, возраст и профессия тоже связаны с полом, а базовые доли в данных различаются по-настоящему.
И последняя колонка, PPV. До удаления она была почти равной — 0.769 и 0.739. После — 0.542 у женщин и 0.762 у мужчин: из женщин, которых модель теперь считает высокооплачиваемыми, права она только в половине случаев. Причина в самих данных. В переписи 1994 года у женщин при тех же часах работы и той же профессии доля высоких доходов была ниже. Модель, у которой отняли и пол, и его прокси, этого не знает — и завышает женщинам прогноз. Мы сблизили доли одобренных ценой другой метрики справедливости. В разделе 5 увидишь, почему все метрики справедливости разом не выполнить.
4. Как мерить: четыре метрики справедливости
Все они сравнивают группы по одному свойству — решений модели или её ошибок. Обозначения, которые подробно разберём в уроке 54: TP — верно одобренные, FP — ошибочно одобренные, FN — ошибочно отклонённые.
| Метрика | Что должно быть равным | Смысл по-человечески |
|---|---|---|
| Демографический паритет | Доля положительных решений | Одобряем одинаковую долю в каждой группе, независимо ни от чего |
| Равные возможности | TPR — доля одобренных среди тех, кто «заслуживает» | Достойный кандидат имеет одинаковый шанс в любой группе |
| Выровненные шансы | И TPR, и FPR | Плюс ошибочно одобряем недостойных одинаково часто |
| Прогностический паритет | PPV — доля «правильно одобренных» среди одобренных | Решение модели «одобрить» значит одно и то же для всех групп |
Посмотри на нашу таблицу через эти очки. PPV почти равны: 0.769 и 0.739 — прогностический паритет почти выполнен. Доля одобренных различается втрое — демографического паритета нет. TPR различается на десять пунктов — равных возможностей тоже нет. Какая метрика важнее? Зависит от задачи, и это решение не техническое.
Демографический паритет уместен, когда исторические данные сами по себе несправедливы и мы сознательно хотим это изменить. Равные возможности — когда важно не пропускать достойных. Прогностический паритет — когда по решению модели действуют люди и им важно, чтобы «высокий риск» значил одно и то же в любой группе. Близкое, но более строгое требование — калибровка: чтобы одно и то же значила каждая оценка модели, например «70%».
5. Почему все метрики сразу нельзя: разбор спора о COMPAS
Представь две группы по 1000 человек. В группе A «положительных» половина — 500 человек, в группе B — пятая часть, 200. Модель одинаково хороша для обеих: PPV = 0,8 и TPR = 0,8.
| Группа A | Группа B | |
|---|---|---|
| Базовая доля положительных | 50% | 20% |
| TP / FN | 400 / 100 | 160 / 40 |
| FP / TN | 100 / 400 | 40 / 760 |
| PPV | 0,80 | 0,80 |
| TPR | 0,80 | 0,80 |
| FPR | 0,20 | 0,05 |
PPV равен, TPR равен, а доля ложных тревог в группе A вчетверо выше. Можно было выбрать иначе: уравнять PPV и долю ложных тревог. Тогда разошлась бы доля пропусков — например, при тех же базовых долях, PPV 0,8 и FPR 0,05 в обеих группах модель находила бы в группе A лишь 20% положительных, а в группе B — 80%. Это не особенность примера, а математика. Если базовые доли в группах различаются и модель не идеальна, нельзя одновременно уравнять PPV, долю ложных тревог и долю пропусков: что-то одно обязано разойтись. В 2016 году это независимо друг от друга показали Alexandra Chouldechova и Джон Клейнберг с соавторами — их результаты близки по смыслу.
Теперь спор о COMPAS читается иначе. Разработчик показывал равный PPV: среди отнесённых к высокому риску доля повторных нарушений в обеих группах одинакова. ProPublica мерила ошибки. Базовые доли повторных нарушений в группах различались, поэтому при равном PPV нельзя было одновременно уравнять и долю ложных тревог, и долю пропусков. В COMPAS разошлись обе. Ложные тревоги — 44,9% среди чернокожих обвиняемых против 23,5% среди белых. Пропуски — наоборот: среди белых обвиняемых, которые потом нарушили закон, модель ошибочно ставила низкий риск в 47,7% случаев, среди чернокожих — в 28,0%. Обе стороны честно посчитали разные метрики, а выполнить их одновременно нельзя.
6. Что делать инженеру: до, во время, после
До обучения.
- Задай данным вопросы: кто их собирал, когда, кого в них нет. Для этого есть шаблон «паспорт датасета» — Datasheets for Datasets, Тимнит Гебру с соавторами.
- Проверь метку. Не прокси ли она, как расходы вместо здоровья у Обермейера?
- Убедись, что в тестовой выборке достаточно людей из каждой группы, иначе метрики по группам будут шуметь.
Во время обучения.
- Перевзвешивание примеров, чтобы малые группы весили больше.
- Обучение с ограничениями: в fairlearn есть
ExponentiatedGradient, который ищет модель с заданной метрикой справедливости при минимальной потере точности.
После обучения.
- Разные пороги для разных групп —
ThresholdOptimizerв fairlearn. Работает, но осторожно: прямое использование защищённого признака в решении может быть незаконным. Это вопрос к юристу, а не к библиотеке. - Мониторинг метрик по группам в продакшене, а не только в день запуска.
- Карточка модели — Model Cards, Маргарет Митчелл с соавторами, 2019. Короткий документ: для чего модель, на каких данных обучена, какие метрики по каким группам, где её применять нельзя.
7. Что говорит закон
- Россия. Статья 16 закона о персональных данных 152-ФЗ запрещает принимать решения, порождающие юридические последствия, исключительно на основе автоматизированной обработки персональных данных — кроме случаев письменного согласия человека или прямо предусмотренных законом. Оператор обязан объяснить порядок такого решения и дать возможность возразить. Для кредитного скоринга или отбора резюме это прямое требование к продукту: должны быть объяснение и путь к человеку. Ещё есть добровольный Кодекс этики в сфере ИИ 2021 года, под которым подписались крупные компании.
- Европейский союз. AI Act относит кредитный скоринг, найм и образование к системам высокого риска. Обязательные требования к ним — документация, контроль данных, надзор человека — вводятся поэтапно.
Это не юридическая консультация. Для реального продукта с решениями о людях нужен юрист, и лучше до запуска, а не после.
8. Тонкости и подводные камни
- Группы определяют люди. Кого считать отдельной группой и по какому признаку — уже выбор, причём не технический.
- Пересечения. Модель может быть честной к женщинам и к пожилым по отдельности, но нечестной к пожилым женщинам. В исследовании Gender Shades 2018 года ошибка коммерческих систем определения пола доходила до 34,7% для темнокожих женщин и не превышала 0,8% для светлокожих мужчин. Разрывы по полу и по цвету кожи были и по отдельности, но самый большой — на пересечении, и по одной оси его масштаб не виден.
- Маленькие группы шумят. Если в тесте 30 человек из группы, её метрики будут прыгать от случайности. Показывай доверительные интервалы или честно пиши, что данных мало.
- Цена справедливости часто меньше, чем кажется. Не спорь о ней на словах — измерь. Бывает, что потеря точности — доли процента.
- «Модель просто отражает реальность». Да. Поэтому перед тем как принимать ею решения, стоит спросить, хотим ли мы эту реальность воспроизводить.
9. Глоссарий
Защищённый признак
Характеристика, по которой нельзя дискриминировать: пол, возраст, национальность, инвалидность и другие — в зависимости от закона.
Прокси-признак
Признак, который сам по себе нейтрален, но тесно связан с защищённым: роль в семье, район, имя, вуз.
Базовая доля
Доля положительных исходов в группе в самих данных, до всякой модели. Если базовые доли групп различаются, все метрики справедливости сразу не выполнить.
Демографический паритет
Равная доля положительных решений во всех группах.
Выровненные шансы
Равные TPR и FPR во всех группах: одинаково часто одобряем достойных и одинаково часто ошибаемся с недостойными.
Прогностический паритет
Равный PPV в группах: среди тех, кого модель одобрила, одинаковая доля верно одобренных.
Калибровка
Более строгое требование: каждая оценка модели, например «70%», означает одну и ту же вероятность исхода в любой группе.
Карточка модели
Короткий документ о назначении модели, её данных, метриках по группам и ограничениях применения.
10. Практика (50 минут)
- Запусти код из раздела 3 в Colab и воспроизведи все три таблицы.
- Добавь в
metricsметрикуfalse_negative_rateиз fairlearn. Кого модель чаще ошибочно отклоняет? - Посчитай метрики не по полу, а по расе: передай в
sensitive_featuresстолбецtest["race"]. Какая группа самая маленькая? Насколько её метрикам можно доверять? - Посчитай руками по таблице из раздела 5: какой была бы доля одобренных в группах A и B? Выполняется ли демографический паритет?
- Попробуй
ThresholdOptimizerиз fairlearn с ограничениемequalized_odds. Как изменились TPR, FPR и общая точность? Документация fairlearn показывает, как его подключить. - Напиши карточку для одной модели — с работы или придуманной: назначение, данные, метрики по группам, где её применять нельзя. Половина страницы.
- Запиши в
progress.md: четыре метрики справедливости одной строкой каждая и почему все сразу выполнить нельзя.
11. Проверь себя
1. Назови три двери, через которые предвзятость попадает в модель, с примером.
Историческая — модель найма учится на прошлых решениях людей. Измерение — прокси вместо цели, как расходы вместо здоровья. Петли обратной связи — патрули идут туда, куда показала модель, и подтверждают её же прогноз.
2. Почему удаление столбца «пол» не делает модель справедливой?
Пол восстанавливается по прокси: в Adult роль «муж» — почти исключительно мужчины. Вдобавок без защищённого признака нельзя даже проверить, есть ли разрыв.
3. Чем равные возможности отличаются от демографического паритета?
Паритет требует одинаковой доли одобренных в группах, независимо от заслуг. Равные возможности требуют одинакового TPR: достойный кандидат должен иметь одинаковый шанс в любой группе.
4. Почему в споре о COMPAS в каком-то смысле правы обе стороны?
Разработчик мерил прогностический паритет — равный PPV, ProPublica — ошибки модели. Базовые доли в группах различались, а при разных базовых долях и неидеальной модели нельзя одновременно уравнять PPV, долю ложных тревог и долю пропусков — что-то обязано разойтись. В COMPAS разошлись и ложные тревоги, и пропуски.
5. Модель «точнее» для группы, где положительных 5%. Хорошая новость?
Не обязательно. При низкой базовой доле ответ «нет» почти всегда верен, и accuracy высокая даром. Смотреть надо на TPR и FPR.
12. Что должно остаться в голове
- Предвзятость входит через данные, метку, оценку и петли обратной связи — не через злой умысел.
- Удаление защищённого признака не работает: он восстанавливается по прокси. Храни его для аудита, но не давай модели.
- Четыре метрики: демографический паритет, равные возможности, выровненные шансы, прогностический паритет. Первая — про решения, остальные — про ошибки.
- При разных базовых долях все метрики сразу выполнить нельзя. Справедливость — выбор, а не вычисление.
- Задача инженера — сделать этот выбор явным: метрика, замер, карточка модели, мониторинг.