Diese Seite wurde von der Cloud Translation API übersetzt.
Switch to English

Pandas Datenrahmen zu Fairness Indikatoren Fallstudie

In dieser Aktivität erfahren Sie, wie Fairness Indikatoren verwenden , um mit einem Pandas Datenrahmen.

Fallstudie Übersicht

In dieser Fallstudie werden wir anwenden TensorFlow Modellanalyse und Fairness Indikatoren zur Auswertung der Daten gespeichert als Pandas Datenrahmen, wobei jede Zeile enthält Ground Truth Etiketten, verschiedene Funktionen, und eine Modellvorhersage. Wir werden zeigen, wie dieser Workflow verwendet werden kann potenzielle Fairness betrifft, unabhängig von dem Rahmen ein beschmutzen verwendet zu konstruieren und das Modell zu trainieren. Wie in dieser Fallstudie können wir die Ergebnisse von jedem maschinellen Lernen Rahmen (zB TensorFlow, JAX, etc.) analysieren, sobald sie zu einem Pandas Datenrahmen umgewandelt werden.

Für diese Übung werden wir das Tiefe Neural Network (DNN) Modell nutzen , die in der entwickelten Form Constraints für Ethik mit Tensorflow Lattice Fallstudie mit der Law School Admissions - Datensatz aus der Law School Admissions Council (LSAC). Dieser Klassifikator versucht vorherzusagen, ob ein Schüler die Bar übergeben wird, auf der Grundlage ihrer Law School Admission Test (LSAT) Partitur und Bachelor-GPA. Dieser Klassifikator versucht vorherzusagen, ob ein Teilnehmer die Bar übergeben, auf der Grundlage ihrer LSAT Punktzahl und Bachelor-GPA.

LSAC Dataset

Der Datensatz in dieser Fallstudie verwendet wurde ursprünglich für eine Studie gesammelt "genannt LSAC National Longitudinal Bar Passage Studie. LSAC Research Report Series "von Linda Wightman 1998. Der Datensatz wird derzeit gehostet hier .

  • dnn_bar_pass_prediction: Die LSAT Vorhersage von dem Modell DNN.
  • Geschlecht: Geschlecht des Schülers.
  • Punktzahl durch die Schüler erhielt LSAT: lsat.
  • pass_bar: Grund Wahrheit Etikett angibt , ob der Student schließlich die Latte.
  • Rennen: Rennen des Schülers.
  • ugpa: Ein Student des Bachelor - GPA.
 !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.

Importieren erforderlichen Pakete:

 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

 

Laden Sie die Daten und erkunden Sie die anfängliche Datenmenge.

 # 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()
 

Konfigurieren Fairness Indikatoren.

Es gibt mehrere Parameter, die Sie berücksichtigen müssen, wenn sie mit einem Datenrahmen Fairness Indikatoren

  • Ihre Eingabe Datenrahmen muss eine Vorhersage Spalte und Etiketten Spalte aus dem Modell enthalten. Standardmässig werden Fairness Anzeigen suchen eine Vorhersage Spalte namens prediction und ein Label Spalte namens label in Ihrem Datenrahmen.

    • Wenn eine dieser Werte sind kein KeyError wird angehoben gefunden.
  • Neben einem Datenrahmen, werden Sie auch brauchen , um umfassen eval_config , die die Metriken zu berechnen, Scheiben enthalten sollte die Metriken auf, und die Spaltennamen zum Beispiel Etiketten und Prognosen zu berechnen.

    • metrics_specs werden die Metriken zu berechnen eingestellt. Die FairnessIndicators Metrik wird benötigt , um die Fairness - Metriken zu machen und Sie können eine Liste der zusätzlichen optionalen Metriken siehe hier .

    • slicing_specs ist ein optionaler Slicing Parameter angeben , welche Funktion , die Sie bei der Untersuchung interessiert sind. Innerhalb dieser Fallstudie Race1 verwendet, jedoch können Sie diesen Wert auch auf eine andere Funktion (zum Beispiel Gender im Rahmen dieser Datenrahmen) festgelegt. Wenn slicing_specs nicht vorgesehen ist werden alle Funktionen enthalten sein.

    • Wenn Ihr Datenrahmen ein Etikett oder eine Vorhersage Spalte enthält , die von dem Standard unterscheidet prediction oder label , können Sie die Konfiguration label_key und prediction_key auf einen neuen Wert.

  • Wenn output_path nicht angegeben wird , wird ein temporäres Verzeichnis erstellt werden.

 # 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)`

Entdecken Modell Leistung mit Fairness Indikatoren.

Fairness Indicators Nach ausgeführt wird, können wir verschiedene Metriken visualisieren, dass wir unsere Modelle Leistung analysieren ausgewählt. Im Rahmen dieser Fallstudie haben wir Fairness Indikatoren einbezogen und AUC willkürlich ausgewählt.

Als wir an der Gesamt AUC für jedes Rennen Scheibe zunächst einen Blick können wir eine leichte Diskrepanz in Modellleistung sehen, aber nichts, was wohl alarmierend.

  • Asian: 0,58
  • Schwarz: 0,58
  • Hispanic: 0,58
  • Sonstiges: 0,64
  • Weiß: 0,6

Wenn wir jedoch an der falschen negativen Raten aufgeteilt nach Rasse aussehen, unser Modell wieder falsch die Wahrscheinlichkeit eines Benutzer vorhersagt, die Bar mit unterschiedlichen Geschwindigkeiten und diese Zeit vorbei tut dies durch eine Menge.

  • Asian: 0,01
  • Schwarz: 0,05
  • Hispanic: 0,02
  • Sonstiges: 0,01
  • Weiß: 0,01

Am bemerkenswertesten ist der Unterschied zwischen Schwarz und Weiß Studenten beträgt etwa 380%, was bedeutete, dass unser Modell fast 4x mehr wahrscheinlich falsch vorhersagen, dass ein schwarzer Student wird nicht in der Bar passieren, als ein whilte Student. Wenn wir mit diesen Bemühungen fortzusetzen, könnte ein Arzt diese Ergebnisse als ein Signal verwendet werden, sie sollten mehr Zeit damit verbringen, um sicherzustellen, dass ihr Modell aus allen Schichten gut für die Menschen arbeitet.

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

Fazit

Im Rahmen dieser Fallstudie importierten wir einen Datensatz in einen Pandas Datenrahmen, dass wir dann mit Fairness Indikatoren analysiert. die Ergebnisse des Modells und der zugrunde liegenden Daten zu verstehen, ist ein wichtiger Schritt, um Ihr Modell um sicherzustellen, keine schädlichen Bias reflektieren. Im Rahmen dieser Fallstudie untersuchten wir die den LSAC-Datensatz und wie die Prognosen aus diesen Daten könnten von einem Student Rennen beeinflusst werden. Das Konzept der „was ist unfair und was fair ist weit mehr als 50 Jahre in verschiedenen Disziplinen eingeführt wurde, einschließlich in den Bereichen Bildung, Einstellung, und maschinelles Lernen.“ 1 Fairness - Indikator ist ein Werkzeug , um Hilfe zu mildern Fairness Bedenken in Ihrer Maschine Lernmodell.

Weitere Informationen über die Fairness Indikatoren und Ressourcen mehr über Fairness Bedenken sehen lernen hier .


  1. Hutchinson, B., Mitchell, M. (2018). 50 Jahre Test (Un) Fairness: Lehren für maschinelles Lernen. https://arxiv.org/abs/1811.10104

Blinddarm

Unten sind ein paar Funktionen, um Hilfe zu konvertieren ML-Modelle Pandas Datenrahmen.

 # 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())
 
Auf TensorFlow.org