このページは Cloud Translation API によって翻訳されました。
Switch to English

公正インジケータケーススタディにパンダDATAFRAME

このアクティビティでは、パンダのデータフレームとの公平性指標を使用する方法を学びます。

ケーススタディの概要

このケーススタディでは、適用されますTensorFlowモデル分析および公正インジケータを各行がグランドトゥルースラベル、さまざまな機能が含まれているパンダDATAFRAME、およびモデル予測として格納されたデータを評価します。私たちは、このワークフローを構築するために使用されるフレームワークの1の独立した潜在的な公平性の問題を、発見し、モデルを訓練するために使用することができる方法を紹介します。このケーススタディのように、我々は、彼らがパンダDATAFRAMEに変換されると任意の機械学習の枠組み(例えばTensorFlow、JAXなど)からの結果を分析することができます。

この演習では、我々は開発したディープ・ニューラルネットワーク(DNN)モデル活用しますTensorflow格子と倫理のための形状の制約法科大学院の入試委員会(LSAC)から法科大学院の入試データセットを使用したケーススタディを。この分類器の試みは、学生が自分の法科大学院の入学試験(LSAT)のスコアと学部GPAに基づいてバーを、合格するかどうかを予測します。この分類器の試みは、学生が自分のLSATスコアと学部GPAに基づいて、バーに合格するかどうかを予測します。

LSACデータセット

このケーススタディ内で使用されるデータセットは、もともと'と呼ばれる研究のために収集したLSAC全国縦断バーパッセージ研究。 LSAC研究報告シリーズのデータセットが現在ホストされている1998年にリンダWightmanよる「 ここに

  • dnn_bar_pass_prediction:DNNモデルからLSAT予測。
  • 性別 :学生の性別。
  • LSAT:LSATスコアは、学生が受信しました。
  • pass_bar:グランドトゥルースラベル学生が最終的にバーを通過したかどうかを示します。
  • レース :学生の人種。
  • UGPA:学生の学部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.

必要なパッケージをインポートします:

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

設定しフェアネス指標。

あなたはデータフレームとの公平性指標を使用するときに考慮に入れる必要がありますいくつかのパラメータがあります。

  • あなたの入力データフレームは、モデルからの予測列とラベル列が含まれている必要があります。デフォルトでは、公平性の指標は、予測列と呼ば探しますpredictionとラベル列と呼ばれるlabelあなたのデータフレーム内。

    • これらの値のいずれかが見つからない場合はKeyError例外が発生します。
  • データフレームに加えて、あなたも含める必要がありますeval_configコンピューティングへのメトリクス、上の指標を計算するためのスライス、および例えば、ラベルや予測のために列名を含める必要があります。

    • metrics_specs計算にメトリックを設定します。 FairnessIndicatorsメトリックは、公平性メトリックをレンダリングする必要があります、あなたは追加のオプションのメトリックの一覧を見ることができますここで

    • slicing_specsあなたが調査に興味を持っている特色かを指定するオプションのスライスパラメータです。このケーススタディのrace1が使用されている中で、しかし、あなたはまた、(このデータフレームの文脈で例の男女のための)別の機能にこの値を設定することができます。場合slicing_specs提供されていないすべての機能が含まれます。

    • あなたのデータフレームは、デフォルトと異なるラベルまたは予測列が含まれている場合predictionlabel 、あなたが設定することができlabel_keyprediction_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)`

公正指標とモデルのパフォーマンスを探検。

公正性指標を実行した後、我々は我々のモデルのパフォーマンスを分析するために選択された異なる指標を可視化することができます。このケーススタディの中で、我々は公平性の指標を含めて任意AUCを選びました。

私たちが最初に各レーススライスの全体的なAUCを見てみると、私たちは間違いなく憂慮すべき若干のモデルのパフォーマンスの不一致が、何を見ることができます。

  • アジア :0.58
  • ブラック :0.58
  • ヒスパニック :0.58
  • その他 :0.64
  • ホワイト :0.6

我々はレースによって分割偽陰性率を見るとしかし、我々のモデルは、再び誤っ異なる速度でバーを渡し、ユーザの可能性を予測し、この時、抽選でそう。

  • アジア :0.01
  • ブラック :0.05
  • ヒスパニック :0.02
  • その他 :0.01
  • ホワイト :0.01

最も顕著な黒と白の学生の違いは、我々のモデルが間違ってwhilte学生よりも、黒の学生がバーを通過しないであろうと予測してほぼ4倍可能性が高いとされることを意味し、約380%です。私たちはこの取り組みを継続した場合、開業医は彼らのモデルは、すべての背景からの人々のためにうまく機能することを確実に多くの時間を費やす必要があることを信号として、これらの結果を使用することができます。

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

結論

このケーススタディの中で、私たちはその後、公平性の指標で分析することをパンダのデータフレームにデータセットをインポートしました。あなたのモデルと基本的なデータの結果を理解することは、あなたのモデルは、有害なバイアスを反映していない保証する上で重要なステップです。このケーススタディの文脈では、我々はLSACデータセットを検討し、このデータから予測は、学生レースによって影響を受けることができますか。コンセプト「何が不公平であると何公正であるが、教育、雇用、および機械学習を含め、優に超える50年間、複数の分野に導入されています。」 1公正インジケータは、お使いの機械学習モデルのヘルプ軽減の公平性の問題へのツールです。

懸念は見公正性についてさらに学ぶために公正インジケータおよびリソースの使用方法の詳細についてはこちらを


  1. ハッチンソン、B.、ミッチェル、M.(2018)。テスト(UN)公正性の50年:機械学習のためのレッスン。 https://arxiv.org/abs/1811.10104

付録

以下に役立ついくつかの機能は、パンダのデータフレームにMLモデルを変換しています。

 # 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上に表示します