Bu sayfa, Cloud Translation API ile çevrilmiştir.
Switch to English

Adil Göstergeler Örnek Olay Pandalar DataFrame

Bu aktivitede, bir Pandalar DataFrame ile Adil Göstergelerini kullanmayı öğreneceksiniz.

Örnek Çalışma Genel Bakış

Bu örnek olay incelemesinde geçerli olacaktır TensorFlow Modeli Analizi ve Adil Göstergelerini her satır yer gerçeği etiketler, çeşitli özelliklerini içeren bir Pandalar DataFrame, bir model tahmini olarak depolanan verileri değerlendirmek için. Bu iş akışı oluşturmak ve modeli eğitmek için kullanılan çerçeve birinin bağımsız potansiyel adalet kaygıları noktaya nasıl kullanılabileceğini gösterir. Bu durum çalışması olduğu gibi, biz onlar bir Pandalar DataFrame dönüştürülür kez herhangi makine öğrenme çerçevesi (örn TensorFlow, JAX, vs) elde edilen sonuçları analiz edebilir.

Bu alıştırma için, biz geliştirilmiştir Derin Sinir Ağı (DNN) modeli kaldıraç olacak Tensorflow Kafes ile Etik Şekil Kısıtlar Hukuk Fakültesi Kabul Konseyi (LSAC) dan Hukuk Fakültesi Kabul veri kümesini kullanarak örnek çalışma. Bu sınıflandırıcı girişimleri bir öğrenci kendi Hukuk Okuluna Giriş Sınavı (SON) puanı ve lisans ortalaması dikkate alınabilir bar, geçecek olup olmadığını tahmin etmek. Bu sınıflandırıcı girişimleri bir öğrenci kendi LSAT puanı ve lisans ortalaması dikkate alınabilir, bar geçecek olup olmadığını tahmin etmek.

LSAC Veri Kümesi

Bu durum çalışması içinde kullanılan veri kümesi aslen 'adlı bir çalışma için toplandı LSAC Milli Boyuna Bar Pasajı Çalışması. LSAC Araştırma Raporu Serisi Linda Wightman tarafından '1998 yılında veri kümesi şu anda barındırılan burada .

  • dnn_bar_pass_prediction: DNN modelinden LSAT öngörü.
  • Cinsiyet: öğrenci Cinsiyet.
  • LSAT: LSAT puanı öğrenci tarafından verildi.
  • pass_bar: Zemin gerçeği etiket öğrenci sonunda çubuğu geçti yapılmayacağını gösteren.
  • yarış: öğrenci yarışı.
  • ugpa: Bir öğrencinin lisans not ortalaması.
 !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.

Gerekli paketleri İthalat:

 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

 

verileri indirin ve ilk veri kümesi keşfetmek.

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

Yapılandırma Adil Göstergeler.

Eğer bir DataFrame ile Adil Göstergelerini kullanırken dikkate almak gerekir o birkaç parametre vardır

  • Girişiniz DataFrame modelinizden bir tahmin sütun ve etiket sütun içermelidir. Varsayılan olarak Centilmenlik Göstergeler bir tahmin sütun denilen arayacaktır prediction ve bir etiket sütunu olarak adlandırılan label sizin DataFrame içinde.

    • Bu değerlerden herhangi biri bulunamazsa bir KeyError arttırılacaktır.
  • Bir DataFrame yanı sıra, aynı zamanda bir eklemeniz gerekir eval_config bilgi işlem için, ilgili ölçümleri hesaplamak için dilimleri ve örnek etiket ve tahminler için sütun adları ölçümlerini içermelidir.

    • metrics_specs bilgi işlem metrikleri ayarlayacaktır. FairnessIndicators metrik adalet ölçümlerini işlemek için gerekli olacak ve isteğe bağlı ek ölçümlerin listesini görebilirsiniz burada .

    • slicing_specs araştırdığınız ilgilendiğiniz özelliğini belirtmek için isteğe bağlı bir dilimleme parametredir. Bu örnek olay race1 kullanıldığı içinde, ancak aynı zamanda (bu DataFrame bağlamında örnek cinsiyet) başka özelliği bu değeri ayarlayabilirsiniz. Eğer slicing_specs sağlanmaz tüm özellikler dahil edilecektir.

    • Senin DataFrame varsayılan farklı bir etiket veya tahmin sütunu içeriyorsa prediction veya label , Yapılandırabileceğiniz label_key ve prediction_key yeni değere.

  • Eğer output_path belirtilmemiş geçici dizin oluşturulur.

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

Adil Göstergeleri model performansı keşfedin.

Adil Göstergeleri çalıştırdıktan sonra, bizler modeller performansını analiz etmek için seçilmiş farklı ölçümlerini benzetebiliriz. Bu durum çalışması içinde biz Adil Göstergeleri dahil ve keyfi AUC aldım.

seninle ilk yarış dilim için genel AUC baktığımızda tartışmalı endişe verici hafif bir model performansında tutarsızlık, başka bir şey göremezsiniz.

  • Asya: 0.58
  • Siyah: 0.58
  • Hispanik: 0.58
  • Diğer: 0.64
  • Beyaz: 0.6

Biz ırk tarafından yanlış negatif oranları bölünmüş baktığımızda Ancak, bizim modeli yine yanlış bir farklı oranlarda çubuk geçen kullanıcı ve bu süre ihtimalini tahmin eder bir çok yapar.

  • Asya: 0.01
  • Siyah: 0.05
  • İspanyol: 0.02
  • Diğer: 0,01
  • Beyaz: 0.01

En önemlisi Siyah ve Beyaz öğrenciler arasındaki fark eden modeli neredeyse 4 kat daha fazla olasılıkla yanlış siyah öğrenci whilte öğrenci daha, bar geçemez olacağını tahmin etmektir, yani 380% hakkındadır. Bu çaba ile devam etseydi, bir uygulayıcı onların modeli her kökenden gelen insanlar için iyi çalışır sağlamak daha fazla zaman harcamak gerektiği yönünde bir işaret olarak bu sonuçları kullanabilirsiniz.

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

Sonuç

Bu durum çalışması kapsamında biz sonra Adil Göstergeleri ile analiz bir Pandalar DataFrame içine bir veri kümesi ithal. Modelinizin sonuçlarını anlamak ve verilerin dayandırıldığı modelinizi sağlanmasında önemli bir adım zararlı önyargı yansıtmamaktadır olduğunu. Bu durum çalışması kapsamında biz LSAC veri kümesini incelenmiş ve bu verilerden tahminler bir öğrenci ırk olarak etkilenebilirler nasıl. kavramı “haksızlık olduğunu ve ne adil. 50 yılı aşkın için birden disiplinlerde, eğitimde dahil işe ve makine öğrenimi girmiştir edilir” 1 Adil Gösterge modeli öğrenme makinenizde yardım Azaltmak adalet kaygılarını bir araçtır.

Daha yaklaşık adalet endişeler bkz öğrenmek Adil Göstergelerini ve kaynakları kullanma konusunda daha fazla bilgi için buraya .


  1. Hutchinson, B., Mitchell, M. (2018). Testi (Un) adalet 50 yaşında: Makine Öğrenmesi için Dersler. https://arxiv.org/abs/1811.10104

apandis

Aşağıda yardım için birkaç fonksiyonları Pandalar DataFrame için ML modelleri dönüştürmek vardır.

 # 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 görüntüleme