Вопрос или проблема
В настоящее время я использую tensorflow для создания нейронной сети, которая выполняет базовую бинарную классификацию, и я хотел бы проанализировать смещение модели после обучения.
У меня есть набор данных из примерно 300 000 образцов, и каждый образец имеет список из 112 признаков. Перед обучением мы выбрали 20 признаков, которые хотим использовать для предсказания – раса является признаком в наборе данных, но не используется для обучения нейронной сети.
Я хотел бы иметь возможность видеть, как часто переменная с разными значениями для “расы” классифицируется неверно, не включая признак расы в обучающий набор данных. Есть ли способ фактически исключить этот признак во время обучения, а затем снова добавить его в набор данных, чтобы посмотреть, какова точность для конкретных групп? Или сообщить tensorflow игнорировать эту переменную во время обучения?
Если у вас есть
df
набор данных со всеми столбцамиdf_train
иdf_test
наборы данных для обучения и тестирования со всеми столбцами.X_train
иX_test
наборы данных для обучения и тестирования только с выбранными столбцами.y_train
иy_test
целевые переменные.model
ваша модель.
вы можете сделать что-то вроде
# сделать предсказания
model.fit(X_train, y_train)
predictions = model.predict(X_test)
# создать датафрейм с предсказаниями и расой
# здесь вы можете добавить столько столбцов, сколько хотите
race = df_test['race'].values
results = pd.DataFrame(
{'predictions': predictions,
'race': race
}
)
# изучить влияние расы на предсказания - даже если раса не используется в модели
results.groupby('race').describe()
Кроме того, если вы хотите углубиться в область справедливости ИИ, я рекомендую вам этот проект: https://fairlearn.org/
Ответ или решение
Когда вы создаете нейронную сеть для бинарной классификации с использованием TensorFlow, важно осознать, как отсутствие определенных переменных, таких как «раса», может влиять на производительность модели. Ниже представлен детализированный план для оценки влияния переменной, не используемой в процессе обучения.
1. Подготовка данных
Предположим, у вас есть датафреймы df
, df_train
, и df_test
, а также соответствующие переменные X_train
, X_test
, y_train
, и y_test
, как указано в вашем описании. Прежде чем начинать обучение модели, обратите внимание на то, что у вас есть все необходимые столбцы, чтобы иметь возможность сохранить переменную «раса» при оценке результата.
Пример кода для выбора переменных:
# Загрузка необходимых библиотек
import pandas as pd
import tensorflow as tf
# Предположим, что вы уже подготовили ваши датафреймы
# df: полный набор данных
# df_train: обучающий набор
# df_test: тестовый набор
# X_train: отобранные признаки для обучения
# X_test: отобранные признаки для тестирования
# y_train: целевая переменная для обучения
# y_test: целевая переменная для тестирования
2. Обучение модели
Обучите свою модель, используя только выбранные признаки. Это включает в себя отключение переменной «раса» от процесса обучения.
# Обучение модели
model.fit(X_train, y_train)
3. Получение прогнозов
После завершения обучения модели, вы можете получить прогнозы для тестового набора данных:
# Прогнозирование
predictions = model.predict(X_test)
4. Анализ влияния переменной «раса»
На этом этапе вы создадите новый датафрейм, который будет содержать как прогнозы, так и оригинальную переменную «раса».
# Создание датафрейма для анализа
race = df_test['race'].values
results = pd.DataFrame({
'predictions': predictions,
'race': race
})
# Анализ прогнозов по группам расы
race_analysis = results.groupby('race').describe()
print(race_analysis)
5. Интерпретация результатов
После выполнения анализа, вам нужно внимательно исследовать результаты, чтобы определить, существует ли очевидный перекос в прогнозах в зависимости от группы «раса». Это может проявляться через такие метрики, как точность, количество истинных положительных и ложных отрицательных результатов для каждой группы.
6. Следующие шаги
Если результаты показывают значительное предвзятость в зависимости от расовой группы, рекомендуется рассмотреть варианты улучшения модели, такие как использование методов корректировки предвзятости (bias mitigation) из библиотеки Fairlearn, упомянутой в вашем тексте. Это позволит вам более тщательно следить за справедливостью модели и улучшит ее использование в практических приложениях.
Заключение
Работа с предвзятостью в моделях машинного обучения является важной и многогранной задачей. Используя предложенные методы, вы сможете объективно оценить влияние переменной «раса» на ваши прогнозы, не включая ее в сам процесс обучения. Это позволит вам принимать более обоснованные решения при адаптации модели к бизнес-целям и справедливости.