Skip to content

Instantly share code, notes, and snippets.

@radekosmulski
Last active June 22, 2022 06:38
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save radekosmulski/f57b400d922541d2121c266c080245c8 to your computer and use it in GitHub Desktop.
Save radekosmulski/f57b400d922541d2121c266c080245c8 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"id": "62827d5d",
"metadata": {},
"source": [
"Based on [TabularBenchmarks](https://github.com/tunguz/TabularBenchmarks) by [Bojan Tunguz](https://twitter.com/tunguz)"
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "09726f99",
"metadata": {},
"outputs": [],
"source": [
"import os\n",
"\n",
"if not os.path.isfile('adult.data'):\n",
" !wget https://archive.ics.uci.edu/ml/machine-learning-databases/adult/adult.data\n",
" \n",
"if not os.path.isfile('adult.test'):\n",
" !wget https://archive.ics.uci.edu/ml/machine-learning-databases/adult/adult.test"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "a35ba84d",
"metadata": {},
"outputs": [],
"source": [
"import warnings\n",
"warnings.simplefilter(action='ignore')\n",
"\n",
"import numpy as np\n",
"import pandas as pd\n",
"from sklearn.preprocessing import LabelEncoder, LabelBinarizer\n",
"from sklearn.metrics import accuracy_score, roc_auc_score\n",
"from xgboost import XGBClassifier"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "275d8d60-b9b0-4b57-bdcc-4974b246b07c",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Train dataset shape: (32561, 15)\n",
"Test dataset shape: (16281, 15)\n"
]
}
],
"source": [
"CSV_HEADER = [\n",
" \"age\",\n",
" \"workclass\",\n",
" \"fnlwgt\",\n",
" \"education\",\n",
" \"education_num\",\n",
" \"marital_status\",\n",
" \"occupation\",\n",
" \"relationship\",\n",
" \"race\",\n",
" \"gender\",\n",
" \"capital_gain\",\n",
" \"capital_loss\",\n",
" \"hours_per_week\",\n",
" \"native_country\",\n",
" \"income_bracket\",\n",
"]\n",
"\n",
"train_data = pd.read_csv(\"adult.data\", header=None, names=CSV_HEADER)\n",
"test_data = pd.read_csv(\"adult.test\", header=0, names=CSV_HEADER)\n",
"test_data['income_bracket'] = test_data['income_bracket'].str[:-1]\n",
"\n",
"print(f\"Train dataset shape: {train_data.shape}\")\n",
"print(f\"Test dataset shape: {test_data.shape}\")"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "042cb242-b63e-4d41-ab3a-4a0bc4ebe3e7",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>age</th>\n",
" <th>workclass</th>\n",
" <th>fnlwgt</th>\n",
" <th>education</th>\n",
" <th>education_num</th>\n",
" <th>marital_status</th>\n",
" <th>occupation</th>\n",
" <th>relationship</th>\n",
" <th>race</th>\n",
" <th>gender</th>\n",
" <th>capital_gain</th>\n",
" <th>capital_loss</th>\n",
" <th>hours_per_week</th>\n",
" <th>native_country</th>\n",
" <th>income_bracket</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>39</td>\n",
" <td>State-gov</td>\n",
" <td>77516</td>\n",
" <td>Bachelors</td>\n",
" <td>13</td>\n",
" <td>Never-married</td>\n",
" <td>Adm-clerical</td>\n",
" <td>Not-in-family</td>\n",
" <td>White</td>\n",
" <td>Male</td>\n",
" <td>2174</td>\n",
" <td>0</td>\n",
" <td>40</td>\n",
" <td>United-States</td>\n",
" <td>&lt;=50K</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>50</td>\n",
" <td>Self-emp-not-inc</td>\n",
" <td>83311</td>\n",
" <td>Bachelors</td>\n",
" <td>13</td>\n",
" <td>Married-civ-spouse</td>\n",
" <td>Exec-managerial</td>\n",
" <td>Husband</td>\n",
" <td>White</td>\n",
" <td>Male</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>13</td>\n",
" <td>United-States</td>\n",
" <td>&lt;=50K</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>38</td>\n",
" <td>Private</td>\n",
" <td>215646</td>\n",
" <td>HS-grad</td>\n",
" <td>9</td>\n",
" <td>Divorced</td>\n",
" <td>Handlers-cleaners</td>\n",
" <td>Not-in-family</td>\n",
" <td>White</td>\n",
" <td>Male</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>40</td>\n",
" <td>United-States</td>\n",
" <td>&lt;=50K</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>53</td>\n",
" <td>Private</td>\n",
" <td>234721</td>\n",
" <td>11th</td>\n",
" <td>7</td>\n",
" <td>Married-civ-spouse</td>\n",
" <td>Handlers-cleaners</td>\n",
" <td>Husband</td>\n",
" <td>Black</td>\n",
" <td>Male</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>40</td>\n",
" <td>United-States</td>\n",
" <td>&lt;=50K</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>28</td>\n",
" <td>Private</td>\n",
" <td>338409</td>\n",
" <td>Bachelors</td>\n",
" <td>13</td>\n",
" <td>Married-civ-spouse</td>\n",
" <td>Prof-specialty</td>\n",
" <td>Wife</td>\n",
" <td>Black</td>\n",
" <td>Female</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>40</td>\n",
" <td>Cuba</td>\n",
" <td>&lt;=50K</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" age workclass fnlwgt education education_num \\\n",
"0 39 State-gov 77516 Bachelors 13 \n",
"1 50 Self-emp-not-inc 83311 Bachelors 13 \n",
"2 38 Private 215646 HS-grad 9 \n",
"3 53 Private 234721 11th 7 \n",
"4 28 Private 338409 Bachelors 13 \n",
"\n",
" marital_status occupation relationship race gender \\\n",
"0 Never-married Adm-clerical Not-in-family White Male \n",
"1 Married-civ-spouse Exec-managerial Husband White Male \n",
"2 Divorced Handlers-cleaners Not-in-family White Male \n",
"3 Married-civ-spouse Handlers-cleaners Husband Black Male \n",
"4 Married-civ-spouse Prof-specialty Wife Black Female \n",
"\n",
" capital_gain capital_loss hours_per_week native_country income_bracket \n",
"0 2174 0 40 United-States <=50K \n",
"1 0 0 13 United-States <=50K \n",
"2 0 0 40 United-States <=50K \n",
"3 0 0 40 United-States <=50K \n",
"4 0 0 40 Cuba <=50K "
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"train_data.head()"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "a0871121-1b35-4a6a-88fd-4bc9d890f879",
"metadata": {},
"outputs": [],
"source": [
"train_data['gender'] = 1*(train_data['gender'] == ' Male')\n",
"test_data['gender'] = 1*(test_data['gender'] == ' Male')\n",
"\n",
"train_data['native_country'] = 1*(train_data['native_country'] == ' United-States')\n",
"test_data['native_country'] = 1*(test_data['native_country'] == ' United-States')"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "912100fd-5a84-41bf-992a-af18f28c9358",
"metadata": {},
"outputs": [],
"source": [
"cat_columns = ['workclass', 'marital_status', 'occupation', 'relationship', 'race']\n",
"\n",
"for col in cat_columns:\n",
" le = LabelEncoder()\n",
" train_data[col] = le.fit_transform(train_data[col])\n",
" test_data[col] = le.transform(test_data[col])\n",
" del le"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "8db975cd",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>age</th>\n",
" <th>workclass</th>\n",
" <th>fnlwgt</th>\n",
" <th>education</th>\n",
" <th>education_num</th>\n",
" <th>marital_status</th>\n",
" <th>occupation</th>\n",
" <th>relationship</th>\n",
" <th>race</th>\n",
" <th>gender</th>\n",
" <th>capital_gain</th>\n",
" <th>capital_loss</th>\n",
" <th>hours_per_week</th>\n",
" <th>native_country</th>\n",
" <th>income_bracket</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>39</td>\n",
" <td>7</td>\n",
" <td>77516</td>\n",
" <td>Bachelors</td>\n",
" <td>13</td>\n",
" <td>4</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>4</td>\n",
" <td>1</td>\n",
" <td>2174</td>\n",
" <td>0</td>\n",
" <td>40</td>\n",
" <td>1</td>\n",
" <td>&lt;=50K</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>50</td>\n",
" <td>6</td>\n",
" <td>83311</td>\n",
" <td>Bachelors</td>\n",
" <td>13</td>\n",
" <td>2</td>\n",
" <td>4</td>\n",
" <td>0</td>\n",
" <td>4</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>13</td>\n",
" <td>1</td>\n",
" <td>&lt;=50K</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>38</td>\n",
" <td>4</td>\n",
" <td>215646</td>\n",
" <td>HS-grad</td>\n",
" <td>9</td>\n",
" <td>0</td>\n",
" <td>6</td>\n",
" <td>1</td>\n",
" <td>4</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>40</td>\n",
" <td>1</td>\n",
" <td>&lt;=50K</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>53</td>\n",
" <td>4</td>\n",
" <td>234721</td>\n",
" <td>11th</td>\n",
" <td>7</td>\n",
" <td>2</td>\n",
" <td>6</td>\n",
" <td>0</td>\n",
" <td>2</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>40</td>\n",
" <td>1</td>\n",
" <td>&lt;=50K</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>28</td>\n",
" <td>4</td>\n",
" <td>338409</td>\n",
" <td>Bachelors</td>\n",
" <td>13</td>\n",
" <td>2</td>\n",
" <td>10</td>\n",
" <td>5</td>\n",
" <td>2</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>40</td>\n",
" <td>0</td>\n",
" <td>&lt;=50K</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" age workclass fnlwgt education education_num marital_status \\\n",
"0 39 7 77516 Bachelors 13 4 \n",
"1 50 6 83311 Bachelors 13 2 \n",
"2 38 4 215646 HS-grad 9 0 \n",
"3 53 4 234721 11th 7 2 \n",
"4 28 4 338409 Bachelors 13 2 \n",
"\n",
" occupation relationship race gender capital_gain capital_loss \\\n",
"0 1 1 4 1 2174 0 \n",
"1 4 0 4 1 0 0 \n",
"2 6 1 4 1 0 0 \n",
"3 6 0 2 1 0 0 \n",
"4 10 5 2 0 0 0 \n",
"\n",
" hours_per_week native_country income_bracket \n",
"0 40 1 <=50K \n",
"1 13 1 <=50K \n",
"2 40 1 <=50K \n",
"3 40 1 <=50K \n",
"4 40 0 <=50K "
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"train_data.head()"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "58df1d54",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAYgAAAEWCAYAAAB8LwAVAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAAA7jklEQVR4nO3dd5wV5dn/8c+XZWGlL0WlCpYoRQVZEI0Kio+CxoLd1Vh+URJLjElMoo8miokxxfgYH8tjCTGogIpBiVGwgdgFQhEEO0hTEQQBaQvX74+Zszt7ds7u2XL2bLnerxevnXLPzDVzDnOd+56Ze2RmOOecc8maZDsA55xzdZMnCOecc7E8QTjnnIvlCcI551wsTxDOOedieYJwzjkXyxOEyzhJR0p6P9txZJqk/5P063Lm3yTpkdqMqTySHpL0u2zHkUpdj68x8ARRj0gqlDRb0iZJqyU9J+mIbMdVETN71cz2z3YcmWZmPzKz3wJIGiZpRbZjcq46PEHUE5J+BtwB/B7YA+gB3AOcksWwXC2R1DTbMbjGxxNEPSCpLXAzcIWZ/dPMNpvZDjP7l5n9IizTRNK1kj6WtFbS45Lah/N6SjJJF0r6TNJXkq6PrH9wWDP5RtIXkm4Pp5f5FSxpqaRjy1suJv5S6wnXcY2kBZI2SHpMUl5k/imS5oXr/VjSiHB6F0lTJK2T9JGkSyPL3CTpCUmPSNoo6V1J35F0naQvJS2XdFz0mEr6W1gTWynpd5JyYmLPk7RFUsdw/HpJRZLahOO/lXRHOPxQuJ6WwHNAl7C2t0lSl3CVzSSNC2NcJKmgnM/dJF0h6UPgw3DaX8N9+UbSHElHJh2Dx1OtX9IASf8J5z0G5CVt79LwuK4Lj3OXpFgul/RhuPxvJe0j6Y0wlsclNStnXy6VtDhc9j1Jh4TTe0uaIWl9GO/JKZa/SNJrMcdn38ixv0dBrXqTpNcl7SnpDklfS1oiaUBk2ZTfQUkdJT0TxrRO0quSGuW5slHudD10GMF/5snllPkxcCowFOgCfA3cnVTmCGB/YDjwG0m9w+l/Bf5qZm2AfYDH04yrqssBnAWMAHoBBwEXQZB0gHHAL4B2wFHA0nCZicCKcP/OAH4v6ZjIOk8CHgbygbnANILveFeCBHtfpOxDQBGwLzAAOA64JDlIM9sKzCI4roR/lwHfjYy/krTMZmAksMrMWoX/VoWzTw73ox0wBbgr1QEKnQocCvQJx2cB/YH2wHjgiWhyTbX+8OT9FMHxaQ88AZyeWCg8jrcSfC6dw32cmBTL8cBAYAjwS+B+4HygO9APODduBySdCdwEXAC0CWNcKykX+BfwPLA7wXf4UUlVbY48C7gB6AhsA94E/hOOTwKSf8DEfgeBnxN8zzoR1Nb/G2iUfRJ5gqgfOgBfmVlROWV+BFxvZivMbBvBf8gzVLppYoyZbTGz+cB84OBw+g5gX0kdzWyTmb2VZlxVXQ7gTjNbZWbrCE4S/cPpPwDGmtkLZrbLzFaa2RJJ3QlOyr8ys61mNg94kOCkk/CqmU0Lj9MTBP/B/2BmOwhOdj0ltZO0B3ACcHVYG/sS+B/gnBSxvgIMDY/lQcCd4XgeMAiYWYn9fs3MnjWznQQn64MrKH+rma0zsy0AZvaIma01syIz+wvQnCDpV7T+IUAucEdY+5xEkGwSziM47v8Jvz/XAYdJ6hkp8ycz+8bMFgELgefN7BMz20BQYxpAvEvCZWdZ4CMzWxbG1IrgM9puZi8Dz5Ai0aRhspnNCZP6ZGCrmY0Lj8VjMfGl+g7uIEiSe4XH6lVrpJ3WeYKoH9YCHVV+O/RewOSwWrweWAzsJPgFlPB5ZPhbgv+cEJyUvwMskTRL0vfSjKuqy5UXS3fg45jyXYB1ZrYxMm0ZQe0g4YvI8BaCpLozMk64nb0ITparI8frPoJfsXFeAYYBhwDvAi8Q1ByGAB+Z2doUy8VJ3u+8Cj7X5dGRsFlkcdgssh5oS/ALuaL1dwFWJp3olkWGu0THzWwTwfeuvOObPN6KeOV9psvNbFdSTF1jyqajsvGl+g7+GfgIeF7SJ5KurWI89Z4niPrhTYIq86nllFkOjDSzdpF/eWa2sqKVm9mHZnYuwQnyj8CksB19M9AiUS5so++UxnLVsZyguSrZKqC9pNaRaT2ACvcvxTa2AR0jx6qNmfVNUf4Ngl/po4BXzOy9cNsnkNS8FFFTvziL1xNeb/glQdNIvpm1AzYASmM9q4GukqJle0SGVxEkzsS2WhLUXKtyfJOV95l2T2rfT/WZJn8X96yBuGKZ2UYz+7mZ7U3QHPYzScMztb26zBNEPRBW4X8D3C3pVEktJOVKGinpT2Gx/wNukbQXgKROktK6w0nS+ZI6hb/k1oeTdwEfEPwCPTFsL76BoEmjouWq42/AxZKGK7jw3lXSAWa2nOBEfauCC8cHEdRgKv1cgZmtJmj3/oukNuF29pE0NEX5b4E5wBWUJIQ3CJr1UiWIL4AOCm4wqCmtCa6brAGaSvoNQZt+Ot4Ml70q/O6cBgyOzJ9AcNz7S2pOcLfc22a2tAbifhC4RtJABfYNv6dvE/xy/2UY0zCC60jJ1z4gaBLtG8aXR9CEmhGSvhfGKIIEvJPqf6/rJU8Q9UTY3vwzgpP0GoJfZVcSXHiE4ILxFIJq8UbgLYKLm+kYASyStClczznhtYoNwOUE/8FXEvyKW1HRclXeScDM3gEuJrgmsIHgBJz4ZXsu0JPgl+dk4EYze7GKm7oAaAa8R3BBfxJBu3MqrxA0S70TGW9NiusPZraE4KT7SdiM1SWuXCVNA6YSJO5lwFaSmqBSMbPtwGkEF2LXAWcD/4zMfxH4NfAkQW1jH1Jfk6kUM3sCuIXgovpGgu9s+zCmkwgu6H9FcNv2BeGxS17HBwQ3GrxIcEfXa8llatB+4XY2ESTWe8xsega3V2epkV57cc45VwGvQTjnnIvlCcI551wsTxDOOediZTRBSBoh6X0Fj++XuZdY0l6SXgofd58hqVtk3p8UPHq/WNKdSbfnOeecy7CMdQAW3jN/N/BfBHe+zJI0JbyHPOE2YJyZ/SPyqP/3JR1O8NTsQWG51wgeTJqRansdO3a0nj171vh+OOdcQzZnzpyvzKxT3LxM9hA5mOAp008AJE0k6Hk0miD6ENy6CTCdkls2jaDvoWYEDwHlUvqpyDJ69uzJ7Nmzayp255xrFCQtSzUvk01MXSl9j/YKyj5CP5/g3mwInlJtLamDmb1JkDBWh/+mmdni5A1IGq2gN9HZa9asqfEdcM65xizbF6mvIej0bC5BE9JKYKeCLnx7A90IksoxinRrnGBm95tZgZkVdOoUW0NyzjlXRZlsYlpJ0ElXQjeS+lgJu0A+DUBSK+B0M1uvoJ//t8IOw5D0HEGX169mMF7nnHMRmUwQs4D9JPUiSAznAIXRAgpewrIu7MvnOmBsOOsz4FJJtxJcgxhK8Da1StmxYwcrVqxg69atVd4JV1peXh7dunUjNzc326E45zIsYwnCzIokXUnQf0wOQV/ziyTdDMw2sykEXSjfKskI+rS5Ilx8EnAMQdfKBkw1s39VNoYVK1bQunVrevbsid8lW31mxtq1a1mxYgW9evXKdjjOuQzL6HtuzexZ4Nmkab+JDE8iSAbJy+0Efljd7W/dutWTQw2SRIcOHfAbApxrHLJ9kTrjPDnULD+ezjUeDT5BOOdcg/bJOPj4bxlZtSeIDFu/fj333HNPpZc74YQTWL9+fc0H5JxrWJb8BZaOz8iqPUFkWKoEUVRUVO5yzz77LO3atctQVM65BmHL57B+Aez5XxlZfUYvUju49tpr+fjjj+nfvz+5ubnk5eWRn5/PkiVL+OCDDzj11FNZvnw5W7du5Sc/+QmjR48GSroO2bRpEyNHjuSII47gjTfeoGvXrjz99NPstttuWd4z51zWfR6+ULGzJ4jqmXM1fD2vZteZ3x8G3lFukT/84Q8sXLiQefPmMWPGDE488UQWLlxYfJvo2LFjad++PVu2bGHQoEGcfvrpdOjQodQ6PvzwQyZMmMADDzzAWWedxZNPPsn5559fs/vinKt5n78O04+GjofBkdMgL6+G1/8CNO8A+QNqdr2hxpMg6ojBgweXeobgzjvvZPLkyQAsX76cDz/8sEyC6NWrF/379wdg4MCBLF26tLbCdc5Vx8tHAgZrZsI/w1r/nsfDMVOrv26zIEHscSwoM1cLGk+CqOCXfm1p2bJl8fCMGTN48cUXefPNN2nRogXDhg2Lfeq7efPmxcM5OTls2bKlVmJ1zlWXhX+bALuCwc+nwYRcOG0tNG9T9VVvWARbVmeseQn8InXGtW7dmo0bN8bO27BhA/n5+bRo0YIlS5bw1ltv1XJ0zrmMmTGqZLhwJxQa7HdVMG5F8GRbWPiHqq//8xeCvxm6QA2eIDKuQ4cOfPe736Vfv3784he/KDVvxIgRFBUV0bt3b6699lqGDBmSpSidczVu1VPB3z2Gl0wb9Fc4fSuoWTC+4DrYvqlq61/9PLTZH1r2qFaY5ZGZVVyqHigoKLDkFwYtXryY3r17ZymihsuPq3NpGB/2OlCY4hw7cTfYtRWUC+dur9y6d26DSfmwzyVQcGe1wpQ0x8wK4uZ5DcI552rav/uHA+V0TXPahuCv7YCph1Vu/V+9ATu3ZLR5CTxBOOfqu11F8K9Dgl/s4wXvXJ/tiGDD/ODvvpelLtOsGXz38WB43Vvw8T/SX//S8aCmsMewKoeYDk8Qzrm6KXHCHy947ogUZXJhYi5snFsy7aPfZy6mbWth3ZLyy0TvMhx8d/ll9zoTOhweDL99ETw3sGTe+kXw7CGw6E+llynaAp+Og6YtILd12qFXhScI51x27doR3NMfNeXA0uNfvx4kilcuSFq4/C5rqiyRmJI92RGm9obXf5B62X91Dgdy0tvW8a9Dx/CNyl//B8Y3gQnN4Nl+sH4uzP8VbN9QUv6tC2HXdtjvivj11SBPEM657JrYDCY0gWci10k3LYwvu/LhkuHoCbzQUl8MTuWjR2BCHrxxaenp008tGX4s8pzChMhT0MvGwqbPy67zxRFQFJ7M+92UfizHzYQTlwTNRlhwXUK5sFvXYP7U8Nhs+hQ+mwTN2sFBv0t//VXUeB6Uc85lRtwv7TYD4Xuzy04vs2zk1bXfzIGJ7WBX5Ndy9KSf2M54lZ7e6YSy6507BgbcWHraunUwtUPZsksfhMMfKBlf/XTJ8M6NsOItaJUPtq30clM6l47jnR/Dl9OC4RY94aAbym6rPG33h3N3wPwbofNI2D287X3ibrDpI/jgXvj4QcBg0H3QJPO/770GUce0atUKgFWrVnHGGWfElhk2bBjJt/Qmu+OOO/j222+Lx737cFfjUjXDQHCyT0tSE1E0Oezzy9LzWh9cetsJ//XvsqtdfFPJsFlQPi45JK9v6ZNl5808DJ49oGT85MiDr+ObwORe8Fhb+OiuYFrTNnDqp6m3VZGDx5QkB4BhzwV/Z18RNEG13h/2Oqvq668ETxB1VJcuXZg0qczbWNOWnCC8+/A6xnZlO4LqKZMYcmHII5RqlJhWwS2YyU1EyQ79Y+nxk+aVLbPfr0qPN+9WtsyEZqXHu3+/pElqwF0l09fOgzciP8q+t4EyTvoGWrWCQ+4LJxhsWQo7vwlG1RTOilmuOvYcFj5sFx6jIx6v2fWXwxNEhl177bXcfXfJnQw33XQTv/vd7xg+fDiHHHIIBx54IE8//XSZ5ZYuXUq/fv0A2LJlC+eccw69e/dm1KhRpfpiuuyyyygoKKBv377ceGNQpb7zzjtZtWoVRx99NEcffTQQdB/+1VdfAXD77bfTr18/+vXrxx133FG8vd69e3PppZfSt29fjjvuOO/zKVPGCybkpP71XZ311sQ6x+8WuXtoWNn5k7qXDDfdMzzZboe9z4PCHSXz1r6Y3vZ22yf4W2hAs8hwjOFJ7f6DkrqqOH15zEJFJdspNDhyXMms3pELvdMiPaKeuB7atIE2kVpLbkdoHd41dMBo6JroSkNAU2i5L5ydof8zw6ZBs/bQ8XDIPygz24jRaK5BXD31auZ9Pq9G19l/z/7cMeKOcsucffbZXH311VxxRfBFfPzxx5k2bRpXXXUVbdq04auvvmLIkCGcfPLJKd/3fO+999KiRQsWL17MggULOOSQQ4rn3XLLLbRv356dO3cyfPhwFixYwFVXXcXtt9/O9OnT6dixY6l1zZkzh7///e+8/fbbmBmHHnooQ4cOJT8/37sVrw2zx2Rmve+9VzI8XkBzKCzb8WN6Ist9/UrZJ4K3ryiZf9bqsosf8Sq8dmT5m4gmslEflQwXbitbNmqPPSCvF2z9FAb+vfyyAGvXxm8n6oSv4dn80tPatg3+fm8ejM8BdsHpSclp6D8r3n5NycmB07+CWn4nfKNJENkyYMAAvvzyS1atWsWaNWvIz89nzz335Kc//SkzZ86kSZMmrFy5ki+++II999wzdh0zZ87kqquCTr4OOuggDjqo5BfE448/zv33309RURGrV6/mvffeKzU/2WuvvcaoUaOKe5U97bTTePXVVzn55JO9W/Ha8MFNpceTL7hW1by+SRO2pV73rh3QJLfs9EQ8qSTPSxV3j8gzC+ObQmHSdYboerr9v9TbS+W0T9IrN3kf2PJZxeXataNUb6sH/0/p+YU7KxFcBtVycoBGlCAq+qWfSWeeeSaTJk3i888/5+yzz+bRRx9lzZo1zJkzh9zcXHr27BnbzXdFPv30U2677TZmzZpFfn4+F110UZXWk+DdimdYTTcppbvNxIn8/fdhTuRia0WJKTH/sd1h55rS8/relmYASSfX5GNw1N/SXE8VbIkkkkQzViqFO0ti63t1xkKqb/waRC04++yzmThxIpMmTeLMM89kw4YN7L777uTm5jJ9+nSWLVtW7vJHHXUU48cHLyVfuHAhCxYsAOCbb76hZcuWtG3bli+++ILnnnuueJlU3YwfeeSRPPXUU3z77bds3ryZyZMnc+SRFTQHuOqbO7f0eNztmzUhcfG1yR6l1//P75RODonp0W2numh89pdlk8nBP684joTPPoPnRyTtZ/OaqTnF2fvKstNSNS9FnbsrczHVU42mBpFNffv2ZePGjXTt2pXOnTtz3nnncdJJJ3HggQdSUFDAAQccUO7yl112GRdffDG9e/emd+/eDBwYPI5/8MEHM2DAAA444AC6d+/Od7/73eJlRo8ezYgRI+jSpQvTp08vnn7IIYdw0UUXMXjwYAAuueQSBgwY4M1Jmba45LpR8UlIXcBWBcMVNd+YpW5ieCamo7dzPocJHcDWBeNbPyyZt9v+sOX9kvF0E1RVT56v7VV6vMMxcPxLVVtXOob8L3xyV8XlkmWhCaeuy2h335JGAH8leOb8QTP7Q9L8vYCxQCdgHXC+ma0I5/UAHgS6E9zfdYKZLU21Le/uu/b4ca2k6Al4//th4KXx85IlTsjj2wAbS09Ltf7k+ePbAakePGsOxHQzXVO/op8ZBN8kPa9TW7/Qo8dkt71h1Me1s916KCvdfUvKAe4GRgJ9gHMl9UkqdhswzswOAm4Gbo3MGwf82cx6A4OBLzMVq3Mpjd8bXq/iW78SD2gldBxVOjkA9I60wXdP6lvntauCB7GIfyNhGbl7lZ1WuB66XQS0KHtyLtwWc8JOs/+gdHxvVmRbVegKo6Z4cqiyjNUgJB0G3GRmx4fj1wGY2a2RMouAEWa2XME9nhvMrE2YSO43sxRdOJblNYja06iOa0UPc6W7bJMecE7515pil4tTppZQwYtp0rV9AzRrW7111BUTW8GuzcGwX1coV7ZeGNQViD61siKcFjUfOC0cHgW0ltQB+A6wXtI/Jc2V9OewRlKKpNGSZkuavWbNmuTZADSUN+bVFY3qeCafqKt8MTkv/eQAKU5oLePL1uQF7oaSHADO/gbIhWFvZjuSei3bdzFdAwyVNBcYCqwkuC+uKXBkOH8QsDdwUfLCZna/mRWYWUGnTp3KrDwvL4+1a9c2rpNaBpkZa9euJS8vr+LCDVW6J+RSNY8q3C7c5vDI8gaFkfcWj6/BZqCGSk2Cp7u7+HveqyOTdzGtJLjAnNAtnFbMzFYR1iAktQJON7P1klYA88zsk3DeU8AQoFI3TXfr1o0VK1aQqnbhKi8vL49u3WL6u2nICpOuJbz9FhwaOfEk5p2zA5ok/5favWrb/N7r5cwMH+haFOmTp/+iqm3HuXJkMkHMAvaT1IsgMZwDFEYLSOoIrDOzXcB1BHc0JZZtJ6mTma0BjgHS6Du4tNzcXHr16lWNXXANTnm3i0bF3XaamPbxYXBoWCudFbkQOzG3bDIp/KJ68aaKITm+Psn3fzhXfRlrYjKzIuBKYBqwGHjczBZJulnSyWGxYcD7kj4A9gBuCZfdSdC89JKkdwl6w3oA56pjfG7wYpq4ZqJ0OrprFnMS/nBw2fXUtoNTvFzHuWrK6HMQtSnuLibnSomevPNPh5GTyk5n9+BXf2La3m/CkJjmJID93imbIKIycffMjAtgVeStan6HjqumbN3F5Fzd9XX4YpipyS9e+RLGty8ZHVLORc5ocig0YLeaii61YeOg68VwTpEnB5dxniBc45CqWWndEzGFv069nriTcvN+4bxvgS6py9WUoWOhid/J5DLPE4SrvxLXDZ4/t/rr6vk6tB5eelqbCt6IlnD6uyXDhSv9l71rMDxBuLqjMm9EmxJ5Uf1XE8sv+9prJcOpunw4/HA4KekNaN97Pn590eWb9St/287VY54gXN3wYuTk/OILFZff9FzqeTPDt6DN/F0w/lkF3ZlHT/jFw2UfvCytVfDnjHfLL+ZcPeZ3Mbm6Id23lcWVTV4mnR5SAbaugbyKEoFzDZvfxeTqthdfrLhMwhOx3+MS6SYH8OTgXAU8QbjaUd71hS9jLganKrtjTslw8vWEbDyk5lwD5gnCZV6q11oCvHhDyXDe0emvJ533KRcnkK7B6ySdc5Xirxx1tW+8QAeBLSg9/bSXS+YDvPQSDA9vPX3x4tTrS+7/iD2S5q+oVrjONVZeg3C1Jz/y1HJycuhQSBlfHFsy/OVDJcMV1h4+r3RozrmyPEG4zIr+sh/5GHScFl/u+EcjI81KLx9dR+eX45fvHK7Xm5KcqzHexORSq87rNlM57jigohrAttQXnI9OcZ3i6DTW65yrFK9BuNpR2QRz1ibYI+mBOe/Cwrla5TUIV7PMwHYGb1arzm2nTVvC8GPxWoFz2eMJwsVLPrmPbw+F6+LLPvMUfDMq4yE552qXJwiXphRdYKdTS/CmIefqJb8G4aouLjl4MnCuwfAE4cr6179KhqMn/KdPLRmO61wvUbZ4uCW0npCpKJ1zGeZNTK6sjSfHT9/8dPA33Z5XCzfVXEzOuVrnNQhXOZXplts5V695gmgoKvM2NoBdO2Hi/5VfpvWU4G/KGoInB+caMm9iagiSe0ut6MRdqvxlkRn7QYveJaMnnZRiBS2gcHNlo3TO1TNeg2hsyq1lfAjfTkkxL/Ginn09OTjXSHgNoiGKq0VMngxbTis9LZ1XdBaXnVUzsTnn6o2MJghJI4C/AjnAg2b2h6T5ewFjCd4Qvw4438xWROa3Ad4DnjKzKzMZa72V6uQ+fm/g09TLRRNI3FvZ/PqCc41expqYJOUAdwMjgT7AuZL6JBW7DRhnZgcBNwO3Js3/LTAzUzE2OKVO6mkmh7h5nhycc2T2GsRg4CMz+8TMtgMTgVOSyvQBEh38T4/OlzSQ4NVgz2cwxrpvV1Gadyj1D/7Endzzfpz0Ck7nnKtYJpuYugLLI+MrgEOTyswHTiNohhoFtJbUgaDjn78A5wPHkoKk0cBogB49etRY4HXKxNzU88Z3LBkunFsyfE4RNMnJXEzOuUYh23cxXQMMlTQXGAqsBHYClwPPRq9HxDGz+82swMwKOnXqlPlos61MLWJtfDlPDs65GpDJGsRKoHtkvFs4rZiZrSKoQSCpFXC6ma2XdBhwpKTLgVZAM0mbzOzaDMZbP0w4Ds5NbnWrxnsXnHMuhUwmiFnAfpJ6ESSGc4BSb6aX1BFYZ2a7gOsI7mjCzM6LlLkIKPDkELIX4IkrYMc9JdMK/T3Mzrmal7EmJjMrAq4EpgGLgcfNbJGkmyUleoMbBrwv6QOCC9K3ZCqeeumxx0qGm0aGo8nBOecyRGYN466WgoICmz17drbDqFnRaw6FVvYaRO7lcObdtRuTc65BkTTHzAri5vmT1PVJNEn47arOuQzzBFHfeGJwztWSbN/m6tLhScE5lwWeIJxzzsXyBFFXVeblP845lwGeIJxzzsXyBOGccy6WJ4i6LmditiNwzjVSniDqurPPznYEzrlGyp+DqA07voEnHoPCS0tPH98FWJ2VkJxzriJeg6gNT7QFRsfcmeTJwTlXd3mCqG2JJOG3sTrn6jhvYsq0uERQalprKPym1sJxzrl0pVWDkPRPSSdK8hpHTfPk4Jyro9I94d9D8LKfDyX9QdL+GYypgdqT4PUXEd7HknOuDkuricnMXgRelNQWODccXg48ADxiZjsyGGP9Nf6RkuHC8IJ0cfPSw7UejnPOVUba1yAkdQDOB74PzAUeBY4ALqTMT2MX+H7ZSV5rcM7VE2klCEmTgf0JfvaeZGaJ+zMfk9TAXuPmnHMO0q9B3Glm0+NmpHpVnYvwWoNzrh5K9yJ1H0ntEiOS8iVdnpmQGgh/zsE5V8+lmyAuNbP1iREz+xq4NHVx55xz9V26TUw5kmRmBiApB2iWubDqqdhaw3dqPQznnKsJ6SaIqQQXpO8Lx38YTnMVKXw/2xE451yVpJsgfkWQFC4Lx18AHsxIRPVVtPbgF6Wdcw1Aug/K7QLuDf8555xrBNLti2k/SZMkvSfpk8S/NJYbIel9SR9JujZm/l6SXpK0QNIMSd3C6f0lvSlpUTivbr81x2sPzrkGKN27mP5OUHsoAo4GxgGPlLdAeCH7bmAk0Ac4V1KfpGK3AePM7CDgZuDWcPq3wAVm1hcYAdwRvc3WOedc5qWbIHYzs5cAmdkyM7sJOLGCZQYDH5nZJ2a2HZgInJJUpg/wcjg8PTHfzD4wsw/D4VXAl0CnNGOtXePHRUb+kbUwnHOupqWbILaFXX1/KOlKSaOAVhUs0xVYHhlfEU6Lmg+cFg6PAlqHfT4VkzSY4Jbaj5M3IGm0pNmSZq9ZsybNXalpF5YMFl6QpRicc67mpZsgfgK0AK4CBhJ02ndhuUuk5xpgqKS5wFBgJbAzMVNSZ4L+ny4OL5SXYmb3m1mBmRV06lQ3KxjOOVdfVXgXU3gt4WwzuwbYBFyc5rpXAt0j493CacXC5qPTwu20Ak5PPLEtqQ3wb+B6M3srzW3WLr847ZxrwCqsQZjZToJuvStrFrCfpF6SmgHnAFOiBSR1jLyl7jpgbDi9GTCZ4AL2pCps2znnXDWl+6DcXElTgCeAzYmJZvbPVAuYWZGkK4FpQA4w1swWSboZmG1mUwjeI3GrJANmAleEi58FHAV0kHRROO0iM5uX7o5l3PhIFxpee3DONUAKu1cqv5D095jJZmb/r+ZDqpqCggKbPbsWX03hzUvOuQZA0pxUr21I90nqdK87NEL7ZTsA55zLiHTfKPd3oMzP5LpUg6hVpWoPH2QvDuecy6B0r0E8ExnOI3hmYVXNh+Occ66uSLeJ6cnouKQJwGsZiaiu82sPzrlGIt0H5ZLtB+xek4E455yrW9K9BrGR0tcgPid4R0Tj4rUH51wjkm4TU+tMB+Kcc65uSfd9EKMktY2Mt5N0asaiqou89uCca2TSvQZxo5ltSIyE/SXdmJGInHPO1QnpJoi4cuneIlv/ee3BOdcIpZsgZku6XdI+4b/bgTmZDMw551x2pZsgfgxsBx4jeDPcVko61mtEDs92AM45V2vSvYtpM3BthmOpm8Z3LBkufD17cTjnXC1L9y6mFyS1i4znS5qWsajqlLXZDsA557Ii3Samjok3vQGY2df4k9TOOdegpZsgdknqkRiR1JOY3l0bnPGR12D43UvOuUYm3VtVrwdek/QKIOBIYHTGosqmxC2thQY0zt7MnXMO0r9IPVVSAUFSmAs8BWzJYFzZEX3eITrsnHONULqd9V0C/AToBswDhgBvAsdkLLK6xJuXnHONULrXIH4CDAKWmdnRwABgfaaCcs45l33pXoPYamZbJSGpuZktkbR/RiPLtkIDMxrDtXjnnIuTboJYET4H8RTwgqSvgWWZCirrEk1KEsE1eeeca3zSvUg9Khy8SdJ0oC0wNWNROeecy7pK98hqZq9kIpCsG//9bEfgnHN1SlXfSd0APZLtAJxzrk7JaIKQNELS+5I+klSmsz9Je0l6SdICSTMkdYvMu1DSh+G/CzMZp3POubIyliAk5QB3AyOBPsC5kvokFbsNGGdmBwE3A7eGy7YneGPdocBg4EZJ+ZmK1TnnXFmZrEEMBj4ys0/MbDvBeyROSSrTB3g5HJ4emX888IKZrQs7BnwBGJHBWCMerJ3NOOdcHZfJBNEVWB4ZXxFOi5oPnBYOjwJaS+qQ5rJIGi1ptqTZa9asqZmoC39QM+txzrl6LtsXqa8BhkqaCwwFVgI7013YzO43swIzK+jUqVOmYnTOuUap0re5VsJKoHtkvFs4rZiZrSKsQUhqBZxuZuslrQSGJS07I2OResd8zjlXRiZrELOA/ST1ktQMOAeYEi0gqaOkRAzXAWPD4WnAceGb6/KB48JpzjnnaknGEoSZFQFXEpzYFwOPm9kiSTdLOjksNgx4X9IHwB7ALeGy64DfEiSZWcDN4TTnnHO1RGYNozO6goICmz17dtUWjjYxedfezrlGRNIcMyuIm5fti9R1iycH55wr5gnCOedcLE8Q4/+W7Qicc65O8gTBJdkOwDnn6iRPEJyf7QCcc65OyuSDcvVD4cPAw9mOwjnn6hyvQTjnnIvlCcI551wsTxDOOedieYJwzjkXyxOEc865WJ4gnHPOxfIE4ZxzLpYnCOecc7E8QTjnnIvlCcI551wsTxDOOedieYJwzjkXyxOEc865WJ4gnHPOxfIE4ZxzLpYnCOecc7E8QTjnnIvlCcI551wsTxDOOediZTRBSBoh6X1JH0m6NmZ+D0nTJc2VtEDSCeH0XEn/kPSupMWSrstknM4558rKWIKQlAPcDYwE+gDnSuqTVOwG4HEzGwCcA9wTTj8TaG5mBwIDgR9K6pmpWJ1zzpWVyRrEYOAjM/vEzLYDE4FTksoY0CYcbgusikxvKakpsBuwHfgmg7E655xLkskE0RVYHhlfEU6Lugk4X9IK4Fngx+H0ScBmYDXwGXCbma1L3oCk0ZJmS5q9Zs2aGg7fOecat2xfpD4XeMjMugEnAA9LakJQ+9gJdAF6AT+XtHfywmZ2v5kVmFlBp06dajNu55xr8DKZIFYC3SPj3cJpUT8AHgcwszeBPKAjUAhMNbMdZvYl8DpQkMFYnXPOJclkgpgF7Cepl6RmBBehpySV+QwYDiCpN0GCWBNOPyac3hIYAizJYKzOOeeSZCxBmFkRcCUwDVhMcLfSIkk3Szo5LPZz4FJJ84EJwEVmZgR3P7WStIgg0fzdzBZkKlbnnHNlKTgf138FBQU2e/bsbIfhnHP1iqQ5ZhbbhJ/ti9TOOefqKE8QzjnnYnmCcM45F8sThHPOuVieIJxzzsXyBOGccy6WJwhAY5TtEJxzrs5p9AkikRw0RmUShcaIP931p2yE5ZxzWdc02wHUNclJ4ldrf8Uv+WWWonHOuexp9DUIu9GwG8t/mtyboJxzjVGjTxAJ0UTRhCblJo1BtwzingfuSTnfOecaAu+LqQLR2oPdaLG1iYpqIM45V1eV1xeTX4OohCP+fETsdE8azrmGyJuYKjC2x9ji4de/fb14+KGeD5W7XNxdUc45V594E1Makk/0ybWDbUXbaN60eWzZuPLOOVdXeHff1XT4bocXD+/LvmXmJ5IDxN8V9cgjj2QuOOecyxCvQaRpwM0DmHXDLJo2Sf+yTfIF7srOd865TPMaRA2Y+5u5lUoOAEPbDC0ejntKO3lcY8SPJv6o6kFmwPad27MdgnMuS7wGkWHVvVCdrZpFeXF7bce5hsNrEFlU0cm0oie5yztRb96+ucpxlbe9ipJaXO1n0tOT0t6GmVUq9kRMDeXHTLq2Fm2Nnb7LdtVyJLUrE9/rmvLB6g+Y/un0bIdRa7wGUQvMjD6/68OSXUtKT69EYkgum4lf+FOmTOGUuaekXFdlakPpLpdOrBUdi8r4xb9/wZ9P/HOZ6cePPZ4bD7iRww8/PGapQPMxzdnFLnbcuKPK209XizEt2MIWoPT+Tlw4kXOfPLfM9Pos7vvRIa8DX/3qqyxEU75ErMfvfTxTvz81y9HUjPJqEJ4g6rDk/ziP9X6Ms846K+0TdaqkkurEks5F80w82/Hfh/83v3/j97HbTrW9Xx/5a24+5uZKbSfV/pW3T28e/yaHTTuszPRUx8fM2Lh9I22at6lUbMlSJcWaTJa1zczYUrSFFrktAOj3v/1YtG5RyvJHdT2KVy55pVrbA5Bq5jt7xmNn8OSSJ4vHXzjvBY7d91gAjn7oaGYsm8HiKxZzQMcDamR7EOxDTcWfiieIeqyiE3JVf+EnLx9d9ukBT3PyySenXGbUQ6N4atlTZbZfUQxTh0zl+OOPr7Bcl5wurLxhZYXlEtt/5ZVXGDZjWKlpcdI96aarvDvTerbsyafXfJrWerbv3E6znGYp40xsK276wjMW0rdv33LX3/HWjqzdvrZKyeT5j5/n+EeOZ9r50zhun+MqvTzA8uXL6TG2R7llTt73ZJ4+72mg9P7/duhvuWHYDQCMnzuey6dezobtGwCYcMoEzul/Tpl17XX7Xny28bNS024ffjs/PeKnZcpWJomk+lyajGmCUXJs8/PyWferdRWub8fOHTRt0pQvNn/B68te55iex5DfMr94/sylMzn24WPZveXuvPGDN+jRtvxjWFWeIOq54+46jhfWvlBmeqZ+5dfEr9KpU6cy8u2R5a7v+heuL1VzSI7h5ZdfZvirw0utY/r06Rwz85gKt5+8zddee40jXzqyTJnkWsXtb97Oz5//ecp1Jh/bu0bexRWDrwAq/+s+b0we29hWpnxlP7/ytvPUkqcY9diotGOK6n5bd1ZsXhG7bHTepxd+Ss+ePWPXkc6+VHQLeEVyyGEnO9MqO+28aRy3b5Doev1PL5Z+szRlDFGzV81m0AODistW9jPKUQ4TT5vIGf3O4N537uXKqVfGXks6qsdRvHLxK4yaOIqn3n+q1LwDdz+QaedPo3PrzpXadkU8QTQQlX1uorwTVqoveLabLNKNq7InnorKt6Qlm27clEaE0PF3HVm7c21aZeOOZ+c/dubzrZ+ntez5E8/n0fcfLTP9LzP+wjWvXFPhNtN9sv+ZD57hpAknkd8sn3XXrSv3c2j525Z8u+vbCtfbbEwzdlByveaXh/6SP474Y/H4lh1b2C13t9jtpIo9XbnKZftvtnP989fz+zdL/whp3qQ523ZtKzVtrzZ7sfSnSyuMRYhdN+5i3ufzGHDfgOL57172Lv1278cDsx9g9L9HVyrWpmqKYey0sknu0kMupVWzVvzvO/9L0a4imqgJC360gL67l19rrIysJQhJI4C/AjnAg2b2h6T5PYB/AO3CMtea2bPhvIOA+4A2wC5gkJnF39ZB40gQmVLRtYnaFHdSyCGHohuLUpY9seeJPHPhM7HLx/0qP7j9wcxfNz+2XLrefudthjw3pMz0ZjRjOyXPjqST2PLIYytlv9pxsb97+rv069cv5bqiyzYd0zT2l3W/9v1498fvFo+fOu5Unv706ZTr+uORf+RXr/4q5fy4mJPjq8p3y8zYsG0D7fLapSyT99u84pP9kM5DeHP0mynLVpRwvv7J17RrF7+txLJLLl3C/l32B2Dc3HHc+tqtLP7x4jLlv9n2TfF1qK1bt9Lnvj58ur6kyXFYj2FMv7j03VALv1jIYWMPY9P2TeQoh/k/ml8qERROKmTCognkNsnl5Qtf5oge8Z2HVlZWEoSkHOAD4L+AFcAs4Fwzey9S5n5grpndK6kP8KyZ9ZTUFPgP8H0zmy+pA7DeLCbFhjxBNBzVvRAbXT6PPPJz81m9Y3WpddXUU+zpJKR0LjAf/L8Hs2DdgpQxaYw4fM/Def2Hr5eZntCpeSfWbFsTG2dcs4jdaAy4ewDzvpoXu0w0jt539mbJ1/F34R1676G88+U7KbdVF354JPS9qy/vrQ1OQeuuWkd+fn6Fsebfms/67etTzq+M9VvX07Z523KveWzevpmcJjnkNc0rM+++2fdx2b8vQxJ/Oe4vHN3zaLq07kKHFh1ooqo9tZCtBHEYcJOZHR+OXwdgZrdGytwHfGJmfwzL/8XMDpd0AlBoZuenuz1PEA1HTdypk05TlcaIzrmdWfXfqyq9/lLrNGPK9CmcckzJLcKVubkg4ZYXb+GG12+ga4uurPjFipilKtb+9+35esfXKbdVnVuOc8bksItdsWWP+dsxTF9R9vmAY3scywsXl71+VpfMWzqPAf8Imova5LZh446NpS46J1za/1LuP+X+2g6vjMmLJ3PGE2eUuoZR0KWAWZfOqtL6spUgzgBGmNkl4fj3gUPN7MpImc7A80A+0BI41szmSLoaGAjsDnQCJprZn2K2MRoYDdCjR4+By5Yty8i+uNqXOJFtu2FbqTt8qrKOhMsPupy7R91d7diquv2ETP+ijp7Ie+f35r2riivtmBlNb25aPL+yMZV322V97sm4xe9asGXnlnLL1KV9WfjlQj5e9zFFu4pYtXEVrZq14uIBF1dpXXU5QfwsjOEvYQ3ib0A/4GfAFcAg4FvgJeAGM3sp1fa8BtGwbC3aSrOcZlWuNgP8/tXfc/3L1xeP1/Z/8Asev4CHFz9MHnlsubH8k09NG3TPIJasXcLGX29MWeakf5zEM0ufqdHjEk0Syy5eRo8embk1MxOiF6IHdR7E82c/T9u2bbMcVebV5SamRQRJZHk4/gkwBDgGGGlmF4bTfw1sNbOyj8CGPEG4OHW1Lbwh0xixd5u9+finH2c7FJeGbL1ydBawn6RewErgHKAwqcxnwHDgIUm9gTxgDTAN+KWkFsB2YCjwPxmM1TVQnhRqnx/zhiNjCcLMiiRdSXCyzwHGmtkiSTcDs81sCvBz4AFJPwUMuMiCKs3Xkm4nSDJGcHfTvzMVq3POubL8QTnnnGvEvLtv55xzleYJwjnnXCxPEM4552J5gnDOORfLE4RzzrlYniCcc87FajC3uUpaA1SnM6aOQN17CW5mNcZ9hsa5341xn6Fx7ndl93kvM+sUN6PBJIjqkjQ71b3ADVVj3GdonPvdGPcZGud+1+Q+exOTc865WJ4gnHPOxfIEUSL7bwKpfY1xn6Fx7ndj3GdonPtdY/vs1yCcc87F8hqEc865WJ4gnHPOxWr0CULSCEnvS/pI0rXZjidTJHWXNF3Se5IWSfpJOL29pBckfRj+zc92rDVNUo6kuZKeCcd7SXo7/Mwfk1S1l17XYZLaSZokaYmkxZIOa+iftaSfht/thZImSMpriJ+1pLGSvpS0MDIt9rNV4M5w/xdIOqQy22rUCUJSDnA3MBLoA5wrqU92o8qYIuDnZtaH4LWuV4T7ei3wkpntR/Du74aYJH8CLI6M/xH4HzPbF/ga+EFWosqsvwJTzewA4GCC/W+wn7WkrsBVQIGZ9SN4Sdk5NMzP+iFgRNK0VJ/tSGC/8N9o4N7KbKhRJwhgMPCRmX1iZtuBicApWY4pI8xstZn9JxzeSHDC6Eqwv/8Ii/0DODUrAWaIpG7AicCD4bgI3nk+KSzSEPe5LXAU8DcAM9tuZutp4J81wRsyd5PUFGgBrKYBftZmNhNYlzQ51Wd7CjDOAm8B7SR1TndbjT1BdAWWR8ZXhNMaNEk9gQHA28AeZrY6nPU5sEe24sqQO4BfArvC8Q7AejMrCscb4mfei+Dd7n8Pm9YelNSSBvxZm9lK4DaC99yvBjYAc2j4n3VCqs+2Wue4xp4gGh1JrYAngavN7JvovPB94A3mvmdJ3wO+NLM52Y6lljUFDgHuNbMBwGaSmpMa4GedT/BruRfQBWhJ2WaYRqEmP9vGniBWAt0j493CaQ2SpFyC5PComf0znPxFosoZ/v0yW/FlwHeBkyUtJWg+PIagbb5d2AwBDfMzXwGsMLO3w/FJBAmjIX/WxwKfmtkaM9sB/JPg82/on3VCqs+2Wue4xp4gZgH7hXc6NCO4qDUlyzFlRNj2/jdgsZndHpk1BbgwHL4QeLq2Y8sUM7vOzLqZWU+Cz/ZlMzsPmA6cERZrUPsMYGafA8sl7R9OGg68RwP+rAmaloZIahF+1xP73KA/64hUn+0U4ILwbqYhwIZIU1SFGv2T1JJOIGinzgHGmtkt2Y0oMyQdAbwKvEtJe/x/E1yHeBzoQdBd+llmlnwBrN6TNAy4xsy+J2lvghpFe2AucL6ZbctieDVOUn+CC/PNgE+Aiwl+EDbYz1rSGOBsgjv25gKXELS3N6jPWtIEYBhBt95fADcCTxHz2YbJ8i6C5rZvgYvNbHba22rsCcI551y8xt7E5JxzLgVPEM4552J5gnDOORfLE4RzzrlYniCcc87F8gTh6gRJV0tqUclljgx775wnabdMxRZua6mkjpncRhoxzJBUIy+jzzRJN0m6JmZ6z2gvpGmu6yFJZ1Rc0tU0TxCurriaoIO1yjgPuNXM+pvZlrgC4QNC/j13rgr8P45Li6QLwv7k50t6OJzWU9LL4fSXJPUIp5f6xSdpU/h3WPgrOPGegkfDE/hVBP3nTJc0PWbbw8NO594N+8JvLukS4Czgt5IeTSrfU8E7PsYBC4Huku6VNDuscYyJlF0qaYyk/4TrPyCc3kHS82H5BwFFlvmZgncOLJR0dWSbS8J9/yDct2Mlva6gj/7BMfuVI+m2cD0LJP041f7GLLspMnyGpIcix/5eSW9J+iQ85mMVvBPioejykm4JP8+3JO0RTj8zjGe+pJkx220VftaJ43VKZN714b6/BuwfmT4wXN984Iqk/f+zpFnh/v8wnC5Jd4Wf4YvA7slxuFpiZv7P/5X7D+gLfAB0DMfbh3//BVwYDv8/4Klw+CHgjMjym8K/wwh62exG8OPkTeCIcN7SxPqTtp1H0Bvld8LxcQQdDZbZTmSZngRPiw+JTEvEnAPMAA6KbPfH4fDlwIPh8J3Ab8LhEwk6P+sIDCR4Gr0l0ApYRNAzbk+CJ3gPDPdtDjCWILGckjg2SXFeRtBPUtNEjBXs7wyC9x0UH9Nw+AzgocgxmRjZ7jdJMfUPyxlwUjj8J+CGcPhdoGs43C4m5qZAm3C4I/BRuK3EcWkBtAmnXxOWWwAcFQ7/GVgYDo+ObLc5MJugs73TgBfCz6oLsD7uc/Z/mf/nNQiXjmOAJ8zsKwAr6Z7hMGB8OPwwcEQa63rHzFaY2S5gHsGJtTz7E3TC9kE4/g+Cdx1UZJkF/d8nnCXpPwTdLfQleEFUQqLjwjmReI4CHgEws38TvGwGgn2cbGabzWxTuOyR4bxPzezdcN8WEbzAxQhOnHH7eSxwn4XdUYfHtar7G/WvyHa/SIopEcd24JmY/X4deEjSpQQn6GQCfi9pAfAiQVcWexAcg8lm9q0FvQRPgeDNdgSJJlEbeTiyruMI+gmaR9DlSweCF9scBUwws51mtgp4uZL772pI04qLOFdpRYTNl2H7f/Q1j9F+cHaSue/g5sSApF7ANcAgM/s6bGrJi4mpuvFE921XZHxXNdcbJ9pHTl7SvOh2k2NKxLEjTCIQ2W8z+5GkQwlqTXMkDTSztZF1nAd0Agaa2Q4FPeUmbz9dIqi9TSs1MegfzdUBXoNw6XgZOFNSBwjefxtOf4Ogl1QIThyvhsNLCZocAE4GctPYxkagdcz094GekvYNx78PvFKZ4AmaPDYDG8K29pFpLDMTKASQNBJIvL/5VeBUBb2GtgRGUbLflfUC8EOF3VGHxzXd/f1CUu8wAY+q4vbLkLSPmb1tZr8heOlQ96QibQnesbFD0tHAXuH0mQTHZTdJrYGTACx4k916BZ1FQvA9SZgGXKagG3okfSc8pjOBs8NrFJ2Bo2tq/1zleA3CVcjMFkm6BXhF0k6CZpqLgB8TvLXsFwQnk4vDRR4Ang4vSk4l8mu+HPcDUyWtMrPiE4KZbZV0MfBEeCKdBfxfJeOfL2kusISgff/1NBYbA0yQtIggEX4Wrus/YQ3knbDcg2Y2V8Fb+irrQeA7wAJJO4AHzOyuNPf3WoImojUEbfetqrD9OH+WtB/Br/uXgPlJ8x8F/iXp3XC7S6D4uDwWlv8yjDvhYmCsJAOej0x/kKBp6z+SFO7LqcBkgmbN9wiO+5s1tG+ukrw3V+ecc7G8ick551wsTxDOOedieYJwzjkXyxOEc865WJ4gnHPOxfIE4ZxzLpYnCOecc7H+P1Z96rf00i9FAAAAAElFTkSuQmCC\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 5h 16min 44s, sys: 4min 33s, total: 5h 21min 18s\n",
"Wall time: 20min 14s\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"%%time\n",
"\n",
"from IPython import display\n",
"from matplotlib import pyplot as plt\n",
"\n",
"num_runs = 100\n",
"results_train = []\n",
"results_test = []\n",
"columns = ['education_num', 'age', 'capital_gain', 'capital_loss', 'hours_per_week', 'gender', 'native_country',\n",
" 'workclass', 'marital_status', 'occupation', 'relationship', 'race']\n",
"\n",
"for run in range(num_runs):\n",
" clf = XGBClassifier()\n",
" clf.fit(train_data[columns].values, train_data['income_bracket'])\n",
" test_preds = clf.predict(test_data[columns].values)\n",
" \n",
" results_train.append(accuracy_score(train_data['income_bracket'], clf.predict(train_data[columns].values)))\n",
" results_test.append(accuracy_score(test_data['income_bracket'], clf.predict(test_data[columns].values)))\n",
" \n",
" train_data = pd.concat([\n",
" train_data,\n",
" pd.DataFrame(data={f'random_{run+1}': np.random.randn(train_data.shape[0])})\n",
" ], axis=1)\n",
"\n",
" test_data = pd.concat([\n",
" test_data,\n",
" pd.DataFrame(data={f'random_{run+1}': np.random.randn(test_data.shape[0])})\n",
" ], axis=1)\n",
" \n",
" columns.append(f'random_{run+1}')\n",
" \n",
" plt.title('Census income with random columns')\n",
" plt.plot(results_train, color='orange', label='train')\n",
" plt.plot(results_test, color='green', label='validation')\n",
" plt.ylabel('accuracy')\n",
" plt.xlabel('count of random columns added')\n",
" if run == 0: plt.legend()\n",
" \n",
" display.clear_output(wait=True)\n",
" display.display(plt.gcf())"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"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.8.13"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment