Halaman ini diterjemahkan oleh Cloud Translation API.
Switch to English

Panda DataFrame untuk Keadilan Indikator Studi Kasus

Dalam kegiatan ini, Anda akan belajar bagaimana menggunakan Keadilan Indikator dengan Panda DataFrame.

Ikhtisar Studi Kasus

Dalam studi kasus ini kita akan menerapkan Analisis Model TensorFlow dan Indikator Keadilan untuk mengevaluasi data yang disimpan sebagai Panda DataFrame, di mana setiap baris berisi label kebenaran tanah, berbagai fitur, dan prediksi model yang. Kami akan menunjukkan bagaimana alur kerja ini dapat digunakan untuk melihat masalah keadilan potensial, independen dari kerangka kerja yang digunakan untuk membangun dan melatih model. Seperti dalam studi kasus ini, kita dapat menganalisis hasil dari kerangka pembelajaran mesin (misalnya TensorFlow, JAX, dll) setelah mereka dikonversi ke Panda DataFrame.

Untuk latihan ini, kita akan memanfaatkan model Jauh Neural Network (DNN) yang dikembangkan di Kendala Shape Etika dengan Tensorflow Lattice studi kasus menggunakan Penerimaan Law School dataset dari Dewan Law School Admissions (LSAC). upaya classifier ini untuk memprediksi apakah atau tidak seorang siswa akan lulus bar, berdasarkan mereka Law School Admission Test (LSAT) skor dan sarjana IPK. upaya classifier ini untuk memprediksi apakah atau tidak seorang siswa akan lulus, berdasarkan skor LSAT mereka dan sarjana IPK.

LSAC Dataset

Dataset yang digunakan dalam studi kasus ini awalnya dikumpulkan untuk studi yang disebut ' LSAC Nasional Longitudinal Bar Ayat Study. Laporan Penelitian LSAC Series 'oleh Linda Wightman pada tahun 1998. dataset ini sedang diselenggarakan di sini .

  • dnn_bar_pass_prediction: The LSAT prediksi dari model DNN.
  • jenis kelamin: Gender siswa.
  • LSAT: LSAT skor yang diterima oleh siswa.
  • pass_bar: label kebenaran tanah yang menunjukkan apakah atau tidak siswa akhirnya lulus bar.
  • ras: Ras siswa.
  • ugpa: Sebuah sarjana IPK mahasiswa.
 !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.

Mengimpor paket yang diperlukan:

 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

 

Mengunduh data dan menjelajahi dataset awal.

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

Konfigurasi Indikator Keadilan.

Ada beberapa parameter yang Anda harus mempertimbangkan ketika menggunakan Keadilan Indikator dengan DataFrame sebuah

  • DataFrame masukan Anda harus berisi kolom prediksi dan kolom label dari model Anda. Secara default Keadilan Indikator akan mencari kolom prediksi disebut prediction dan kolom label yang disebut label dalam DataFrame Anda.

    • Jika salah satu dari nilai-nilai ini tidak ditemukan KeyError akan dibangkitkan.
  • Selain DataFrame, Anda juga harus mencakup eval_config yang harus mencakup metrik untuk menghitung, irisan untuk menghitung metrik pada, dan nama-nama kolom misalnya label dan prediksi.

    • metrics_specs akan mengatur metrik untuk menghitung. The FairnessIndicators metrik akan diminta untuk membuat metrik keadilan dan Anda dapat melihat daftar metrik opsional tambahan di sini .

    • slicing_specs adalah mengiris parameter opsional untuk menentukan apa fitur Anda tertarik dalam menyelidiki. Dalam hal ini studi race1 digunakan, namun Anda juga dapat mengatur nilai ini ke fitur lain (misalnya gender dalam konteks DataFrame ini). Jika slicing_specs tidak disediakan semua fitur akan disertakan.

    • Jika DataFrame Anda termasuk label atau prediksi kolom yang berbeda dari default prediction atau label , Anda dapat mengkonfigurasi label_key dan prediction_key ke nilai baru.

  • Jika output_path tidak ditentukan direktori sementara akan dibuat.

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

Jelajahi kinerja model dengan Fairness Indikator.

Setelah menjalankan Keadilan Indikator, kita dapat memvisualisasikan metrik yang berbeda yang kami memilih untuk menganalisis kinerja model kami. Dalam studi kasus ini kami menyertakan Keadilan Indikator dan sewenang-wenang mengambil AUC.

Ketika kami pertama kali melihat AUC keseluruhan untuk setiap irisan ras kita bisa melihat sedikit perbedaan dalam kinerja model, tapi tidak ada yang bisa dibilang mengkhawatirkan.

  • Asia: 0,58
  • Black: 0,58
  • Hispanik: 0,58
  • Lainnya: 0.64
  • Putih: 0.6

Namun, ketika kita melihat palsu tingkat negatif perpecahan oleh ras, model kami lagi salah memprediksi kemungkinan pengguna lewat bar pada tingkat yang berbeda dan, kali ini, melakukannya dengan banyak.

  • Asia: 0.01
  • Black: 0.05
  • Hispanik: 0.02
  • Lainnya: 0.01
  • Putih: 0.01

Terutama perbedaan antara Hitam dan Putih mahasiswa adalah sekitar 380%, yang berarti bahwa model kami hampir 4x lebih mungkin untuk benar memprediksi bahwa mahasiswa hitam tidak akan melewati bar, dari seorang mahasiswa whilte. Jika kita melanjutkan upaya ini, seorang praktisi dapat menggunakan hasil ini sebagai sinyal bahwa mereka harus menghabiskan lebih banyak waktu untuk memastikan bahwa model mereka bekerja dengan baik untuk orang-orang dari semua latar belakang.

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

Kesimpulan

Dalam studi kasus ini kita impor dataset menjadi panda DataFrame bahwa kita kemudian dianalisis dengan Fairness Indikator. Memahami hasil model Anda dan mendasari data merupakan langkah penting dalam memastikan model Anda tidak mencerminkan bias yang berbahaya. Dalam konteks studi kasus ini kami memeriksa dataset LSAC dan bagaimana prediksi dari data ini dapat dipengaruhi oleh ras siswa. Konsep “apa yang adil dan apa yang adil telah diperkenalkan di berbagai disiplin ilmu selama lebih dari 50 tahun, termasuk di bidang pendidikan, mempekerjakan, dan mesin belajar.” 1 Keadilan Indikator adalah alat kekhawatiran keadilan membantu mengurangi di mesin Anda model pembelajaran.

Untuk informasi lebih lanjut tentang menggunakan Indikator dan sumber daya Keadilan untuk belajar kekhawatiran keadilan lebih lanjut tentang lihat di sini .


  1. Hutchinson, B., Mitchell, M. (2018). 50 Tahun Test (Un) keadilan: Pelajaran untuk Machine Learning. https://arxiv.org/abs/1811.10104

Lampiran

Berikut adalah beberapa fungsi untuk membantu mengkonversi model ML untuk Panda 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())
 
Lihat di TensorFlow.org