หน้านี้ได้รับการแปลโดย Cloud Translation API
Switch to English

นุ่น DataFrame เพื่อความเป็นธรรมกรณีศึกษาตัวชี้วัด

ในกิจกรรมนี้คุณจะได้เรียนรู้วิธีการใช้ตัวชี้วัดความเป็นธรรมกับนุ่น DataFrame

ภาพรวมกรณีศึกษา

ในกรณีศึกษานี้เราจะใช้ TensorFlow รูปแบบการวิเคราะห์ และ ความเป็นธรรมตัวชี้วัด ในการประเมินข้อมูลที่เก็บไว้เป็นนุ่น DataFrame ที่แต่ละแถวมีป้ายชื่อจริงพื้นดินคุณสมบัติต่างๆและการทำนายรูปแบบ เราจะแสดงให้เห็นว่าขั้นตอนการทำงานนี้สามารถนำมาใช้เพื่อจุดความกังวลความเป็นธรรมที่มีศักยภาพเป็นอิสระจากกรอบที่ใช้ในการสร้างและฝึกอบรมรุ่น เช่นในกรณีศึกษานี้เราสามารถวิเคราะห์ผลที่ได้จากการเรียนรู้เครื่องกรอบใด ๆ (เช่น TensorFlow, JAX ฯลฯ ) เมื่อพวกเขาได้รับการดัดแปลงเป็นนุ่น DataFrame

สำหรับการออกกำลังกายนี้เราจะยกระดับความลึกโครงข่ายประสาทเทียม (DNN) รูปแบบที่ได้รับการพัฒนาใน ข้อ จำกัด รูปร่างจริยธรรมกับ Tensorflow Lattice กรณีศึกษาโดยใช้ชุดข้อมูลที่รับเข้าเรียนโรงเรียนกฎหมายจากการรับสมัครโรงเรียนกฎหมายสภา (LSAC) นี้ความพยายามในการจําแนกที่จะคาดการณ์หรือไม่ว่านักเรียนจะผ่านบาร์บนพื้นฐานของโรงเรียนกฎหมาย Admission Test (โหลด) คะแนนและระดับปริญญาตรีเกรดเฉลี่ยของพวกเขา นี้ความพยายามในการจําแนกที่จะคาดการณ์หรือไม่ว่านักเรียนจะผ่านบาร์ขึ้นอยู่กับคะแนนของพวกเขาและโหลดเกรดเฉลี่ยระดับปริญญาตรี

LSAC ชุดข้อมูล

ชุดที่ใช้ในกรณีศึกษานี้ถูกเก็บรวบรวมมาเพื่อการศึกษาที่เรียกว่า ' LSAC แห่งชาติระยะยาวบาร์ศึกษา Passage LSAC วิจัยรายงานซีรีส์ 'โดยลินดาไวท์แมนในปี 1998 ชุดข้อมูลที่จะเป็นเจ้าภาพในปัจจุบัน ที่นี่

  • dnn_bar_pass_prediction: ทำนายโหลดจากรูปแบบ DNN
  • เพศ: เพศของนักเรียน
  • lsat: โหลดคะแนนที่ได้รับจากนักเรียน
  • pass_bar: พื้นฉลากจริงแสดงให้เห็นหรือไม่ว่านักเรียนในที่สุดก็ผ่านบาร์
  • การแข่งขัน: การแข่งขันของนักเรียน
  • ugpa: นักศึกษาระดับปริญญาตรีเกรดเฉลี่ย
 !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()
 

การกำหนดค่าตัวชี้วัดความเป็นธรรม

มีตัวแปรหลายอย่างที่คุณจะต้องคำนึงถึงความเป็นธรรมเมื่อใช้ตัวชี้วัดที่มี DataFrame เป็น

  • DataFrame การป้อนข้อมูลของคุณต้องมีคอลัมน์ทำนายและคอลัมน์ฉลากจากรูปแบบของคุณ โดยค่าเริ่มต้นความเป็นธรรมชี้วัดจะมองหาคอลัมน์ทำนายเรียกว่า prediction และคอลัมน์ฉลากที่เรียกว่า label ภายใน DataFrame ของคุณ

    • หากทั้งสองค่าเหล่านี้จะไม่พบ KeyError จะเพิ่มขึ้น
  • นอกจากนี้ในการ DataFrame คุณยังจะต้องมี eval_config ว่าควรจะรวมถึงตัวชี้วัดในการคำนวณชิ้นในการคำนวณตัวชี้วัดและชื่อคอลัมน์ป้ายตัวอย่างและการคาดการณ์

    • metrics_specs จะกำหนดตัวชี้วัดในการคำนวณ FairnessIndicators ตัวชี้วัดจะต้องแสดงผลตัวชี้วัดความเป็นธรรมและคุณสามารถดูรายชื่อของตัวชี้วัดที่เป็นตัวเลือกเพิ่มเติม ที่นี่

    • slicing_specs เป็นตัวแปรที่หั่นตัวเลือกที่จะระบุสิ่งที่มีคุณสนใจในการสืบสวน ภายในนี้ race1 กรณีศึกษาจะใช้ แต่คุณยังสามารถตั้งค่านี้เป็นคุณสมบัติอื่น (เช่นเพศในบริบทของ DataFrame นี้) หาก slicing_specs ไม่ให้คุณสมบัติทั้งหมดจะถูกรวม

    • หาก DataFrame ของคุณมีฉลากหรือการทำนายคอลัมน์ที่แตกต่างจากค่าเริ่มต้น prediction หรือ label คุณสามารถกำหนดค่า label_key และ prediction_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

ที่สะดุดตาที่สุดความแตกต่างระหว่างนักเรียนสีขาวและดำเป็นเรื่องเกี่ยวกับ 380% ซึ่งหมายความว่ารูปแบบของเราเกือบ 4 เท่ามีแนวโน้มที่จะไม่ถูกต้องคาดการณ์ว่านักเรียนสีดำจะไม่ผ่านบาร์กว่านักเรียน whilte ถ้าเราจะยังคงมีความพยายามนี้ผู้ประกอบการสามารถใช้ผลลัพธ์เหล่านี้เป็นสัญญาณว่าพวกเขาควรจะใช้เวลามากขึ้นเพื่อให้มั่นใจว่ารูปแบบของพวกเขาทำงานได้ดีสำหรับคนที่มาจากภูมิหลังทั้งหมด

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

ข้อสรุป

ภายในกรณีศึกษานี้เรานำเข้าชุดข้อมูลเป็นนุ่น DataFrame ที่เราแล้ววิเคราะห์ด้วยความเป็นธรรมชี้วัด ทำความเข้าใจเกี่ยวกับผลของรูปแบบของคุณและข้อมูลพื้นฐานเป็นขั้นตอนสำคัญในการตรวจสอบรูปแบบของคุณไม่ได้สะท้อนให้เห็นถึงอคติที่เป็นอันตราย ในบริบทของกรณีศึกษานี้เราตรวจสอบชุดข้อมูล LSAC และวิธีการคาดการณ์จากข้อมูลนี้อาจได้รับผลกระทบจากการแข่งขันนักเรียน แนวคิดของ“สิ่งที่ไม่เป็นธรรมและสิ่งที่เป็นธรรมได้รับการแนะนำในหลายสาขาวิชาให้ดีกว่า 50 ปีรวมทั้งในด้านการศึกษาการจ้างงานและการเรียนรู้เครื่อง.” 1 ความเป็นธรรมดัชนีเป็นเครื่องมือในการกังวลช่วยลดความเป็นธรรมในการเรียนรู้แบบเครื่องของคุณ

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการใช้ตัวชี้วัดความเป็นธรรมและทรัพยากรที่จะเรียนรู้เพิ่มเติมเกี่ยวกับความกังวลความเป็นธรรมเห็น ที่นี่


  1. ฮัทชินสัน, บี, เซรั่ม, M. (2018) 50 ปีของการทดสอบ (Un) ความเป็นธรรม: บทเรียนสำหรับเครื่องการเรียนรู้ https://arxiv.org/abs/1811.10104

ภาคผนวก

ด้านล่างนี้เป็นฟังก์ชั่นที่จะช่วยให้การแปลงรุ่น ML เพื่อนุ่น 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())
 
ดูบน TensorFlow.org