Аудит предвзятости AI-модели
Модель показывает aggregate accuracy 0.89 — звучит хорошо. Но когда разбиваешь метрики по подгруппам, оказывается: для одной демографической группы precision падает до 0.71, а recall до 0.58. Это не просто «честность» — это операционный риск: модель систематически ошибается в конкретном сегменте, и если этот сегмент важен для бизнеса или защищён законодательно, проблема критическая.
Bias audit — это структурированный процесс поиска таких разрывов и их источников.
Что такое bias audit технически
Аудит предвзятости — это измерение метрик модели по подгруппам, сравнение этих метрик, статистическая верификация разрывов и поиск источников в данных, признаках или процессе разметки. Это не одноразовое мероприятие — это процесс, встроенный в ML lifecycle.
Стандарт аудита строится на нескольких вопросах:
1. Какие группы анализировать? Защищённые характеристики по законодательству (пол, возраст, национальность, религия и т.д.) — обязательный минимум. Дополнительно — бизнес-релевантные сегменты (регион, тип клиента, канал приобретения).
2. Какое определение честности выбрать? Demographic parity, equalized odds, calibration within groups — математически несовместимы. Выбор зависит от юзкейса.
3. Какой разрыв считать значимым? Статистическая значимость (p < 0.05 с поправкой на множественные сравнения) + практическая значимость (effect size). 2% разница на выборке 50k — значима статистически, но не обязательно операционально.
Методология аудита
Этап 1 — Data audit
До обучения модели. Анализируем тренировочный датасет:
- Распределение по подгруппам — недопредставленность одной группы ухудшит метрики именно для неё
- Корреляция признаков с защищёнными атрибутами (proxy features)
- Качество разметки по подгруппам (inter-annotator agreement через Cohen's kappa раздельно по группам)
- Temporal bias — данные из разных временных периодов могут содержать разные паттерны для разных групп
Инструменты: pandas profiling, Ydata-profiling, кастомные скрипты для correlation matrix.
Этап 2 — Model performance audit
После обучения. Стандартный набор метрик по каждой подгруппе:
from fairlearn.metrics import MetricFrame
from sklearn.metrics import accuracy_score, precision_score, recall_score
metrics = {
'accuracy': accuracy_score,
'precision': precision_score,
'recall': recall_score,
'false_positive_rate': lambda y_true, y_pred:
((y_pred == 1) & (y_true == 0)).sum() / (y_true == 0).sum()
}
mf = MetricFrame(
metrics=metrics,
y_true=y_test,
y_pred=y_pred,
sensitive_features=sensitive_features
)
print(mf.by_group)
print(mf.difference()) # Max difference between groups
print(mf.ratio()) # Min/max ratio between groups
Целевые пороги (EU AI Act guidelines для high-risk систем):
- Demographic parity difference < 0.1
- Equalized odds difference < 0.1
- False positive rate ratio: 0.8 – 1.25 (правило 80%, EEOC standard)
Этап 3 — Root cause analysis
Если разрыв найден — ищем источник. Четыре основных вектора:
Representation bias: подгруппа составляет 3% датасета, но 15% реальных запросов. Модель «не видела» достаточно примеров. Решение: oversampling (SMOTE, ADASYN), class-weighted loss, focal loss.
Feature bias: признак-прокси. Почтовый индекс → этническая группа. Частота транзакций → уровень дохода → демография. Correlation analysis всех признаков с защищёнными атрибутами. Удаление прокси или adversarial debiasing.
Label bias: аннотаторы размечали по-разному для разных групп. Inter-annotator agreement по подгруппам. Переразметка проблемных сегментов.
Threshold bias: единый порог классификации несправедлив при разных base rates. Threshold optimization отдельно по группам (Fairlearn ThresholdOptimizer).
Практический кейс
Клиент — HR-tech компания, модель скоринга резюме (CatBoost, 85 признаков). Внутренний аудит обнаружил: recall по кандидатам с иностранными именами на 17 п.п. ниже, чем по остальным.
Root cause analysis: признак «название университета» имел высокий вес и был закодирован через target encoding — университеты из определённых стран систематически получали низкие encoded values из-за исторической недопредставленности нанятых кандидатов. Proxy discrimination через образовательный институт.
Решение:
- Заменили target encoding на нейтральный frequency encoding для этого признака
- Добавили adversarial head в архитектуру (доп. классификатор «иностранное/не иностранное имя» с gradient reversal)
- Threshold optimization через Fairlearn для выравнивания recall
Recall gap снизился с 17 п.п. до 4 п.п. при потере AUC = 0.008.
Документация и отчётность
Результаты аудита оформляются в стандартизированном формате. Минимум:
Model Card (Mitchell et al., 2019) — описание модели, тренировочных данных, метрик по подгруппам, известных ограничений.
Algorithmic Impact Assessment — анализ потенциальных вредов, митигации, остаточного риска.
Для EU AI Act (высокорискованные системы) — обязательная техническая документация согласно Annex IV.
Сроки и процесс
Аудит существующей модели — 2–3 недели: сбор данных о подгруппах, измерение метрик, root cause analysis, отчёт с рекомендациями.
Митигация + повторный аудит — ещё 3–5 недель в зависимости от сложности источника bias.
Встроенный процесс — bias audit как часть CI/CD: автоматическая проверка Fairlearn metrics при каждом retrain с блокировкой деплоя при нарушении порогов. Настройка занимает 1–2 недели.







