ترجمت واجهة Cloud Translation API‏ هذه الصفحة.
Switch to English

الباندا DataFrame إلى الإنصاف مؤشرات دراسة حالة

في هذا النشاط، سوف تتعلم كيفية استخدام المؤشرات الإنصاف مع الباندا DataFrame.

حالة نظرة عامة دراسة

في دراسة الحالة هذه سوف نطبق TensorFlow تحليل نموذج و مؤشرات الإنصاف لتقييم البيانات المخزنة كما الباندا DataFrame، حيث يحتوي كل صف تسميات الحقيقة على الارض، وميزات مختلفة، والتنبؤ نموذج. سوف نظهر كيف أن هذا العمل يمكن أن تستخدم لاكتشاف اهتمامات الإنصاف المحتملة، بغض النظر عن إطار واحد المستخدمة في بناء وتدريب النموذج. كما هو الحال في دراسة الحالة هذه، يمكننا تحليل النتائج من أي إطار التعلم الآلي (على سبيل المثال TensorFlow، JAX، الخ) مرة واحدة يتم تحويلها إلى الباندا DataFrame.

لهذه العملية، فإننا سوف الاستفادة من نموذج ديب الشبكات العصبية (DNN) التي وضعت في قيود الشكل لأخلاقيات مع Tensorflow شعرية دراسة حالة استخدام القبول كلية الحقوق بيانات من مجلس القبول في كلية الحقوق (LSAC). يحاول هذا المصنف على التنبؤ ما إذا كان الطالب سيمر شريط، على أساس من القبول كلية الحقوق اختبار (LSAT) درجة وGPA الجامعية. يحاول هذا المصنف على التنبؤ ما إذا كان الطالب سيمر شريط، على أساس درجة LSAT وGPA الجامعية.

LSAC الإدراجات

مجموعة البيانات المستخدمة في دراسة الحالة هذه، تم جمعها أصلا لدراسة بعنوان " LSAC الوطنية طولية بار مرور الدراسة. تقرير أبحاث LSAC سلسلة "من قبل ليندا ايتمان في عام 1998. واستضافت مجموعة البيانات حاليا هنا .

  • dnn_bar_pass_prediction: التنبؤ LSAT من طراز DNN.
  • الجنس: الجنس للطالب.
  • LSAT: LSAT النتيجة يتلقاها الطالب.
  • pass_bar: الأرضي التسمية الحقيقة تشير إلى ما إذا كان الطالب مرت في نهاية المطاف العارضة.
  • السباق: سباق للطالب.
  • ugpa: A الجامعية 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()
 

مؤشرات الإنصاف تكوين.

هناك العديد من العوامل التي سوف تحتاج إلى أن تأخذ في الاعتبار عند استخدام مؤشرات الإنصاف مع 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٪، وهذا يعني أن نموذجنا هو ما يقرب من 4x وأكثر عرضة للتنبؤ بشكل غير صحيح أن الطالب الأسود لن يمر شريط، من طالب 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. هاتشينسون، B.، ميتشل، M. (2018). 50 عاما من اختبار (الامم المتحدة) الإنصاف: دروس لتعلم آلة. 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