{ "cells": [ { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "----\n", "# Tutorial for Evaluating Fairness in Binary Classification" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "----\n", "## Evaluating Your Own Model? Looking for a Template? \n", "**Please note: This notebook is intended as an introduction to and reference for evaluating the fairness of a set of machine learning models using FairMLHealth, and it is not designed to work with outside models.** \n", "\n", "We recommend using our [Template-BinaryClassificationAssessment](../templates/Template-BinaryClassificationAssessment.ipynb) if you are looking for a template into which you can insert existing models. \n", "\n", "\n", "## Overview\n", "\n", "This notebook introduces concepts, methods, and libraries for measuring fairness in machine learning (ML) models as it relates to problems in healthcare. This is a revised version of the tutorial presented at the [KDD 2020 Tutorial on Fairness in Machine Learning for Healthcare](../docs/publications/KDD2020-FairnessInHealthcareML-Slides.pdf), the notebook for which can be found here: [/docs/publications/KDD2020-FairnessInHealthcareML-TutorialNotebook.ipynb](../docs/publications/KDD2020-FairnessInHealthcareML-TutorialNotebook.ipynb).\n", "\n", "[Part 1](#part1) will frame the problem and introduce our hypothetical example predicting Length of Stay (LOS) based on a subset of the [MIMIC-III clinical database](https://mimic.physionet.org/gettingstarted/access/). In [Part 2](#part2) this baseline model is used as an example to evaluate and discuss common metrics like *Disparate Impact*, *Equalized Odds*, and *Consistency Scores*. Then, [Part 4] compares the results of the baseline model to results for other modeling approaches: one \"unaware\" version, a \"fairness-aware\" version, and a third version simply using a different standard machine learning algorithm. \n", "\n", "There are abundant other publications covering the theoretical basis for fairness metrics, with many online and academic resources covering the details of specific fairness measures (See [References (bottom)](#references) and [Additional Resources (bottom)](#additional_resources), or [Our Resources Page](../docs/resources/Measures_QuickReference.md)). Many of these excellent references fall short of discussing edge cases as well as the practical and philosophical considerations when evaluating real models for real customers. Here we attempt to bridge this gap.\n", "\n", "\n", "\n", "## Table of Contents\n", "[Part 1](#part1) - Framing the Problem\n", " \n", "[Part 2](#part2) - Evaluating the Baseline Model\n", "\n", "[Part 3](#part3) - Comparing Models \n", " \n", "[References](#references)\n", " \n", "\n", "\n", "## Requirements\n", "\n", "To run this notebook, please install FairMLHealth using [the instructions posted in GitHub](https://github.com/KenSciResearch/fairMLHealth#installation_instructions). Some components of this notebook additionally require the [Fairlearn](https://github.com/fairlearn/fairlearn) package.\n", "\n", "The tutorial uses data from the MIMIC III Critical Care database, a freely accessible source of electronic health records from Beth Israel Deaconess Medical Center in Boston. To download the MIMIC III data, please use this link: [Access to MIMIC III](https://mimic.physionet.org/gettingstarted/access/) and save the data with the default directory name (\"MIMIC\"). No further action is required beyond remembering the download location, and you do not need to unzip any files.\n", "\n", "A basic knowledge of ML implementation in Python is assumed. \n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "----\n", "---- \n", "# Part 1 - Framing the Problem " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Background\n", "In issues of social justice, discrimination is the unjustified, differential treatment of individuals based on their sociodemographic status [[Romei and Ruggieri 2014]](#romei2014_ref). A \"fair\" model is one that does not discriminate. Therefore, the goal of our work is to evaluate (a) whether our model makes similar predictions for all socially salient groups, or (b) whether any differences arise that are ethically justified.\n", "\n", "For more in-depth background information, see the [Evaluating Fairness Reference](../docs/resources/Evaluating_Fairness.md) and the [Measures Quick Reference](../docs/resources/Measures_QuickReference.md) in our documentation. A reference table with basic definitions is provided below.\n", "\n", "### Fairness Definitions \n", "\n", "Three metric categories are commonly used for determining whether a model is considered \"fair\": (1) Group Fairness, which compares the statistical similarities of predictions relative to known and discrete protected groupings; (2) Similarity-Based Measures, which evaluate predictions without those discrete protected groups; and (3) Causal Reasoning measures, which evaluate fairness through the use of causal models.\n", "\n", "| Category | Metric | Definition | Weakness | References |\n", "|------|------|------|------|------|\n", "| Group Fairness |**Demographic Parity**| A model has **Demographic Parity** if the predicted positive rates (selection rates) are approximately the same for all protected attribute groups: $\\dfrac{P(\\hat{y} = 1 \\lvert unprivileged)}{P(\\hat{y} = 1 \\rvert privileged)}$

Harms Addressed: Allocative| Historical biases present in the data are not addressed and may still bias the model. | [Zafar *et al* (2017)](#zafar2017_ref) |\n", "||**Equalized Odds**| Odds are equalized if $P(+)$ is approximately the same for all protected attribute groups.
**Equal Opportunity** is a special case of equalized odds specifying that $P(+ \\rvert y = 1)$ is approximately the same across groups.

Harms Addressed: Allocative, Representational | Historical biases present in the data are not addressed and may still bias the model. | [Hardt *et al* (2016)](#hardt2016_ref) |\n", "||**Predictive Parity**| This parity exists where the Positive Predictive Value is approximately the same for all protected attribute groups.

Harms Addressed: Allocative, Representational | Historical biases present in the data are not addressed and may still bias the model. | [Zafar *et al* (2017)](#zafar2017_ref) |\n", "||||||\n", "| Similarity-Based Measures |**Individual Fairness**| Individual fairness exists if \"similar\" individuals (ignoring the protected attribute) are likely to have similar predictions.

Harms Addressed: Representational | The appropriate metric for similarity may be ambiguous. |[Dwork (2012)](#dwork2012_ref), [Zemel (2013)](#zemel2013_ref), [Kim *et al* (2018)](#kim2018_ref) |\n", "|   |**Entropy-Based Indices**| Measures of entropy, particularly existing inequality indices from the field of economics, are applied to evaluate either individuals or groups

Harms Addressed: Representational | |[Speicher (2018)](#speicher2018_ref) |\n", "|   |**Unawareness** | A model is unaware if the protected attribute is not used.

Harms Addressed: Allocative, Representational | Removal of a protected attribute may be ineffectual due to the presence of proxy features highly correlated with the protected attribute.| [Zemel *et al* (2013)](#zemel2013_ref), [Barocas and Selbst (2016)](#barocas2016_ref) |\n", "||||||\n", "| Causal Reasoning |**Counterfactual Fairness** \\*| Counterfactual fairness exists where counterfactual replacement of the protected attribute does not significantly alter predictive performance. This counterfactual change must be propogated to correlated variables.

Harms Addressed: Allocative, Representational | It may be intractable to develop a counterfactual model. | [Russell *et al* (2017)](#russell2017_ref) |\n", "||||||\n", "\n", "\\* *Note that this tutorial will not elaborate the details of Counterfactual Fairness since the libraries used do not have built-in functionality for it. For an example of Counterfactual Fairness, see \"ThemisML\" by [Bantilan (2018)](#bantilan2018_ref).*\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Problem Definition\n", "Let's examine a model built for a hypothetical program providing early health and financial counseling to patients expected to experience a prolonged length of stay (LOS) in an intensive care unit (ICU) ward. The service is paid for by small donations from the community it serves. We have found that LOS for this program can be predicted with reasonable performance, and as contemporaries in the healthcare industry, we would like to ensure that resources are distributed among our patients fairly. \n", "\n", "Our baseline model will use the patient's age, diagnosis, language, and the use of medical procedures during their stay to predict this value. Our model produces a binary prediction indicating whether or not the LOS for a given admission is greater than the mean. Observations have been dropped where LOS values are extremely large (30 days or greater) or negative (indicating that the patient was deceased upon arrival at the ICU).\n" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "# Verify that all required packages are present\n", "from fairmlhealth.__validation import validate_tutorial_requirements\n", "validate_tutorial_requirements()\n", "\n", "# fairMLHealth tools\n", "from fairmlhealth import measure, report, stat_utils\n", "\n", "# Loaders specific to fairMLHealth tutorials\n", "from fairmlhealth.__mimic_data import load_mimic3_example, feature_table" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [], "source": [ "# Standard Libraries\n", "from IPython.display import Markdown, HTML\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "import os\n", "import pandas as pd\n", "from scipy import stats\n", "import sys\n", "import warnings\n", "\n", "# AIF360 Measures\n", "import aif360.sklearn.metrics as aif_skmetrics\n", "\n", "# Load Prediction Libraries\n", "import sklearn.metrics as sk_metric\n", "from sklearn.model_selection import train_test_split\n", "from xgboost import XGBClassifier\n", "\n", "# Remove limit to the number of columns and column widths displayed by pandas\n", "pd.set_option('display.max_columns', None)\n", "pd.set_option('display.max_colwidth', 0) # adjust column width as needed" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Loading the MIMIC III Data Subset \n", "\n", "As mentioned above, the MIMIC-III data download contains a folder of zipped_files. The tutorial code in the [Data Subset](#datasubset) section below will automatically unzip and format all necessary data for these experiments, saving the formatted data in the same MIMIC folder. Simply enter the correct path of the MIMIC folder in the following cell to enable this feature. Your path should end with the directory \"MIMIC\".\n", "\n", "Example: path_to_mimic_data_folder = \"~/data/MIMIC\"" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "slideshow": { "slide_type": "skip" } }, "outputs": [], "source": [ "# path_to_mimic_data_folder = \"[path to your downloaded data folder]\"\n", "path_to_mimic_data_folder = \"~/data/MIMIC\"" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Example models in this notebook use data from all years of the MIMIC-III dataset for patients aged 65 and older. Data are imported at the encounter level with all additional patient identification dropped. All models include an \"AGE\" feature, simplified to 5-year bins, as well as Boolean diagnosis and procedure features categorized through the Clinical Classifications Software system ([HCUP](https://www.hcup-us.ahrq.gov/toolssoftware/ccs/ccs.jsp)). All features other than age are one-hot encoded and prefixed with their variable type (e.g. \"GENDER_\", \"ETHNICITY_\"). " ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "scrolled": false, "slideshow": { "slide_type": "subslide" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", " This data subset has 4818 total observations and 648 input features \n", "\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Raw FeatureCategory Count (Encoded Features).
0AGE1
1DIAGNOSIS282
2ETHNICITY41
3GENDER1
4INSURANCE5
5LANGUAGE69
6MARRIED7
7PROCEDURE222
8RELIGION20
\n", "
" ], "text/plain": [ " Raw Feature Category Count (Encoded Features).\n", "0 AGE 1 \n", "1 DIAGNOSIS 282 \n", "2 ETHNICITY 41 \n", "3 GENDER 1 \n", "4 INSURANCE 5 \n", "5 LANGUAGE 69 \n", "6 MARRIED 7 \n", "7 PROCEDURE 222 \n", "8 RELIGION 20 " ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "\n", " Below is a scrollable version of the first five rows of data:\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
ADMIT_IDAGEGENDER_METHNICITY_AMERICAN INDIAN/ALASKA NATIVEETHNICITY_AMERICAN INDIAN/ALASKA NATIVE FEDERALLY RECOGNIZED TRIBEETHNICITY_ASIANETHNICITY_ASIAN - ASIAN INDIANETHNICITY_ASIAN - CAMBODIANETHNICITY_ASIAN - CHINESEETHNICITY_ASIAN - FILIPINOETHNICITY_ASIAN - JAPANESEETHNICITY_ASIAN - KOREANETHNICITY_ASIAN - OTHERETHNICITY_ASIAN - THAIETHNICITY_ASIAN - VIETNAMESEETHNICITY_BLACK/AFRICANETHNICITY_BLACK/AFRICAN AMERICANETHNICITY_BLACK/CAPE VERDEANETHNICITY_BLACK/HAITIANETHNICITY_CARIBBEAN ISLANDETHNICITY_HISPANIC OR LATINOETHNICITY_HISPANIC/LATINO - CENTRAL AMERICAN (OTHER)ETHNICITY_HISPANIC/LATINO - COLOMBIANETHNICITY_HISPANIC/LATINO - CUBANETHNICITY_HISPANIC/LATINO - DOMINICANETHNICITY_HISPANIC/LATINO - GUATEMALANETHNICITY_HISPANIC/LATINO - HONDURANETHNICITY_HISPANIC/LATINO - MEXICANETHNICITY_HISPANIC/LATINO - PUERTO RICANETHNICITY_HISPANIC/LATINO - SALVADORANETHNICITY_MIDDLE EASTERNETHNICITY_MULTI RACE ETHNICITYETHNICITY_NATIVE HAWAIIAN OR OTHER PACIFIC ISLANDERETHNICITY_OTHERETHNICITY_PATIENT DECLINED TO ANSWERETHNICITY_PORTUGUESEETHNICITY_SOUTH AMERICANETHNICITY_UNABLE TO OBTAINETHNICITY_UNKNOWN/NOT SPECIFIEDETHNICITY_WHITEETHNICITY_WHITE - BRAZILIANETHNICITY_WHITE - EASTERN EUROPEANETHNICITY_WHITE - OTHER EUROPEANETHNICITY_WHITE - RUSSIANLANGUAGE_* BELANGUAGE_* FULANGUAGE_** TLANGUAGE_**SHLANGUAGE_**TOLANGUAGE_*AMHLANGUAGE_*ARALANGUAGE_*ARMLANGUAGE_*BENLANGUAGE_*BOSLANGUAGE_*BULLANGUAGE_*BURLANGUAGE_*CANLANGUAGE_*CDILANGUAGE_*CHILANGUAGE_*DEALANGUAGE_*DUTLANGUAGE_*FARLANGUAGE_*FILLANGUAGE_*FULLANGUAGE_*GUJLANGUAGE_*HUNLANGUAGE_*IBOLANGUAGE_*KHMLANGUAGE_*LEBLANGUAGE_*MANLANGUAGE_*MORLANGUAGE_*NEPLANGUAGE_*PERLANGUAGE_*PHILANGUAGE_*PUNLANGUAGE_*SPALANGUAGE_*TAMLANGUAGE_*TOILANGUAGE_*TOYLANGUAGE_*URDLANGUAGE_*YIDLANGUAGE_*YORLANGUAGE_ALBALANGUAGE_AMERLANGUAGE_ARABLANGUAGE_BENGLANGUAGE_CAMBLANGUAGE_CANTLANGUAGE_CAPELANGUAGE_ENGLLANGUAGE_ETHILANGUAGE_FRENLANGUAGE_GREELANGUAGE_HAITLANGUAGE_HINDLANGUAGE_ITALLANGUAGE_JAPALANGUAGE_KORELANGUAGE_LAOTLANGUAGE_MANDLANGUAGE_PERSLANGUAGE_POLILANGUAGE_PORTLANGUAGE_PTUNLANGUAGE_RUSSLANGUAGE_SERBLANGUAGE_SOMALANGUAGE_SPANLANGUAGE_TAGALANGUAGE_THAILANGUAGE_TURKLANGUAGE_URDULANGUAGE_VIETINSURANCE_GovernmentINSURANCE_MedicaidINSURANCE_MedicareINSURANCE_PrivateINSURANCE_Self PayMARRIED_DIVORCEDMARRIED_LIFE PARTNERMARRIED_MARRIEDMARRIED_SEPARATEDMARRIED_SINGLEMARRIED_UNKNOWN (DEFAULT)MARRIED_WIDOWEDRELIGION_7TH DAY ADVENTISTRELIGION_BAPTISTRELIGION_BUDDHISTRELIGION_CATHOLICRELIGION_CHRISTIAN SCIENTISTRELIGION_EPISCOPALIANRELIGION_GREEK ORTHODOXRELIGION_HEBREWRELIGION_HINDURELIGION_JEHOVAH'S WITNESSRELIGION_JEWISHRELIGION_LUTHERANRELIGION_METHODISTRELIGION_MUSLIMRELIGION_NOT SPECIFIEDRELIGION_OTHERRELIGION_PROTESTANT QUAKERRELIGION_ROMANIAN EAST. ORTHRELIGION_UNITARIAN-UNIVERSALISTRELIGION_UNOBTAINABLEDIAGNOSIS_CCS_0DIAGNOSIS_CCS_1DIAGNOSIS_CCS_2DIAGNOSIS_CCS_3DIAGNOSIS_CCS_4DIAGNOSIS_CCS_5DIAGNOSIS_CCS_6DIAGNOSIS_CCS_7DIAGNOSIS_CCS_8DIAGNOSIS_CCS_9DIAGNOSIS_CCS_10DIAGNOSIS_CCS_11DIAGNOSIS_CCS_12DIAGNOSIS_CCS_13DIAGNOSIS_CCS_14DIAGNOSIS_CCS_15DIAGNOSIS_CCS_16DIAGNOSIS_CCS_17DIAGNOSIS_CCS_18DIAGNOSIS_CCS_19DIAGNOSIS_CCS_20DIAGNOSIS_CCS_21DIAGNOSIS_CCS_22DIAGNOSIS_CCS_23DIAGNOSIS_CCS_24DIAGNOSIS_CCS_25DIAGNOSIS_CCS_26DIAGNOSIS_CCS_27DIAGNOSIS_CCS_28DIAGNOSIS_CCS_29DIAGNOSIS_CCS_30DIAGNOSIS_CCS_31DIAGNOSIS_CCS_32DIAGNOSIS_CCS_33DIAGNOSIS_CCS_34DIAGNOSIS_CCS_35DIAGNOSIS_CCS_36DIAGNOSIS_CCS_37DIAGNOSIS_CCS_38DIAGNOSIS_CCS_39DIAGNOSIS_CCS_40DIAGNOSIS_CCS_41DIAGNOSIS_CCS_42DIAGNOSIS_CCS_43DIAGNOSIS_CCS_44DIAGNOSIS_CCS_45DIAGNOSIS_CCS_46DIAGNOSIS_CCS_47DIAGNOSIS_CCS_48DIAGNOSIS_CCS_49DIAGNOSIS_CCS_50DIAGNOSIS_CCS_51DIAGNOSIS_CCS_52DIAGNOSIS_CCS_53DIAGNOSIS_CCS_54DIAGNOSIS_CCS_55DIAGNOSIS_CCS_56DIAGNOSIS_CCS_57DIAGNOSIS_CCS_58DIAGNOSIS_CCS_59DIAGNOSIS_CCS_60DIAGNOSIS_CCS_61DIAGNOSIS_CCS_62DIAGNOSIS_CCS_63DIAGNOSIS_CCS_64DIAGNOSIS_CCS_76DIAGNOSIS_CCS_77DIAGNOSIS_CCS_78DIAGNOSIS_CCS_79DIAGNOSIS_CCS_80DIAGNOSIS_CCS_81DIAGNOSIS_CCS_82DIAGNOSIS_CCS_83DIAGNOSIS_CCS_84DIAGNOSIS_CCS_85DIAGNOSIS_CCS_86DIAGNOSIS_CCS_87DIAGNOSIS_CCS_88DIAGNOSIS_CCS_89DIAGNOSIS_CCS_90DIAGNOSIS_CCS_91DIAGNOSIS_CCS_92DIAGNOSIS_CCS_93DIAGNOSIS_CCS_94DIAGNOSIS_CCS_95DIAGNOSIS_CCS_96DIAGNOSIS_CCS_97DIAGNOSIS_CCS_98DIAGNOSIS_CCS_99DIAGNOSIS_CCS_100DIAGNOSIS_CCS_101DIAGNOSIS_CCS_102DIAGNOSIS_CCS_103DIAGNOSIS_CCS_104DIAGNOSIS_CCS_105DIAGNOSIS_CCS_106DIAGNOSIS_CCS_107DIAGNOSIS_CCS_108DIAGNOSIS_CCS_109DIAGNOSIS_CCS_110DIAGNOSIS_CCS_111DIAGNOSIS_CCS_112DIAGNOSIS_CCS_113DIAGNOSIS_CCS_114DIAGNOSIS_CCS_115DIAGNOSIS_CCS_116DIAGNOSIS_CCS_117DIAGNOSIS_CCS_118DIAGNOSIS_CCS_119DIAGNOSIS_CCS_120DIAGNOSIS_CCS_121DIAGNOSIS_CCS_122DIAGNOSIS_CCS_123DIAGNOSIS_CCS_124DIAGNOSIS_CCS_125DIAGNOSIS_CCS_126DIAGNOSIS_CCS_127DIAGNOSIS_CCS_128DIAGNOSIS_CCS_129DIAGNOSIS_CCS_130DIAGNOSIS_CCS_131DIAGNOSIS_CCS_132DIAGNOSIS_CCS_133DIAGNOSIS_CCS_134DIAGNOSIS_CCS_135DIAGNOSIS_CCS_136DIAGNOSIS_CCS_137DIAGNOSIS_CCS_138DIAGNOSIS_CCS_139DIAGNOSIS_CCS_140DIAGNOSIS_CCS_141DIAGNOSIS_CCS_142DIAGNOSIS_CCS_143DIAGNOSIS_CCS_144DIAGNOSIS_CCS_145DIAGNOSIS_CCS_146DIAGNOSIS_CCS_147DIAGNOSIS_CCS_148DIAGNOSIS_CCS_149DIAGNOSIS_CCS_151DIAGNOSIS_CCS_152DIAGNOSIS_CCS_153DIAGNOSIS_CCS_154DIAGNOSIS_CCS_155DIAGNOSIS_CCS_156DIAGNOSIS_CCS_157DIAGNOSIS_CCS_158DIAGNOSIS_CCS_159DIAGNOSIS_CCS_160DIAGNOSIS_CCS_161DIAGNOSIS_CCS_162DIAGNOSIS_CCS_163DIAGNOSIS_CCS_164DIAGNOSIS_CCS_165DIAGNOSIS_CCS_166DIAGNOSIS_CCS_167DIAGNOSIS_CCS_168DIAGNOSIS_CCS_169DIAGNOSIS_CCS_170DIAGNOSIS_CCS_171DIAGNOSIS_CCS_172DIAGNOSIS_CCS_173DIAGNOSIS_CCS_174DIAGNOSIS_CCS_175DIAGNOSIS_CCS_176DIAGNOSIS_CCS_177DIAGNOSIS_CCS_178DIAGNOSIS_CCS_179DIAGNOSIS_CCS_180DIAGNOSIS_CCS_181DIAGNOSIS_CCS_182DIAGNOSIS_CCS_183DIAGNOSIS_CCS_184DIAGNOSIS_CCS_185DIAGNOSIS_CCS_186DIAGNOSIS_CCS_187DIAGNOSIS_CCS_188DIAGNOSIS_CCS_189DIAGNOSIS_CCS_190DIAGNOSIS_CCS_191DIAGNOSIS_CCS_192DIAGNOSIS_CCS_193DIAGNOSIS_CCS_195DIAGNOSIS_CCS_196DIAGNOSIS_CCS_197DIAGNOSIS_CCS_198DIAGNOSIS_CCS_199DIAGNOSIS_CCS_200DIAGNOSIS_CCS_201DIAGNOSIS_CCS_202DIAGNOSIS_CCS_203DIAGNOSIS_CCS_204DIAGNOSIS_CCS_205DIAGNOSIS_CCS_206DIAGNOSIS_CCS_207DIAGNOSIS_CCS_208DIAGNOSIS_CCS_209DIAGNOSIS_CCS_210DIAGNOSIS_CCS_211DIAGNOSIS_CCS_212DIAGNOSIS_CCS_213DIAGNOSIS_CCS_214DIAGNOSIS_CCS_215DIAGNOSIS_CCS_216DIAGNOSIS_CCS_217DIAGNOSIS_CCS_218DIAGNOSIS_CCS_219DIAGNOSIS_CCS_220DIAGNOSIS_CCS_221DIAGNOSIS_CCS_222DIAGNOSIS_CCS_223DIAGNOSIS_CCS_224DIAGNOSIS_CCS_225DIAGNOSIS_CCS_226DIAGNOSIS_CCS_227DIAGNOSIS_CCS_228DIAGNOSIS_CCS_229DIAGNOSIS_CCS_230DIAGNOSIS_CCS_231DIAGNOSIS_CCS_232DIAGNOSIS_CCS_233DIAGNOSIS_CCS_234DIAGNOSIS_CCS_235DIAGNOSIS_CCS_236DIAGNOSIS_CCS_237DIAGNOSIS_CCS_238DIAGNOSIS_CCS_239DIAGNOSIS_CCS_240DIAGNOSIS_CCS_241DIAGNOSIS_CCS_242DIAGNOSIS_CCS_243DIAGNOSIS_CCS_244DIAGNOSIS_CCS_245DIAGNOSIS_CCS_246DIAGNOSIS_CCS_247DIAGNOSIS_CCS_248DIAGNOSIS_CCS_249DIAGNOSIS_CCS_250DIAGNOSIS_CCS_251DIAGNOSIS_CCS_252DIAGNOSIS_CCS_253DIAGNOSIS_CCS_255DIAGNOSIS_CCS_256DIAGNOSIS_CCS_257DIAGNOSIS_CCS_258DIAGNOSIS_CCS_259DIAGNOSIS_CCS_650DIAGNOSIS_CCS_651DIAGNOSIS_CCS_652DIAGNOSIS_CCS_653DIAGNOSIS_CCS_654DIAGNOSIS_CCS_655DIAGNOSIS_CCS_656DIAGNOSIS_CCS_657DIAGNOSIS_CCS_658DIAGNOSIS_CCS_659DIAGNOSIS_CCS_660DIAGNOSIS_CCS_661DIAGNOSIS_CCS_662DIAGNOSIS_CCS_663DIAGNOSIS_CCS_670DIAGNOSIS_CCS_2601DIAGNOSIS_CCS_2602DIAGNOSIS_CCS_2603DIAGNOSIS_CCS_2604DIAGNOSIS_CCS_2605DIAGNOSIS_CCS_2606DIAGNOSIS_CCS_2607DIAGNOSIS_CCS_2608DIAGNOSIS_CCS_2609DIAGNOSIS_CCS_2610DIAGNOSIS_CCS_2611DIAGNOSIS_CCS_2612DIAGNOSIS_CCS_2613DIAGNOSIS_CCS_2614DIAGNOSIS_CCS_2615DIAGNOSIS_CCS_2616DIAGNOSIS_CCS_2617DIAGNOSIS_CCS_2618DIAGNOSIS_CCS_2619DIAGNOSIS_CCS_2620DIAGNOSIS_CCS_2621PROCEDURE_CCS_1PROCEDURE_CCS_2PROCEDURE_CCS_3PROCEDURE_CCS_4PROCEDURE_CCS_5PROCEDURE_CCS_6PROCEDURE_CCS_7PROCEDURE_CCS_8PROCEDURE_CCS_9PROCEDURE_CCS_10PROCEDURE_CCS_11PROCEDURE_CCS_12PROCEDURE_CCS_14PROCEDURE_CCS_15PROCEDURE_CCS_16PROCEDURE_CCS_17PROCEDURE_CCS_18PROCEDURE_CCS_19PROCEDURE_CCS_20PROCEDURE_CCS_21PROCEDURE_CCS_23PROCEDURE_CCS_24PROCEDURE_CCS_25PROCEDURE_CCS_26PROCEDURE_CCS_27PROCEDURE_CCS_28PROCEDURE_CCS_29PROCEDURE_CCS_30PROCEDURE_CCS_31PROCEDURE_CCS_32PROCEDURE_CCS_33PROCEDURE_CCS_34PROCEDURE_CCS_35PROCEDURE_CCS_36PROCEDURE_CCS_37PROCEDURE_CCS_38PROCEDURE_CCS_39PROCEDURE_CCS_40PROCEDURE_CCS_41PROCEDURE_CCS_42PROCEDURE_CCS_43PROCEDURE_CCS_44PROCEDURE_CCS_45PROCEDURE_CCS_46PROCEDURE_CCS_47PROCEDURE_CCS_48PROCEDURE_CCS_49PROCEDURE_CCS_50PROCEDURE_CCS_51PROCEDURE_CCS_52PROCEDURE_CCS_53PROCEDURE_CCS_54PROCEDURE_CCS_55PROCEDURE_CCS_56PROCEDURE_CCS_57PROCEDURE_CCS_58PROCEDURE_CCS_59PROCEDURE_CCS_60PROCEDURE_CCS_61PROCEDURE_CCS_62PROCEDURE_CCS_63PROCEDURE_CCS_64PROCEDURE_CCS_65PROCEDURE_CCS_66PROCEDURE_CCS_67PROCEDURE_CCS_68PROCEDURE_CCS_69PROCEDURE_CCS_70PROCEDURE_CCS_71PROCEDURE_CCS_72PROCEDURE_CCS_73PROCEDURE_CCS_74PROCEDURE_CCS_75PROCEDURE_CCS_76PROCEDURE_CCS_77PROCEDURE_CCS_78PROCEDURE_CCS_79PROCEDURE_CCS_80PROCEDURE_CCS_81PROCEDURE_CCS_82PROCEDURE_CCS_83PROCEDURE_CCS_84PROCEDURE_CCS_85PROCEDURE_CCS_86PROCEDURE_CCS_87PROCEDURE_CCS_88PROCEDURE_CCS_89PROCEDURE_CCS_90PROCEDURE_CCS_91PROCEDURE_CCS_92PROCEDURE_CCS_93PROCEDURE_CCS_94PROCEDURE_CCS_95PROCEDURE_CCS_96PROCEDURE_CCS_97PROCEDURE_CCS_98PROCEDURE_CCS_99PROCEDURE_CCS_100PROCEDURE_CCS_101PROCEDURE_CCS_102PROCEDURE_CCS_103PROCEDURE_CCS_104PROCEDURE_CCS_105PROCEDURE_CCS_106PROCEDURE_CCS_107PROCEDURE_CCS_108PROCEDURE_CCS_109PROCEDURE_CCS_110PROCEDURE_CCS_111PROCEDURE_CCS_112PROCEDURE_CCS_113PROCEDURE_CCS_114PROCEDURE_CCS_115PROCEDURE_CCS_116PROCEDURE_CCS_117PROCEDURE_CCS_118PROCEDURE_CCS_119PROCEDURE_CCS_120PROCEDURE_CCS_121PROCEDURE_CCS_122PROCEDURE_CCS_123PROCEDURE_CCS_124PROCEDURE_CCS_125PROCEDURE_CCS_126PROCEDURE_CCS_127PROCEDURE_CCS_128PROCEDURE_CCS_129PROCEDURE_CCS_130PROCEDURE_CCS_131PROCEDURE_CCS_132PROCEDURE_CCS_133PROCEDURE_CCS_134PROCEDURE_CCS_135PROCEDURE_CCS_136PROCEDURE_CCS_137PROCEDURE_CCS_138PROCEDURE_CCS_139PROCEDURE_CCS_140PROCEDURE_CCS_141PROCEDURE_CCS_142PROCEDURE_CCS_143PROCEDURE_CCS_144PROCEDURE_CCS_145PROCEDURE_CCS_146PROCEDURE_CCS_147PROCEDURE_CCS_148PROCEDURE_CCS_149PROCEDURE_CCS_150PROCEDURE_CCS_151PROCEDURE_CCS_152PROCEDURE_CCS_153PROCEDURE_CCS_154PROCEDURE_CCS_155PROCEDURE_CCS_156PROCEDURE_CCS_157PROCEDURE_CCS_158PROCEDURE_CCS_159PROCEDURE_CCS_160PROCEDURE_CCS_161PROCEDURE_CCS_162PROCEDURE_CCS_163PROCEDURE_CCS_164PROCEDURE_CCS_165PROCEDURE_CCS_166PROCEDURE_CCS_167PROCEDURE_CCS_168PROCEDURE_CCS_169PROCEDURE_CCS_170PROCEDURE_CCS_171PROCEDURE_CCS_172PROCEDURE_CCS_173PROCEDURE_CCS_174PROCEDURE_CCS_175PROCEDURE_CCS_176PROCEDURE_CCS_177PROCEDURE_CCS_178PROCEDURE_CCS_179PROCEDURE_CCS_180PROCEDURE_CCS_181PROCEDURE_CCS_183PROCEDURE_CCS_184PROCEDURE_CCS_185PROCEDURE_CCS_186PROCEDURE_CCS_187PROCEDURE_CCS_188PROCEDURE_CCS_189PROCEDURE_CCS_190PROCEDURE_CCS_191PROCEDURE_CCS_192PROCEDURE_CCS_193PROCEDURE_CCS_194PROCEDURE_CCS_195PROCEDURE_CCS_196PROCEDURE_CCS_197PROCEDURE_CCS_198PROCEDURE_CCS_199PROCEDURE_CCS_201PROCEDURE_CCS_202PROCEDURE_CCS_204PROCEDURE_CCS_205PROCEDURE_CCS_206PROCEDURE_CCS_208PROCEDURE_CCS_209PROCEDURE_CCS_211PROCEDURE_CCS_212PROCEDURE_CCS_213PROCEDURE_CCS_214PROCEDURE_CCS_216PROCEDURE_CCS_217PROCEDURE_CCS_218PROCEDURE_CCS_219PROCEDURE_CCS_220PROCEDURE_CCS_221PROCEDURE_CCS_222PROCEDURE_CCS_223PROCEDURE_CCS_224PROCEDURE_CCS_225PROCEDURE_CCS_226PROCEDURE_CCS_227PROCEDURE_CCS_228PROCEDURE_CCS_229PROCEDURE_CCS_231length_of_stay
098494885.0100000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000001000010000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010001000000000000000000000000000000000000000010000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000010000000000001000000000000000000000000000000000000000000000100000004.561111
3100572085.00000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000010000000010000000000100000000000000000000000000000000000000000000000000000000100000000000000000000000010000000000000000000000000100000000100010000000000000001000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000001000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000011000000015.170833
598198480.0100000000000000000000000000000000000010000000000000000000000000000000000000000000000000100000000000000000000000001000000001000100000000000000000000000000000000000000000000000000000000000000000000010000010000000000000000000000000000111001000100000000000000000000000010000100000000000000000011000000000000000000000000000000000000000000010000000000000000000000000000000011000000000000000000000001000100000000000000000000001000000000000011000000000000000000000000000000001010000000000000101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006.868056
894026785.00000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000010000100000001000000000000000000000000000000100000000000000000000100000000000000000001000100100000000000000000000000001010000101000000001000000000000000000000000000000000000000110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010001000000000000000000000011000000000000000000000000000000000000000000000000000000010001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000010.177083
993069065.01000000000000000000000000000000000000100000000000000000000000000000000000000000000000001000000000000000000000000001010000000000000000000010000000000000000000000000000000000000000000000000000000000001000100000000000000000000000000001010000100000000100000010000100000010001000000000000000000100001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000010000000000000000000000000000000000000000000000100000100010000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011.229167
\n", "
" ], "text/plain": [ " ADMIT_ID AGE GENDER_M ETHNICITY_AMERICAN INDIAN/ALASKA NATIVE \\\n", "0 984948 85.0 1 0 \n", "3 1005720 85.0 0 0 \n", "5 981984 80.0 1 0 \n", "8 940267 85.0 0 0 \n", "9 930690 65.0 1 0 \n", "\n", " ETHNICITY_AMERICAN INDIAN/ALASKA NATIVE FEDERALLY RECOGNIZED TRIBE \\\n", "0 0 \n", "3 0 \n", "5 0 \n", "8 0 \n", "9 0 \n", "\n", " ETHNICITY_ASIAN ETHNICITY_ASIAN - ASIAN INDIAN \\\n", "0 0 0 \n", "3 0 0 \n", "5 0 0 \n", "8 0 0 \n", "9 0 0 \n", "\n", " ETHNICITY_ASIAN - CAMBODIAN ETHNICITY_ASIAN - CHINESE \\\n", "0 0 0 \n", "3 0 0 \n", "5 0 0 \n", "8 0 0 \n", "9 0 0 \n", "\n", " ETHNICITY_ASIAN - FILIPINO ETHNICITY_ASIAN - JAPANESE \\\n", "0 0 0 \n", "3 0 0 \n", "5 0 0 \n", "8 0 0 \n", "9 0 0 \n", "\n", " ETHNICITY_ASIAN - KOREAN ETHNICITY_ASIAN - OTHER ETHNICITY_ASIAN - THAI \\\n", "0 0 0 0 \n", "3 0 0 0 \n", "5 0 0 0 \n", "8 0 0 0 \n", "9 0 0 0 \n", "\n", " ETHNICITY_ASIAN - VIETNAMESE ETHNICITY_BLACK/AFRICAN \\\n", "0 0 0 \n", "3 0 0 \n", "5 0 0 \n", "8 0 0 \n", "9 0 0 \n", "\n", " ETHNICITY_BLACK/AFRICAN AMERICAN ETHNICITY_BLACK/CAPE VERDEAN \\\n", "0 0 0 \n", "3 0 0 \n", "5 0 0 \n", "8 0 0 \n", "9 0 0 \n", "\n", " ETHNICITY_BLACK/HAITIAN ETHNICITY_CARIBBEAN ISLAND \\\n", "0 0 0 \n", "3 0 0 \n", "5 0 0 \n", "8 0 0 \n", "9 0 0 \n", "\n", " ETHNICITY_HISPANIC OR LATINO \\\n", "0 0 \n", "3 0 \n", "5 0 \n", "8 0 \n", "9 0 \n", "\n", " ETHNICITY_HISPANIC/LATINO - CENTRAL AMERICAN (OTHER) \\\n", "0 0 \n", "3 0 \n", "5 0 \n", "8 0 \n", "9 0 \n", "\n", " ETHNICITY_HISPANIC/LATINO - COLOMBIAN ETHNICITY_HISPANIC/LATINO - CUBAN \\\n", "0 0 0 \n", "3 0 0 \n", "5 0 0 \n", "8 0 0 \n", "9 0 0 \n", "\n", " ETHNICITY_HISPANIC/LATINO - DOMINICAN \\\n", "0 0 \n", "3 0 \n", "5 0 \n", "8 0 \n", "9 0 \n", "\n", " ETHNICITY_HISPANIC/LATINO - GUATEMALAN \\\n", "0 0 \n", "3 0 \n", "5 0 \n", "8 0 \n", "9 0 \n", "\n", " ETHNICITY_HISPANIC/LATINO - HONDURAN ETHNICITY_HISPANIC/LATINO - MEXICAN \\\n", "0 0 0 \n", "3 0 0 \n", "5 0 0 \n", "8 0 0 \n", "9 0 0 \n", "\n", " ETHNICITY_HISPANIC/LATINO - PUERTO RICAN \\\n", "0 0 \n", "3 0 \n", "5 0 \n", "8 0 \n", "9 0 \n", "\n", " ETHNICITY_HISPANIC/LATINO - SALVADORAN ETHNICITY_MIDDLE EASTERN \\\n", "0 0 0 \n", "3 0 0 \n", "5 0 0 \n", "8 0 0 \n", "9 0 0 \n", "\n", " ETHNICITY_MULTI RACE ETHNICITY \\\n", "0 0 \n", "3 0 \n", "5 0 \n", "8 0 \n", "9 0 \n", "\n", " ETHNICITY_NATIVE HAWAIIAN OR OTHER PACIFIC ISLANDER ETHNICITY_OTHER \\\n", "0 0 0 \n", "3 0 0 \n", "5 0 0 \n", "8 0 0 \n", "9 0 0 \n", "\n", " ETHNICITY_PATIENT DECLINED TO ANSWER ETHNICITY_PORTUGUESE \\\n", "0 0 0 \n", "3 0 0 \n", "5 0 0 \n", "8 0 0 \n", "9 0 0 \n", "\n", " ETHNICITY_SOUTH AMERICAN ETHNICITY_UNABLE TO OBTAIN \\\n", "0 0 0 \n", "3 0 0 \n", "5 0 0 \n", "8 0 0 \n", "9 0 0 \n", "\n", " ETHNICITY_UNKNOWN/NOT SPECIFIED ETHNICITY_WHITE \\\n", "0 1 0 \n", "3 0 1 \n", "5 0 1 \n", "8 0 1 \n", "9 0 1 \n", "\n", " ETHNICITY_WHITE - BRAZILIAN ETHNICITY_WHITE - EASTERN EUROPEAN \\\n", "0 0 0 \n", "3 0 0 \n", "5 0 0 \n", "8 0 0 \n", "9 0 0 \n", "\n", " ETHNICITY_WHITE - OTHER EUROPEAN ETHNICITY_WHITE - RUSSIAN LANGUAGE_* BE \\\n", "0 0 0 0 \n", "3 0 0 0 \n", "5 0 0 0 \n", "8 0 0 0 \n", "9 0 0 0 \n", "\n", " LANGUAGE_* FU LANGUAGE_** T LANGUAGE_**SH LANGUAGE_**TO LANGUAGE_*AMH \\\n", "0 0 0 0 0 0 \n", "3 0 0 0 0 0 \n", "5 0 0 0 0 0 \n", "8 0 0 0 0 0 \n", "9 0 0 0 0 0 \n", "\n", " LANGUAGE_*ARA LANGUAGE_*ARM LANGUAGE_*BEN LANGUAGE_*BOS LANGUAGE_*BUL \\\n", "0 0 0 0 0 0 \n", "3 0 0 0 0 0 \n", "5 0 0 0 0 0 \n", "8 0 0 0 0 0 \n", "9 0 0 0 0 0 \n", "\n", " LANGUAGE_*BUR LANGUAGE_*CAN LANGUAGE_*CDI LANGUAGE_*CHI LANGUAGE_*DEA \\\n", "0 0 0 0 0 0 \n", "3 0 0 0 0 0 \n", "5 0 0 0 0 0 \n", "8 0 0 0 0 0 \n", "9 0 0 0 0 0 \n", "\n", " LANGUAGE_*DUT LANGUAGE_*FAR LANGUAGE_*FIL LANGUAGE_*FUL LANGUAGE_*GUJ \\\n", "0 0 0 0 0 0 \n", "3 0 0 0 0 0 \n", "5 0 0 0 0 0 \n", "8 0 0 0 0 0 \n", "9 0 0 0 0 0 \n", "\n", " LANGUAGE_*HUN LANGUAGE_*IBO LANGUAGE_*KHM LANGUAGE_*LEB LANGUAGE_*MAN \\\n", "0 0 0 0 0 0 \n", "3 0 0 0 0 0 \n", "5 0 0 0 0 0 \n", "8 0 0 0 0 0 \n", "9 0 0 0 0 0 \n", "\n", " LANGUAGE_*MOR LANGUAGE_*NEP LANGUAGE_*PER LANGUAGE_*PHI LANGUAGE_*PUN \\\n", "0 0 0 0 0 0 \n", "3 0 0 0 0 0 \n", "5 0 0 0 0 0 \n", "8 0 0 0 0 0 \n", "9 0 0 0 0 0 \n", "\n", " LANGUAGE_*SPA LANGUAGE_*TAM LANGUAGE_*TOI LANGUAGE_*TOY LANGUAGE_*URD \\\n", "0 0 0 0 0 0 \n", "3 0 0 0 0 0 \n", "5 0 0 0 0 0 \n", "8 0 0 0 0 0 \n", "9 0 0 0 0 0 \n", "\n", " LANGUAGE_*YID LANGUAGE_*YOR LANGUAGE_ALBA LANGUAGE_AMER LANGUAGE_ARAB \\\n", "0 0 0 0 0 0 \n", "3 0 0 0 0 0 \n", "5 0 0 0 0 0 \n", "8 0 0 0 0 0 \n", "9 0 0 0 0 0 \n", "\n", " LANGUAGE_BENG LANGUAGE_CAMB LANGUAGE_CANT LANGUAGE_CAPE LANGUAGE_ENGL \\\n", "0 0 0 0 0 0 \n", "3 0 0 0 0 0 \n", "5 0 0 0 0 1 \n", "8 0 0 0 0 0 \n", "9 0 0 0 0 1 \n", "\n", " LANGUAGE_ETHI LANGUAGE_FREN LANGUAGE_GREE LANGUAGE_HAIT LANGUAGE_HIND \\\n", "0 0 0 0 0 0 \n", "3 0 0 0 0 0 \n", "5 0 0 0 0 0 \n", "8 0 0 0 0 0 \n", "9 0 0 0 0 0 \n", "\n", " LANGUAGE_ITAL LANGUAGE_JAPA LANGUAGE_KORE LANGUAGE_LAOT LANGUAGE_MAND \\\n", "0 0 0 0 0 0 \n", "3 0 0 0 0 0 \n", "5 0 0 0 0 0 \n", "8 0 0 0 0 0 \n", "9 0 0 0 0 0 \n", "\n", " LANGUAGE_PERS LANGUAGE_POLI LANGUAGE_PORT LANGUAGE_PTUN LANGUAGE_RUSS \\\n", "0 0 0 0 0 0 \n", "3 0 0 0 0 0 \n", "5 0 0 0 0 0 \n", "8 0 0 0 0 0 \n", "9 0 0 0 0 0 \n", "\n", " LANGUAGE_SERB LANGUAGE_SOMA LANGUAGE_SPAN LANGUAGE_TAGA LANGUAGE_THAI \\\n", "0 0 0 0 0 0 \n", "3 0 0 0 0 0 \n", "5 0 0 0 0 0 \n", "8 0 0 0 0 0 \n", "9 0 0 0 0 0 \n", "\n", " LANGUAGE_TURK LANGUAGE_URDU LANGUAGE_VIET INSURANCE_Government \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 0 0 0 0 \n", "8 0 0 0 0 \n", "9 0 0 0 0 \n", "\n", " INSURANCE_Medicaid INSURANCE_Medicare INSURANCE_Private \\\n", "0 0 1 0 \n", "3 0 1 0 \n", "5 0 1 0 \n", "8 0 1 0 \n", "9 0 0 1 \n", "\n", " INSURANCE_Self Pay MARRIED_DIVORCED MARRIED_LIFE PARTNER \\\n", "0 0 0 0 \n", "3 0 0 0 \n", "5 0 0 0 \n", "8 0 0 0 \n", "9 0 1 0 \n", "\n", " MARRIED_MARRIED MARRIED_SEPARATED MARRIED_SINGLE \\\n", "0 1 0 0 \n", "3 0 0 0 \n", "5 0 0 0 \n", "8 1 0 0 \n", "9 0 0 0 \n", "\n", " MARRIED_UNKNOWN (DEFAULT) MARRIED_WIDOWED RELIGION_7TH DAY ADVENTIST \\\n", "0 0 0 0 \n", "3 0 1 0 \n", "5 0 1 0 \n", "8 0 0 0 \n", "9 0 0 0 \n", "\n", " RELIGION_BAPTIST RELIGION_BUDDHIST RELIGION_CATHOLIC \\\n", "0 0 0 1 \n", "3 0 0 0 \n", "5 0 0 1 \n", "8 0 0 1 \n", "9 0 0 0 \n", "\n", " RELIGION_CHRISTIAN SCIENTIST RELIGION_EPISCOPALIAN \\\n", "0 0 0 \n", "3 0 0 \n", "5 0 0 \n", "8 0 0 \n", "9 0 0 \n", "\n", " RELIGION_GREEK ORTHODOX RELIGION_HEBREW RELIGION_HINDU \\\n", "0 0 0 0 \n", "3 0 0 0 \n", "5 0 0 0 \n", "8 0 0 0 \n", "9 0 0 0 \n", "\n", " RELIGION_JEHOVAH'S WITNESS RELIGION_JEWISH RELIGION_LUTHERAN \\\n", "0 0 0 0 \n", "3 0 1 0 \n", "5 0 0 0 \n", "8 0 0 0 \n", "9 0 0 0 \n", "\n", " RELIGION_METHODIST RELIGION_MUSLIM RELIGION_NOT SPECIFIED \\\n", "0 0 0 0 \n", "3 0 0 0 \n", "5 0 0 0 \n", "8 0 0 0 \n", "9 0 0 1 \n", "\n", " RELIGION_OTHER RELIGION_PROTESTANT QUAKER RELIGION_ROMANIAN EAST. ORTH \\\n", "0 0 0 0 \n", "3 0 0 0 \n", "5 0 0 0 \n", "8 0 0 0 \n", "9 0 0 0 \n", "\n", " RELIGION_UNITARIAN-UNIVERSALIST RELIGION_UNOBTAINABLE DIAGNOSIS_CCS_0 \\\n", "0 0 0 0 \n", "3 0 0 0 \n", "5 0 0 0 \n", "8 0 0 0 \n", "9 0 0 0 \n", "\n", " DIAGNOSIS_CCS_1 DIAGNOSIS_CCS_2 DIAGNOSIS_CCS_3 DIAGNOSIS_CCS_4 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 0 0 0 0 \n", "8 0 0 0 0 \n", "9 0 0 0 0 \n", "\n", " DIAGNOSIS_CCS_5 DIAGNOSIS_CCS_6 DIAGNOSIS_CCS_7 DIAGNOSIS_CCS_8 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 0 0 0 0 \n", "8 0 0 0 0 \n", "9 0 0 0 0 \n", "\n", " DIAGNOSIS_CCS_9 DIAGNOSIS_CCS_10 DIAGNOSIS_CCS_11 DIAGNOSIS_CCS_12 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 0 0 0 0 \n", "8 0 0 0 0 \n", "9 0 0 0 0 \n", "\n", " DIAGNOSIS_CCS_13 DIAGNOSIS_CCS_14 DIAGNOSIS_CCS_15 DIAGNOSIS_CCS_16 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 0 0 0 0 \n", "8 0 1 0 0 \n", "9 0 0 0 0 \n", "\n", " DIAGNOSIS_CCS_17 DIAGNOSIS_CCS_18 DIAGNOSIS_CCS_19 DIAGNOSIS_CCS_20 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 0 0 0 0 \n", "8 0 0 0 0 \n", "9 0 0 0 0 \n", "\n", " DIAGNOSIS_CCS_21 DIAGNOSIS_CCS_22 DIAGNOSIS_CCS_23 DIAGNOSIS_CCS_24 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 0 0 0 0 \n", "8 0 0 0 0 \n", "9 0 0 0 0 \n", "\n", " DIAGNOSIS_CCS_25 DIAGNOSIS_CCS_26 DIAGNOSIS_CCS_27 DIAGNOSIS_CCS_28 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 0 0 0 0 \n", "8 0 0 0 0 \n", "9 0 0 0 0 \n", "\n", " DIAGNOSIS_CCS_29 DIAGNOSIS_CCS_30 DIAGNOSIS_CCS_31 DIAGNOSIS_CCS_32 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 0 0 0 0 \n", "8 0 0 0 0 \n", "9 0 0 0 0 \n", "\n", " DIAGNOSIS_CCS_33 DIAGNOSIS_CCS_34 DIAGNOSIS_CCS_35 DIAGNOSIS_CCS_36 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 0 0 0 0 \n", "8 0 0 1 0 \n", "9 0 0 0 0 \n", "\n", " DIAGNOSIS_CCS_37 DIAGNOSIS_CCS_38 DIAGNOSIS_CCS_39 DIAGNOSIS_CCS_40 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 0 0 0 0 \n", "8 0 0 0 0 \n", "9 0 0 0 0 \n", "\n", " DIAGNOSIS_CCS_41 DIAGNOSIS_CCS_42 DIAGNOSIS_CCS_43 DIAGNOSIS_CCS_44 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 0 0 0 0 \n", "8 0 0 0 0 \n", "9 0 0 0 0 \n", "\n", " DIAGNOSIS_CCS_45 DIAGNOSIS_CCS_46 DIAGNOSIS_CCS_47 DIAGNOSIS_CCS_48 \\\n", "0 0 0 0 0 \n", "3 0 0 1 0 \n", "5 0 0 0 0 \n", "8 0 0 0 0 \n", "9 0 0 0 0 \n", "\n", " DIAGNOSIS_CCS_49 DIAGNOSIS_CCS_50 DIAGNOSIS_CCS_51 DIAGNOSIS_CCS_52 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 0 0 0 0 \n", "8 0 0 0 0 \n", "9 0 0 0 0 \n", "\n", " DIAGNOSIS_CCS_53 DIAGNOSIS_CCS_54 DIAGNOSIS_CCS_55 DIAGNOSIS_CCS_56 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 1 0 0 0 \n", "8 0 0 1 0 \n", "9 0 0 1 0 \n", "\n", " DIAGNOSIS_CCS_57 DIAGNOSIS_CCS_58 DIAGNOSIS_CCS_59 DIAGNOSIS_CCS_60 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 0 0 1 0 \n", "8 0 0 1 0 \n", "9 0 0 1 0 \n", "\n", " DIAGNOSIS_CCS_61 DIAGNOSIS_CCS_62 DIAGNOSIS_CCS_63 DIAGNOSIS_CCS_64 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 0 0 0 0 \n", "8 0 1 0 0 \n", "9 0 0 0 0 \n", "\n", " DIAGNOSIS_CCS_76 DIAGNOSIS_CCS_77 DIAGNOSIS_CCS_78 DIAGNOSIS_CCS_79 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 0 0 0 0 \n", "8 0 0 0 0 \n", "9 0 0 0 0 \n", "\n", " DIAGNOSIS_CCS_80 DIAGNOSIS_CCS_81 DIAGNOSIS_CCS_82 DIAGNOSIS_CCS_83 \\\n", "0 0 0 0 0 \n", "3 0 0 0 1 \n", "5 0 0 0 0 \n", "8 0 0 0 0 \n", "9 0 0 0 0 \n", "\n", " DIAGNOSIS_CCS_84 DIAGNOSIS_CCS_85 DIAGNOSIS_CCS_86 DIAGNOSIS_CCS_87 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 0 0 0 0 \n", "8 0 0 0 0 \n", "9 0 0 0 0 \n", "\n", " DIAGNOSIS_CCS_88 DIAGNOSIS_CCS_89 DIAGNOSIS_CCS_90 DIAGNOSIS_CCS_91 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 0 0 0 0 \n", "8 0 0 0 0 \n", "9 0 0 0 0 \n", "\n", " DIAGNOSIS_CCS_92 DIAGNOSIS_CCS_93 DIAGNOSIS_CCS_94 DIAGNOSIS_CCS_95 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 0 0 0 0 \n", "8 0 0 0 0 \n", "9 0 0 0 0 \n", "\n", " DIAGNOSIS_CCS_96 DIAGNOSIS_CCS_97 DIAGNOSIS_CCS_98 DIAGNOSIS_CCS_99 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 0 0 0 1 \n", "8 0 0 0 1 \n", "9 0 0 0 1 \n", "\n", " DIAGNOSIS_CCS_100 DIAGNOSIS_CCS_101 DIAGNOSIS_CCS_102 DIAGNOSIS_CCS_103 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 1 1 0 0 \n", "8 0 1 0 0 \n", "9 0 1 0 0 \n", "\n", " DIAGNOSIS_CCS_104 DIAGNOSIS_CCS_105 DIAGNOSIS_CCS_106 DIAGNOSIS_CCS_107 \\\n", "0 0 0 1 0 \n", "3 0 0 0 0 \n", "5 1 0 0 0 \n", "8 0 0 1 0 \n", "9 0 0 1 0 \n", "\n", " DIAGNOSIS_CCS_108 DIAGNOSIS_CCS_109 DIAGNOSIS_CCS_110 DIAGNOSIS_CCS_111 \\\n", "0 0 0 0 0 \n", "3 0 1 0 0 \n", "5 1 0 0 0 \n", "8 1 0 0 0 \n", "9 0 0 0 0 \n", "\n", " DIAGNOSIS_CCS_112 DIAGNOSIS_CCS_113 DIAGNOSIS_CCS_114 DIAGNOSIS_CCS_115 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 0 0 0 0 \n", "8 0 0 0 0 \n", "9 0 0 0 1 \n", "\n", " DIAGNOSIS_CCS_116 DIAGNOSIS_CCS_117 DIAGNOSIS_CCS_118 DIAGNOSIS_CCS_119 \\\n", "0 0 0 0 0 \n", "3 0 0 1 0 \n", "5 0 0 0 0 \n", "8 0 1 0 0 \n", "9 0 0 0 0 \n", "\n", " DIAGNOSIS_CCS_120 DIAGNOSIS_CCS_121 DIAGNOSIS_CCS_122 DIAGNOSIS_CCS_123 \\\n", "0 0 0 0 0 \n", "3 0 0 1 0 \n", "5 0 0 0 0 \n", "8 0 0 0 0 \n", "9 0 0 1 0 \n", "\n", " DIAGNOSIS_CCS_124 DIAGNOSIS_CCS_125 DIAGNOSIS_CCS_126 DIAGNOSIS_CCS_127 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 0 0 0 0 \n", "8 0 0 0 0 \n", "9 0 0 0 1 \n", "\n", " DIAGNOSIS_CCS_128 DIAGNOSIS_CCS_129 DIAGNOSIS_CCS_130 DIAGNOSIS_CCS_131 \\\n", "0 0 0 0 1 \n", "3 0 0 0 0 \n", "5 0 0 0 0 \n", "8 0 0 0 0 \n", "9 0 0 0 0 \n", "\n", " DIAGNOSIS_CCS_132 DIAGNOSIS_CCS_133 DIAGNOSIS_CCS_134 DIAGNOSIS_CCS_135 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 0 1 0 0 \n", "8 0 0 0 0 \n", "9 0 0 1 0 \n", "\n", " DIAGNOSIS_CCS_136 DIAGNOSIS_CCS_137 DIAGNOSIS_CCS_138 DIAGNOSIS_CCS_139 \\\n", "0 0 0 0 0 \n", "3 0 0 1 0 \n", "5 0 0 1 0 \n", "8 0 0 0 0 \n", "9 0 0 1 0 \n", "\n", " DIAGNOSIS_CCS_140 DIAGNOSIS_CCS_141 DIAGNOSIS_CCS_142 DIAGNOSIS_CCS_143 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 0 0 0 0 \n", "8 0 0 0 0 \n", "9 0 0 0 0 \n", "\n", " DIAGNOSIS_CCS_144 DIAGNOSIS_CCS_145 DIAGNOSIS_CCS_146 DIAGNOSIS_CCS_147 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 0 0 0 0 \n", "8 0 0 0 0 \n", "9 0 0 0 0 \n", "\n", " DIAGNOSIS_CCS_148 DIAGNOSIS_CCS_149 DIAGNOSIS_CCS_151 DIAGNOSIS_CCS_152 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 0 0 0 0 \n", "8 0 0 0 0 \n", "9 0 0 0 0 \n", "\n", " DIAGNOSIS_CCS_153 DIAGNOSIS_CCS_154 DIAGNOSIS_CCS_155 DIAGNOSIS_CCS_156 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 0 0 0 0 \n", "8 0 0 0 0 \n", "9 0 0 0 0 \n", "\n", " DIAGNOSIS_CCS_157 DIAGNOSIS_CCS_158 DIAGNOSIS_CCS_159 DIAGNOSIS_CCS_160 \\\n", "0 0 0 0 0 \n", "3 0 0 1 0 \n", "5 0 1 1 0 \n", "8 0 1 1 0 \n", "9 0 1 0 0 \n", "\n", " DIAGNOSIS_CCS_161 DIAGNOSIS_CCS_162 DIAGNOSIS_CCS_163 DIAGNOSIS_CCS_164 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 0 0 0 0 \n", "8 0 0 0 0 \n", "9 0 0 1 0 \n", "\n", " DIAGNOSIS_CCS_165 DIAGNOSIS_CCS_166 DIAGNOSIS_CCS_167 DIAGNOSIS_CCS_168 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 0 0 0 0 \n", "8 0 0 0 0 \n", "9 0 0 0 0 \n", "\n", " DIAGNOSIS_CCS_169 DIAGNOSIS_CCS_170 DIAGNOSIS_CCS_171 DIAGNOSIS_CCS_172 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 0 0 0 0 \n", "8 0 0 0 0 \n", "9 0 0 0 0 \n", "\n", " DIAGNOSIS_CCS_173 DIAGNOSIS_CCS_174 DIAGNOSIS_CCS_175 DIAGNOSIS_CCS_176 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 0 0 0 0 \n", "8 0 0 0 0 \n", "9 0 0 0 0 \n", "\n", " DIAGNOSIS_CCS_177 DIAGNOSIS_CCS_178 DIAGNOSIS_CCS_179 DIAGNOSIS_CCS_180 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 0 0 0 0 \n", "8 0 0 0 0 \n", "9 0 0 0 0 \n", "\n", " DIAGNOSIS_CCS_181 DIAGNOSIS_CCS_182 DIAGNOSIS_CCS_183 DIAGNOSIS_CCS_184 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 0 0 0 0 \n", "8 0 0 0 0 \n", "9 0 0 0 0 \n", "\n", " DIAGNOSIS_CCS_185 DIAGNOSIS_CCS_186 DIAGNOSIS_CCS_187 DIAGNOSIS_CCS_188 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 0 0 0 0 \n", "8 0 0 0 0 \n", "9 0 0 0 0 \n", "\n", " DIAGNOSIS_CCS_189 DIAGNOSIS_CCS_190 DIAGNOSIS_CCS_191 DIAGNOSIS_CCS_192 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 0 0 0 0 \n", "8 0 0 0 0 \n", "9 0 0 0 0 \n", "\n", " DIAGNOSIS_CCS_193 DIAGNOSIS_CCS_195 DIAGNOSIS_CCS_196 DIAGNOSIS_CCS_197 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 0 0 0 0 \n", "8 0 0 0 0 \n", "9 0 0 0 0 \n", "\n", " DIAGNOSIS_CCS_198 DIAGNOSIS_CCS_199 DIAGNOSIS_CCS_200 DIAGNOSIS_CCS_201 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 0 0 0 0 \n", "8 0 0 0 0 \n", "9 0 0 0 0 \n", "\n", " DIAGNOSIS_CCS_202 DIAGNOSIS_CCS_203 DIAGNOSIS_CCS_204 DIAGNOSIS_CCS_205 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 0 0 1 0 \n", "8 0 0 0 0 \n", "9 0 0 0 0 \n", "\n", " DIAGNOSIS_CCS_206 DIAGNOSIS_CCS_207 DIAGNOSIS_CCS_208 DIAGNOSIS_CCS_209 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 0 0 0 0 \n", "8 0 0 0 0 \n", "9 0 0 0 0 \n", "\n", " DIAGNOSIS_CCS_210 DIAGNOSIS_CCS_211 DIAGNOSIS_CCS_212 DIAGNOSIS_CCS_213 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 0 0 0 0 \n", "8 0 0 0 0 \n", "9 0 0 0 0 \n", "\n", " DIAGNOSIS_CCS_214 DIAGNOSIS_CCS_215 DIAGNOSIS_CCS_216 DIAGNOSIS_CCS_217 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 0 0 0 0 \n", "8 0 0 0 0 \n", "9 0 0 0 0 \n", "\n", " DIAGNOSIS_CCS_218 DIAGNOSIS_CCS_219 DIAGNOSIS_CCS_220 DIAGNOSIS_CCS_221 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 0 0 0 0 \n", "8 0 0 0 0 \n", "9 0 0 0 0 \n", "\n", " DIAGNOSIS_CCS_222 DIAGNOSIS_CCS_223 DIAGNOSIS_CCS_224 DIAGNOSIS_CCS_225 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 0 0 0 0 \n", "8 0 0 0 0 \n", "9 0 0 0 0 \n", "\n", " DIAGNOSIS_CCS_226 DIAGNOSIS_CCS_227 DIAGNOSIS_CCS_228 DIAGNOSIS_CCS_229 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 0 0 0 0 \n", "8 0 0 0 0 \n", "9 0 0 0 0 \n", "\n", " DIAGNOSIS_CCS_230 DIAGNOSIS_CCS_231 DIAGNOSIS_CCS_232 DIAGNOSIS_CCS_233 \\\n", "0 0 1 0 0 \n", "3 0 0 0 0 \n", "5 0 0 0 0 \n", "8 0 0 0 0 \n", "9 0 0 0 0 \n", "\n", " DIAGNOSIS_CCS_234 DIAGNOSIS_CCS_235 DIAGNOSIS_CCS_236 DIAGNOSIS_CCS_237 \\\n", "0 0 1 0 0 \n", "3 0 0 0 0 \n", "5 0 0 0 1 \n", "8 0 0 0 0 \n", "9 0 0 0 0 \n", "\n", " DIAGNOSIS_CCS_238 DIAGNOSIS_CCS_239 DIAGNOSIS_CCS_240 DIAGNOSIS_CCS_241 \\\n", "0 0 0 0 0 \n", "3 1 0 0 0 \n", "5 1 0 0 0 \n", "8 0 0 0 0 \n", "9 0 0 0 0 \n", "\n", " DIAGNOSIS_CCS_242 DIAGNOSIS_CCS_243 DIAGNOSIS_CCS_244 DIAGNOSIS_CCS_245 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 0 0 0 0 \n", "8 0 0 0 0 \n", "9 0 0 0 0 \n", "\n", " DIAGNOSIS_CCS_246 DIAGNOSIS_CCS_247 DIAGNOSIS_CCS_248 DIAGNOSIS_CCS_249 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 0 0 0 0 \n", "8 0 0 0 0 \n", "9 0 0 0 0 \n", "\n", " DIAGNOSIS_CCS_250 DIAGNOSIS_CCS_251 DIAGNOSIS_CCS_252 DIAGNOSIS_CCS_253 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 0 0 0 0 \n", "8 0 0 0 0 \n", "9 0 0 0 0 \n", "\n", " DIAGNOSIS_CCS_255 DIAGNOSIS_CCS_256 DIAGNOSIS_CCS_257 DIAGNOSIS_CCS_258 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 0 0 0 0 \n", "8 0 0 0 0 \n", "9 0 0 0 0 \n", "\n", " DIAGNOSIS_CCS_259 DIAGNOSIS_CCS_650 DIAGNOSIS_CCS_651 DIAGNOSIS_CCS_652 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 0 0 0 0 \n", "8 0 0 0 0 \n", "9 0 0 0 0 \n", "\n", " DIAGNOSIS_CCS_653 DIAGNOSIS_CCS_654 DIAGNOSIS_CCS_655 DIAGNOSIS_CCS_656 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 1 0 0 0 \n", "8 1 0 0 0 \n", "9 0 0 0 0 \n", "\n", " DIAGNOSIS_CCS_657 DIAGNOSIS_CCS_658 DIAGNOSIS_CCS_659 DIAGNOSIS_CCS_660 \\\n", "0 0 0 0 0 \n", "3 1 0 0 0 \n", "5 1 0 0 0 \n", "8 1 0 0 0 \n", "9 1 0 0 0 \n", "\n", " DIAGNOSIS_CCS_661 DIAGNOSIS_CCS_662 DIAGNOSIS_CCS_663 DIAGNOSIS_CCS_670 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 0 0 0 0 \n", "8 0 0 0 0 \n", "9 0 0 0 0 \n", "\n", " DIAGNOSIS_CCS_2601 DIAGNOSIS_CCS_2602 DIAGNOSIS_CCS_2603 \\\n", "0 0 0 1 \n", "3 0 0 0 \n", "5 0 0 0 \n", "8 0 0 0 \n", "9 0 0 0 \n", "\n", " DIAGNOSIS_CCS_2604 DIAGNOSIS_CCS_2605 DIAGNOSIS_CCS_2606 \\\n", "0 0 0 0 \n", "3 0 0 0 \n", "5 0 0 0 \n", "8 0 0 0 \n", "9 0 0 0 \n", "\n", " DIAGNOSIS_CCS_2607 DIAGNOSIS_CCS_2608 DIAGNOSIS_CCS_2609 \\\n", "0 0 0 0 \n", "3 0 0 0 \n", "5 0 0 0 \n", "8 0 0 0 \n", "9 0 0 0 \n", "\n", " DIAGNOSIS_CCS_2610 DIAGNOSIS_CCS_2611 DIAGNOSIS_CCS_2612 \\\n", "0 0 0 0 \n", "3 0 0 0 \n", "5 0 0 0 \n", "8 0 0 0 \n", "9 0 0 0 \n", "\n", " DIAGNOSIS_CCS_2613 DIAGNOSIS_CCS_2614 DIAGNOSIS_CCS_2615 \\\n", "0 0 0 0 \n", "3 0 0 0 \n", "5 0 0 0 \n", "8 0 0 0 \n", "9 0 0 0 \n", "\n", " DIAGNOSIS_CCS_2616 DIAGNOSIS_CCS_2617 DIAGNOSIS_CCS_2618 \\\n", "0 0 0 0 \n", "3 0 1 0 \n", "5 1 0 0 \n", "8 1 1 0 \n", "9 1 0 0 \n", "\n", " DIAGNOSIS_CCS_2619 DIAGNOSIS_CCS_2620 DIAGNOSIS_CCS_2621 \\\n", "0 0 0 0 \n", "3 0 0 0 \n", "5 0 0 0 \n", "8 0 0 0 \n", "9 0 0 0 \n", "\n", " PROCEDURE_CCS_1 PROCEDURE_CCS_2 PROCEDURE_CCS_3 PROCEDURE_CCS_4 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 0 0 0 0 \n", "8 0 0 0 0 \n", "9 0 0 0 0 \n", "\n", " PROCEDURE_CCS_5 PROCEDURE_CCS_6 PROCEDURE_CCS_7 PROCEDURE_CCS_8 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 0 0 0 0 \n", "8 0 0 0 0 \n", "9 0 0 0 0 \n", "\n", " PROCEDURE_CCS_9 PROCEDURE_CCS_10 PROCEDURE_CCS_11 PROCEDURE_CCS_12 \\\n", "0 1 0 0 0 \n", "3 0 0 0 0 \n", "5 1 1 0 0 \n", "8 0 0 0 0 \n", "9 0 0 0 0 \n", "\n", " PROCEDURE_CCS_14 PROCEDURE_CCS_15 PROCEDURE_CCS_16 PROCEDURE_CCS_17 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 0 0 0 0 \n", "8 0 0 0 0 \n", "9 0 0 0 0 \n", "\n", " PROCEDURE_CCS_18 PROCEDURE_CCS_19 PROCEDURE_CCS_20 PROCEDURE_CCS_21 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 0 0 0 0 \n", "8 0 0 0 0 \n", "9 0 0 0 0 \n", "\n", " PROCEDURE_CCS_23 PROCEDURE_CCS_24 PROCEDURE_CCS_25 PROCEDURE_CCS_26 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 0 0 0 0 \n", "8 0 0 0 0 \n", "9 0 0 0 0 \n", "\n", " PROCEDURE_CCS_27 PROCEDURE_CCS_28 PROCEDURE_CCS_29 PROCEDURE_CCS_30 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 0 0 0 0 \n", "8 0 0 0 0 \n", "9 0 0 0 0 \n", "\n", " PROCEDURE_CCS_31 PROCEDURE_CCS_32 PROCEDURE_CCS_33 PROCEDURE_CCS_34 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 0 0 0 0 \n", "8 0 0 0 0 \n", "9 0 0 0 0 \n", "\n", " PROCEDURE_CCS_35 PROCEDURE_CCS_36 PROCEDURE_CCS_37 PROCEDURE_CCS_38 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 0 0 0 0 \n", "8 0 0 0 0 \n", "9 0 0 0 0 \n", "\n", " PROCEDURE_CCS_39 PROCEDURE_CCS_40 PROCEDURE_CCS_41 PROCEDURE_CCS_42 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 0 0 0 0 \n", "8 0 0 0 0 \n", "9 0 0 0 0 \n", "\n", " PROCEDURE_CCS_43 PROCEDURE_CCS_44 PROCEDURE_CCS_45 PROCEDURE_CCS_46 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 0 0 1 0 \n", "8 0 0 0 0 \n", "9 0 1 0 0 \n", "\n", " PROCEDURE_CCS_47 PROCEDURE_CCS_48 PROCEDURE_CCS_49 PROCEDURE_CCS_50 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 1 0 0 0 \n", "8 0 0 0 0 \n", "9 0 0 0 1 \n", "\n", " PROCEDURE_CCS_51 PROCEDURE_CCS_52 PROCEDURE_CCS_53 PROCEDURE_CCS_54 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 0 0 0 0 \n", "8 0 0 0 1 \n", "9 0 0 0 1 \n", "\n", " PROCEDURE_CCS_55 PROCEDURE_CCS_56 PROCEDURE_CCS_57 PROCEDURE_CCS_58 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 0 0 0 0 \n", "8 0 0 0 1 \n", "9 0 0 0 0 \n", "\n", " PROCEDURE_CCS_59 PROCEDURE_CCS_60 PROCEDURE_CCS_61 PROCEDURE_CCS_62 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 0 0 1 0 \n", "8 0 0 0 0 \n", "9 0 0 1 0 \n", "\n", " PROCEDURE_CCS_63 PROCEDURE_CCS_64 PROCEDURE_CCS_65 PROCEDURE_CCS_66 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 1 0 0 0 \n", "8 0 0 0 0 \n", "9 0 0 0 0 \n", "\n", " PROCEDURE_CCS_67 PROCEDURE_CCS_68 PROCEDURE_CCS_69 PROCEDURE_CCS_70 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 0 0 0 0 \n", "8 0 0 0 0 \n", "9 0 0 0 0 \n", "\n", " PROCEDURE_CCS_71 PROCEDURE_CCS_72 PROCEDURE_CCS_73 PROCEDURE_CCS_74 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 0 0 0 0 \n", "8 0 0 0 0 \n", "9 0 0 0 0 \n", "\n", " PROCEDURE_CCS_75 PROCEDURE_CCS_76 PROCEDURE_CCS_77 PROCEDURE_CCS_78 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 0 0 0 0 \n", "8 0 0 0 0 \n", "9 0 0 0 0 \n", "\n", " PROCEDURE_CCS_79 PROCEDURE_CCS_80 PROCEDURE_CCS_81 PROCEDURE_CCS_82 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 0 0 0 0 \n", "8 0 0 0 0 \n", "9 0 0 0 0 \n", "\n", " PROCEDURE_CCS_83 PROCEDURE_CCS_84 PROCEDURE_CCS_85 PROCEDURE_CCS_86 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 0 0 0 0 \n", "8 0 0 0 0 \n", "9 0 0 0 0 \n", "\n", " PROCEDURE_CCS_87 PROCEDURE_CCS_88 PROCEDURE_CCS_89 PROCEDURE_CCS_90 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 0 0 0 0 \n", "8 0 0 0 0 \n", "9 0 0 0 0 \n", "\n", " PROCEDURE_CCS_91 PROCEDURE_CCS_92 PROCEDURE_CCS_93 PROCEDURE_CCS_94 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 0 0 0 0 \n", "8 0 0 0 0 \n", "9 0 0 0 0 \n", "\n", " PROCEDURE_CCS_95 PROCEDURE_CCS_96 PROCEDURE_CCS_97 PROCEDURE_CCS_98 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 0 0 0 0 \n", "8 0 0 0 0 \n", "9 0 0 0 0 \n", "\n", " PROCEDURE_CCS_99 PROCEDURE_CCS_100 PROCEDURE_CCS_101 PROCEDURE_CCS_102 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 0 0 0 0 \n", "8 0 0 0 0 \n", "9 0 0 0 0 \n", "\n", " PROCEDURE_CCS_103 PROCEDURE_CCS_104 PROCEDURE_CCS_105 PROCEDURE_CCS_106 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 0 0 0 0 \n", "8 0 0 0 0 \n", "9 0 0 0 0 \n", "\n", " PROCEDURE_CCS_107 PROCEDURE_CCS_108 PROCEDURE_CCS_109 PROCEDURE_CCS_110 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 0 0 0 0 \n", "8 0 0 0 0 \n", "9 0 0 0 0 \n", "\n", " PROCEDURE_CCS_111 PROCEDURE_CCS_112 PROCEDURE_CCS_113 PROCEDURE_CCS_114 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 0 0 0 0 \n", "8 0 0 0 0 \n", "9 0 0 0 0 \n", "\n", " PROCEDURE_CCS_115 PROCEDURE_CCS_116 PROCEDURE_CCS_117 PROCEDURE_CCS_118 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 0 0 0 0 \n", "8 0 0 0 0 \n", "9 0 0 0 0 \n", "\n", " PROCEDURE_CCS_119 PROCEDURE_CCS_120 PROCEDURE_CCS_121 PROCEDURE_CCS_122 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 0 0 0 0 \n", "8 0 0 0 0 \n", "9 0 0 0 0 \n", "\n", " PROCEDURE_CCS_123 PROCEDURE_CCS_124 PROCEDURE_CCS_125 PROCEDURE_CCS_126 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 0 0 0 0 \n", "8 0 0 0 0 \n", "9 0 0 0 0 \n", "\n", " PROCEDURE_CCS_127 PROCEDURE_CCS_128 PROCEDURE_CCS_129 PROCEDURE_CCS_130 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 0 0 0 0 \n", "8 0 0 0 0 \n", "9 0 0 0 0 \n", "\n", " PROCEDURE_CCS_131 PROCEDURE_CCS_132 PROCEDURE_CCS_133 PROCEDURE_CCS_134 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 0 0 0 0 \n", "8 0 0 0 0 \n", "9 0 0 0 0 \n", "\n", " PROCEDURE_CCS_135 PROCEDURE_CCS_136 PROCEDURE_CCS_137 PROCEDURE_CCS_138 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 0 0 0 0 \n", "8 0 0 0 0 \n", "9 0 0 0 0 \n", "\n", " PROCEDURE_CCS_139 PROCEDURE_CCS_140 PROCEDURE_CCS_141 PROCEDURE_CCS_142 \\\n", "0 0 0 0 1 \n", "3 0 0 0 0 \n", "5 0 0 0 0 \n", "8 0 0 0 0 \n", "9 0 0 0 0 \n", "\n", " PROCEDURE_CCS_143 PROCEDURE_CCS_144 PROCEDURE_CCS_145 PROCEDURE_CCS_146 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 0 0 0 0 \n", "8 0 0 0 0 \n", "9 0 0 0 0 \n", "\n", " PROCEDURE_CCS_147 PROCEDURE_CCS_148 PROCEDURE_CCS_149 PROCEDURE_CCS_150 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 0 0 0 0 \n", "8 0 0 0 0 \n", "9 0 0 0 0 \n", "\n", " PROCEDURE_CCS_151 PROCEDURE_CCS_152 PROCEDURE_CCS_153 PROCEDURE_CCS_154 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 0 0 0 0 \n", "8 0 0 0 0 \n", "9 0 0 0 0 \n", "\n", " PROCEDURE_CCS_155 PROCEDURE_CCS_156 PROCEDURE_CCS_157 PROCEDURE_CCS_158 \\\n", "0 0 0 0 1 \n", "3 0 0 0 0 \n", "5 0 0 0 0 \n", "8 0 0 0 0 \n", "9 0 0 0 0 \n", "\n", " PROCEDURE_CCS_159 PROCEDURE_CCS_160 PROCEDURE_CCS_161 PROCEDURE_CCS_162 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 0 0 0 0 \n", "8 0 0 0 0 \n", "9 0 0 0 0 \n", "\n", " PROCEDURE_CCS_163 PROCEDURE_CCS_164 PROCEDURE_CCS_165 PROCEDURE_CCS_166 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 0 0 0 0 \n", "8 0 0 0 0 \n", "9 0 0 0 0 \n", "\n", " PROCEDURE_CCS_167 PROCEDURE_CCS_168 PROCEDURE_CCS_169 PROCEDURE_CCS_170 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 0 0 0 0 \n", "8 0 0 0 0 \n", "9 0 0 0 0 \n", "\n", " PROCEDURE_CCS_171 PROCEDURE_CCS_172 PROCEDURE_CCS_173 PROCEDURE_CCS_174 \\\n", "0 1 0 0 0 \n", "3 0 0 0 0 \n", "5 0 0 0 0 \n", "8 0 0 0 0 \n", "9 0 0 0 0 \n", "\n", " PROCEDURE_CCS_175 PROCEDURE_CCS_176 PROCEDURE_CCS_177 PROCEDURE_CCS_178 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 0 0 0 0 \n", "8 0 0 0 0 \n", "9 0 0 0 0 \n", "\n", " PROCEDURE_CCS_179 PROCEDURE_CCS_180 PROCEDURE_CCS_181 PROCEDURE_CCS_183 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 0 0 0 0 \n", "8 0 0 0 0 \n", "9 0 0 0 0 \n", "\n", " PROCEDURE_CCS_184 PROCEDURE_CCS_185 PROCEDURE_CCS_186 PROCEDURE_CCS_187 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 0 0 0 0 \n", "8 0 0 0 0 \n", "9 0 0 0 0 \n", "\n", " PROCEDURE_CCS_188 PROCEDURE_CCS_189 PROCEDURE_CCS_190 PROCEDURE_CCS_191 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 0 0 0 0 \n", "8 0 0 0 0 \n", "9 0 0 0 0 \n", "\n", " PROCEDURE_CCS_192 PROCEDURE_CCS_193 PROCEDURE_CCS_194 PROCEDURE_CCS_195 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 0 0 0 0 \n", "8 0 0 0 0 \n", "9 0 0 0 0 \n", "\n", " PROCEDURE_CCS_196 PROCEDURE_CCS_197 PROCEDURE_CCS_198 PROCEDURE_CCS_199 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 0 0 0 0 \n", "8 0 0 0 0 \n", "9 0 0 0 0 \n", "\n", " PROCEDURE_CCS_201 PROCEDURE_CCS_202 PROCEDURE_CCS_204 PROCEDURE_CCS_205 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 0 0 0 0 \n", "8 0 0 0 0 \n", "9 0 0 0 0 \n", "\n", " PROCEDURE_CCS_206 PROCEDURE_CCS_208 PROCEDURE_CCS_209 PROCEDURE_CCS_211 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 0 0 0 0 \n", "8 0 0 0 1 \n", "9 0 0 0 0 \n", "\n", " PROCEDURE_CCS_212 PROCEDURE_CCS_213 PROCEDURE_CCS_214 PROCEDURE_CCS_216 \\\n", "0 0 0 0 0 \n", "3 0 0 0 1 \n", "5 0 0 0 0 \n", "8 0 0 0 0 \n", "9 0 0 0 0 \n", "\n", " PROCEDURE_CCS_217 PROCEDURE_CCS_218 PROCEDURE_CCS_219 PROCEDURE_CCS_220 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 0 0 0 0 \n", "8 0 0 0 0 \n", "9 0 0 0 0 \n", "\n", " PROCEDURE_CCS_221 PROCEDURE_CCS_222 PROCEDURE_CCS_223 PROCEDURE_CCS_224 \\\n", "0 0 0 1 0 \n", "3 0 1 1 0 \n", "5 0 0 0 0 \n", "8 0 0 0 0 \n", "9 0 0 0 0 \n", "\n", " PROCEDURE_CCS_225 PROCEDURE_CCS_226 PROCEDURE_CCS_227 PROCEDURE_CCS_228 \\\n", "0 0 0 0 0 \n", "3 0 0 0 0 \n", "5 0 0 0 0 \n", "8 0 0 0 0 \n", "9 0 0 0 0 \n", "\n", " PROCEDURE_CCS_229 PROCEDURE_CCS_231 length_of_stay \n", "0 0 0 4.561111 \n", "3 0 0 15.170833 \n", "5 0 0 6.868056 \n", "8 0 0 10.177083 \n", "9 0 0 11.229167 " ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Load data and keep a 10K observation subset to speed processing\n", "df = load_mimic3_example(path_to_mimic_data_folder) \n", "df = df.sample(n=10000, random_state=365).reset_index(drop=True)\n", "\n", "# Subset to ages 65+\n", "df = df.loc[df['AGE'].ge(65), :]\n", "df.drop('GENDER_F', axis=1, inplace=True) # Redundant with GENDER_M\n", "\n", "# Display insights\n", "display(feature_table(df))\n", "print(\"\\n\\n\", \"Below is a scrollable version of the first five rows of data:\")\n", "display(df.head())" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "### Generating the Model \n" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Display LOS Distributions\n", "ax = df.groupby('LANGUAGE_ENGL')['length_of_stay'\n", " ].plot(kind='kde', \n", " title=\"Distribution of Length of Stay (in Days) Relative to English Language Status\")\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [], "source": [ "# Generate a binary target flagging whether an observation's length_of_stay value is above or below the mean. \n", "mean_val = df['length_of_stay'].mean()\n", "df['long_los'] = df['length_of_stay'].apply(lambda x: 1 if x > mean_val else 0)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "slideshow": { "slide_type": "slide" }, "tags": [] }, "outputs": [], "source": [ "# Subset data\n", "baseline_cols = [c for c in df.columns if (c.startswith('AGE') or c.startswith('DIAGNOSIS_') or c.startswith('PROCEDURE_') or c == \"LANGUAGE_ENGL\")]\n", "X = df.loc[:,baseline_cols]\n", "y = df['long_los']\n", "\n", "# Split data into test and train\n", "splits = train_test_split(X, y, stratify=y, test_size=0.33, random_state=42)\n", "X_train, X_test, y_train, y_test = splits\n", "\n", "# Set model parameters (determined via grid search elsewhere)\n", "xgb_params = {'colsample_bytree': 1.0, 'gamma': 2, \n", " 'learning_rate': 0.05, 'max_depth': 5, \n", " 'min_child_weight': 1, 'n_estimators': 600, \n", " 'subsample': 0.6, 'eval_metric':'logloss',\n", " 'use_label_encoder':False}\n", "\n", "rf_params = {'n_estimators': 1800, 'min_samples_split': 5, 'bootstrap': False}" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "# Train New Model with Language Feature\n", "baseline_model = XGBClassifier(**xgb_params)\n", "baseline_model.fit(X_train, y_train)\n", "y_pred = baseline_model.predict(X_test)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### FairMLHealth Stratified Data Table\n", "\n", "FairMLHealth includes stratified table features to aid in identifying the source of unfairness or other bias. The data table can be used to compare basic statistics specific to each feature-value, in addition to relative statistics for the target value. Since many features can be evaluated at once, it can be a useful option for identifying patterns of bias either alone or in concert with other methods (e.g., visualization).\n", "\n", "Our experiment tests sociodemographic bias as it relates to language. Language may also be used as a proxy for race, religion, or nationality, which are [explicitly protected attributes](https://www.eeoc.gov/employers/small-business/3-who-protected-employment-discrimination). \n", "\n", "In this example we can see that there are similar sample sizes (within 6%) for the English speaking and Non-English speaking groups, where Non-English speakers are more likely to have a prolonged length of stay. " ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "FairMLHealth Stratified Table\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Feature NameFeature ValueObs.EntropyMean long_losMedian long_losMissing ValuesStd. Dev. long_losValue Prevalence
0ALL FEATURESALL VALUES1590NaN0.38870.000.48761.0000
1LANGUAGE_ENGL07130.99230.42500.000.49470.4484
2LANGUAGE_ENGL18770.99230.35920.000.48000.5516
\n", "
" ], "text/plain": [ " Feature Name Feature Value Obs. Entropy Mean long_los Median long_los \\\n", "0 ALL FEATURES ALL VALUES 1590 NaN 0.3887 0.0 \n", "1 LANGUAGE_ENGL 0 713 0.9923 0.4250 0.0 \n", "2 LANGUAGE_ENGL 1 877 0.9923 0.3592 0.0 \n", "\n", " Missing Values Std. Dev. long_los Value Prevalence \n", "0 0 0.4876 1.0000 \n", "1 0 0.4947 0.4484 \n", "2 0 0.4800 0.5516 " ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "print(\"FairMLHealth Stratified Table\")\n", "measure.data(X_test, y_test, features=['LANGUAGE_ENGL'])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Significance Testing\n", "\n", "It is generally recommended to test whether any differences in model outcomes for protected attributes are the effect of a sampling error in our test. FairMLHealth comes with a bootstrapping utility and supporting functions that can be used in statistical testing. The bootstrapping feature accepts any function that returns a p-value and will return a True or False if the p-value is greater than some alpha for a threshold number of randomly sampled trials. Eamples using the bootstrap_significance tool with built-in test functions are shown below. The first test indicates that there is likely a statistically significant difference in the mean of length of stay between English speakers and Non-English speakers. However, per the second and third tests there is not evidence of a statistically significant difference in the distribution of prediction successes and failures (True Positives, False Positives, True Negatives, and False Negatives), even when using a conservative threshold of 50% (i.e., at least 50% of trials must have a p-value less than alpha to indicate a difference). However, these tests are not comprehensive. For the purposes of the tutorial, we'll proceed as though we're convinced of a statistical difference.\n" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "scrolled": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "P-Value of single K-W test: 0.00011657689998864543\n", "Was the p-value less than alpha in at least 70% of trials? True\n" ] } ], "source": [ "speaks_engl = df['LANGUAGE_ENGL'].eq(1)\n", "\n", "# Krusakal-Wallis (K-W) to test the likelihood of statistcal difference in the mean LOS\n", "# relative to recorded English-speaking ability in the input data\n", "pval = stat_utils.kruskal_pval(a=df.loc[speaks_engl, 'length_of_stay'], \n", " b=df.loc[~speaks_engl, 'length_of_stay'],\n", " # If n_sample set to None, tests on full dataset rather than sample\n", " n_sample=None \n", " )\n", "print(\"P-Value of single K-W test:\", pval)\n", "\n", "# Bootstrapped K-W test for the same data\n", "reject_h0 = stat_utils.bootstrap_significance(func=stat_utils.kruskal_pval, \n", " a=y.loc[speaks_engl], \n", " b=y.loc[~speaks_engl],\n", " alpha=0.05,\n", " threshold=0.70,\n", " n_trials=100)\n", "print(f\"Was the p-value less than alpha in at least 70% of trials?\", reject_h0)" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
count
prediction result
FN238
FP125
TN847
TP380
\n", "
" ], "text/plain": [ " count\n", "prediction result \n", "FN 238 \n", "FP 125 \n", "TN 847 \n", "TP 380 " ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "P-Value of single Chi-Square test: 0.007790689890709429\n", "Can we reject the null hypothesis that prediction results are from the same distribution? False\n" ] } ], "source": [ "# Applying Chi-Square to the Distribution of Prediction Successes/Failures\n", "model_result_labels = stat_utils.binary_result_labels(y_test, y_pred)\n", "display(model_result_labels.rename_axis('count').reset_index().groupby('prediction result').count())\n", "\n", "# Test for the full dataset\n", "pval = stat_utils.chisquare_pval(group=X_test['LANGUAGE_ENGL'], values=model_result_labels, n_sample=None)\n", "print(\"P-Value of single Chi-Square test:\", pval)\n", "\n", "# Applying Chi-Square to the Distribution of Prediction Successes/Failures\n", "reject_h0 = stat_utils.bootstrap_significance(alpha=0.05,\n", " threshold=0.50,\n", " func=stat_utils.chisquare_pval, \n", " group=X_test['LANGUAGE_ENGL'], \n", " values=model_result_labels)\n", "print(\"Can we reject the null hypothesis that prediction results are from the same distribution?\", reject_h0)" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "P-Value of single t test: 1.0\n", "Can we reject the null hypothesis that prediction errors are from the same distribution? False\n" ] } ], "source": [ "test_speaks_engl = X_test['LANGUAGE_ENGL'].eq(1)\n", "\n", "# Similar evaluation using the t-test\n", "def ttest_p(**kwargs): return stats.ttest_ind(**kwargs)[1]\n", "\n", "pval = ttest_p(a=np.ma.masked_array(y_pred, test_speaks_engl), b=np.ma.masked_array(y_pred, ~test_speaks_engl))\n", "print(\"P-Value of single t test:\", pval)\n", "\n", "# Bootstrapping our custom t-test function\n", "reject_h0 = stat_utils.bootstrap_significance(alpha=0.05,\n", " threshold=0.50,\n", " func=ttest_p, \n", " a=np.ma.masked_array(y_pred, test_speaks_engl), \n", " b=np.ma.masked_array(y_pred, ~test_speaks_engl))\n", "print(\"Can we reject the null hypothesis that prediction errors are from the same distribution?\", reject_h0)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "----\n", "----\n", "# Part 2 - Evaluating the Baseline Model \n", "\n", "In this section we will evaluate an array of fairness measures for a single model. For more information on how to interpret these results, see [Evaluating Fairness](../docs/resources/Evaluating_Fairness.md) in our documentation. Skip ahead to [Part 3](#part3) for an example comparing multiple models against each other.\n", "\n", "In this result we see that our Equal Odds Ratio and Disparate Impact Ratio are outside of the fair range. However, since the Equal Odds Ratio is a combination of two measures, we will need to further analyze to determine from where this result originates.\n" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "FairMLHealth Fairness Measure Report: English Language\n" ] }, { "data": { "text/html": [ "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
model 1
Metric Measure
Group FairnessAUC Difference0.0141
Balanced Accuracy Difference0.0074
Balanced Accuracy Ratio1.0101
Disparate Impact Ratio1.2546
Equal Odds Difference0.0498
Equal Odds Ratio1.3065
Positive Predictive Parity Difference0.0168
Positive Predictive Parity Ratio1.0226
Statistical Parity Difference0.0726
Individual FairnessBetween-Group Gen. Entropy Error0.0000
Consistency Score0.7707
Model PerformanceAccuracy1.0000
F1-Score1.0000
FPR0.0000
Mean long_los0.3176
Precision1.0000
TPR1.0000
Data MetricsPrevalence of Privileged Class (%)55.0000
" ], "text/plain": [ "" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "print(\"FairMLHealth Fairness Measure Report: English Language\")\n", "report.compare(X_test, y_test, X_test['LANGUAGE_ENGL'], baseline_model)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### FairMLHealth Stratified Performance Table\n", "\n", "The stratified performance table compares model performance specific to each feature-value subset. In this example we can see that the Equalized Odds ratio is out of range because of the significant difference in False Positive Rates (FPR) between the two classes. More about this difference in [Comparing Group Fairness Measures](#comparing_group_measures) below.\n", "\n", "Note that if prediction probabilities (via the *predict_proba()* method) are available to the model, additional ROC_AUC and PR_AUC values will be included in the table.\n", "\n", "From this result we can see a difference in the False Positive Rates between the English speaking and Non-English speaking groups.\n" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "FairMLHealth Stratified Performance Table\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Feature NameFeature ValueObs.Mean TargetMean PredictionAccuracyF1-ScoreFPRPR AUCPrecisionROC AUCTPR
0ALL FEATURESALL VALUES1590.00.38870.31760.77170.67680.1286NaN0.75250.83590.6149
1LANGUAGE_ENGL0713.00.42500.35760.76160.69530.1488NaN0.76080.84230.6403
2LANGUAGE_ENGL1877.00.35920.28510.77990.65840.1139NaN0.74400.82820.5905
\n", "
" ], "text/plain": [ " Feature Name Feature Value Obs. Mean Target Mean Prediction \\\n", "0 ALL FEATURES ALL VALUES 1590.0 0.3887 0.3176 \n", "1 LANGUAGE_ENGL 0 713.0 0.4250 0.3576 \n", "2 LANGUAGE_ENGL 1 877.0 0.3592 0.2851 \n", "\n", " Accuracy F1-Score FPR PR AUC Precision ROC AUC TPR \n", "0 0.7717 0.6768 0.1286 NaN 0.7525 0.8359 0.6149 \n", "1 0.7616 0.6953 0.1488 NaN 0.7608 0.8423 0.6403 \n", "2 0.7799 0.6584 0.1139 NaN 0.7440 0.8282 0.5905 " ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "print(\"FairMLHealth Stratified Performance Table\")\n", "measure.performance(X_test['LANGUAGE_ENGL'], \n", " y_test, \n", " y_pred, \n", " y_prob=baseline_model.predict_proba(X_test)[:,1])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### FairMLHealth Stratified Bias Table\n", "\n", "The stratified bias table compares prediction bias specific to each feature-value subset. It assumes each feature-value as the \"privileged\" group relative to all other possible values for the feature. To simplify the table, fairness measures have been reduced to their component parts. For example, measures of Equalized Odds can be determined by combining the True Positive Rate (TPR) Ratios & Differences with False Positive Rate (FPR) Ratios & Differences.\n", "\n", "Here it becomes clear that the out-of-range Equal Odds Ratio is due to out-of-range ratios for the False Positive Rates (shown in the **FPR Ratio** column). However, since the *difference* in the False Positive Rates is sufficiently small (shown in the **FPR Diff** column), we can see that the out-of-range ratio results primarily from small False Positive Rates for both groups, rather than resulting from unacceptable model inequity.\n" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "FairMLHealth Stratified Bias Table\n" ] }, { "data": { "text/html": [ "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Feature Name Feature Value Balanced Accuracy Difference Balanced Accuracy Ratio FPR Diff FPR Ratio PPV Diff PPV Ratio Selection Diff Selection Ratio TPR Diff TPR Ratio
0LANGUAGE_ENGL0-0.00740.9900-0.03490.7654-0.01680.9779-0.07260.7971-0.04980.9222
1LANGUAGE_ENGL10.00741.01010.03491.30650.01681.02260.07261.25460.04981.0843
" ], "text/plain": [ "" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "print(\"FairMLHealth Stratified Bias Table\")\n", "measure.bias(X_test, y_test, y_pred, features=['LANGUAGE_ENGL'], flag_oor=True)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "----\n", "----\n", "# Part 3 - Comparing Models \n", "In this section we will compare the results of multiple models using FairMLHealth's **compare** tool. First we will train three new models: (1) an \"unaware\" version of our XGBoost model (one that excludes the protected attribute LANGUAGE_ENGL); (2) a fairness-aware Grid Search model constrained by demographic parity (available through [Fairlearn](https://github.com/fairlearn/fairlearn); and (3) a basic Random Forest model using our baseline data. We will then compare the fairness measures of all four prediction sets to see how the model bias is affected across the spectrum of measures.\n", "\n", "If you are re-running the cells of this notebook as part of your learning experience, please note that the GridSearch algorithm may take many minutes to process." ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [], "source": [ "from sklearn.ensemble import RandomForestClassifier\n", "from fairlearn.reductions import GridSearch, DemographicParity" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "RandomForestClassifier(bootstrap=False, min_samples_split=5, n_estimators=1800)" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "'''Train other models''' \n", "# Model using different algorithm\n", "rf_model = RandomForestClassifier(**rf_params)\n", "rf_model.fit(X_train, y_train)" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "XGBClassifier(base_score=0.5, booster='gbtree', colsample_bylevel=1,\n", " colsample_bynode=1, colsample_bytree=1.0, eval_metric='logloss',\n", " gamma=2, gpu_id=-1, importance_type='gain',\n", " interaction_constraints='', learning_rate=0.05, max_delta_step=0,\n", " max_depth=5, min_child_weight=1, missing=nan,\n", " monotone_constraints='()', n_estimators=600, n_jobs=8,\n", " num_parallel_tree=1, random_state=0, reg_alpha=0, reg_lambda=1,\n", " scale_pos_weight=1, subsample=0.6, tree_method='exact',\n", " use_label_encoder=False, validate_parameters=1, verbosity=None)" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Model demonstrating \"Unawareness\"\n", "unaware_model = XGBClassifier(**xgb_params)\n", "unaware_model.fit(X_train.drop('LANGUAGE_ENGL', axis=1), y_train)" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [], "source": [ "# Model using GridSearch to optimize for demographic parity\n", "fairGridSearch = GridSearch(RandomForestClassifier(**rf_params),\n", " constraints=DemographicParity(),\n", " grid_size=45)\n", "\n", "\n", "fairGridSearch.fit(X_train, y_train, sensitive_features=X_train['LANGUAGE_ENGL'])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Comparing Results - Example 1 \n", "The table shows that relative fairness or unfairness of our predictions differs across the available measures, while model performance remains similar. Looking at the Disparate Impact Ratio, for example, we can see that the three altered model predictions have reduced values relative to our baseline. However and surprisingly, the Fair GridSearch result has so dramatically shifted the predictions that they are now *less* fair by this measure. While the baseline model has a 20% bias in favor of the *unprivileged* group, the fairness-aware model has nearly a 40% bias favoring the *privileged* group. \n", "\n", "Similar results are not always the case. The GridSearch algorithm available in Fairlearn has been shown to be effective on some datasets ([Agarwal *et al.* (2019)](#Agarwal2019)). And unawareness does not always reduce Disparate Impact; in fact it can increase it, as we showed in the [KDD 2020 Tutorial](../docs/publications/KDD2020-FairnessInHealthcareML-TutorialNotebook.ipynb) which compared fairness relative to gender using this same general setup. This goes to say that the field has not yet found a panacea which can correct all fairness issues for every model.\n" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Baseline Model (LANGUAGE_ENGL Included) Standard Random Forest Unaware XGBoost Fair GridSearch
Metric Measure
Group FairnessAUC Difference0.01410.00300.0170-0.0010
Balanced Accuracy Difference0.00740.01150.0036-0.0637
Balanced Accuracy Ratio1.01011.01611.00490.9122
Disparate Impact Ratio1.25461.24691.09840.6221
Equal Odds Difference0.04980.0470-0.0055-0.2145
Equal Odds Ratio1.30651.24610.95760.3473
Positive Predictive Parity Difference0.01680.02590.05860.1445
Positive Predictive Parity Ratio1.02261.03461.08021.2035
Statistical Parity Difference0.07260.06160.0304-0.1116
Individual FairnessBetween-Group Gen. Entropy Error0.00000.00000.00020.0053
Consistency Score0.77070.80310.76420.8209
Model PerformanceAccuracy1.00001.00001.00001.0000
F1-Score1.00001.00001.00001.0000
FPR0.00000.00000.00000.0000
Mean long_los0.31760.27740.32260.2453
Precision1.00001.00001.00001.0000
TPR1.00001.00001.00001.0000
Data MetricsPrevalence of Privileged Class (%)55.000055.000055.000055.0000
" ], "text/plain": [ "" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Generate Comparison\n", "report.compare(test_data = {'Baseline Model (LANGUAGE_ENGL Included)': X_test,\n", " 'Unaware XGBoost': X_test.drop('LANGUAGE_ENGL', axis=1),\n", " 'Fair GridSearch': X_test,\n", " 'Standard Random Forest': X_test},\n", " targets = y_test,\n", " protected_attr = X_test['LANGUAGE_ENGL'],\n", " models={'Baseline Model (LANGUAGE_ENGL Included)': baseline_model,\n", " 'Standard Random Forest': rf_model,\n", " 'Unaware XGBoost': unaware_model,\n", " 'Fair GridSearch': fairGridSearch\n", " })" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Although our newer model versions create predictions that are more fair by measure of Disparate Impact, by other measures, such as the Balanced Accuracy Scores or Consistency Scores, our these neweer model predictions may actually be less fair. As discussed above, although two of the ratio measures (Disparate Impact Ratio and Equalized Odds Ratio) are outside of the \"fair\" range for our baseline predictions, the the acutal differences in the rates which those ratios are comparing are very small. Moreover, although the Consistency Score value is also outside of the fair range, we have shown that the measure may be invalid for this particular dataset. Additional work is needed to define and support a valid measure of similarity if we are to use this type of score. Thus, these results indicate that our model meets the minimum threshold for group fairness **according to the measures available and according to the groups that we've defined**. This is a good start.\n", "\n", "Clearly there is still room for improvement, particularly since we easily developed two other models that are generally farther within range and with comparable results. We will have to consult the values of our stakeholders to know if the tradeoffs of these two other models are worth the gains. Moreover, we should not stop simply with the English language. Although the larger group of \"Non-English speakers\" may get predictions within the fair range, it's still worth investigating whether there are other language subgroups for whom the model performance fails. And if there are any other proxy variables in the data, we will want to investigate those as well. We also must evaluate fairness relative to other protected attributes, such as gender (see [Example 2](#example2)) and age." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Comparing Results - Example 2 \n", "\n", "In this example, we compare the above models to a different protected attribute, gender, which is not included in any of the models. Again we see that predictions are typically within the fair range for most models, again with the exception of the Consistency Score." ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "FairMLHealth Stratified Bias Table\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Feature NameFeature ValueObs.Mean TargetMean PredictionAccuracyF1-ScoreFPRPrecisionTPR
0ALL FEATURESALL VALUES1590.00.38870.32260.77800.68790.12760.75830.6294
1GENDER_M0729.00.37450.32240.76950.66930.14250.72340.6227
2GENDER_M1861.00.40070.32290.78510.70300.11430.78780.6348
\n", "
" ], "text/plain": [ " Feature Name Feature Value Obs. Mean Target Mean Prediction Accuracy \\\n", "0 ALL FEATURES ALL VALUES 1590.0 0.3887 0.3226 0.7780 \n", "1 GENDER_M 0 729.0 0.3745 0.3224 0.7695 \n", "2 GENDER_M 1 861.0 0.4007 0.3229 0.7851 \n", "\n", " F1-Score FPR Precision TPR \n", "0 0.6879 0.1276 0.7583 0.6294 \n", "1 0.6693 0.1425 0.7234 0.6227 \n", "2 0.7030 0.1143 0.7878 0.6348 " ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "print(\"FairMLHealth Stratified Bias Table\")\n", "X_test_g = X_test.join(df['GENDER_M'], how='inner')\n", "measure.performance(X_test_g[['GENDER_M']], y_test, unaware_model.predict(X_test.drop('LANGUAGE_ENGL', axis=1)))" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Baseline Model (LANGUAGE_ENGL Included) Unaware XGBoost Fair GridSearch Random Forest
Metric Measure
Group FairnessAUC Difference-0.0267-0.0247-0.0211-0.0233
Balanced Accuracy Difference-0.0279-0.0201-0.0035-0.0123
Balanced Accuracy Ratio0.96310.97350.99500.9830
Disparate Impact Ratio0.98780.99840.93190.8695
Equal Odds Difference0.03040.0282-0.0115-0.0422
Equal Odds Ratio1.26581.24670.95410.8487
Positive Predictive Parity Difference-0.0724-0.0644-0.0161-0.0044
Positive Predictive Parity Ratio0.90780.91830.97900.9942
Statistical Parity Difference-0.0039-0.0005-0.0173-0.0385
Individual FairnessBetween-Group Gen. Entropy Error0.00010.00010.00000.0000
Consistency Score0.77070.76420.82090.8031
Model PerformanceAccuracy1.00001.00001.00001.0000
F1-Score1.00001.00001.00001.0000
FPR0.00000.00000.00000.0000
Mean long_los0.31760.32260.24530.2774
Precision1.00001.00001.00001.0000
TPR1.00001.00001.00001.0000
Data MetricsPrevalence of Privileged Class (%)54.000054.000054.000054.0000
" ], "text/plain": [ "" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Generate Comparison\n", "report.compare(test_data = {'Baseline Model (LANGUAGE_ENGL Included)': X_test,\n", " 'Unaware XGBoost': X_test.drop('LANGUAGE_ENGL', axis=1),\n", " 'Fair GridSearch': X_test,\n", " 'Random Forest': X_test},\n", " targets = y_test,\n", " protected_attr = X_test_g['GENDER_M'],\n", " models={'Baseline Model (LANGUAGE_ENGL Included)': baseline_model,\n", " 'Unaware XGBoost': unaware_model,\n", " 'Fair GridSearch': fairGridSearch,\n", " 'Random Forest': rf_model})" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "notes" } }, "source": [ "# Final Remarks\n", "\n", "Just as data and model performance can change over time (for example, in concept drift), so too can prediction fairness. We recommend integrating fairness evaluation with your modeling pipeline as a form of continuous process improvement. By regularly evaluating multiple measures of fairness at once, you can ensure that it continues to meet stakeholders' expectations.\n", "\n", "For more examples of fairness measurement using the FairMLHealth tool, see [Tool Usage for Binary Classification](https://nbviewer.jupyter.org/github/KenSciResearch/fairMLHealth/blob/tutorial_update/examples_and_tutorials/Example-ToolUsage_BinaryClassification.ipynb) and [Tool Usage for Regression](https://nbviewer.jupyter.org/github/KenSciResearch/fairMLHealth/blob/tutorial_update/examples_and_tutorials/Example-ToolUsage_Regression.ipynb) in our examples_and_tutorials section. There are also a number of additional references at the bottom of this page, as well as in our [Documentation Folder](./docs/README.md)." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "----\n", "----\n", "# References \n", "\n", "## Citations \n", "\n", "Agniel, D., Kohane, I.S., & Weber, G.M. (2018). Biases in electronic health record data due to processes within the healthcare system: retrospective observational study. Bmj, 361. Retrieved from [https://www.bmj.com/content/361/bmj.k1479](https://www.bmj.com/content/361/bmj.k1479)\n", "\n", "\n", "Agarwal, A., Beygelzimer, A., Dudík, M., Langford, J., & Wallach, H. (2018). A reductions approach to fair classification. In International Conference on Machine Learning (pp. 60-69). PMLR. Available through [arXiv preprint:1803.02453](https://arxiv.org/pdf/1803.02453.pdf).\n", "\n", "\n", "Agarwal, A., Dudik, M., & Wu, Z. S. (2019, May). Fair regression: Quantitative definitions and reduction-based algorithms. In International Conference on Machine Learning (pp. 120-129). PMLR. Available through https://arxiv.org/pdf/1905.12843.pdf\n", "\n", "\n", "Bantilan, N. (2018). Themis-ml: A fairness-aware machine learning interface for end-to-end discrimination discovery and mitigation. Journal of Technology in Human Services, 36(1), 15-30. Retrieved from [https://www.tandfonline.com/doi/abs/10.1080/15228835.2017.1416512](https://www.tandfonline.com/doi/abs/10.1080/15228835.2017.1416512) \n", "\n", "\n", "Barocas, S., & Selbst, A.D. (2016). Big data's disparate impact. California Law Review, 104, 671. Retrieved from [https://www.cs.yale.edu/homes/jf/BarocasDisparateImpact.pdf](https://www.cs.yale.edu/homes/jf/BarocasDisparateImpact.pdf) \n", "\n", "Bellamy, R.K., Dey, K., Hind, M., Hoffman, S.C., Houde, S., Kannan, K., ... & Nagar S (2018). AI Fairness 360: An extensible toolkit for detecting, understanding, and mitigating unwanted algorithmic bias. arXiv Preprint. [arXiv:1810.01943.](https://arxiv.org/abs/1810.01943). See Also [AIF360 Documentation](http://aif360.mybluemix.net/) \n", "\n", "Bird, S., Dudík, M., Wallach, H., & Walker, K. (2020). Fairlearn: A toolkit for assessing and improving fairness in AI. Microsoft Research. Retrieved from [https://www.microsoft.com/en-us/research/uploads/prod/2020/05/Fairlearn_whitepaper.pdf](https://www.microsoft.com/en-us/research/uploads/prod/2020/05/Fairlearn_whitepaper.pdf). See Also [FairLearn Reference](https://fairlearn.github.io/).\n", "\n", "\n", "Dwork, C., Hardt, M., Pitassi, T., Reingold, O., & Zemel, R. (2012, January). Fairness through awareness. In Proceedings of the 3rd innovations in theoretical computer science conference (pp. 214-226). Retrieved from [https://arxiv.org/pdf/1104.3913.pdf](https://arxiv.org/pdf/1104.3913.pdf) \n", "\n", "\n", "Equal Employment Opportunity Commission, & Civil Service Commission, Department of Labor & Department of Justice (1978). Uniform guidelines on employee selection procedures. Federal Register, 43(166), 38290-38315. Retrieved from [http://uniformguidelines.com/uniformguidelines.html#18](http://uniformguidelines.com/uniformguidelines.html#18) \n", "\n", "\n", "Hardt, M., Price, E., & Srebro, N. (2016). Equality of opportunity in supervised learning. In Advances in neural information processing systems (pp. 3315-3323). Retrieved from [http://papers.nips.cc/paper/6374-equality-of-opportunity-in-supervised-learning.pdf](http://papers.nips.cc/paper/6374-equality-of-opportunity-in-supervised-learning.pdf) \n", "\n", "\n", "Healthcare Cost and Utilization Project (HCUP) (2017, March). HCUP CCS. Agency for Healthcare Research and Quality, Rockville, MD. Retrieved from [www.hcup-us.ahrq.gov/toolssoftware/ccs/ccs.jsp](https://www.hcup-us.ahrq.gov/toolssoftware/ccs/ccs.jsp) \n", "\n", "Johnson, A.E.W., Pollard, T.J., Shen, L., Lehman, L., Feng, M., Ghassemi, M., Moody, B., Szolovits, P., Celi, L.A., & Mark, R.G. (2016). Scientific Data. MIMIC-III, a freely accessible critical care database. DOI: 10.1038/sdata.2016.35. Retrieved from [http://www.nature.com/articles/sdata201635](http://www.nature.com/articles/sdata201635)\n", "\n", "\n", "Kearns, M., Neel, S., Roth, A., & Wu, Z.S. (2018, July). Preventing fairness gerrymandering: Auditing and learning for subgroup fairness. In International Conference on Machine Learning (pp. 2564-2572). PMLR. Available through http://proceedings.mlr.press/v80/kearns18a.html\n", "\n", "\n", "Kim, M., Reingol, O., & Rothblum, G. (2018). Fairness through computationally-bounded awareness. In Advances in Neural Information Processing Systems (pp. 4842-4852). Retrieved from [https://arxiv.org/pdf/1803.03239.pdf](https://arxiv.org/pdf/1803.03239.pdf) \n", "\n", "\n", "National Association for the Advancement of Colored People (NAACP) (2012). Criminal Justice Fact Sheet. NAACP. Retrieved from https://naacp.org/resources/criminal-justice-fact-sheet.\n", "\n", "\n", "Romei, A., & Ruggieri, S. (2014). A multidisciplinary survey on discrimination analysis. The Knowledge Engineering Review, 29(5), 582-638. Retrieved from [https://www.cambridge.org/core/journals/knowledge-engineering-review/article/multidisciplinary-survey-on-discrimination-analysis/D69E925AC96CDEC643C18A07F2A326D7](https://www.cambridge.org/core/journals/knowledge-engineering-review/article/multidisciplinary-survey-on-discrimination-analysis/D69E925AC96CDEC643C18A07F2A326D7) \n", "\n", "\n", "Russell, C., Kusner, M.J., Loftus, J., & Silva, R. (2017). When worlds collide: integrating different counterfactual assumptions in fairness. In Advances in Neural Information Processing Systems (pp. 6414-6423). Retrieved from [https://papers.nips.cc/paper/7220-when-worlds-collide-integrating-different-counterfactual-assumptions-in-fairness.pdf](https://papers.nips.cc/paper/7220-when-worlds-collide-integrating-different-counterfactual-assumptions-in-fairness.pdf) \n", "\n", "\n", "Shorrocks, A.F. (1980). The class of additively decomposable inequality measures. Econometrica: Journal of the Econometric Society, 613-625. Retrieved from [http://www.vcharite.univ-mrs.fr/PP/lubrano/atelier/shorrocks1980.pdf](http://www.vcharite.univ-mrs.fr/PP/lubrano/atelier/shorrocks1980.pdf) \n", "\n", "\n", "Speicher, T., Heidari, H., Grgic-Hlaca, N., Gummadi, K.P., Singla, A., Weller, A., & Zafar, M.B. (2018, July). A unified approach to quantifying algorithmic unfairness: Measuring individual &group unfairness via inequality indices. In Proceedings of the 24th ACM SIGKDD International Conference on Knowledge Discovery & Data Mining (pp. 2239-2248). Retrieved from [https://arxiv.org/pdf/1807.00787.pdf](https://arxiv.org/pdf/1807.00787.pdf) \n", "\n", "\n", "Zemel, R., Wu, Y., Swersky, K., Pitassi, T., & Dwork, C. (2013, February). Learning fair representations. International Conference on Machine Learning (pp. 325-333). Retrieved from [http://proceedings.mlr.press/v28/zemel13.pdf](http://proceedings.mlr.press/v28/zemel13.pdf) \n", "\n", "\n", "Zafar, M.B., Valera, I., Gomez Rodriguez, M., & Gummadi, K.P. (2017, April). Fairness beyond disparate treatment & disparate impact: Learning classification without disparate mistreatment. In Proceedings of the 26th international conference on world wide web (pp. 1171-1180). https://arxiv.org/pdf/1610.08452.pdf \n", "\n", "\n", "## Other Resources\n", "[fairMLHealth Documentation and Resources](../docs/resources)\n", "* [Evaluating Fairness](../docs/resources/Evaluating_Fairness.md)\n", "* [Quick Reference Tables](../docs/resources/Measures_QuickReference.md)\n", "* [Full List of Outside References and Resources](../docs/resources/References_and_Resources.md)\n" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.13" } }, "nbformat": 4, "nbformat_minor": 4 }