Trang này được dịch bởi Cloud Translation API.
Switch to English

Gấu trúc DataFrame để Công bằng chỉ số Case Study

Trong hoạt động này, bạn sẽ học cách sử dụng chỉ số Công bằng với một Pandas DataFrame.

Trường hợp Tổng quan nghiên cứu

Trong nghiên cứu trường hợp này, chúng tôi sẽ áp dụng Phân tích mẫu TensorFlowchỉ số công bằng để đánh giá dữ liệu được lưu trữ như một Pandas DataFrame, trong đó mỗi hàng chứa nhãn thực địa, các tính năng khác nhau, và một dự đoán mô hình. Chúng tôi sẽ hiển thị như thế nào công việc này có thể được sử dụng để phát hiện mối quan tâm công bằng tiềm năng, không phụ thuộc vào một khuôn khổ sử dụng để xây dựng và đào tạo mô hình. Như trong trường hợp nghiên cứu này, chúng tôi có thể phân tích các kết quả từ bất kỳ khuôn khổ học máy (ví dụ TensorFlow, JAX, vv) khi chúng được chuyển đổi sang một Pandas DataFrame.

Đối với bài tập này, chúng tôi sẽ tận dụng mô hình Neural Network Sâu (DNN) được phát triển trong chế Shape cho Đạo đức với Tensorflow Lattice trường hợp nghiên cứu sử dụng các Trường Luật Tuyển tập dữ liệu từ tuyển sinh Trường Luật Hội đồng (LSAC). phân loại này cố gắng dự đoán hay không một sinh viên sẽ vượt qua thanh, dựa trên Law School Admission Test (LSAT) điểm số của họ và đại học GPA. phân loại này cố gắng dự đoán hay không một sinh viên sẽ vượt qua quầy bar, dựa trên điểm LSAT của họ và đại học GPA.

LSAC Dataset

Bộ dữ liệu sử dụng trong nghiên cứu trường hợp này ban đầu được thu thập cho một nghiên cứu gọi là ' LSAC Quốc Longitudinal Study Bar Passage. Báo cáo nghiên cứu LSAC Dòng 'bởi Linda Wightman vào năm 1998. Các số liệu hiện đang được tổ chức ở đây .

  • dnn_bar_pass_prediction: Dự đoán LSAT từ mô hình DNN.
  • giới tính: Giới tính của học sinh.
  • LSAT: LSAT điểm nhận bởi các học sinh.
  • pass_bar: Ground thật nhãn ghi rõ có hay không học sinh cuối cùng thông qua quầy bar.
  • chủng tộc: Chủng tộc của học sinh.
  • ugpa: Một đại học GPA của học sinh.
 !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 các gói cần thiết:

 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

 

Tải dữ liệu và khám phá các tập dữ liệu ban đầu.

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

Các chỉ số Công bằng Configure.

Có một số thông số mà bạn sẽ cần phải đưa vào tài khoản khi sử dụng chỉ số Công bằng với một DataFrame

  • DataFrame đầu vào của bạn phải chứa một cột dự đoán và cột nhãn từ mô hình của bạn. Theo mặc định Công bằng chỉ số sẽ tìm kiếm một cột dự đoán được gọi là prediction và một cột nhãn gọi là label trong DataFrame của bạn.

    • Nếu một trong những giá trị không được tìm thấy một KeyError sẽ được nâng lên.
  • Ngoài DataFrame, bạn cũng sẽ cần phải bao gồm một eval_config rằng nên bao gồm các số liệu để tính toán, lát để tính toán các số liệu trên, và các tên cột cho nhãn ví dụ và dự đoán.

    • metrics_specs sẽ thiết lập các số liệu để tính toán. Các FairnessIndicators số liệu sẽ được yêu cầu để làm cho các số liệu công bằng và bạn có thể nhìn thấy một danh sách các số liệu tùy chọn thêm ở đây .

    • slicing_specs là một tham số cắt tùy chọn để xác định những gì tính năng mà bạn đang quan tâm trong việc điều tra. Trong trường hợp này race1 nghiên cứu được sử dụng, tuy nhiên bạn cũng có thể thiết lập giá trị này để tính năng khác (ví dụ giới trong bối cảnh DataFrame này). Nếu slicing_specs không được cung cấp tất cả các tính năng này sẽ được đưa vào.

    • Nếu DataFrame của bạn bao gồm một nhãn hoặc dự đoán cột đó là khác với mặc định prediction hoặc label , bạn có thể cấu hình các label_keyprediction_key đến một giá trị mới.

  • Nếu output_path không được xác định một thư mục tạm thời sẽ được tạo ra.

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

Khám phá hiệu suất mô hình với chỉ số Công bằng.

Sau khi chạy chỉ số Công bằng, chúng ta có thể hình dung các số liệu khác nhau mà chúng tôi lựa chọn để phân tích hiệu suất mô hình của chúng tôi. Trong trường hợp nghiên cứu này, chúng tôi đã bao gồm chỉ số Công bằng và tùy tiện nhặt AUC.

Khi chúng tôi lần đầu tiên nhìn vào AUC tổng thể đối với từng lát chủng tộc chúng ta có thể thấy một sự khác biệt nhỏ trong thực hiện mô hình, nhưng không được coi là đáng báo động.

  • Châu Á: 0,58
  • Đen: 0,58
  • Tây Ban Nha: 0,58
  • Khác: 0,64
  • Trắng: 0.6

Tuy nhiên, khi chúng ta nhìn vào tỷ lệ âm tính giả chia theo chủng tộc, mô hình của chúng tôi một lần nữa sai dự đoán khả năng của một người sử dụng thông qua thanh với tốc độ khác nhau và, lần này, làm như vậy bởi rất nhiều.

  • Châu Á: 0.01
  • Đen: 0.05
  • Tây Ban Nha: 0.02
  • Khác: 0.01
  • Trắng: 0.01

Đáng chú ý nhất là sự khác biệt giữa sinh viên Black and White là khoảng 380%, có nghĩa là mô hình của chúng tôi là gần 4x nhiều khả năng không đúng cách dự đoán rằng một học sinh da đen sẽ không vượt qua quầy bar, hơn một sinh viên whilte. Nếu chúng ta tiếp tục với nỗ lực này, một học viên có thể sử dụng các kết quả này như một tín hiệu rằng họ nên dành nhiều thời gian đảm bảo rằng mô hình của họ hoạt động tốt cho mọi người từ tất cả các nền tảng.

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

Phần kết luận

Trong nghiên cứu trường hợp này chúng tôi nhập khẩu một tập dữ liệu vào một Pandas DataFrame rằng chúng ta sau đó được phân tích với chỉ số Công bằng. Tìm hiểu về kết quả của mô hình của bạn và tiềm ẩn dữ liệu là một bước quan trọng trong việc đảm bảo mô hình của bạn không phản ánh xu hướng có hại. Trong bối cảnh của nghiên cứu trường hợp này, chúng tôi đã kiểm tra các dữ liệu LSAC và làm thế nào dự đoán từ dữ liệu này có thể bị ảnh hưởng bởi một cuộc đua sinh viên. Khái niệm về “cái gì là không công bằng và những gì được công bằng đã được giới thiệu trong nhiều lĩnh vực trong hơn 50 năm, kể cả trong giáo dục, tuyển dụng, và học máy.” 1 Công bằng chỉ số là một công cụ để giúp giảm thiểu những lo ngại công bằng trong máy tính của bạn học tập mô hình.

Để biết thêm thông tin về việc sử dụng các chỉ số và các nguồn lực công bằng để tìm hiểu về nhiều mối quan tâm công bằng nhìn thấy ở đây .


  1. Hutchinson, B., Mitchell, M. (2018). 50 năm kinh nghiệm (Un) công bằng: Bài học cho Machine Learning. https://arxiv.org/abs/1811.10104

ruột thừa

Dưới đây là một vài chức năng để giúp chuyển đổi mô hình ML để Pandas 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())
 
Xem trên TensorFlow.org