<commit_before>{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "naMQPO5iRpNE"
   },
   "source": [
    "#### Copyright 2018 Google LLC."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 0,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "sHpbnneJYcwJ"
   },
   "outputs": [],
   "source": [
    "# Licensed under the Apache License, Version 2.0 (the \"License\");\n",
    "# you may not use this file except in compliance with the License.\n",
    "# You may obtain a copy of the License at\n",
    "#\n",
    "# https://www.apache.org/licenses/LICENSE-2.0\n",
    "#\n",
    "# Unless required by applicable law or agreed to in writing, software\n",
    "# distributed under the License is distributed on an \"AS IS\" BASIS,\n",
    "# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n",
    "# See the License for the specific language governing permissions and\n",
    "# limitations under the License."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "84x4Fxc5lzFv"
   },
   "source": [
    "# ML 공정성 소개\n",
    "***"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "J8daw3YOIAXH"
   },
   "source": [
    "## 면책조항\n",
    "이 실습에서는 머신러닝의 공정성과 관련된 아이디어와 기법의 일부분만을 살펴보며 전체 내용을 다루지는 않습니다."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "xFxZOg55lWJE"
   },
   "source": [
    "## 학습 목표\n",
    "\n",
    "* 모델 데이터에서 나타날 수 있는 여러 유형의 편향에 대한 이해도를 높입니다.\n",
    "* 모델을 학습시키기 전에 특성 데이터를 살펴보고 잠재적 데이터 편향 요인을 미리 파악합니다.\n",
    "* 종합집계하는 대신 하위 그룹으로 묶어 모델 성능을 평가합니다."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "l-K-xqksm-X3"
   },
   "source": [
    "## 개요\n",
    "\n",
    "이 실습에서는 머신러닝(ML)에 원치 않는 편향이 발생할 수 있는 방식에 주목하면서 *공정성*을 염두에 두고 데이터세트를 살펴보고 분류자를 평가합니다.\n",
    "\n",
    "실습 전반에서 공정성에 관한 ML 프로세스의 컨텍스트를 구성할 기회를 제공하는 **FairAware** 작업을 보게 됩니다. 작업을 진행하는 동안 편향을 파악하고, 이러한 편향이 해결되지 않을 때 발생하는 모델 예측의 장기적인 영향을 고려하게 됩니다."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "TXkkHYyJ98_k"
   },
   "source": [
    "## 데이터세트 및 예측 작업 정보\n",
    "\n",
    "이 실습에서는 머신러닝 자료로 자주 사용되는 [성인 인구조사 소득 데이터세트](https://archive.ics.uci.edu/ml/datasets/Census+Income)를 활용합니다. 이 데이터는 로니 코하비와 배리 베커의 [1994 인구조사국 데이터베이스](http://www.census.gov/en.html)에서 추출한 데이터입니다.\n",
    "\n",
    "데이터세트의 각 예에는 1994 인구조사에 참여한 사람들에 관한 다음 인구통계 데이터가 포함되어 있습니다.\n",
    "\n",
    "### 수적 특성\n",
    "*   `age`: 개인의 나이를 연 단위로 나타냅니다.\n",
    "*   `fnlwgt`: 일련의 관측 결과를 바탕으로 인구조사국이 부여하는 개인의 가중치입니다.\n",
    "*   `education_num`: 교육 수준을 숫자로 범주화하여 열거합니다. 숫자가 높을수록 개인의 교육 수준이 높습니다. 예를 들어 `education_num`이 `11`이면 `Assoc_voc`(전문학교 준학사)를, `education_num`이 `13`이면 `Bachelors`(학사)를, `education_num`이 `9`이면 `HS-grad`(고등학교 졸업)를 나타냅니다.\n",
    "*   `capital_gain`: 개인의 자본 이익을 미국 달러로 표기합니다.\n",
    "*   `capital_loss`: 개인의 자본 손실을 미국 달러로 표기합니다.\n",
    "*   `hours_per_week`: 주당 근무시간입니다.\n",
    "\n",
    "### 범주형 특성\n",
    "*   `workclass`: 개인의 고용 형태입니다. 예: `Private`, `Self-emp-not-inc`, `Self-emp-inc`, `Federal-gov`, `Local-gov`, `State-gov`, `Without-pay`, `Never-worked`\n",
    "*   `education`: 개인의 최종 학력입니다.\n",
    "*   `marital_status`: 개인의 결혼 여부입니다. 예: `Married-civ-spouse`, `Divorced`, `Never-married`, `Separated`, `Widowed`, `Married-spouse-absent`, `Married-AF-spouse`\n",
    "*   `occupation`: 개인의 직업입니다. 예: `tech-support`, `Craft-repair`, `Other-service`, `Sales`, `Exec-managerial` 등\n",
    "*   `relationship`: 가정 내 각 개인의 관계입니다. 예: `Wife`, `Own-child`, `Husband`, `Not-in-family`, `Other-relative`, `Unmarried`\n",
    "*   `gender`: 개인의 성별로 `Female` 또는 `Male` 중에서만 선택할 수 있습니다.\n",
    "*   `race`: 인종을 나타내며 `White`, `Asian-Pac-Islander`, `Amer-Indian-Eskimo`, `Black`, `Other`가 있습니다. \n",
    "*   `native_country`: 개인의 출신 국가입니다. 예: `United-States`, `Cambodia`, `England`, `Puerto-Rico`, `Canada`, `Germany`, `Outlying-US(Guam-USVI-etc)`, `India`, `Japan`, `United-States`, `Cambodia`, `England`, `Puerto-Rico`, `Canada`, `Germany`, `Outlying-US(Guam-USVI-etc)`, `India`, `Japan` 등\n",
    "\n",
    "### 예측 작업\n",
    "예측 작업은 **개인의 연간 소득이 미화 50,000달러 이상인지 확인**하기 위해 실행됩니다.\n",
    "\n",
    "### 라벨\n",
    "*   `income_bracket`: 개인의 연간 소득이 미화 50,000달러가 넘는지 여부를 나타냅니다.\n",
    "\n",
    "### 데이터 수집 관련 참고사항\n",
    "\n",
    "이 데이터세트를 위해 추출된 모든 예는 다음 조건을 충족합니다. \n",
    "*   `age`가 16세 이상입니다.\n",
    "*   보정된 총 연간 소득(`income_bracket` 계산에 사용)이 미화 100달러를 넘습니다.\n",
    "*   `fnlwgt`이 0보다 큽니다.\n",
    "*   `hours_per_week`가 0보다 큽니다.\n",
    "\n",
    "\n",
    "\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "I0RMIktKy8xX"
   },
   "source": [
    "## 설정\n",
    "\n",
    "먼저 이 노트 전반에서 사용할 모듈을 가져옵니다."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 0,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "2e_0DJJ8zE29"
   },
   "outputs": [],
   "source": [
    "import os\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import pandas as pd\n",
    "import tensorflow as tf\n",
    "import tempfile\n",
    "!pip install seaborn==0.8.1\n",
    "import seaborn as sns\n",
    "import itertools\n",
    "from sklearn.metrics import confusion_matrix\n",
    "from sklearn.metrics import roc_curve, roc_auc_score\n",
    "from sklearn.metrics import precision_recall_curve\n",
    "from google.colab import widgets\n",
    "# For facets\n",
    "from IPython.core.display import display, HTML\n",
    "import base64\n",
    "!pip install -q hopsfacets \n",
    "import hopsfacets as facets\n",
    "from hopsfacets.feature_statistics_generator import FeatureStatisticsGenerator\n",
    "\n",
    "print('Modules are imported.')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "-xgIRapb5LaQ"
   },
   "source": [
    "### 성인 데이터세트 로드\n",<commit_msg>Pinned hopsfacets install to v0.0.3<commit_after>{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "naMQPO5iRpNE"
   },
   "source": [
    "#### Copyright 2018 Google LLC."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 0,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "sHpbnneJYcwJ"
   },
   "outputs": [],
   "source": [
    "# Licensed under the Apache License, Version 2.0 (the \"License\");\n",
    "# you may not use this file except in compliance with the License.\n",
    "# You may obtain a copy of the License at\n",
    "#\n",
    "# https://www.apache.org/licenses/LICENSE-2.0\n",
    "#\n",
    "# Unless required by applicable law or agreed to in writing, software\n",
    "# distributed under the License is distributed on an \"AS IS\" BASIS,\n",
    "# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n",
    "# See the License for the specific language governing permissions and\n",
    "# limitations under the License."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "84x4Fxc5lzFv"
   },
   "source": [
    "# ML 공정성 소개\n",
    "***"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "J8daw3YOIAXH"
   },
   "source": [
    "## 면책조항\n",
    "이 실습에서는 머신러닝의 공정성과 관련된 아이디어와 기법의 일부분만을 살펴보며 전체 내용을 다루지는 않습니다."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "xFxZOg55lWJE"
   },
   "source": [
    "## 학습 목표\n",
    "\n",
    "* 모델 데이터에서 나타날 수 있는 여러 유형의 편향에 대한 이해도를 높입니다.\n",
    "* 모델을 학습시키기 전에 특성 데이터를 살펴보고 잠재적 데이터 편향 요인을 미리 파악합니다.\n",
    "* 종합집계하는 대신 하위 그룹으로 묶어 모델 성능을 평가합니다."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "l-K-xqksm-X3"
   },
   "source": [
    "## 개요\n",
    "\n",
    "이 실습에서는 머신러닝(ML)에 원치 않는 편향이 발생할 수 있는 방식에 주목하면서 *공정성*을 염두에 두고 데이터세트를 살펴보고 분류자를 평가합니다.\n",
    "\n",
    "실습 전반에서 공정성에 관한 ML 프로세스의 컨텍스트를 구성할 기회를 제공하는 **FairAware** 작업을 보게 됩니다. 작업을 진행하는 동안 편향을 파악하고, 이러한 편향이 해결되지 않을 때 발생하는 모델 예측의 장기적인 영향을 고려하게 됩니다."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "TXkkHYyJ98_k"
   },
   "source": [
    "## 데이터세트 및 예측 작업 정보\n",
    "\n",
    "이 실습에서는 머신러닝 자료로 자주 사용되는 [성인 인구조사 소득 데이터세트](https://archive.ics.uci.edu/ml/datasets/Census+Income)를 활용합니다. 이 데이터는 로니 코하비와 배리 베커의 [1994 인구조사국 데이터베이스](http://www.census.gov/en.html)에서 추출한 데이터입니다.\n",
    "\n",
    "데이터세트의 각 예에는 1994 인구조사에 참여한 사람들에 관한 다음 인구통계 데이터가 포함되어 있습니다.\n",
    "\n",
    "### 수적 특성\n",
    "*   `age`: 개인의 나이를 연 단위로 나타냅니다.\n",
    "*   `fnlwgt`: 일련의 관측 결과를 바탕으로 인구조사국이 부여하는 개인의 가중치입니다.\n",
    "*   `education_num`: 교육 수준을 숫자로 범주화하여 열거합니다. 숫자가 높을수록 개인의 교육 수준이 높습니다. 예를 들어 `education_num`이 `11`이면 `Assoc_voc`(전문학교 준학사)를, `education_num`이 `13`이면 `Bachelors`(학사)를, `education_num`이 `9`이면 `HS-grad`(고등학교 졸업)를 나타냅니다.\n",
    "*   `capital_gain`: 개인의 자본 이익을 미국 달러로 표기합니다.\n",
    "*   `capital_loss`: 개인의 자본 손실을 미국 달러로 표기합니다.\n",
    "*   `hours_per_week`: 주당 근무시간입니다.\n",
    "\n",
    "### 범주형 특성\n",
    "*   `workclass`: 개인의 고용 형태입니다. 예: `Private`, `Self-emp-not-inc`, `Self-emp-inc`, `Federal-gov`, `Local-gov`, `State-gov`, `Without-pay`, `Never-worked`\n",
    "*   `education`: 개인의 최종 학력입니다.\n",
    "*   `marital_status`: 개인의 결혼 여부입니다. 예: `Married-civ-spouse`, `Divorced`, `Never-married`, `Separated`, `Widowed`, `Married-spouse-absent`, `Married-AF-spouse`\n",
    "*   `occupation`: 개인의 직업입니다. 예: `tech-support`, `Craft-repair`, `Other-service`, `Sales`, `Exec-managerial` 등\n",
    "*   `relationship`: 가정 내 각 개인의 관계입니다. 예: `Wife`, `Own-child`, `Husband`, `Not-in-family`, `Other-relative`, `Unmarried`\n",
    "*   `gender`: 개인의 성별로 `Female` 또는 `Male` 중에서만 선택할 수 있습니다.\n",
    "*   `race`: 인종을 나타내며 `White`, `Asian-Pac-Islander`, `Amer-Indian-Eskimo`, `Black`, `Other`가 있습니다. \n",
    "*   `native_country`: 개인의 출신 국가입니다. 예: `United-States`, `Cambodia`, `England`, `Puerto-Rico`, `Canada`, `Germany`, `Outlying-US(Guam-USVI-etc)`, `India`, `Japan`, `United-States`, `Cambodia`, `England`, `Puerto-Rico`, `Canada`, `Germany`, `Outlying-US(Guam-USVI-etc)`, `India`, `Japan` 등\n",
    "\n",
    "### 예측 작업\n",
    "예측 작업은 **개인의 연간 소득이 미화 50,000달러 이상인지 확인**하기 위해 실행됩니다.\n",
    "\n",
    "### 라벨\n",
    "*   `income_bracket`: 개인의 연간 소득이 미화 50,000달러가 넘는지 여부를 나타냅니다.\n",
    "\n",
    "### 데이터 수집 관련 참고사항\n",
    "\n",
    "이 데이터세트를 위해 추출된 모든 예는 다음 조건을 충족합니다. \n",
    "*   `age`가 16세 이상입니다.\n",
    "*   보정된 총 연간 소득(`income_bracket` 계산에 사용)이 미화 100달러를 넘습니다.\n",
    "*   `fnlwgt`이 0보다 큽니다.\n",
    "*   `hours_per_week`가 0보다 큽니다.\n",
    "\n",
    "\n",
    "\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "I0RMIktKy8xX"
   },
   "source": [
    "## 설정\n",
    "\n",
    "먼저 이 노트 전반에서 사용할 모듈을 가져옵니다."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 0,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "2e_0DJJ8zE29"
   },
   "outputs": [],
   "source": [
    "import os\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import pandas as pd\n",
    "import tensorflow as tf\n",
    "import tempfile\n",
    "!pip install seaborn==0.8.1\n",
    "import seaborn as sns\n",
    "import itertools\n",
    "from sklearn.metrics import confusion_matrix\n",
    "from sklearn.metrics import roc_curve, roc_auc_score\n",
    "from sklearn.metrics import precision_recall_curve\n",
    "from google.colab import widgets\n",
    "# For facets\n",
    "from IPython.core.display import display, HTML\n",
    "import base64\n",
    "!pip install -q hopsfacets==0.0.3 \n",
    "import hopsfacets as facets\n",
    "from hopsfacets.feature_statistics_generator import FeatureStatisticsGenerator\n",
    "\n",
    "print('Modules are imported.')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab_type": "text",
    "id": "-xgIRapb5LaQ"
   },
   "source": [
    "### 성인 데이터세트 로드\n",
{'fraction_non_alphanumeric': 0.19432729678326305, 'fraction_numerical': 0.011246175473414373, 'mean_word_length': 2.6973402629165393, 'pattern_counts': {'":': 114, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 4, 'lorem ipsum': 0, 'www.': 4, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '7577917', 'n_tokens_mistral': 6710, 'n_tokens_neox': 7590, 'n_words': 1255}