Эта страница была переведа с помощью Cloud Translation API.
Switch to English

Панды DataFrame к индикаторам Fairness Case Study

В этом упражнении вы узнаете , как использовать СПРАВЕДЛИВОСТИ индикаторы с пандой DataFrame.

Case Study Обзор

В этом случае исследовании мы будем применять TensorFlow модель анализ и справедливость показатели для оценки данных , хранящихся в виде панды DataFrame, где каждая строка содержит метки истинностные земли, различные функции и предсказание модели. Мы покажем, как этот рабочий процесс может быть использован, чтобы определить потенциальные проблемы справедливости, независимо от рамочной, которая используется для построения и обучения модели. Как и в этом примере, мы можем анализировать результаты любой машинного обучения структуры (например, TensorFlow, JAX, и т.д.), когда они превращаются в панде DataFrame.

Для этого упражнения, мы будем использовать модель Deep Neural Network (DNN) , который был разработан в фигурных Ограничений по этике с Tensorflow Lattice тематическое исследование с использованием Приемной Law School набора данных из юридической школы Приемной Совета (LSAC). Этот классификатор пытается предсказать, будет ли или не студент пройти бар, основанный на их Law School Admission Test (LSAT) баллов и студентов ГПД. Этот классификатор пытается предсказать, будет ли или не студент проходит планку, основываясь на их счет LSAT и студентов ГПД.

LSAC Dataset

Набор данных используется в этом примере была первоначально собраны для исследования под названием « LSAC Национальный Продольная Бар Пассаж Исследование. LSAC Research Report Series "Линда Уайтманом в 1998 году набор данных в настоящее время размещается здесь .

  • dnn_bar_pass_prediction: Предсказание ПОСЛЕДНИЙ из модели DNN.
  • пол: Пол студента.
  • ПОСЛЕДНИЙ: LSAT оценка , полученная студентом.
  • pass_bar: Первый ярлык , указывающий истина в конце концов , является ли студент прошел бар.
  • Гонка: Гонка студента.
  • ugpa: студент бакалавриат ГПД.
 !pip install -q -U \
  tensorflow-model-analysis==0.22.2 \
  tensorflow-data-validation==0.22.1 \
  tfx-bsl==0.22.1 \
  pyarrow==0.16.0

 
ERROR: tensorflow-serving-api 2.2.0 has requirement tensorflow~=2.2.0, but you'll have tensorflow 2.3.0 which is incompatible.
ERROR: tensorflow-transform 0.22.0 has requirement tensorflow!=2.0.*,<2.3,>=1.15, but you'll have tensorflow 2.3.0 which is incompatible.
WARNING: You are using pip version 20.1.1; however, version 20.2 is available.
You should consider upgrading via the '/tmpfs/src/tf_docs_env/bin/python -m pip install --upgrade pip' command.

Импорт необходимых пакетов:

 import os
import tempfile
import pandas as pd
import six.moves.urllib as urllib

import tensorflow_model_analysis as tfma
from google.protobuf import text_format

 

Загрузите данные и изучить первоначальный набор данных.

 # Download the LSAT dataset and setup the required filepaths.
_DATA_ROOT = tempfile.mkdtemp(prefix='lsat-data')
_DATA_PATH = 'https://storage.googleapis.com/lawschool_dataset/bar_pass_prediction.csv'
_DATA_FILEPATH = os.path.join(_DATA_ROOT, 'bar_pass_prediction.csv')

data = urllib.request.urlopen(_DATA_PATH)

_LSAT_DF = pd.read_csv(data)

# To simpliy the case study, we will only use the columns that will be used for
# our model.
_COLUMN_NAMES = [
  'dnn_bar_pass_prediction',
  'gender',
  'lsat',
  'pass_bar',
  'race1',
  'ugpa',
]

_LSAT_DF.dropna()
_LSAT_DF['gender'] = _LSAT_DF['gender'].astype(str)
_LSAT_DF['race1'] = _LSAT_DF['race1'].astype(str)
_LSAT_DF = _LSAT_DF[_COLUMN_NAMES]

_LSAT_DF.head()
 

Настройка Справедливость индикаторы.

Есть несколько параметров, которые вам необходимо принять во внимание при использовании индикаторов справедливости с DataFrame

  • Ваш вход DataFrame должен содержать столбец прогнозирования и столбец метки из вашей модели. По умолчанию индикаторы Справедливость будет искать колонку прогнозирования называется prediction и колонки ярлык под названием label в вашем DataFrame.

    • Если какой-либо из этих значений не найдено KeyError будет поднято.
  • В дополнении к DataFrame, вам также необходимо включить eval_config , который должен включать метрики для вычисления, ломтики для вычисления метрики на и имена столбцов для примера этикеток и предсказания.

    • metrics_specs установит метрики для вычислений. В FairnessIndicators метрический потребуются для визуализации показателей честности , и вы можете увидеть список дополнительных необязательных метрик здесь .

    • slicing_specs является необязательным параметром нарезки , чтобы указать , какие функции вы будете заинтересованы в расследовании. В используется это исследование race1, однако вы также можете установить это значение еще одному признаку (например, пола в контексте этого DataFrame). Если slicing_specs не предусмотрено будут включены все функции.

    • Если DataFrame включает столбец метки или предсказания , который отличается от значения по умолчанию prediction или label , вы можете настроить label_key и prediction_key в новое значение.

  • Если output_path не указан временный каталог будет создан.

 # Specify Fairness Indicators in eval_config.
eval_config = text_format.Parse("""
  model_specs {
    prediction_key: 'dnn_bar_pass_prediction',
    label_key: 'pass_bar'
  }
  metrics_specs {
    metrics {class_name: "AUC"}
    metrics {
      class_name: "FairnessIndicators"
      config: '{"thresholds": [0.50, 0.90]}'
    }
  }
  slicing_specs {
    feature_keys: 'race1'
  }
  slicing_specs {}
  """, tfma.EvalConfig())

# Run TensorFlow Model Analysis.
eval_result = tfma.analyze_raw_data(
  data=_LSAT_DF,
  eval_config=eval_config,
  output_path=_DATA_ROOT)
 
WARNING:apache_beam.runners.interactive.interactive_environment:Dependencies required for Interactive Beam PCollection visualization are not available, please use: `pip install apache-beam[interactive]` to install necessary dependencies to enable all data visualization features.

Warning:apache_beam.io.tfrecordio:Couldn't find python-snappy so the implementation of _TFRecordUtil._masked_crc32c is not as fast as it could be.

Warning:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.6/site-packages/tensorflow_model_analysis/writers/metrics_plots_and_validations_writer.py:68: tf_record_iterator (from tensorflow.python.lib.io.tf_record) is deprecated and will be removed in a future version.
Instructions for updating:
Use eager execution and: 
`tf.data.TFRecordDataset(path)`

Warning:tensorflow:From /tmpfs/src/tf_docs_env/lib/python3.6/site-packages/tensorflow_model_analysis/writers/metrics_plots_and_validations_writer.py:68: tf_record_iterator (from tensorflow.python.lib.io.tf_record) is deprecated and will be removed in a future version.
Instructions for updating:
Use eager execution and: 
`tf.data.TFRecordDataset(path)`

Исследовать эффективность модели со справедливостью показателей.

После запуска СПРАВЕДЛИВОСТИ индикаторы, мы можем визуализировать различные метрики, которые мы выбрали для анализа нашей работы модели. В этом случае исследование мы включили СПРАВЕДЛИВОСТИ индикаторы и произвольно выбрали АУК.

Когда мы сначала посмотрим на общую АУК для каждого среза гонки мы можем увидеть небольшое несоответствие в производительности модели, но ничего, что, возможно, вызывает тревогу.

  • Азиатский: 0,58
  • Черный: 0,58
  • Испанец: 0,58
  • Другое: 0,64
  • Белый: 0,6

Однако, когда мы смотрим на ложный расколе отрицательных ставок по гонке, наша модель снова неправильно предсказывает вероятность пользователя, проходящий бар с различными скоростями и, на этот раз, делает так много.

  • Азиат: 0,01
  • Черный: 0,05
  • Испанец: 0,02
  • Другое: 0,01
  • Белый: 0,01

В частности разница между черными и белыми студентами составляет около 380%, а это означает, что наша модель почти в 4 раза больше шансов неправильно предсказать, что черный студент не будет проходить в баре, чем whilte студента. Если бы мы должны были продолжать эти усилия, практикующие могут использовать эти результаты в качестве сигнала, что они должны тратить больше времени на обеспечение того, чтобы их модель хорошо работает для людей из всех слоев общества.

 # Render Fairness Indicators.
tfma.addons.fairness.view.widget_view.render_fairness_indicator(eval_result)
 
FairnessIndicatorViewer(slicingMetrics=[{'sliceValue': 'white', 'slice': 'race1:white', 'metrics': {'fairness_…

Вывод

В этом случае исследовании мы импортировали набор данных в панде DataFrame, что мы анализировали с СПРАВЕДЛИВОСТЬЮ показателями. Понимание результатов вашей модели и лежащие в основе данных, является важным шагом в обеспечении вашей модели не отражает вредный уклон. В контексте данного исследования мы рассмотрели набор данных LSAC и как предсказания из этих данных может повлиять на гонки студентов. Понятие «что это несправедливо и что справедливо были введены в нескольких дисциплинах в течение более 50 лет, в том числе в сфере образования, найм и обучение машины.» 1 Корректность индикатор является инструментом для снижения риска проблем справедливости в вашей машине модели обучения.

Для получения дополнительной информации об использовании справедливости показателей и ресурсов , чтобы узнать больше о справедливости относится видеть здесь .


  1. Hutchinson, Б., Митчелл, М. (2018). 50 лет испытаний (Un) справедливость: уроки для машинного обучения. https://arxiv.org/abs/1811.10104

аппендикс

Ниже приведены несколько функций, чтобы помочь преобразовать модели ML к панде DataFrame.

 # TensorFlow Estimator to Pandas DataFrame:

# _X_VALUE =  # X value of binary estimator.
# _Y_VALUE =  # Y value of binary estimator.
# _GROUND_TRUTH_LABEL =  # Ground truth value of binary estimator.

def _get_predicted_probabilities(estimator, input_df, get_input_fn):
  predictions = estimator.predict(
      input_fn=get_input_fn(input_df=input_df, num_epochs=1))
  return [prediction['probabilities'][1] for prediction in predictions]

def _get_input_fn_law(input_df, num_epochs, batch_size=None):
  return tf.compat.v1.estimator.inputs.pandas_input_fn(
      x=input_df[[_X_VALUE, _Y_VALUE]],
      y=input_df[_GROUND_TRUTH_LABEL],
      num_epochs=num_epochs,
      batch_size=batch_size or len(input_df),
      shuffle=False)

def estimator_to_dataframe(estimator, input_df, num_keypoints=20):
  x = np.linspace(min(input_df[_X_VALUE]), max(input_df[_X_VALUE]), num_keypoints)
  y = np.linspace(min(input_df[_Y_VALUE]), max(input_df[_Y_VALUE]), num_keypoints)

  x_grid, y_grid = np.meshgrid(x, y)

  positions = np.vstack([x_grid.ravel(), y_grid.ravel()])
  plot_df = pd.DataFrame(positions.T, columns=[_X_VALUE, _Y_VALUE])
  plot_df[_GROUND_TRUTH_LABEL] = np.ones(len(plot_df))
  predictions = _get_predicted_probabilities(
      estimator=estimator, input_df=plot_df, get_input_fn=_get_input_fn_law)
  return pd.DataFrame(
      data=np.array(np.reshape(predictions, x_grid.shape)).flatten())
 
Посмотреть на TensorFlow.org