بررسی اجمالی مطالعه موردی
در این مطالعه مورد ما اعمال خواهد شد TensorFlow تجزیه و تحلیل مدل و شاخص عدالت برای ارزیابی داده های ذخیره شده به عنوان یک پاندا DataFrame، که در آن هر ردیف شامل زمین برچسب حقیقت، ویژگی های مختلف، و یک پیش بینی مدل. ما نشان خواهیم داد که چگونه می توان از این گردش کار برای شناسایی نگرانی های بالقوه انصاف، مستقل از چارچوب مورد استفاده برای ساخت و آموزش مدل استفاده کرد. همانطور که در این مطالعه موردی، میتوانیم نتایج حاصل از هر چارچوب یادگیری ماشینی (مانند TensorFlow، JAX و غیره) را هنگامی که به یک Pandas DataFrame تبدیل شوند، تجزیه و تحلیل کنیم.
برای این تمرین، ما را به مدل شبکه عصبی عمیق (DNN) که در توسعه داده شد اهرم محدودیت شکل اخلاق با Tensorflow شبکه مورد مطالعه با استفاده از دانشکده حقوق پذیرش مجموعه داده از شورای پذیرش دانشکده حقوق (LSAC). این طبقهبندیکننده تلاش میکند تا بر اساس نمره آزمون پذیرش دانشکده حقوق (LSAT) و معدل کارشناسی آنها، پیشبینی کند که آیا دانشآموزی میتواند این نوار را بگذراند یا خیر. این طبقهبندیکننده تلاش میکند تا بر اساس نمره LSAT و معدل مقطع کارشناسی، پیشبینی کند که آیا دانشآموزی میتواند این نوار را بگذراند یا خیر.
مجموعه داده LSAC
مجموعه داده مورد استفاده در این مطالعه مورد در اصل برای مطالعه به نام "جمع آوری شد LSAC ملی طولی نوار پاساژ مطالعه. LSAC گزارش تحقیقات سری توسط لیندا وایتمن در سال 1998. مجموعه داده ها در حال حاضر به میزبانی اینجا .
- dnn_bar_pass_prediction: پیش بینی آخر از مدل DNN.
- جنسیت: جنسیت دانش آموز.
- آخر: آخر نمره دریافت شده توسط دانش آموز.
- pass_bar: زمین برچسب حقیقت نشان می دهد یا نه دانش آموز در نهایت به تصویب نوار.
- مسابقه: مسابقه دانش آموز.
- ugpa: یک مقطع کارشناسی معدل دانش آموز است.
!pip install -q -U pip==20.2
!pip install -q -U \
tensorflow-model-analysis==0.30.0 \
tensorflow-data-validation==0.30.0 \
tfx-bsl==0.30.0
واردات بسته های مورد نیاز:
import os
import tempfile
import pandas as pd
import six.moves.urllib as urllib
import pprint
import tensorflow_model_analysis as tfma
from google.protobuf import text_format
import tensorflow as tf
tf.compat.v1.enable_v2_behavior()
داده ها را دانلود کنید و مجموعه داده اولیه را بررسی کنید.
# 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.7/site-packages/tensorflow_model_analysis/writers/metrics_plots_and_validations_writer.py:113: 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.7/site-packages/tensorflow_model_analysis/writers/metrics_plots_and_validations_writer.py:113: 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)`
عملکرد مدل را با نشانگرهای انصاف کاوش کنید.
پس از اجرای Fairness Indicators، میتوانیم معیارهای مختلفی را که برای تجزیه و تحلیل عملکرد مدلهایمان انتخاب کردهایم تجسم کنیم. در این مطالعه موردی، ما شاخصهای انصاف را گنجاندهایم و AUC را خودسرانه انتخاب کردهایم.
هنگامی که ما برای اولین بار به AUC کلی برای هر بخش مسابقه نگاه می کنیم، می توانیم اختلاف جزئی در عملکرد مدل مشاهده کنیم، اما چیزی که مسلماً نگران کننده نیست.
- آسیا: 0.58
- سیاه و سفید: 0.58
- اسپانیایی: 0.58
- دیگر: 0.64
- سفید: 0.6
با این حال، وقتی به نرخهای منفی کاذب تقسیم شده بر اساس نژاد نگاه میکنیم، مدل ما دوباره به اشتباه احتمال عبور کاربر از نوار را با نرخهای مختلف پیشبینی میکند و این بار این کار را بسیار انجام میدهد.
- آسیا: 0.01
- سیاه و سفید: 0.05
- اسپانیایی: 0.02
- دیگر: 0.01
- سفید: 0.01
مهم ترین تفاوت بین دانش آموزان سیاه و سفید حدود 380٪ است، به این معنی که مدل ما تقریباً 4 برابر بیشتر احتمال دارد که یک دانش آموز سیاهپوست به طور نادرست از نوار عبور نکند. اگر بخواهیم به این تلاش ادامه دهیم، یک تمرینکننده میتواند از این نتایج بهعنوان سیگنالی استفاده کند که باید زمان بیشتری را صرف اطمینان از اینکه مدلشان برای افراد با هر زمینهای خوب عمل میکند، صرف کند.
# Render Fairness Indicators.
tfma.addons.fairness.view.widget_view.render_fairness_indicator(eval_result)
FairnessIndicatorViewer(slicingMetrics=[{'sliceValue': 'Overall', 'slice': 'Overall', 'metrics': {'auc': {'dou…
tfma.EvalResult
eval_result
شی، بالا در رندر render_fairness_indicator()
است، API خود را دارد که می توان برای خواندن نتایج TFMA به برنامه های خود را.
get_slice_names()
و get_metric_names()
برای بدست آوردن برش ها و معیارهای ارزیابی شده، می توانید از توابع مربوطه استفاده کنید.
pp = pprint.PrettyPrinter()
print("Slices:")
pp.pprint(eval_result.get_slice_names())
print("\nMetrics:")
pp.pprint(eval_result.get_metric_names())
Slices: [(), (('race1', 'white'),), (('race1', 'hisp'),), (('race1', 'asian'),), (('race1', 'black'),), (('race1', 'nan'),), (('race1', 'other'),)] Metrics: ['fairness_indicators_metrics/negative_rate@0.9', 'fairness_indicators_metrics/true_negative_rate@0.5', 'fairness_indicators_metrics/false_positive_rate@0.9', 'fairness_indicators_metrics/false_discovery_rate@0.9', 'fairness_indicators_metrics/false_positive_rate@0.5', 'auc', 'fairness_indicators_metrics/false_discovery_rate@0.5', 'fairness_indicators_metrics/false_omission_rate@0.9', 'fairness_indicators_metrics/false_omission_rate@0.5', 'fairness_indicators_metrics/true_positive_rate@0.5', 'fairness_indicators_metrics/positive_rate@0.9', 'fairness_indicators_metrics/false_negative_rate@0.9', 'fairness_indicators_metrics/negative_rate@0.5', 'fairness_indicators_metrics/true_positive_rate@0.9', 'fairness_indicators_metrics/true_negative_rate@0.9', 'fairness_indicators_metrics/false_negative_rate@0.5', 'fairness_indicators_metrics/positive_rate@0.5']
get_metrics_for_slice()
و get_metrics_for_all_slices()
اگر شما می خواهید برای دریافت متریک برای یک تکه خاص، شما می توانید استفاده کنید get_metrics_for_slice()
. این تابع یک فرهنگ لغت نگاشت نام متریک به مقادیر متریک .
baseline_slice = ()
black_slice = (('race1', 'black'),)
print("Baseline metric values:")
pp.pprint(eval_result.get_metrics_for_slice(baseline_slice))
print("Black metric values:")
pp.pprint(eval_result.get_metrics_for_slice(black_slice))
Baseline metric values: {'auc': {'doubleValue': 0.6286112666130066}, 'fairness_indicators_metrics/false_discovery_rate@0.5': {'doubleValue': 0.052173524948674464}, 'fairness_indicators_metrics/false_discovery_rate@0.9': {'doubleValue': 0.0502241746297722}, 'fairness_indicators_metrics/false_negative_rate@0.5': {'doubleValue': 4.7085412939071474e-05}, 'fairness_indicators_metrics/false_negative_rate@0.9': {'doubleValue': 0.012524719841793012}, 'fairness_indicators_metrics/false_omission_rate@0.5': {'doubleValue': 1.0}, 'fairness_indicators_metrics/false_omission_rate@0.9': {'doubleValue': 0.8159509202453987}, 'fairness_indicators_metrics/false_positive_rate@0.5': {'doubleValue': 1.0}, 'fairness_indicators_metrics/false_positive_rate@0.9': {'doubleValue': 0.9486740804106074}, 'fairness_indicators_metrics/negative_rate@0.5': {'doubleValue': 4.462891060829205e-05}, 'fairness_indicators_metrics/negative_rate@0.9': {'doubleValue': 0.014549024858303209}, 'fairness_indicators_metrics/positive_rate@0.5': {'doubleValue': 0.9999553710893917}, 'fairness_indicators_metrics/positive_rate@0.9': {'doubleValue': 0.9854509751416968}, 'fairness_indicators_metrics/true_negative_rate@0.5': {'doubleValue': 0.0}, 'fairness_indicators_metrics/true_negative_rate@0.9': {'doubleValue': 0.05132591958939264}, 'fairness_indicators_metrics/true_positive_rate@0.5': {'doubleValue': 0.9999529145870609}, 'fairness_indicators_metrics/true_positive_rate@0.9': {'doubleValue': 0.987475280158207} } Black metric values: {'auc': {'doubleValue': 0.5779293775558472}, 'fairness_indicators_metrics/false_discovery_rate@0.5': {'doubleValue': 0.22189128816083395}, 'fairness_indicators_metrics/false_discovery_rate@0.9': {'doubleValue': 0.21048451151707703}, 'fairness_indicators_metrics/false_negative_rate@0.5': {'doubleValue': 0.0}, 'fairness_indicators_metrics/false_negative_rate@0.9': {'doubleValue': 0.04880382775119617}, 'fairness_indicators_metrics/false_omission_rate@0.5': {'doubleValue': 'NaN'}, 'fairness_indicators_metrics/false_omission_rate@0.9': {'doubleValue': 0.6071428571428571}, 'fairness_indicators_metrics/false_positive_rate@0.5': {'doubleValue': 1.0}, 'fairness_indicators_metrics/false_positive_rate@0.9': {'doubleValue': 0.889261744966443}, 'fairness_indicators_metrics/negative_rate@0.5': {'doubleValue': 0.0}, 'fairness_indicators_metrics/negative_rate@0.9': {'doubleValue': 0.06254653760238273}, 'fairness_indicators_metrics/positive_rate@0.5': {'doubleValue': 1.0}, 'fairness_indicators_metrics/positive_rate@0.9': {'doubleValue': 0.9374534623976173}, 'fairness_indicators_metrics/true_negative_rate@0.5': {'doubleValue': 0.0}, 'fairness_indicators_metrics/true_negative_rate@0.9': {'doubleValue': 0.11073825503355705}, 'fairness_indicators_metrics/true_positive_rate@0.5': {'doubleValue': 1.0}, 'fairness_indicators_metrics/true_positive_rate@0.9': {'doubleValue': 0.9511961722488038} }
اگر شما می خواهید برای دریافت متریک برای تمام برش، get_metrics_for_all_slices()
برمی گرداند فرهنگ لغت نگاشت هر قطعه به مربوط get_metrics_for_slices(slice)
.
pp.pprint(eval_result.get_metrics_for_all_slices())
{(): {'auc': {'doubleValue': 0.6286112666130066}, 'fairness_indicators_metrics/false_discovery_rate@0.5': {'doubleValue': 0.052173524948674464}, 'fairness_indicators_metrics/false_discovery_rate@0.9': {'doubleValue': 0.0502241746297722}, 'fairness_indicators_metrics/false_negative_rate@0.5': {'doubleValue': 4.7085412939071474e-05}, 'fairness_indicators_metrics/false_negative_rate@0.9': {'doubleValue': 0.012524719841793012}, 'fairness_indicators_metrics/false_omission_rate@0.5': {'doubleValue': 1.0}, 'fairness_indicators_metrics/false_omission_rate@0.9': {'doubleValue': 0.8159509202453987}, 'fairness_indicators_metrics/false_positive_rate@0.5': {'doubleValue': 1.0}, 'fairness_indicators_metrics/false_positive_rate@0.9': {'doubleValue': 0.9486740804106074}, 'fairness_indicators_metrics/negative_rate@0.5': {'doubleValue': 4.462891060829205e-05}, 'fairness_indicators_metrics/negative_rate@0.9': {'doubleValue': 0.014549024858303209}, 'fairness_indicators_metrics/positive_rate@0.5': {'doubleValue': 0.9999553710893917}, 'fairness_indicators_metrics/positive_rate@0.9': {'doubleValue': 0.9854509751416968}, 'fairness_indicators_metrics/true_negative_rate@0.5': {'doubleValue': 0.0}, 'fairness_indicators_metrics/true_negative_rate@0.9': {'doubleValue': 0.05132591958939264}, 'fairness_indicators_metrics/true_positive_rate@0.5': {'doubleValue': 0.9999529145870609}, 'fairness_indicators_metrics/true_positive_rate@0.9': {'doubleValue': 0.987475280158207} }, (('race1', 'asian'),): {'auc': {'doubleValue': 0.5817844271659851}, 'fairness_indicators_metrics/false_discovery_rate@0.5': {'doubleValue': 0.07803790412486064}, 'fairness_indicators_metrics/false_discovery_rate@0.9': {'doubleValue': 0.07674943566591422}, 'fairness_indicators_metrics/false_negative_rate@0.5': {'doubleValue': 0.0}, 'fairness_indicators_metrics/false_negative_rate@0.9': {'doubleValue': 0.010882708585247884}, 'fairness_indicators_metrics/false_omission_rate@0.5': {'doubleValue': 'NaN'}, 'fairness_indicators_metrics/false_omission_rate@0.9': {'doubleValue': 0.8181818181818182}, 'fairness_indicators_metrics/false_positive_rate@0.5': {'doubleValue': 1.0}, 'fairness_indicators_metrics/false_positive_rate@0.9': {'doubleValue': 0.9714285714285714}, 'fairness_indicators_metrics/negative_rate@0.5': {'doubleValue': 0.0}, 'fairness_indicators_metrics/negative_rate@0.9': {'doubleValue': 0.012263099219620958}, 'fairness_indicators_metrics/positive_rate@0.5': {'doubleValue': 1.0}, 'fairness_indicators_metrics/positive_rate@0.9': {'doubleValue': 0.987736900780379}, 'fairness_indicators_metrics/true_negative_rate@0.5': {'doubleValue': 0.0}, 'fairness_indicators_metrics/true_negative_rate@0.9': {'doubleValue': 0.02857142857142857}, 'fairness_indicators_metrics/true_positive_rate@0.5': {'doubleValue': 1.0}, 'fairness_indicators_metrics/true_positive_rate@0.9': {'doubleValue': 0.9891172914147521} }, (('race1', 'black'),): {'auc': {'doubleValue': 0.5779293775558472}, 'fairness_indicators_metrics/false_discovery_rate@0.5': {'doubleValue': 0.22189128816083395}, 'fairness_indicators_metrics/false_discovery_rate@0.9': {'doubleValue': 0.21048451151707703}, 'fairness_indicators_metrics/false_negative_rate@0.5': {'doubleValue': 0.0}, 'fairness_indicators_metrics/false_negative_rate@0.9': {'doubleValue': 0.04880382775119617}, 'fairness_indicators_metrics/false_omission_rate@0.5': {'doubleValue': 'NaN'}, 'fairness_indicators_metrics/false_omission_rate@0.9': {'doubleValue': 0.6071428571428571}, 'fairness_indicators_metrics/false_positive_rate@0.5': {'doubleValue': 1.0}, 'fairness_indicators_metrics/false_positive_rate@0.9': {'doubleValue': 0.889261744966443}, 'fairness_indicators_metrics/negative_rate@0.5': {'doubleValue': 0.0}, 'fairness_indicators_metrics/negative_rate@0.9': {'doubleValue': 0.06254653760238273}, 'fairness_indicators_metrics/positive_rate@0.5': {'doubleValue': 1.0}, 'fairness_indicators_metrics/positive_rate@0.9': {'doubleValue': 0.9374534623976173}, 'fairness_indicators_metrics/true_negative_rate@0.5': {'doubleValue': 0.0}, 'fairness_indicators_metrics/true_negative_rate@0.9': {'doubleValue': 0.11073825503355705}, 'fairness_indicators_metrics/true_positive_rate@0.5': {'doubleValue': 1.0}, 'fairness_indicators_metrics/true_positive_rate@0.9': {'doubleValue': 0.9511961722488038} }, (('race1', 'hisp'),): {'auc': {'doubleValue': 0.5754180550575256}, 'fairness_indicators_metrics/false_discovery_rate@0.5': {'doubleValue': 0.124634858812074}, 'fairness_indicators_metrics/false_discovery_rate@0.9': {'doubleValue': 0.12139303482587065}, 'fairness_indicators_metrics/false_negative_rate@0.5': {'doubleValue': 0.0}, 'fairness_indicators_metrics/false_negative_rate@0.9': {'doubleValue': 0.017797552836484983}, 'fairness_indicators_metrics/false_omission_rate@0.5': {'doubleValue': 'NaN'}, 'fairness_indicators_metrics/false_omission_rate@0.9': {'doubleValue': 0.7272727272727273}, 'fairness_indicators_metrics/false_positive_rate@0.5': {'doubleValue': 1.0}, 'fairness_indicators_metrics/false_positive_rate@0.9': {'doubleValue': 0.953125}, 'fairness_indicators_metrics/negative_rate@0.5': {'doubleValue': 0.0}, 'fairness_indicators_metrics/negative_rate@0.9': {'doubleValue': 0.021421616358325218}, 'fairness_indicators_metrics/positive_rate@0.5': {'doubleValue': 1.0}, 'fairness_indicators_metrics/positive_rate@0.9': {'doubleValue': 0.9785783836416748}, 'fairness_indicators_metrics/true_negative_rate@0.5': {'doubleValue': 0.0}, 'fairness_indicators_metrics/true_negative_rate@0.9': {'doubleValue': 0.046875}, 'fairness_indicators_metrics/true_positive_rate@0.5': {'doubleValue': 1.0}, 'fairness_indicators_metrics/true_positive_rate@0.9': {'doubleValue': 0.982202447163515} }, (('race1', 'nan'),): {'auc': {'doubleValue': 0.7142857313156128}, 'fairness_indicators_metrics/false_discovery_rate@0.5': {'doubleValue': 0.125}, 'fairness_indicators_metrics/false_discovery_rate@0.9': {'doubleValue': 0.125}, 'fairness_indicators_metrics/false_negative_rate@0.5': {'doubleValue': 0.0}, 'fairness_indicators_metrics/false_negative_rate@0.9': {'doubleValue': 0.0}, 'fairness_indicators_metrics/false_omission_rate@0.5': {'doubleValue': 'NaN'}, 'fairness_indicators_metrics/false_omission_rate@0.9': {'doubleValue': 'NaN'}, 'fairness_indicators_metrics/false_positive_rate@0.5': {'doubleValue': 1.0}, 'fairness_indicators_metrics/false_positive_rate@0.9': {'doubleValue': 1.0}, 'fairness_indicators_metrics/negative_rate@0.5': {'doubleValue': 0.0}, 'fairness_indicators_metrics/negative_rate@0.9': {'doubleValue': 0.0}, 'fairness_indicators_metrics/positive_rate@0.5': {'doubleValue': 1.0}, 'fairness_indicators_metrics/positive_rate@0.9': {'doubleValue': 1.0}, 'fairness_indicators_metrics/true_negative_rate@0.5': {'doubleValue': 0.0}, 'fairness_indicators_metrics/true_negative_rate@0.9': {'doubleValue': 0.0}, 'fairness_indicators_metrics/true_positive_rate@0.5': {'doubleValue': 1.0}, 'fairness_indicators_metrics/true_positive_rate@0.9': {'doubleValue': 1.0} }, (('race1', 'other'),): {'auc': {'doubleValue': 0.6389539241790771}, 'fairness_indicators_metrics/false_discovery_rate@0.5': {'doubleValue': 0.10294117647058823}, 'fairness_indicators_metrics/false_discovery_rate@0.9': {'doubleValue': 0.09523809523809523}, 'fairness_indicators_metrics/false_negative_rate@0.5': {'doubleValue': 0.0}, 'fairness_indicators_metrics/false_negative_rate@0.9': {'doubleValue': 0.01366120218579235}, 'fairness_indicators_metrics/false_omission_rate@0.5': {'doubleValue': 'NaN'}, 'fairness_indicators_metrics/false_omission_rate@0.9': {'doubleValue': 0.5555555555555556}, 'fairness_indicators_metrics/false_positive_rate@0.5': {'doubleValue': 1.0}, 'fairness_indicators_metrics/false_positive_rate@0.9': {'doubleValue': 0.9047619047619048}, 'fairness_indicators_metrics/negative_rate@0.5': {'doubleValue': 0.0}, 'fairness_indicators_metrics/negative_rate@0.9': {'doubleValue': 0.022058823529411766}, 'fairness_indicators_metrics/positive_rate@0.5': {'doubleValue': 1.0}, 'fairness_indicators_metrics/positive_rate@0.9': {'doubleValue': 0.9779411764705882}, 'fairness_indicators_metrics/true_negative_rate@0.5': {'doubleValue': 0.0}, 'fairness_indicators_metrics/true_negative_rate@0.9': {'doubleValue': 0.09523809523809523}, 'fairness_indicators_metrics/true_positive_rate@0.5': {'doubleValue': 1.0}, 'fairness_indicators_metrics/true_positive_rate@0.9': {'doubleValue': 0.9863387978142076} }, (('race1', 'white'),): {'auc': {'doubleValue': 0.5987964272499084}, 'fairness_indicators_metrics/false_discovery_rate@0.5': {'doubleValue': 0.03360940422121293}, 'fairness_indicators_metrics/false_discovery_rate@0.9': {'doubleValue': 0.03316050982933679}, 'fairness_indicators_metrics/false_negative_rate@0.5': {'doubleValue': 5.52883286338254e-05}, 'fairness_indicators_metrics/false_negative_rate@0.9': {'doubleValue': 0.010228340797257698}, 'fairness_indicators_metrics/false_omission_rate@0.5': {'doubleValue': 1.0}, 'fairness_indicators_metrics/false_omission_rate@0.9': {'doubleValue': 0.925}, 'fairness_indicators_metrics/false_positive_rate@0.5': {'doubleValue': 1.0}, 'fairness_indicators_metrics/false_positive_rate@0.9': {'doubleValue': 0.9761526232114467}, 'fairness_indicators_metrics/negative_rate@0.5': {'doubleValue': 5.3430220132506944e-05}, 'fairness_indicators_metrics/negative_rate@0.9': {'doubleValue': 0.010686044026501388}, 'fairness_indicators_metrics/positive_rate@0.5': {'doubleValue': 0.9999465697798675}, 'fairness_indicators_metrics/positive_rate@0.9': {'doubleValue': 0.9893139559734986}, 'fairness_indicators_metrics/true_negative_rate@0.5': {'doubleValue': 0.0}, 'fairness_indicators_metrics/true_negative_rate@0.9': {'doubleValue': 0.02384737678855326}, 'fairness_indicators_metrics/true_positive_rate@0.5': {'doubleValue': 0.9999447116713662}, 'fairness_indicators_metrics/true_positive_rate@0.9': {'doubleValue': 0.9897716592027423} } }
نتیجه
در این مطالعه موردی، ما یک مجموعه داده را به یک Pandas DataFrame وارد کردیم که سپس با شاخصهای انصاف تحلیل کردیم. درک نتایج مدل شما و دادههای زیربنایی، گام مهمی برای اطمینان از اینکه مدل شما منعکس کننده سوگیری مضر نیست. در زمینه این مطالعه موردی، مجموعه داده LSAC و اینکه چگونه پیشبینیهای حاصل از این دادهها میتواند توسط یک مسابقه دانشآموزی تحتتاثیر قرار گیرد را بررسی کردیم. مفهوم "آنچه ناعادلانه است و آنچه منصفانه است" بیش از 50 سال است که در چندین رشته از جمله در آموزش، استخدام و یادگیری ماشینی معرفی شده است. 1 انصاف شاخص یک ابزار به نگرانی انصاف کمک به کاهش در دستگاه شما مدل یادگیری است.
برای کسب اطلاعات بیشتر در مورد استفاده از شاخص ها و منابع انصاف به یادگیری نگرانی انصاف در مورد بیشتر اینجا .
- هاچینسون، بی.، میچل، ام. (2018). 50 سال آزمون (عدم) انصاف: درس هایی برای یادگیری ماشین. https://arxiv.org/abs/1811.10104
ضمیمه
در زیر چند عملکرد برای کمک به تبدیل مدل های 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())