{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Chapter 4 - Classification" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- [Load dataset](#Load-dataset)\n", "- [The Default data set](#Figure-4.1---Default-data-set)\n", "- [4.3 Logistic Regression](#4.3-Logistic-Regression)\n", "- [4.4 Linear Discriminant Analysis](#4.4-Linear-Discriminant-Analysis)\n", "- [Lab: 4.6.3 Linear Discriminant Analysis](#4.6.3-Linear-Discriminant-Analysis)\n", "- [Lab: 4.6.4 Quadratic Discriminant Analysis](#4.6.4-Quadratic-Discriminant-Analysis)\n", "- [Lab: 4.6.5 K-Nearest Neighbors](#4.6.5-K-Nearest-Neighbors)\n", "- [Lab: 4.6.6 An Application to Caravan Insurance Data](#4.6.6-An-Application-to-Caravan-Insurance-Data)" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "import numpy as np\n", "import matplotlib as mpl\n", "import matplotlib.pyplot as plt\n", "import seaborn as sns\n", "\n", "import sklearn.linear_model as skl_lm\n", "from sklearn.discriminant_analysis import LinearDiscriminantAnalysis\n", "from sklearn.discriminant_analysis import QuadraticDiscriminantAnalysis\n", "from sklearn.metrics import confusion_matrix, classification_report, precision_score\n", "from sklearn import preprocessing\n", "from sklearn import neighbors\n", "\n", "import statsmodels.api as sm\n", "import statsmodels.formula.api as smf\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##### Load dataset" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/Users/tz89p/Library/Python/3.9/lib/python/site-packages/openpyxl/styles/stylesheet.py:226: UserWarning: Workbook contains no default style, apply openpyxl's default\n", " warn(\"Workbook contains no default style, apply openpyxl's default\")\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", "
Unnamed: 0defaultstudentbalanceincomedefault2student2
01NoNo729.52649544361.62507400
12NoYes817.18040712106.13470001
23NoNo1073.54916431767.13894700
\n", "
" ], "text/plain": [ " Unnamed: 0 default student balance income default2 student2\n", "0 1 No No 729.526495 44361.625074 0 0\n", "1 2 No Yes 817.180407 12106.134700 0 1\n", "2 3 No No 1073.549164 31767.138947 0 0" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "\n", "# Install openpyxl\n", "df = pd.read_excel('data/Default.xlsx')\n", "\n", "# factorize() encodes the variable as a categorical variable\n", "df['default2'] = df.default.factorize()[0]\n", "df['student2'] = df.student.factorize()[0]\n", "df.head(3)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 4.3 Logistic Regression" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "image/png": "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RERERERkDPukPYs+Oc+H26EQMdv0FxARERERERmjmqIJasNxDGB6obLow4GCdBERERERkTFqY3sWfUKOB7/TkeXaCEBW/wqxWIylS5eyfPlyPB4Pl1xyCZdcckm3/S644AJWrlzZbfvixYtZtmwZLS0tfOYzn8koy8/P5+233x60uouIiIiIiIxk4USKnW1RAA4uDGS5NtIhq0H6Pffcw7p163jqqaeoqqrihhtuYNy4cZx++ukZ+z344IMkEonOx6tXr+Y73/kO559/PgCbNm0iPz+fF198sXMfm02dBERERERERHqzudlaF73E5yLf48xybaRD1oL0cDjMc889x2OPPcasWbOYNWsWGzdu5Nlnn+0WpOfn53f+nEql+OlPf8o3v/lNZs+eDcDmzZuZMmUKJSUlQ/kURERERERERqRk2mRrcxiwll2T4SNr6eb169eTTCaZM2dO57a5c+eyevVq0ul0r8c9//zztLS0cOmll3Zu27RpE5MnTx7M6oqIiIiIiIwaO1ojxNMmPqedioA729WRLrIWpNfV1VFQUIDL5ercVlxcTCwWo7m5ucdjTNPk8ccf58ILL8Tv33O3p7Kykurqar70pS9xwgkncO2111JbWzvYT0FERERERGTEMU2Tyiarq/u0fB+GYWS5RtJV1oL0SCSSEaADnY/j8XiPx7z99ttUV1fz5S9/OWP75s2bCQaDLFmyhJ/+9KfU1tZy+eWXk0qlBqfyIiIiIiIiI1R9JE5rPIndMJiU58t2dWQvWRuT7na7uwXjHY89Hk+Px7zyyiuceOKJGWPUAV566SUMw+g87oEHHmD+/PmsXr2ao48+euArLyIiIn2m1VxERIaXjiz6QbleXHZNuD3cZC1ILysro6mpiWQyicNhVaOurg6Px0Nubm6Px/zjH//gqquu6rbd6/VmPC4qKiI/P5+ampqBr7iIiIj0i1ZzEREZPkKJJFXBGADTCpRFH46y1rLNnDkTh8PBBx980Llt1apVzJ49u8cGt7GxkR07djB37tyM7cFgkGOOOYZ///vfndtqampoampi6tSpg1Z/ERER+XQdq7ncdNNNzJo1i1NPPZVvfvObPPvss932zc/Pp6SkhJKSEgoLC/e5mkvHv6KioqF+SiIiI9qW9hndS30uct1adm04ylqQ7vV6WbRoEbfeeitr1qzhtdde48knn+TC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REREhp7aehGR7NrdZo1Hrwh4MAwjy7WRodbvxfZKS0v5xz/+0W378uXLmThx4oBUSkRERLJHbb2ISPakTZPqkNXVXUuvjU39zqRfd911XHvttbzxxhvMmDEDgLVr17Ju3ToefvjhAa+giIiIDC219SIi2VMfjpNIm7jtNgq9zmxXR7Kg35n0U089lRdeeIGZM2eyefNmNm/ezFFHHcX//b//l+OPP34w6igiIiJDSG29iEj2dCy9Vh5wq6v7GLVfsxBMnz6d66+/fqDrIiIiIsOE2noRkaFnmiZV7UG6urqPXf3OpIuIiIiIiMjAa4kliSTT2A2DUp+WXhurFKSLiIiIiIgMAx1Z9FK/C7tNXd3Hqj4F6ZWVlZimOeC/PBaLceONNzJv3jzmz5/Pk08+2eu+V1xxBYceemjGvzfeeKOz/Je//CUnnHACc+bM4cYbbyQSiQx4fUVEREarwWrrRUSk73arq7vQxyD93HPPpaamBoALL7yQ1tbWAfnl99xzD+vWreOpp57illtu4aGHHuKvf/1rj/tWVlZy77338tZbb3X+++xnPwvAK6+8wkMPPcRtt93GU089xerVq7n33nsHpI4iIiJjwWC19SIi0jehRJKWWBKAcr+C9LGsTxPHud1u/vCHP/CZz3yGlStXsnLlSvLy8nrc95hjjunTLw6Hwzz33HM89thjzJo1i1mzZrFx40aeffZZTj/99Ix94/E4O3fuZPbs2ZSUlHQ719NPP81FF13EKaecAsDSpUv5r//6L773ve/h9Xr7VB8REZGxbDDaehER6bvdQWtt9GKvC7dDo5LHsj4F6d/5zne47777eOihhzAMg6uuuqrH/QzD4OOPP+7TL16/fj3JZJI5c+Z0bps7dy6PPPII6XQam23PG3Pz5s0YhsHEiRO7nSeVSrF27dqMOh111FEkEgnWr1+fcX4RERHp2WC09SIi0ncdXd0rApowbqzrU5D+la98ha985SsAzJgxg7feeovi4uID+sV1dXUUFBTgcrk6txUXFxOLxWhubqawsLBz++bNmwkEAlx//fWsXLmS8vJyrr76ak466SRaW1uJxWKUlpbueVIOB/n5+VRXVx9QHUVERMaKwWjrRUSkb+KpNPXhOAAVGo8+5vV7nfT169cDsHXrViorK0mn00ydOpVp06b16zyRSCQjQAc6H8fj8YztmzdvJhqNMn/+fC677DJeffVVrrjiCn73u991XkD0dK69zyMiIiKfbqDaehER6ZvqYBQTyHU5CLj6HaLJKNPvd0BbWxs33HADK1asIC8vj1QqRTAY5DOf+Qw///nPycnJ6dN53G53tyC647HHk3n36Morr+SCCy7oHBs3Y8YMPvzwQ37/+99z7bXXZhzb9Vwajy4iItJ/A9XWi4hI33SMR1cWXWA/1km//fbbqamp4eWXX+btt9/m3Xff5cUXXyQcDrNs2bI+n6esrIympiaSyWTntrq6OjweD7m5uZmVtNm6TV4zdepUampqyM/Px+12U19f31mWTCZpbm7ucZI5ERER2beBautFROTTpdImNaGOIF3j0WU/gvQVK1Zw6623MnXq1M5t06dP5+abb+b111/v83lmzpyJw+Hggw8+6Ny2atUqZs+enTFpHMD3v/99lixZkrFt/fr1TJ06FZvNxuzZs1m1alVn2QcffIDD4WDGjBn9fHYiIiIyUG29iIh8urpwjKRp4nHYKPA4s10dGQb6HaS73e5uQTRYs72mUqk+n8fr9bJo0SJuvfVW1qxZw2uvvcaTTz7JhRdeCFhZ9WjUmuFwwYIF/PnPf+aFF15g27ZtPPTQQ6xatYqvf/3rAJx//vk88cQTvPbaa6xZs4Zbb72VL3/5y+ruLiIish8Gqq0XEZFPV9Wlq7thGFmujQwH/Q7SFyxYwNKlS9m+fXvntq1bt3LHHXdw0kkn9etcS5YsYdasWVx00UUsXbqUq6++mtNOOw2A+fPn8/LLLwNw2mmnccstt/Dwww9z9tlns2LFCh5//HEmTJgAwFlnncW3vvUtbr75Zi655BKOOOIIvve97/X3qYmIiAgD29aLiEjvTNPsXHptnMajSzvDNE2zPwe0trby7W9/m3fffbdz7HhraysnnHAC99xzD/n5+YNRzwG1cOFCAHXZExGRYWG4tUtq60VEhkZjJM6b2xtw2AzOmlaG3aZM+mjW17ap37O75+bm8swzz7BhwwYqKytxu91MmTIlY9yaiIiIjFwD3dbHYjGWLl3K8uXL8Xg8XHLJJVxyySU97nvFFVewYsWKjG2PPPIIp5xyCgC//OUveeKJJwgGg5xxxhn88Ic/1PA2ERmxqtqz6GV+twJ06bTfi/AdeuihHHrooQNZFxERERlGBqqtv+eee1i3bh1PPfUUVVVV3HDDDYwbN47TTz+9276VlZXce++9HH/88Z3bOlZ4eeWVV3jooYe49957KSoqYsmSJdx7773cfPPNB1xHEZFs6Fh6TV3dpat+j0kXERER6atwOMxzzz3HTTfdxKxZszj11FP55je/ybPPPttt33g8zs6dO5k9ezYlJSWd/1wuFwBPP/00F110EaeccgpHHHEES5cu5Y9//CORSGSon5aIyAELxpO0xZMYWJl0kQ4K0kVERGTQrF+/nmQyyZw5czq3zZ07l9WrV5NOpzP23bx5M4ZhMHHixG7nSaVSrF27lnnz5nVuO+qoo0gkEqxfv37wnoCIyCDp6Ope4nPhsisskz30bhAREZFBU1dXR0FBQWc2HKC4uJhYLEZzc3PGvps3byYQCHD99dczf/58vvSlL/G3v/0NsCaui8VilJaWdu7vcDjIz8+nurp6SJ6LiMhA6pjVvUJd3WUv/Q7STznlFO677z4++uijwaiPiIiIZNlAtvWRSCQjQAc6H8fj8YztmzdvJhqNMn/+fB5//HFOOukkrrjiCtauXUs0Gs04tuu59j6PiMhwF02maIgkAAXp0l2/g/Tvf//77Nq1i6997WucfvrpPPDAA1RWVg5G3URERCQLBrKtd7vd3YLojsceT+aF6ZVXXsnf//53Fi9ezIwZM7j66qs58cQT+f3vf4/b7c44tuu5NLu7iIw01SFrwrh8twOf057l2shw0+/Z3T//+c/z+c9/nmg0yhtvvMHy5cs5//zzKSsr4+yzz+bMM89kwoQJg1FXERERGQID2daXlZXR1NREMpnE4bAuO+rq6vB4PJ1rsHew2WydM7l3mDp1Kps2bSI/Px+32019fT3Tpk0DIJlM0tzcTElJyQA8axGRoaOu7rIv+z0m3ePx8PnPf54vf/nLnH322Wzbto1f/vKXnH322VxyySVs2bJlIOspIiIiQ2wg2vqZM2ficDj44IMPOretWrWK2bNnY7NlXoZ8//vfZ8mSJRnb1q9fz9SpU7HZbMyePZtVq1Z1ln3wwQc4HA5mzJhxYE9URGQIJdMmte2ZdAXp0pN+B+npdJr/9//+HzfffDPz58/nO9/5DrFYjEceeYS33nqLt956i4KCAq644orBqK+IiIgMsoFs671eL4sWLeLWW29lzZo1vPbaazz55JNceOGFgJVV7xhvvmDBAv785z/zwgsvsG3bNh566CFWrVrF17/+dQDOP/98nnjiCV577TXWrFnDrbfeype//GV1dxeREaU2FCNlgs9pJ8/d747NMgb0+11x/PHHE4/HOfnkk7nttts48cQTMyZxCQQCnHrqqaxevXpAKyoiIiJDY6Db+iVLlnDrrbdy0UUXEQgEuPrqqznttNMAmD9/PsuWLWPx4sWcdtpp3HLLLTz88MNUVVVx8MEH8/jjj3d2rT/rrLPYtWsXN998M/F4nNNOO43vfe97A/8CiIgMoqrOru5uDMPIcm1kODJM0zT7c8Cf//xnFi5ciM/n61bW2NhIYWHhgFVusCxcuBCA119/Pcs1ERERGX7tktp6EZHBYZomL1XWEk+lOWFiISU+d7arJEOor21Tv7u7X3/99Z3d0rratWtX5y8VERGRkUttvYjI4GiIJIin0jhtBkVe16cfIGNSn7q7v/DCCzz//POAdffn29/+Nk6nM2Of2tpaza4qIiIyQqmtFxEZfFVdZnW3qau79KJPQfqpp57Kzp07AVi5ciVHHXUUfr8/Yx+fz8epp5468DUUERGRQae2XkRkcJmm2WXpNXVzl971KUj3+/1cddVVAIwfP56zzjorYwIZERERGdnU1ouIDK62eJJQIoXNgDK/gnTpXZ+7u5955pm4XC4Mw+Dll1/udd9FixYNVN1ERERkiKitFxEZXFVBa230Ep8bh63fU4PJGNKnIP2BBx7gpJNOwuVy8cADD/S6n2EYarhFRERGILX1IiKDq6Or+7iAJ8s1keGuT0H6ihUrevxZRERERge19SIigyeSTNEUTQAajy6frk9B+jvvvNOnkxmGwbx58w6oQiIiIjL01NaLiAyejix6oceJx2HPcm1kuOtTkH7BBRf06WSGYfDxxx8fUIVERERk6KmtFxEZPLvbx6NXqKu79EGfgvT169cPdj1EREQki9TWi4gMjkQqTV3YCtI1Hl36ok9BelVVFRUVFRiGQVVV1T73HTdu3IBUTERERIaO2noRkcFRE4qRNiHgtJPj7lP4JWNcn94lCxYs4J///CdFRUUsWLAAwzAwTbOzvOOxusCJiIiMTGrrRUQGR8d4dHV1l77qU5D++uuvU1hY2PmziIiIjC5q60VEBl7aNKkOqau79E+fgvTx48d3+3nLli1UVlbidDqZOnUqEydOHJwaioiIyKBTWy8iMvDqwnESaRO33Uah15nt6sgI0e9BEbt37+b666/nnXfeIS8vD9M0aWtrY8GCBdx5553k5+cPQjVFRERkqKitFxEZGHu6ursxDCPLtZGRwtbfA37wgx9gt9t5/fXXefvtt1m5ciV/+ctfaGpq4uabbx6MOoqIiMgQUlsvInLgTNOkqj1IV1d36Y9+Z9Lfeecdnn/++YxucZMnT+bmm2/mvPPOG9DKiYiIyNBTWy8icuCaogmiyTQOw6DE5852dWQE6Xcmfdq0aXzyySfdtu/YsSOjMRcREZGRSW29iMiB6+jqXhZwY7epq7v0XZ8y6S+88ELnz8cddxw33XQTH330EbNnz8Zut7NhwwZ++ctfcvHFFw9WPUVERGQQqa0XERlYVUHN6i77xzC7LoLaiwULFvTtZIYxIpZtWbhwIaAlZkREZHgYDu2S2noRkYHTFk/y6pY6DOCs6WW47P3uwCyjUF/bpj5l0lesWHHgNRIREZFhS229iMjA6ejqXuJzKUCXfuv3xHEAjY2NbNmyhXQ6DVgzF8bjcT766CMuu+yyAa2giIiIDD219SIi+6+qrWPpNXV1l/7rd5D++9//nttuu41kMolhGHT0ljcMgyOOOEINt4iIyAintl5EZP9FkykaowlAQbrsn373vXjkkUe4/PLLWbNmDUVFRbzxxhu8+OKLzJw5k1NPPXUw6igiIiJDSG29iMj+290+YVyBx4nPac9ybWQk6neQXltby6JFi3C5XMyaNYsPPviA6dOnc+ONN/Lcc88NRh1FRERkCKmtFxHZf1Xt49E1q7vsr34H6YWFhTQ2NgIwdepUPv74YwDKysqoqakZ2NqJiIjIkFNbLyKyfxKpNHVhK5NeEXBnuTYyUvU7SD/jjDO44YYbeO+99zjhhBN4/vnneeWVV/j5z3/OpEmTBqOOIiIiMoTU1ouI7J+aUIy0CQGnnRzXfs3RLdL/ieOuu+46cnJyaGpqYuHChXzxi1/klltuIT8/n2XLlg1GHUVERGQIqa0XEdk/nV3dczwYhpHl2shIZZgdU7aOIX1dRF5ERGQoqF0aeHpNRWSopU2TFzfVkEybnHRQEUVeV7arJMNMX9um/eqD8c477/Db3/6WyspKnE4n06ZN46KLLmLmzJn7czoREREZZtTWi4j0T104TjJt4rbbKPQ4s10dGcH6PSb9V7/6FZdccgkul4svfelLfOELXyCZTPLlL3+Zl156aTDqKCIiIkNIbb2ISP9VtVld3SsCbnV1lwPS70z6Y489xu23386iRYsyts+bN4+f/OQnnHXWWQNVNxEREckCtfUiIv1jmmbnePTxOd4s10ZGun5n0oPBILNnz+62fd68eZ3LtYiIiMjIpbZeRKR/GiJxYqk0TptBiU9j0eXA9DtI//rXv869995La2tr57ZYLMZDDz3El7/85QGtnIiIiAw9tfUiIv2zq7OruweburrLAepTd/cFCxZ0jqswTZOqqipOPPFEJk6ciM1mY/v27cRiMU0mIyIiMkKprRcR2T+mabKrs6u7J8u1kdGgT0H61VdfPdj1EBERkSxSWy8isn+aogmiyTQOm0Gpz53t6sgo0Kcg/Zxzzum2LRKJsG3bNtLpNAcddBCBQGDAKyciIiJDQ229iMj+6ejqXu53Y7epq7scuH7P7p5IJLj33nv59a9/TSqVwjRNHA4HX/jCF1i6dCkulyZKEBERGcnU1ouI9I26ustg6PfEcXfffTdvvPEGDz/8MO+88w4rV67k5z//Oe+++y4//elPB6OOIiIiMoTU1ouI9E1zLEk4kcJuGJT5FaTLwOh3Jv3FF1/k/vvv59hjj+3cdtJJJ+F2u7nuuuu44YYbBrSCIiIiMrTU1ouI9M2utghgdXV3qKu7DJB+Z9JN06SoqKjb9sLCQkKh0IBUSkRERLJHbb2IyKczTZOq9vHo49TVXQZQv4P04447jvvuu49gMNi5rbW1lZ/85CcZd9xFRERkZFJbLyLy6VrjSYKJFDYDygOa1V0GTr+7u994441ceOGFnHDCCUyZMgWALVu2MHHiRB5++OEBr6CIiIgMLbX1IiKfrmNW9zK/G6et37lPkV71O0jPycnhxRdf5O9//zubN2/G7XYzZcoUPvvZz2LTm1NERGTEU1svIvLpOru6B9TVXQZWv4P0s88+m4ceeoiFCxeycOHCwaiTiIiIZJHaehGRfWuLJ2mNJzGACgXpMsD6fTvcZrORSCQGoy4iIiIyDKitFxHZt45Z3Uv9blx29TCSgdXvTPrJJ5/MxRdfzCmnnML48eNxuVwZ5VddddWAVU5ERESGntp6EZF929lqdXWfoFndZRD0O0jfsGEDs2bNora2ltra2owyw9DagCIiIiOd2noRkd61xBK0xpPYDHV1l8HR7yD9mWeeGYx6iIiIyDChtl5EpHc7u8zqrq7uMhj6HKT/6U9/4tVXX8XpdPK5z32Os846azDrJSIiIkNMbb2IyL6ZpsnOVms8+oQcb5ZrI6NVn279PPXUU9x4441Eo1EikQg33HADP/nJTwa7biIiIjJE1NaLiHy65liSUCKF3YCKgDvb1ZFRqk+Z9N/+9rfceeedLFq0CIDly5ezZMkSrr32Wo1NExERGQXU1ouIfLqOLHp5wIPDpq7uMjj69M7asWMHxx9/fOfjBQsWEIlEuk0mIyIiIiOT2noRkX0zTbNzPLq6ustg6lOQnkwmcTj2JN0dDgdut5t4PD5oFRMREZGho7ZeRGTfGqMJIskUDptBuV9d3WXw9Ht2dxERkbHMNE2aY0kaI3Hy3A6KfbpQExEZCzq6uo8LeLDbNAxIBk+fg/S//OUvBAKBzsfpdJpXX32VwsLCjP06xrKJiIiMFolUmtpwjOpgjOpQjFgqDYDNgNOnluJx2LNcw4Ghtl5EpGeZXd21NroMrj4F6ePGjePJJ5/M2FZUVMSvfvWrjG2GYajhFhGREc80TVrjSWrag/KGSByzh/1cdhuOUZJNUVsvItK7+kicWCqN02ZQqq7uMsj6FKSvWLFiUH55LBZj6dKlLF++HI/HwyWXXMIll1zS475vvvkmP/3pT9m+fTsTJkzgO9/5DgsXLuwsnzdvHm1tbRnHvPfee/j9/kGpu4iIjC7JdJraUJzqUIyaUJRIMt3jfnYDSnxuyv1uxud4R83svoPV1ouIjAY72ru6j8/xYNOKFzLIsjom/Z577mHdunU89dRTVFVVccMNNzBu3DhOP/30jP3Wr1/PVVddxfXXX89JJ53EW2+9xTXXXMMf/vAHZsyYQU1NDW1tbbz22mt4PHu6n/h8vqF+SiIiMkKYpkkwnqI6FKUmFKM+EifdU7ocCDjtlAXclPs9FHtdGosoIjKGpNImu9q7uk/M1azuMviyFqSHw2Gee+45HnvsMWbNmsWsWbPYuHEjzz77bLcg/cUXX+S4447jwgsvBGDSpEmsWLGCv/zlL8yYMYPKykpKSkqYOHFiNp6KiIiMEMm0SX041p4tjxFKpHrcz2ZAsddNecDKmAdcmmdVRGSsqg5FSaRNvA4bxV5XtqsjY0DWrjrWr19PMplkzpw5ndvmzp3LI488Qjqdxtal++A555xDIpHodo6O7u2bNm1iypQpg19pEREZcULxJNUhKzCvC8d6zZb7HB3ZcjclPteo6cYuIiIHZnt7V/eJuV4MdXWXIZC1IL2uro6CggJcrj13o4qLi4nFYjQ3N2fMJDtt2rSMYzdu3Mi//vUvzjvvPAAqKyuJRCJccMEFbNmyhZkzZ3LjjTcqcBcRGYNSaZOGyJ6x5W3xnrPlBlDkdXVmy3NcDl18iYhIhlgyTXUwBsBB6uouQyRrQXokEskI0IHOx/F4vNfjGhsbufrqqzn66KM7J47bvHkzLS0t/Pd//zeBQIDHHnuMb3zjG7z00ksZS8mIiMjoFE6kqAnFqA5FqQ3FSZk9p8s9DhtlfisoL/W5cdqVLRcRkd7tbItgAnluB7luZ7arI2NE1oJ0t9vdLRjveNx18reu6uvrufjiizFNkwceeKCzS/wTTzxBIpHonMn9vvvu46STTuKNN97gC1/4wiA+CxERyYa0aWXLa0LW2uWt8WSv+xZ5nZT7PZT53eS5lS0XEZG+65jVXVl0GUpZC9LLyspoamoimUzicFjVqKurw+PxkJub223/mpqazonjnn766Yzu8C6XKyMr73a7mTBhAjU1NYP8LEREZKhEkla2vCYYoyYcI9nL4HK3vUu23O/GpWy5iIjsh2A8SWPUmhdLs7rLUMpakD5z5kwcDgcffPAB8+bNA2DVqlXMnj07Y9I4sGaC/+Y3v4nNZuPpp5+mpKSks8w0TU499VSuvPJKFi9e3Ln/tm3bmDp16tA9IRERGVCmadIYTVhjy4NRmmO9Z8sLPE7K/W7K/G4KPE5ly0VE5IB1TBhX5nfjcdizXBsZS7IWpHu9XhYtWsStt97Kj370I2pra3nyySdZtmwZYGXVc3Jy8Hg8PProo2zfvp1nnnmmswysbvE5OTmcfPLJPPjgg4wfP57CwkLuv/9+ysvLOemkk7L19EREZD/EkmlqwlZQXhOKEe8lW+6yGZS2Z8vL/G7cungSEZEBZJqmurpL1mR14dclS5Zw6623ctFFFxEIBLj66qs57bTTAJg/fz7Lli1j8eLFvPLKK0SjUc4999yM48855xzuuusuvve97+FwOPjud79LMBjkuOOO4xe/+AV2uy7aRESGM9M0aY4lqW4Pyju6FfYk3+2gzO+hPOCmUNlyEREZRI3RBKFECodhUBHoeb4skcFimGYvU+COYh2zwr/++utZromIyNgTT6WpbV+3vCYUI5ZK97ifw2ZQ6nNTHrCy5d5RnC1XuzTw9JqKyIF4r7qFrS1hDsr1Mq8iP9vVkVGir21TVjPpIiIy+pmmSWssSXV7YN4YidPb3eFcl8Oa9C3gpsjrwqZsuYiIDLFk2mRnm9XVfVKeurrL0FOQLiIiAy6RTlMbilMTilIdihFN9pwttxsGJT4X5QE35X4PPufozZaLiMjIsKstQjJt4nfaKfa6Pv0AkQGmIF1ERA6YaZq0xZPWuuWhGPXh3rPlAaed8oC1bnmx14Xdpmy5iIgMH9ta9mTRNf+JZIOCdBER2S/JtEldONYZmIcTqR73sxlQ4tszE3vApaZHRESGp2A8SX0kDsBBub4s10bGKl0piYhInwW7ZMvrwjF6WSENn9NOefsSacU+Nw5ly0VEZATY2hIGrLXRNQRLskVBuoiI9CqVNqmPxK3APBgl2Eu23ACKfa72wNxDwGVXF0ERERlR0qbJ9vau7pM1YZxkkYJ0ERHJEE60z8QejFEXjpPqZaVOj8PW3oXdQ6nfhdNmG+KaioiIDJyaUIxoKo3LbtPa6JJVCtJFRMa4tGnSEIlTHbTGl7fGkz3uZwBFXlfnEmm5Loey5dInsViMpUuXsnz5cjweD5dccgmXXHJJj/u++eab/PSnP2X79u1MmDCB73znO53rygLMmzePtra2jGPee+89/H7/oD4HERn9trV3dT8o16slQCWrFKSLiIxBkWSKmqA1trw2HCPZy+Byt93WGZSX+ty47MqWS//dc889rFu3jqeeeoqqqipuuOEGxo0bx+mnn56x3/r167nqqqu4/vrrOemkk3jrrbe45ppr+MMf/sCMGTOoqamhra2N1157DY9nT5bL59PkTiJyYKLJFLuDMUBd3SX7FKSLiIwBadOkKZKgun3d8pZYz9lygEKPk/KA1Y09361suRyYcDjMc889x2OPPcasWbOYNWsWGzdu5Nlnn+0WpL/44oscd9xxXHjhhQBMmjSJFStW8Je//IUZM2ZQWVlJSUkJEydOzMZTEZFRbFtLBBMo8DjJdTuzXR0Z4xSki4iMUtFkitr2mdhrQjESvWTLXXaDMp+b8oCHUp8bt0PZchk469evJ5lMMmfOnM5tc+fO5ZFHHiGdTmPrMpfBOeecQyKR6HaOju7tmzZtYsqUKYNfaREZU0zTZEuz1dV9ar565kj2KUgXERklTNOkKZroXCKtKdo92OmQ73F2LpFW4HEqWy6Dpq6ujoKCAlwuV+e24uJiYrEYzc3NFBYWdm6fNm1axrEbN27kX//6F+eddx4AlZWVRCIRLrjgArZs2cLMmTO58cYbFbiLyAGpDsUIJ1O4bAYTctTVXbJPQbqIyAgWT6Wpac+U14RixFLpHvdz2gxK24PyMr8bj0Nrv8rQiEQiGQE60Pk4Ho/3elxjYyNXX301Rx99dOfEcZs3b6alpYX//u//JhAI8Nhjj/GNb3yDl156iUAgMHhPQkRGtc3tWfRJeT7sNt20luxTkC4iMoKYpklLLNnehT1KQ6T3bHme20FZe1Be5HVpplrJCrfb3S0Y73jcdfK3rurr67n44osxTZMHHnigs0v8E088QSKR6JzJ/b777uOkk07ijTfe4Atf+MIgPgsRGa1C8SQ1IWvCuCnq6i7DhIJ0EZFhLpFKUxtuH1setNZw7YndMCj1uyj3eyjzu/E5lS2X7CsrK6OpqYlkMonDYV121NXV4fF4yM3N7bZ/TU1N58RxTz/9dEZ3eJfLlZGVd7vdTJgwgZqamkF+FiIyWm1pX3at1Oci4FJoJMOD3okiIsOMaZq0xa1seXUwRkMkTs9TvkGOy06Z30N5e7Zc3fRkuJk5cyYOh4MPPviAefPmAbBq1Spmz56dMWkcWDPBf/Ob38Rms/H0009TUlLSWWaaJqeeeipXXnklixcv7tx/27ZtTJ06deiekIiMGqm0ydaWCABT8/1Zro3IHgrSRUSGgWQ6TV04TnX72uWRZKrH/ewGlPisLuzlfjd+3fWXYc7r9bJo0SJuvfVWfvSjH1FbW8uTTz7JsmXLACurnpOTg8fj4dFHH2X79u0888wznWVgdYvPycnh5JNP5sEHH2T8+PEUFhZy//33U15ezkknnZS15yciI9euYJR4Ko3XYaM84M52dUQ66epORCRLgp3Z8ij1kTi9rJCG32m3gvKAmxKvW9lyGXGWLFnCrbfeykUXXUQgEODqq6/mtNNOA2D+/PksW7aMxYsX88orrxCNRjn33HMzjj/nnHO46667+N73vofD4eC73/0uwWCQ4447jl/84hfY7RraISL9t7kpBMDkPJ/mbZFhxTBNs7delKNWxyyxr7/+epZrIiJjSSptUh+JUx2MUh2KEUr0nC23GVDsdVEesLqxa4zc6Kd2aeDpNRWRfWmMxHlzewM2A06fWqpVT2RI9LVt0pWfiMggCiWSVAet5dHqwjFSvdwW9TpslPs9Vrbc58Kx11hdERERGTgb27PoE3K8CtBl2FGQLiIygNKmSX04Tk3IGlveFk/2uJ8BFHld1rrlATe5LgeGutqJiIgMunAiRVVbFIDpBZowToYfBekiIgconEhR075ueW0oTrKXUURuuzUxTbnfTanPjdOubLmIiMhQq2wKYQIlPhf5Hme2qyPSjYJ0EZF+SpsmjZEE1aEoNaEYLbGes+UARV4nZX43ZX4P+W5ly0VERLIpmU6ztX1tdGXRZbhSkC4i0gfRZKqzC3ttKEail6nYXXab1YW9/Z9L2XIREZFhY1tLhETaJOC0U+7XsmsyPClIFxHpgWmaNEUT1hJpoRjN0USv+xZ4nJ3rlhd4nMqWi4iIDEOmabKpfcK4aQV+tdcybClIFxFpF0ulqW0PymtCMeKpdI/7OW0Gpe1BeZnfrVlhRURERoCqYJRQIoXTZjApz5vt6oj0SkG6iIxZpmnSHEtSE4pSHYzRuI9seZ7b0Z4t91DodWLT3XcREZERwzRNNjQEASuLrqVOZThTkC4iY0oilaY2HKM6aGXMY71kyx1GZrbc61S2XEREZKSqDcdpjiWxGwbT8jVhnAxvCtJFZFQzTZPWeJLqoNWFvSESp+cp3yDH5aDc76Y84KbI61K2XEREZJToyKJPzvfidiiLLsObgnQRGXWS6TS1oXj72PIokWTP2XK7YVDic1nZ8oAbv1NfiSIiIqNNYyROfSSOARxcEMh2dUQ+la5IRWTEM02TYCJFddBat7w+EqeXFdIIOO2UBayx5cVeF3absuUiIiKj2YZGK4t+UJ4Xn4avyQigIF1ERqRU2qQuvGcm9lAi1eN+NgOKvVYX9nK/m4BLX3siIiJjRUsswe5gDIBDCpVFl5FBV6siMmKE4snOdcvrwrFes+U+R0e23E2Jz6UZXEVERMaoj+utLPr4HA85ulEvI4TeqSIybKXSJg2ReHtgHiUY7zlbbgDFPlf7EmluclwODE36JiIiMqY1RxNUBaMAzCxSFl1GDgXpIjKshBMpatqD8tpQnJTZc7rc47B1rlte6nPhtCtbLiIiInt8VN8GwIQcD7luZ5ZrI9J3CtJFJKvSppUtrwlZa5e3xpO97lvkdVLu91Dmd5PnVrZcREREetbY3hMPYGZxTpZrI9I/CtJFZMhFkla2vCYYoyYcI9nL4HK33dbZhb3U78albLmIiIj0wcft66IflOvVWHQZcfSOFZFBZ5omjdGENRN7MEpzrPdseYHHSbnfmo093+1UtlxERET6paOHngHM0Fh0GYEUpIvIoIgl09SEraC8JhQj3ku23GkzOrPlZX43bofWLxUREZH9Y5om6+paAZiU59XSqzIi6V0rIgPCNE2aYwmqg9a65Y3RRK/75rkdlPs9lPvdFHid2JQtFxERkQGwOxijIZLAbsCMIo1Fl5FJQbqI7Ld4Kk1t+7rlNaEYsVS6x/0cNoMyn5uygJUt9ypbLiIiIgMs3SWLPr0ggM+p6w0ZmRSki0ifmaZJSyzZvkRajMZInJ47sUOuy2F1Yw+4KfK6lC0XERGRQbWlOUwwkcJtt3FIoT/b1RHZbwrSRWSfEuk0taE4NaEo1aEY0WTP2XK7YVDqd3WuXa671yIiIjJUEqk069tndJ9RFMCpFWFkBFOQLiIZTNOkLb4nW14f7j1bHnDaKQ9YY8uLvC7sNmXLRUREZOhtaAwSS6UJOO1MyfdluzoiB0RBuoiQTJvUhWOdgXk4kepxP5sBJb49M7FrxlQRERHJtmA8yaamEACHl+RqiJ2MeLrCFhmjgl2y5XXhGL2skIbPabfWLfe7Kfa5cShbLiIiIsOEaZqsrm0lbUKZ301FwJ3tKokcMAXpImNEKm1SH4lbgXkwSrCXbLkBFPtc7YG5h4DLjqE70iIiIjIM7W5f+tVmwJGlubpmkVFBQbrIKBZOJKkOxagOxqgLx0mZPafLvQ4bZe3rlpf4XThtmmxFREREhrdk2mRNrbXk2sEFfg3Dk1FD72SRUSRtmjRE4lS331VujSd73M8AirwdM7G7yXU7dOdZRERERpQNjUHCyRReh41DiwLZro7IgFGQLjLCRZIpaoLW2PLacIxkL4PL3XZbZ1Be6nfj0tIkIiIiMkK1xBJ80r7k2hGluTjUC1BGEQXpIiNM2jRpiiSobl+3vCXWc7YcoNDjtALzgId8ZctFRERkFDBNk/eqWzCBioCbcQFPtqskMqAUpIuMANFkitr2mdhrQjESvWTLXXaDMp8VlJf63LgduqssIiIio8umphBN0QROm8FRZXlKQsiooyBdZBgyTZOmaKIzKG+KJnrdN9/toDxgTfpW4HGqoRIREZFRKxRP8lF9G2Ctie512LNcI5GBpyBdZJiIp9LUtAflNaEYsVS6x/2cNoPS9rHlZX43HjVOIiIiMgaYpsmq6hZSJpT4XEzO82a7SiKDQkG6SJaYpklLLNmeLY/SEOk9W57rclAesNYtL/Q6sSlbLiIiImPMxqYQ9ZE4dsNgjrq5yyimIF1kCCVSaWrD7WPLgzGivWTLHYZBid9Fud9Dmd+Nz6lsuYiIiIxdzdEEH9ZZ3dyPLM3VmugyqundLTKITNOkLW5ly6uDMRoicXqe8g1yXI7OLuzFPpey5SIiIiJAMm3yzu7mztncJ6mbu4xyCtJFBlgynaYuHKe6fe3ySDLV4352A0p87s61y/26IywiIiLSzbq6VtriSTx2G0eX5aubu4x6igpEDpBpmgQTKWpCMaqDUeojcXpZIQ2/096ZLS/xubHb1MiIiIiI9GZHa4TNzWEA5lbka3lZGRMUpIvsh1TapC5ijSuvDsUIJXrOltsMKPa6rGx5wEPAadfdXxEREZE+aI0leK+6BYBDC/2U+d1ZrpHI0FCQLtJHoUSS6qC1PFpdOEaql2y512GzJnwLuCn1uXDYdMdXREREpD8S6TRvVzWRMk1KfC4OK87JdpVEhoyCdJFepE2T+nDc6sYeitEWT/a4nwEUeV3tS6S5yXE5lC0XERER2U+mafJedQtt8RQeh41jKjQOXcYWBekiXUQSqc51y2tDcZJmz+lyt93WGZSX+tw47cqWi4iIiAyE9Q1BdrVFMYBjxxXgcWgpWhlbFKTLmJY2TRojCapDUWpCMVpiPWfLAYq8zvaZ2D3kuZUtFxERERloO1ojfNwQBOCosjyKvK4s10hk6ClIlzEnmkx1dmGvDcVI9DIVu8tu65yJvczvxqVsuYiIiMigaYjEWVXdDMDBBX6m5PuyWyGRLFGQLqOeaZo0RRNUtwfmzdFEr/sWeJyd65YXeJzKlouIiIgMgbZ4kn/vaiJtQkXAzeElmihOxi4F6TIqxVJpatuD8ppQjHgq3eN+TpvRmSkv87s15klERERkiIUTKd7a0UgslSbf7dBEcTLmKUiXUcE0TZpjSWpCUaqDMRr3kS3Pczs6x5YXep3Y1AiIiIiIZEUsmeafOxuIJFMEnHb+Y0Khlq+VMU9BuoxY8VSa2nCsc+3yWC/ZcofNoNTn7uzG7nUqWy4iIiKSbfFUmn/ubKQtnsLrsDF/YpF6NYqgIF1GENM0aY0nO4Pyhkicnqd8gxyXg3K/m/KAmyKvS9lyERERkWEklkrzzx0NNMeSuOw25k8owqdEigiQ5SA9FouxdOlSli9fjsfj4ZJLLuGSSy7pcd+PPvqIW265hU8++YTp06ezdOlSDj/88M7yF198kZ/97GfU1dUxf/58br/9dgoLCweusr9WkJcNSZuP2pwTqM5bQE3eQiKucT3uZ0+FKWl7i/KW1ylvXYEvvmuIayrSm44LDgcYdrC5wHCB3QaJVrB5IGcmeEsgvB3CVZAIAknAALsbnCUQmAzxWvCOh6J54D8IGt+19nUXQ6wOEiGI1YIrH4o+A+Wfg6b3rV9ffCzkHwlbfw27XrK2jTsDDBuEd0A6CakQJMLgLYOiY6z/C+ZY++zNTFvnjtaDp7j3/fp7TNd9XPnQusGqn38STDoPbLq3LCIy0sWSKd7a2UhLLInbbmP+xEJy3Pp+F+mQ1U/DPffcw7p163jqqaeoqqrihhtuYNy4cZx++ukZ+4XDYS677DK+8IUvcNddd/Gb3/yGb33rW7z66qv4fD7WrFnDTTfdxNKlS5kxYwZ33nknS5Ys4dFHHx2YiipAHzImEHRPpzrvFGryFlIfOJa0zd3jvoFoJWUtKyhvWUFx8N/YzdjQVlakT1J7/jeBVNh6mGzfnA5D0z+hqZfDkxFINkNko/W4ZTVUv/zpv3b3y7Du1vYHNisYNlPQtf/Jzj/s4wQGOPOsYP2w70P5gj1F1Svgo7usADodt2485B7afb+u+nJM131ijdZNA0yrLoYNVl0Dh90Ih33305+/iIgMS5Fkin/uaKQ1bgXoJ0wsJNftzHa1RIaVrAXp4XCY5557jscee4xZs2Yxa9YsNm7cyLPPPtstSH/55Zdxu91cf/31GIbBTTfdxN///nf++te/snjxYn71q19xxhlnsGjRIsAK/k855RR27NjBxIkTD6yiCtAHXcrwUJdzPNV5C6nJW0DIPbnH/WzpKMVt/6K8ZQXlrSsIxLYMbUVFRqy0laHuFxMSzVD/L3jnW3DMo1YwXb3CehxvA3eRlelPxaB5TeZ+XfXlGNizDyakgpl1wYB4E6xeYm1SoC4iMuK0xhL8c2cjkWQaj8PGCROLyHEpgy6yt6x9KtavX08ymWTOnDmd2+bOncsjjzxCOp3G1mVWx9WrVzN37tzOpRgMw+Doo4/mgw8+YPHixaxevZpLL720c/+KigrGjRvH6tWrDyxIV4A+aEKug6jOW0h13inU5XyWtM3b436+2A7KWl6nvPUNStrewpGODHFNRca4ZNgKnD+6C0pPtP6Pt4FvPHTM9eDwgn08RHZZ5WUn7+nGbqY//ZgPl4GBtY+nAlrWdqmAjc6bDDYPpKPw0Y9gxjXq+i4iMoLUhWP8e1cTibRJwGnnsxMK8StAF+lR1j4ZdXV1FBQU4HK5OrcVFxcTi8Vobm7OGE9eV1fH9OnTM44vKipi40ar+2dtbS2lpaXdyqurqwe83rWJAmoTmWPd8xxBJrpqiKadbIoe1O2Yw32VAFRGxxNJezLKJrhqyHcEaUjmsjteklHmt0eY4q4iZdr4ODKl23kP9W7FaaTYFiunLeXPKCtzNlDibKYl6WdHvDyjzGOLMd2zE4B1kalgZt6MmO7ZgccWZ2e8hOZkbkZZsbOZcmcDwZSXrbHM8eEOI8kM7zYA1kcmkTT3vL1ShpPcwvG0Fc3nY+cp1KQnWAUJoNHE54lRGHCTSMSIV71LUfAdCkPv4I9txzBMKrybAdgUnUA0ndn9faKrmjxHiLpEPjWJooyyHHuISe5qEqadDZHJ3V7Dmd4t2I00W2LjCKUybxRUuOoocrTSnAywM16WUea1RZnmsca9rwtP63be6Z7teGwJdsTLaEkGMspKnY2UOptoS3nZttdr6LIlOMSzHYCPI5NJmZkTqExx78Jvj7I7XkRDMj+jrMDRynhXHZG0m8rohIwyw0gzy2v1PNgYnUgs7coon+iuJs8eojaRT+1er2GuPchB7hriaQefRCd1e66HeTdjM0w2x8YR3us1HOeqo9DRSmMyl6q93t8+e4Sp7irSpsFHkandznuIZxsuW5LtsTJaU3u/hg2UOptpSfnZEct8f7ttcQ727ADgw8gUTDNzzPM0z068thi74iU07fX+LnI0U+FqIJTysCU2PqPMbqSY6d0KwCfRg4inM7vmTXJXkWOPjMLviMmQLoVoGN59DnaHmR4ow2MY7Izm0Zzw7TkwVUhxfTXlTe8T9B/J1voQtHwMu8NgPwJHyMGMQC0A64OlJE07pAqhqhWAyTnjCCSbqE7kU5/Ix4rcLfmOViZ4Womafja1FFl1GX/mntdwfB4Am2rbiCYyew1MLPCR53NS1xajpjWaUZbjcTCpyE8ilWZDdVu313BmRS52m8GW+hChWDKjrCLPQ1Gg5+E4IiKyx7aWMO/XtJA2ocjr5LjxhbjtWmZNpDdZC9IjkUhGgA50Po7H433at2O/aDS6z/KB9GzDGdxfe37GtkX5b/Czg35MdaKYszfd3+2YrUecDcB1O6/l/fCMjLKfTryPcwre5KXmE7i56oqMshMC7/HM1JsJp909nnfVYedT5Gjl9qpLea3t2IyyH1Q8zjdLXuCt4FF8e/uSjLJZnk28dMh3AFi86cfEzcxgY/khV3KIZzsP1pzH75o+n1F2Rclz3FDxFGsj0/nq5mUZZeXOev498xsAfGPrUqoTxRnlV55+MNPLcnjl3V2sWLs+o2zhxGZum/IsLTVbOHPDfcCJ7f/AZST4ZPY5AFyz/To+jGbesPn5Qcs4K/+f/Kn5ZO7Y/c2Mss/lvM3jU26nNeXv8TVcO+tccuwRbt51Of8IHp1Rdtu4h7mw+CXeaJvHtTuuyyib41vP/0y3tvV03jcPvZTJ7t38uPrrvNB8SkbZNaW/5tryX/NeeCYXbbkto2ySq4q/zbgMgK9tvpPGVF5G+R+nXcdc/3oerz+HJ+oXZZRdUPQit49/hMrohG51CtjCrDv8ywBcue37bIxlBtuPTbqNU/NW8lzTqdxbfVFG2Zl5b/F/Jt1FQzKvx+e64fBFuI0kS3Zezduh2Rlld41/gPOKlrO85Ti+v+t/Z5Qd61/L76YtIWHaezzvv2ZcRIWrgbuqL+bllvkZZd8rf4pvlz7HyuAsLt12c0bZwe5tvHrotwH4SuXdBNO+jPIXp1/D4b5KHqn7Is80nJ1R9l/FL/DDcY+zPjqZL1bel1FWaG/hvVlfA+DSrT9gWzzzBstTU27mpJz3Rvd3xFqAJSyf9yCHuOt5cOtJ/K56bsaxV1S8zA3RetY2tfDVx/7dvtU6f7mrhX//x08A+Maar1Mdz3x//+bIJzjeXc1T9WfzcN25GWVfKXiFuyf9gu3xcs7e+FPYCPAWAC67jU/uPAOAa377AR+2B/0dfn7+0Zx1RAV/+mAXd7z0cUbZ52aW8vhFx9AaSXD2g291ew3X3noaOR4nN/9pHf/YWJ9Rdtt/zuLC4yd3O0ZERCxp02RNbSubm635WMYFPBxTkY/dpt6qIvtimKbZ2ypWg+ovf/kLd9xxB//85z87t1VWVnLmmWfy9ttvk5+f37n9sssu45BDDuG66/YESvfeey+VlZU88sgjHHXUUTzwwAOceOKJneXnnnsuZ555JhdffHG3371w4UIAXn/99X1Xsofu7qMvSzZwmXSbASUlJdTkLeRd82RanZl1Ls5z43HaaQlGsDWuoSj0DkXBdwhEN1PgaGWCq45o2sWm6F5DFAyTw5VJB5RJ76BMumXIviPcpdbM9Ad/Gzb+nOmBNjxuZw+Z9CjFthrKP/f/ZWbS378O7D4cjp4y6VFrlntgck6CgNFEdXNb75n0lINN0QqYvXRUZdL73C5Jn+k1FcmuaDLF21VNNEQSAMwoCjCzKNA5fFVkLOpr25S1THpZWRlNTU0kk0kcDqsadXV1eDwecnNzu+1bX5+Zwaivr+/s4t5beUlJ5gXtQCh1NlHq7HkaZo8t0Xmx3ZOOoK4nRY5WihytPZbZjfQ+zzvJ3Xu3/jxHiDxH78d2BL89meCqY4KrrseygD3C4b5KIo5SavJOoSZvATW5J7Hebv3tctv/dXAn6ihrfZHyltcpbf07rlSLVWADulzje2zxfT7XjsChJyXOZkqczT2WOY3UPs87xV3Va1m+I0i+I9hr+b7OO9FVw0RXTY9lOe2vYW86AsKeVLgaqHA19FjmtcX2ed6OALYnpc5mSnt5DV225D7PO3Ufr2Gho5XCXt7fNsPc53kPctcAPb+GefYQefs4tuPGRE/Gu+oY38v722+P7rNOHTdSejL6viO2gjsEBUfAvHMh+P9B8yYwxzPB08IET/tn2TSt8eX5R0DBHAKGzQqcx30Gqn3WJHHe8XQE3jMCtXuOKZltbW5eC+4Kyp07KHd2vL/bx6RjA9x4jBCH5zVYdelhTPr00pxen0tJjpuSnJ6Daqfd1hno92RKsb/XMhERyVQdjLKquoVYKo3DZnBMRT4VAc+nHygiQBaD9JkzZ+JwOPjggw+YN28eAKtWrWL27NkZk8YBHHnkkTz22GOYpolhGJimyXvvvcfll1/eWb5q1SoWL14MwO7du9m9ezdHHnnkgVXyfFOTx+3FxEaj/2hr3fLcBTT7j+hlxzQF4Q+sdctbXic/vBaDrHTaEJED4fCBK9daKs3msP5/51tWcO0qBLvHyobHG8HZvl/Xtc8N26cfM6u9u/0734LYbmsG+Fht+wnSe86TjoLhsJZh06RxIiLDTiptsq6ulcr27u25LgfHji/QDO4i/ZS1T4zX62XRokXceuut/OhHP6K2tpYnn3ySZcuscc51dXXk5OTg8Xg4/fTT+fGPf8ydd97Jeeedx29/+1sikQhnnGGNQfzqV7/KBRdcwFFHHcXs2bO58847Ofnkkw98+TVQoA7E7IXU5J1ETe5CavJOJu4o7HE/Z7KJstY3KW95nbLWN3EnG4e4piLSs17WSd+nXtZJL19gLZnWsZ55vMla8zz/iN7XSe/rMV33sQcy10nHBFeB1kkXERmmGiNx3qtuoTVuDQ2alu/j8JJcjT8X2Q9Zva21ZMkSbr31Vi666CICgQBXX301p512GgDz589n2bJlLF68mEAgwKOPPsott9zC73//ew499FB+8Ytf4PNZ/aTnzJnDbbfdxgMPPEBLSwuf/exnuf322weuomMsUDcxaPbNpjp3ATV5C2j0H52ZGesiP7SGstYVlLesoCD0PjZSQ1xbkeGuY14BhzWu2+YCwwV2mzUW2+aBnJngLYHwdghXQSIIJAHDWlPcWQKByRCvtbqMF80D/0HQ+K61r7sYYnWQCFkZaFc+FH0Gyj8HTe9bv774WMg/Erb+Gna9ZG0bd4b12Q7vgHTSCooTYfCWWcG5twwK5nT//JcvsJZZa3ofovXgKe55v/4es/c+rnwrYA/vAP8kmHSeMugiIsNMIpXmw/q2zsnh3HYbcyvyKPere7vI/sraxHHZpMlkuoun0tSGYlSHYtSEYsRS6R73c9gMynxuygJuyvxuvA57j/uJiEjfqV0aeHpNRQaXaZrsCkZZU9tKNGldNx6U62V2SS5uh5ZXE+nJsJ84TrLLNE1aYklq2gPzxki8106wuS4H5e1BeZHXhU2zcoqIiIiMWY2ROGvrWjtnbvc77cwpy6PUPzArXoiMdQrSx5BEKk1tOE5NKEp1KNZ513NvdsOg1O+izO+m3O/B51S2XERERGSsC8aTfFTfxs42azlLu2FwcKGfQwsDGnsuMoAUpI9ipmnSFt+TLa8P954tD7jslPs9lPndFHtd+qIVEREREQBaYwk2NATZ0R6cg9W1fVZxDl4lc0QGnIL0USaZNqkLxzoD83Ci54ncbAaU+NyU+61u7AEtjSEiIiIiXTRG4mxsCrGrS3Be7ndzWHEO+R5nFmsmMropMhsFgl2y5XXhGOle0uU+p51yvxWYF/vcOJQtFxEREZEu0qbJzrYolU0hmqKJzu0VATczinIoUHAuMugUpI9AqbRJfSRuBebBKMFesuUGUOxzWYF5wEPAacfQpG8iIiIispeWaIJtrRF2tEY6V/mxGTAhx8v0Ar8y5yJDSEH6CBFOJKkOxagOxqgLx0n1snKe12GjzO+h3O+mxO/CadMSGCIiIiLSXTiRoioYZVtLmJZYsnO7x2Fjar6PyXk+PFpuV2TIKUgfptKmSUMkTnXQGl/eGk/2uJ8BFHk7ZmJ3k+t2KFsuIiIiIj1qiyepaotSFYxmdGe3GVDu9zApz0uZ360ld0WySEH6MBJJptq7sMeoDcdI9jK43G23WRO+BdyU+ty47MqWi4iIiEh3iVSaukic2pB1fRmMZw6TLPQ4mZjrZUKuF7euKUWGBQXpWZQ2TZoiCarb1y3v2s1ob4Uep5UtD3jIV7ZcRERERHoQS6VpjMRpjCSoC8doiiYyluA1gBKfi3E5HsYFPOrOLjIMKUgfYtH2bHnHv0Qv2XKX3aDM56Ys4KHM58bt0J1NEREREdkjmU7TGkvSHEvQGEnQGIn3OKFwwGmnxG/1wCzxudQLU2SYU5A+yEzTpCmaoLo9KO869mdv+W4nZQE3FX43BR6nsuUiIiIiQiptEkwkCcaTtMaStMSStMQShHpZ4SfgslPocbXPW+TC59Qlv8hIok/sIIin0hnZ8o5lLPbmtBmUtk/4VuZ3q7uRiIiMOrFYjKVLl7J8+XI8Hg+XXHIJl1xySY/7fvTRR9xyyy188sknTJ8+naVLl3L44Yd3lr/44ov87Gc/o66ujvnz53P77bdTWFg4cJX9tW6OS3aYGEQdJURc44i4xhF2TSTomULQPYWgZyoR1/hej3UnasgLf0xB+H2KgqsoCL2PO9U0hLWXTAbgAkwwbGAmABu4y8A3DmI1kAhDog2It+9vA8MDrjwgAY5cKD0JcqZCw9uQCIG72No1UgPRWjAMyJsNhUdBosX6XaUnQ9F/wKaHYOefrOqM/19QMBtq34LgFojVgd1n1aX4P8A/EUpOAFsPcUg6BXX/gMhu8Fb0vt/+HNexT3gXRGsg1rDnOZSd3LffM4opSB8ApmnSEktSHYpSE4rREOk9W57rclAecFPu91DodWrmTBERGdXuuece1q1bx1NPPUVVVRU33HAD48aN4/TTT8/YLxwOc9lll/GFL3yBu+66i9/85jd861vf4tVXX8Xn87FmzRpuuukmli5dyowZM7jzzjtZsmQJjz766MBUVAG6DDATSNr8xB1FxBxFxJzW/9bjYiKucisod1YQcZVjGvteh9yZbMEf20Ju9BPywh+RF/mY3MhHeJINQ/OEpI9MILbnRwBSENtp/etRygrmY23Ww1gNbNn46b+qdR3s+M2exx/e0X2f+n/2fvymR6z/fRNg7v0wcfGesh3Pw6prINylzj3tt7e+HNfTPl2fg6sIjv3Fvn/PKKcgfT8lUmlqwzGrG3swRrSXbLndMCj1uyj3eyjzu/E5x/ZdIRERGTvC4TDPPfccjz32GLNmzWLWrFls3LiRZ599tluQ/vLLL+N2u7n++usxDIObbrqJv//97/z1r39l8eLF/OpXv+KMM85g0aJFgBX8n3LKKezYsYOJEyceWEUVoEsXJgYpw0PK5m3/t+fnhD1Awp5Lwp5Dsv3/RJf/k+3/xx0FxByFpG2efvziFN5EDd54Fd54FYHYZgLRLQRiWwjENuNKNqJ3qgyK8E74x5fghD9YgfGO563H7DV3VnhX5n5768tx0PM+XcUb4B9fhBP+OGYDdQXp/RBJptjRGqE6GKMhEu/1rZXjslPm91Dud1PkdWG36StVRETGnvXr15NMJpkzZ07ntrlz5/LII4+QTqex2fZMXrV69Wrmzp3bOR+LYRgcffTRfPDBByxevJjVq1dz6aWXdu5fUVHBuHHjWL169YEF6YMcoGdeKxgZ/5t7PcbYe/s+jjHoeXtPxxhGz9t7OsZgr7J9HNPlvCb29t9jwzTsmNgwDRsmNjBsneUm9vbHe8pNw24d19O2jGOsc6QNJ6bhIG042392dv7c+djmJG04SBuu9n1dnY/ThgPTcHYJvj0kuwTkaZuXgWRPR3AlGnAn9/xzJRvwxmvwJqrag/LdeBI12Oh5jLnIkFj1Hag428py9xjpmIBh7Tf+PzO7pKdTn37cu9d0edyX+lzT/feMEQrS+yiZTrNia32P48vtBpT4rHHl5X43fpdeVhERkbq6OgoKCnC5XJ3biouLicViNDc3Z4wnr6urY/r06RnHFxUVsXGj1eWztraW0tLSbuXV1dUDWufduQtZUfZjGmNOugamPpedolw3iWSa6pZYlyOsfSYU+a16tsaJJzKvFQpyXPjdDoLRBM3BzCFxbqeNkjwP6bRJVWOkW30qCr3YbQb1rTGie61vned3kuN1Eo4laWyLZ5Q5HQZl+VawubMh3O2auDTfg8thozEYIxzNPG/A6yDf7yKaSFGf8VzBZjMYV2idt6oxQnqvVWqK89x4nHaaQ3GCkcylZX0eO4UBN/FkmtrmaGaFDJhQ5AOgpjlCIpl53sIcFz63g7ZIgpZQ5mvocdkpznWTSpvs7uE1HFfgxWYzqGuJEtvrb5MfcBLwOAnFkjQ1x7FeqDAALqeN8hwryN5V34Y9HcWRjuBIBbGnw0z2NeGnlfpggmgshiMdwpEK40gHKbftZoJtK/FYmF2Rgozf6bIlOMSzHYCPI5NpNu2AF5gMwBT3Lvz2KLvjRTQk8zOOLXC0Mt5VRyTtpjI6IfMlNNLM8m4BYGN0IrG0K6N8oruaPHuI2kQ+tYmijLJce5CD3DXE0w4+iU7q9hoe5t2MzTDZHBtHOJV5E2Ocq45CRyuNyVyq4iUZZT57hKnuKtKmwUeRqd3Oe4hnGy5bku2xMlpTgYyyUmcDpc5mWlJ+dsTKM8rctjgHe3YA8GFkCqaZOVv9NM9OvLYYu+IlNCVzM8qKHM1UuBoIpTxsiWWO9bcbKWZ6twLwSfQg4unMIQiT3FXk2CPUJgqoTWTOh5HnCDLRVUM07WRT9KBuz/VwXyUAldHxRNKZPSwmuGrIdwRpSOaye6/X0G+PMMVdRcq08XFkSrfzHurditNIsS1WTlvKn1FW5mygxNlMS9LPjnjma+ixxZjusbqbr4tMBdOw3vpvPwH1bqZ7XHhscXbGS2je6zUsTjRTXvcPgvnz2VofsjY2vAv1bhzGJGZ4twGwPjKJpNklLgrDZHcVATtUJ4qoT+RnnDff0coEVx3RtItN0YlWfda9CUXzrNdwfB4Am2rbiO71WZ5Y4CPP56SuLUZNa+b3S47HwaQiP4lUmg3Vbd1ew5kVudhtBlvqQ4T2WhK7Is9DUcDd7ZjBpmiyj1ImJLs0RH6nvXPCtxKfW9lyERGRvUQikYwAHeh8HI/H+7Rvx37RaHSf5QMl5izmb5VJln+QOVby6KkFfP2kKTRFovzkz5u6HfeTi48G4Df/2Ma2ulBG2fknTmLetCI+2NLM8//ekVF26LgcvvX5g4kn0/zkz+u7nfe2r84m4HHyp5U7+XBHS0bZ/zpmPCcfXsYnVW08/eaWjLLxhV6++58zAbj/xQ2k9gqmr180k/ICL69+UM3bGzPHNC+YXcbZ88azsz7M//lr5rjYPJ+TW79snfexVzfREs4MmK8+bQIHl3v414d1vPphZn3/Y5qHC4/NoaU5xk9ebs0oc9jg0XNdGGaan72RZHtz5utw1bExjp2Q5N1P7Px6bWaAM68syI3HbKctmuZ7rx3O3v7nlL+SY4vw/feP593GzEDluqmvclbZ/+MvtTP4SeVXMsrm+NbzP9OvA2Dymhe7lHgBL28e+n0mu3fzne3f5YXmUzKOvab011xb/hbvBo/moi23ZZRNclXxtxmXAfC1zXfSmMrLKP/jtOuY61/P4/Xn8ET9ooyyC4pe5Pbxj1AZncDZm+7PKAvYwqw7/MsAXLnt+2yMZQbbj026jVPzVvJc06ncW31RRtmZeW/xfybdRUMyr9t5ATYcvgi3kWTJzqt5OzQ7o+yu8Q9wXtFylrccx/d3/e+MsmP9a/ndtCUkTHuP5/3XjIuocDVwV/XFvNwyP6Pse+VP8e3S51gZnMWl227OKDvYvY1XD/02AF+pvJtg2pdR/uL0azjcV8kjdV/kmYazM8r+q/gFfjjucdZHJ/PFyvsyygrtLbw362sAXLr1B2yLj8sof2rKzZyU8x7PNpzB/bXnZ5Qtyn+Dnx30Y6oTxT0+161HWPW4bue1vB+ekVH204n3cU7Bm7zUfAI3V12RUXZC4D2emXoz4bS7x/OuOux8ihyt3F51Ka+1HZtR9oOKx/lmyQu8FTyKb29fklE2y7OJlw75DgCLN/2YuNl+Q2ITwP0sP+RKDvFs58Ga8/hd0+czjr2i5DluiOxmbbCFrz727y4l91PurOffM78BwDe2LqU6UZxx7G+mLuH4wFqeqj+bh+vOzSj7SsEr3D3xQbbHy/c8101R4C1cdhuf3HkGANf89gM+rMr8Dvn5+Udz1hEV/OmDXdzx0scZZZ+bWcrjFx1DayTB2Q++1e01XHvraeR4nNz8p3X8Y2N9Rtlt/zmLC4+f3O2YwWaYptnH/gajx8KFCwF4/fXX+3VcUzRBayxBoddFwGnXEmkiIjIg9rddGu7+8pe/cMcdd/DPf+6ZuKiyspIzzzyTt99+m/z8/M7tl112GYcccgjXXXdd57Z7772XyspKHnnkEY466igeeOABTjzxxM7yc889lzPPPJOLL7642+/u82vaQ3f3HeYUapJl7Y+sy6Q8e4gJ7npiaTubou0X7u2XUAYwy7cNMNkcLSfSnsE02o8d76wn3xGiMZHD7kRB5zEAfluYyZ4aUqaVdTI6L8us/w/x7sBpJNkWKyPYmcG0ysodjRQ7W2hN+tgRL6VrutzKku3CwOTD8BT2XO1ZPxzs2dGeJSvukiWzykqczZQ7GwimvGyNZQYpDiPZe5aMjixZpG9Zsq4Mk8O9mwHYFJ1ANJ2ZuZroqibPEaIukU/NXlngHHuISe5qEqadDZHJ7G2mdwt2I82W2DhCe2WBK1x1FDlaaU4G2Bkvyyjz2qJM8+wCYF14WrfzTvdsx2NLsCNeRkty7yxwI6XOJtpSXrbt9RrunUlPmZldeZVJtyiTbhnSTDrAzO/Cxz9meud3RA+ZdGcz5af/oXsmfeW3Bv474jOPjqpMel/bJmXS+6HA46TAs++ZN0VERMRSVlZGU1MTyWQSh8O65Kirq8Pj8ZCbm9tt3/r6zAxGfX19Zxf33spLSjIvaAfCRGMLE51buhckrBzqPOeu7mXt13WHOeq7lwGkoMLWSIV7W49lAHPca7qXmda/6c7N0NMliAmF9giF3h5m+G4PzGd7P+m5TsBEVy0TXbU9lgXskc7AoicdF+I9KXc2UO7sedZxjy2+z/N2BA49KXE2U+Js7rHMaaT2ed4p7qpey/IdQfIdwV7L93Xeia4aJrpqeizL+ZTXsCMg7EmFq4EKV8+vodcW2+d5OwLYnpQ6mynt5TV02ZL7PO/UfbyGhY5WCh2tPZbZDHOf5z3IXQP0/Brm2UPk7ePYjhsTPRnvqmO8q67HMr89us86ddxI6Umps4lSZ8/L3HlsiX2et+PGT0+KHK0U9fIa2o30Ps87yd370J88R4g8R+/HWjfI/v/27j2o6jr/4/gLJBGWlFJi05rULckEzwG8lTAmSbkIjbZtI+St2o2dcXObbdXxtlnYZWLXSnNXWqJ20l2tbdJs1y2bplE3NQaSVGIVL7tqCPgzsRCQy/v3x9FjR26nlcsRno8ZZjzfz/dLn++7j9+Xb/ie8/VzfQr76Eek8mel83fJ3NCzXDd41PD8fmHxCvHv4W6cdf2d0qEa14fEned5jfCTggZI6itVHfPuGhF8gxR5Z6P3pN983dXNnkvY1YEKu7rppvqqHv4X59uEQf1+0OxYR/NvfRcAAIDvb+jQoQoICNDu3bvd2/Ly8hQVFeXxoXGS5HA49Pnnn+vCDX5mpvz8fDkcDvd4Xl6ee/+SkhKVlJS4x/9nad3uhkIAaFrsS1JAT9fj0iRJl95p5Hdxv0s/zM2/R+vHjXjZ9eXtcwpiX+6WHxon0aQDAIB2EhQUpMmTJ2vp0qX64osv9NFHHyknJ0czZsyQ5PqtenW167bEiRMn6syZM3rmmWdUXFysZ555RlVVVfrxj13vQUxNTdXGjRv19ttvq6ioSPPmzdOdd955+Y9fk2jUAXRvwTd6Plbtxvtcr4MHXLLfDc0/fs3b49z73ND095CkwL7d+vFrEre7AwCAdrRgwQItXbpUM2fOVEhIiB577DHdfffdkqS4uDg999xzuu+++xQSEqKsrCw9+eSTeuuttxQREaFXX31VwcGuD4SKjo7W008/rRUrVqiiokJjx45VRkZG2000zXheOoA24CeppyST/Pwlq5XkLwWGS8H9pZpSqfasVPuNpHPn9/eX/HpJPftIqpUCekvXjZOuHiz93y6ptlIK7OfatapUqi5zPQKxT5R0rVOqrXD9t667U+p7h1T8inRso2s6A+6VromSyrZL3x6WasqlHsGuufS7Q/rBjVJYfOPfWN94n+vxZ+XbpKoSKej6pve7lDfHfXefs8el6lKp5v8unkP4nd32N+gX8MFxAAB0MnKp7VFTAICv8TabuN0dAAAAAAAfQZMOAAAAAICPoEkHAAAAAMBH0KQDAAAAAOAjaNIBAAAAAPARNOkAAAAAAPgImnQAAAAAAHwETToAAAAAAD6CJh0AAAAAAB9Bkw4AAAAAgI8I6OwJdIaysjLV19frrrvu6uypAACgkpIS9ejRo7On0aWQ9QAAX+Nt3nfL36QHBgYqIKBb/nwCAOCDAgICFBgY2NnT6FLIegCAr/E27/3MzDpgPgAAAAAAoBXd8jfpAAAAAAD4Ipp0AAAAAAB8BE06AAAAAAA+gibdSzU1NVq4cKFGjBihuLg45eTkdPaUOtyWLVsUERHh8TVnzhxJUmFhoX7605/K4XDoJz/5ifbu3etx7Pvvv68JEybI4XBo9uzZOnXqVGecQrs6d+6ckpOTtWvXLve2o0ePatasWXI6nUpKStL27ds9jvn000+VnJwsh8OhGTNm6OjRox7jb7zxhuLj4xUdHa2FCxeqqqqqQ86lvTRVo2XLljVaV2vWrHGPt7R2zEy/+93vNGbMGI0aNUovvPCCGhoaOvSc2kppaanmzJmjUaNGKT4+Xs8995xqamoksY4uaKlGrCO0BbLehbxvHlnfOrK+eWS9d8h7SQavPP3005aSkmJ79+61Dz/80KKjo23z5s2dPa0O9Yc//MHS09OtrKzM/VVRUWGVlZU2duxYe/755624uNgyMjLsjjvusMrKSjMzKygosOHDh9u7775rX375pU2bNs0effTRTj6btlVdXW2zZ8+2IUOG2M6dO83MrKGhwVJSUuyJJ56w4uJiW716tTkcDjt+/LiZmR0/ftycTqe99tprtn//fvvVr35lycnJ1tDQYGZm//znPy02NtY+/vhjKygosKSkJHvqqac67RwvV1M1MjObNWuWZWVleayrs2fPmlnra+e1116zcePGWW5uru3YscPi4uIsOzu7w8/tcjU0NNgDDzxgP/vZz2z//v2Wm5triYmJ9vzzz7OOzmupRmasI7QNst6FvG8aWd86sr55ZL13yHsXmnQvVFZWWlRUlMfFZtWqVTZt2rROnFXHe+KJJ+z3v/99o+1vv/22JSQkuC8UDQ0NlpiYaO+8846Zmc2dO9fmz5/v3v+rr76yiIgI++9//9sxE29nBw4csHvvvddSUlI8QunTTz81p9Pp/seLmdnMmTNtxYoVZmb20ksveayhs2fPWnR0tPv4tLQ0975mZrm5uTZ8+HD3hehK0lyNzMzi4+Nt27ZtTR7X2toZN26ce52ZmW3YsMHGjx/fTmfRfoqLi23IkCFWXl7u3rZp0yaLi4tjHZ3XUo3MWEe4fGT9ReR9Y2R968j6lpH13iHvXbjd3QtFRUWqq6tTdHS0e1tsbKwKCgp89xaJdnDw4EENHDiw0faCggLFxsbKz89PkuTn56eYmBjt3r3bPT5ixAj3/tdff7369++vgoKCjph2u/vss880evRorV+/3mN7QUGBbrvtNgUHB7u3xcbGNluXoKAgDRs2TLt371Z9fb327NnjMe50OlVbW6uioqL2PaF20FyNvv32W5WWlja5rqSW105paalKSko0cuRI93hsbKyOHz+usrKydjmP9hIWFqbs7Gz169fPY/u3337LOjqvpRqxjtAWyPqLyPvGyPrWkfUtI+u9Q967BHT2BK4E5eXluuaaa9SzZ0/3tn79+qmmpkanT5/Wtdde24mz6xhmpsOHD2v79u3KyspSfX29Jk6cqDlz5qi8vFw333yzx/59+/bVgQMHJEllZWW67rrrGo2fOHGiw+bfntLS0prcXl5e3uJ5tzR+5swZ1dTUeIwHBAQoNDT0iqxbczU6ePCg/Pz8tHr1am3dulWhoaF66KGHNGXKFEktr53y8nJJ8hi/cEE/ceJEo+N8We/evRUfH+9+3dDQoDVr1mjMmDGso/NaqhHrCG2BrHch75tG1reOrG8ZWe8d8t6FJt0LVVVVHqEtyf363LlznTGlDvfVV1+56/DSSy/p2LFjWrZsmaqrq5utz4XaVFdXtzjeVbVWl5bGq6ur3a+bO74rOHTokPz8/DR48GBNmzZNubm5WrJkiUJCQpSYmNji2mmqRl3l72VmZqYKCwv1t7/9TW+88QbrqAnfrdG+fftYR7hsZL0Lef/9kPWtI+ubRtZ7p7vmPU26FwIDAxv9z7vwulevXp0xpQ43YMAA7dq1S3369JGfn5+GDh2qhoYGzZ07V6NGjWqyPhdq01z9goKCOmz+nSEwMFCnT5/22OZNXXr37q3AwED360vHu1LdJk+erPHjxys0NFSSdOutt+rIkSP661//qsTExBbXzncvrJfW60quUWZmpv785z/rxRdf1JAhQ1hHTbi0RrfccgvrCJeNrHch778frtGtI+sbI+u9053znvekeyE8PFxff/216urq3NvKy8vVq1cv9e7duxNn1rFCQ0Pd70OTpB/96EeqqalRWFiYTp486bHvyZMn3beNhIeHNzkeFhbW/pPuRM2dtzd1CQ0NVWBgoMd4XV2dTp8+3aXq5ufn577QXjB48GCVlpZKarlG4eHhkuS+fem7f75Sa5SRkaHXX39dmZmZuueeeySxji7VVI1YR2gLZP1F5L33uEa3jmu0J7LeO90972nSvTB06FAFBAS4P7xBkvLy8hQVFSV//+5Rwm3btmn06NEez1z88ssvFRoaqtjYWH3++ecyM0mu97Pl5+fL4XBIkhwOh/Ly8tzHlZSUqKSkxD3eVTkcDu3bt899e43kWjfN1aWqqkqFhYVyOBzy9/dXVFSUx/ju3bsVEBCgW2+9teNOop29/PLLmjVrlse2oqIiDR48WFLLayc8PFz9+/f3GM/Ly1P//v197n1F3njllVe0bt06LV++XJMmTXJvZx1d1FyNWEdoC2S9C3n//XCNbh3X6IvIeu+Q9+I56d5asmSJTZo0yQoKCmzLli0WExNjH3zwQWdPq8N88803Fh8fb7/+9a/t4MGD9sknn1hcXJy9+uqr9s0339iYMWMsIyPDDhw4YBkZGTZ27Fj3YyTy8/Nt2LBh9tZbb7mfWZient7JZ9Q+vvvIkbq6OktKSrLHH3/c9u/fb1lZWeZ0Ot3PvDx69KhFRUVZVlaW+5mXKSkp7kfbvP/++xYTE2NbtmyxgoICmzRpkmVkZHTaubWV79aooKDAbrvtNsvOzrb//Oc/tnbtWouMjLT8/Hwza33tZGVlWVxcnO3cudN27txpcXFxlpOT0ynndTmKi4tt6NCh9uKLL3o897OsrIx1dF5LNWIdoa1096w3I++9Qda3jqxvjKz3DnnvQpPupbNnz9q8efPM6XRaXFycvf766509pQ63f/9+mzVrljmdThs7dqytXLnSfXEoKCiwyZMnW1RUlN1///22b98+j2PfeecdGzdunDmdTps9e7adOnWqM06h3V36XNAjR47Ygw8+aJGRkTZp0iT717/+5bH/J598YnfffbcNHz7cZs6c2ehZsllZWXb77bdbbGysLViwwKqrqzvkPNrTpTXasmWLpaSkWFRUlE2cOLHRP4hbWjt1dXX27LPP2ogRI2z06NGWmZnpXpNXkqysLBsyZEiTX2asI7PWa8Q6Qlsg613I+5aR9a0j6xsj671D3rv4mZ2/ZwkAAAAAAHSq7vMmKwAAAAAAfBxNOgAAAAAAPoImHQAAAAAAH0GTDgAAAACAj6BJBwAAAADAR9CkAwAAAADgI2jSAQAAAADwETTpQBcXERHh8TVmzBgtXrxYlZWVXh1/7NgxRURE6NixY+08UwAA8L8g64GuhSYd6AZWrlyp7du3a+vWrVq9erW++OILvfDCC509LQAA0EbIeqDroEkHuoE+ffooLCxM4eHhcjqdSk9P1+bNmzt7WgAAoI2Q9UDXQZMOdENBQUEer0tLSzVnzhyNHDlSkZGRmjJlivLy8po8tri4WI888oiio6MVFRWltLQ0HTx4UJK0a9cuJSQk6C9/+Yvi4+PldDo1d+5cnTt3zn38xo0bNXHiRDkcDk2dOlWFhYXusXXr1ikhIUHR0dGaPn26/v3vf7fD2QMA0PWR9cCViyYd6GZOnTqlN998U/fee697229+8xvV19dr3bp12rBhg8LDw7V06dJGxzY0NOgXv/iFBgwYoI0bN2rdunWqr69XZmame5+ysjJ98MEHys7O1sqVK/Xhhx9qw4YNkqRt27Zp0aJFmjlzpt577z1FRkYqPT1d586d08cff6xXXnlFS5Ys0bvvvqvY2FjNmDFDFRUV7V0SAAC6FLIeuLIFdPYEALS/n//85+rRo4fMTFVVVQoNDXUHs5lpwoQJuueee/TDH/5QkvTggw/q0UcfbfR9qqurNXXqVKWlpSk4OFiSNGXKFGVnZ7v3qa2t1eLFi3XLLbcoIiJC8fHx2rNnjx544AGtX79eycnJSk1NlSTNmzdPV111lSoqKpSdna309HSNHz9ekvT4449r69ateu+99zR9+vT2LA8AAFc8sh7oOmjSgW5g2bJlcjgcMjN9/fXXWrNmjVJTU7Vp0yb17dtXqamp+sc//qH8/HwdPnxYe/fuVUNDQ6PvExwcrNTUVG3YsEF79+7VoUOHVFhYqH79+nnsd9NNN7n/HBISorq6OknS4cOHNXXqVPdYz549NX/+fEnSwYMHlZmZqeXLl7vHa2pqdOTIkbYsBQAAXRJZD3QdNOlANxAeHu4O04EDB2rYsGEaPXq0Nm/erLS0ND388MM6c+aMkpKSlJCQoNraWv3yl79s9H0qKyt1//3365prrlFCQoKSk5N16NAh5eTkeOzXs2dPj9dmJkkKCGj+klNfX6+FCxfq9ttv99geEhLyP50zAADdCVkPdB006UA35O/vLzNTfX29iouLlZubqx07dujaa6+VJK1du1bSxcC94LPPPlNZWZk2bdrkDuHt27c32q85N910k4qKityv6+vrlZiYqMzMTA0aNEgnTpzw+Mn8ggULNGHCBN11112Xdb4AAHQ3ZD1w5aJJB7qBiooKlZeXS3L9hDwnJ0f19fVKSEjQVVddJX9/f/39739XQkKC9uzZo5UrV0qSxye1SlJoaKjOnj2rjz76SJGRkdqxY4fWrl3r9U/Ap0+frocfflgjRoxQTEyM3nzzTZmZhg0bpoceekiLFi3SwIEDFRMTo/Xr12vz5s1KT09v22IAANAFkfVA10GTDnQDjz32mPvPQUFBioyM1J/+9CfdeOONkqSlS5dq1apVWr58uQYNGqTFixdr/vz5KiwsVFhYmPvY6OhozZ49W0899ZRqamoUERGh3/72t1q0aJFKS0tbncfIkSP15JNPatWqVSovL1dkZKRWr16tXr16KSkpSSdPntSKFSt08uRJ3XzzzfrjH/+ogQMHtnk9AADoash6oOvwM2/vXQEAAAAAAO2K56QDAAAAAOAjaNIBAAAAAPARNOkAAAAAAPgImnQAAAAAAHwETToAAAAAAD6CJh0AAAAAAB9Bkw4AAAAAgI+gSQcAAAAAwEfQpAMAAAAA4CNo0gEAAAAA8BE06QAAAAAA+AiadAAAAAAAfMT/A+G5o/qt+9+KAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "X_train = df.balance.values.reshape(-1,1) \n", "y = df.default2\n", "\n", "# Create array of test data. Calculate the classification probability\n", "# and predicted classification.\n", "X_test = np.arange(df.balance.min(), df.balance.max()).reshape(-1,1)\n", "\n", "clf = skl_lm.LogisticRegression(solver='newton-cg')\n", "clf.fit(X_train,y)\n", "prob = clf.predict_proba(X_test) ## return the probability of the classes (n, n_classes)\n", "\n", "fig, (ax1, ax2) = plt.subplots(1,2, figsize=(12,5))\n", "# Left plot\n", "sns.regplot(data=df, x='balance', y='default2', order=1, ci=None,\n", " scatter_kws={'color':'orange'},\n", " line_kws={'color':'lightblue', 'lw':2}, ax=ax1)\n", "# Right plot\n", "ax2.scatter(X_train, y, color='orange')\n", "ax2.plot(X_test, prob[:,1], color='lightblue')\n", "\n", "for ax in fig.axes:\n", " ax.hlines(1, xmin=ax.xaxis.get_data_interval()[0],\n", " xmax=ax.xaxis.get_data_interval()[1], linestyles='dashed', lw=1)\n", " ax.hlines(0, xmin=ax.xaxis.get_data_interval()[0],\n", " xmax=ax.xaxis.get_data_interval()[1], linestyles='dashed', lw=1)\n", " ax.set_ylabel('Probability of default')\n", " ax.set_xlabel('Balance')\n", " ax.set_yticks([0, 0.25, 0.5, 0.75, 1.])\n", " ax.set_xlim(xmin=-100)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##### scikit-learn" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "LogisticRegression(solver='newton-cg')\n", "classes: [0 1]\n", "coefficients: [[0.00549891]]\n", "intercept : [-10.6513227]\n" ] } ], "source": [ "# Using newton-cg solver, the coefficients are equal/closest to the ones in the book. \n", "# I do not know the details on the differences between the solvers.\n", "clf = skl_lm.LogisticRegression(solver='newton-cg')\n", "X_train = df.balance.values.reshape(-1,1)\n", "y = df.default2\n", "clf.fit(X_train,y)\n", "print(clf)\n", "print('classes: ',clf.classes_)\n", "print('coefficients: ',clf.coef_)\n", "print('intercept :', clf.intercept_)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##### statsmodels" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Optimization terminated successfully.\n", " Current function value: 0.079823\n", " Iterations 10\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", "
Coef.Std.Err.zP>|z|[0.0250.975]
Intercept-10.6513310.361169-29.4912873.723665e-191-11.359208-9.943453
balance0.0054990.00022024.9524042.010855e-1370.0050670.005931
\n", "
" ], "text/plain": [ " Coef. Std.Err. z P>|z| [0.025 0.975]\n", "Intercept -10.651331 0.361169 -29.491287 3.723665e-191 -11.359208 -9.943453\n", "balance 0.005499 0.000220 24.952404 2.010855e-137 0.005067 0.005931" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "est = smf.logit('default2 ~ balance', df).fit()\n", "est.summary2().tables[1]" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Optimization terminated successfully.\n", " Current function value: 0.145434\n", " Iterations 7\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", "
Coef.Std.Err.zP>|z|[0.0250.975]
Intercept-3.5041280.070713-49.5540940.000000-3.642723-3.365532
student20.4048870.1150193.5201770.0004310.1794540.630320
\n", "
" ], "text/plain": [ " Coef. Std.Err. z P>|z| [0.025 0.975]\n", "Intercept -3.504128 0.070713 -49.554094 0.000000 -3.642723 -3.365532\n", "student2 0.404887 0.115019 3.520177 0.000431 0.179454 0.630320" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "est = smf.logit('default2 ~ student2', df).fit()\n", "est.summary2().tables[1]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##### Multiple Logistic Regression" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Optimization terminated successfully.\n", " Current function value: 0.078577\n", " Iterations 10\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", "
Coef.Std.Err.zP>|z|[0.0250.975]
Intercept-10.8690450.492273-22.0793204.995499e-108-11.833882-9.904209
balance0.0057370.00023224.7365064.331521e-1350.0052820.006191
income0.0000030.0000080.3698087.115254e-01-0.0000130.000019
student2-0.6467760.236257-2.7375956.189022e-03-1.109831-0.183721
\n", "
" ], "text/plain": [ " Coef. Std.Err. z P>|z| [0.025 0.975]\n", "Intercept -10.869045 0.492273 -22.079320 4.995499e-108 -11.833882 -9.904209\n", "balance 0.005737 0.000232 24.736506 4.331521e-135 0.005282 0.006191\n", "income 0.000003 0.000008 0.369808 7.115254e-01 -0.000013 0.000019\n", "student2 -0.646776 0.236257 -2.737595 6.189022e-03 -1.109831 -0.183721" ] }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" } ], "source": [ "est = smf.logit('default2 ~ balance + income + student2', df).fit()\n", "est.summary2().tables[1]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##### Confounding" ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [], "source": [ "# balance and default vectors for students\n", "X_train = df[df.student == 'Yes'].balance.values.reshape(-1, 1) \n", "y = df[df.student == 'Yes'].default2\n", "\n", "# balance and default vectors for non-students\n", "X_train2 = df[df.student == 'No'].balance.values.reshape(-1, 1) \n", "y2 = df[df.student == 'No'].default2\n", "\n", "# Vector with balance values for plotting\n", "X_test = np.arange(df.balance.min(), df.balance.max()).reshape(-1,1)\n", "\n", "clf = skl_lm.LogisticRegression(solver='newton-cg')\n", "clf2 = skl_lm.LogisticRegression(solver='newton-cg')\n", "\n", "clf.fit(X_train,y)\n", "clf2.fit(X_train2,y2)\n", "\n", "prob = clf.predict_proba(X_test)\n", "prob2 = clf2.predict_proba(X_test)" ] }, { "cell_type": "code", "execution_count": 34, "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", "
defaultNoYes
student
No6850206
Yes2817127
\n", "
" ], "text/plain": [ "default No Yes\n", "student \n", "No 6850 206\n", "Yes 2817 127" ] }, "execution_count": 34, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.groupby(['student','default']).size().unstack('default')" ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/Users/tz89p/Library/Python/3.9/lib/python/site-packages/seaborn/_oldcore.py:1498: FutureWarning: is_categorical_dtype is deprecated and will be removed in a future version. Use isinstance(dtype, CategoricalDtype) instead\n", " if pd.api.types.is_categorical_dtype(vector):\n", "/Users/tz89p/Library/Python/3.9/lib/python/site-packages/seaborn/_oldcore.py:1498: FutureWarning: is_categorical_dtype is deprecated and will be removed in a future version. Use isinstance(dtype, CategoricalDtype) instead\n", " if pd.api.types.is_categorical_dtype(vector):\n", "/Users/tz89p/Library/Python/3.9/lib/python/site-packages/seaborn/_oldcore.py:1498: FutureWarning: is_categorical_dtype is deprecated and will be removed in a future version. Use isinstance(dtype, CategoricalDtype) instead\n", " if pd.api.types.is_categorical_dtype(vector):\n" ] }, { "data": { "text/plain": [ "" ] }, "execution_count": 37, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA+EAAAG7CAYAAACsM5ReAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pXeV/AAAACXBIWXMAAA9hAAAPYQGoP6dpAACX10lEQVR4nOzdd3xT9f7H8VfSkXS3lFIoe29KAcEBFwfuhQzXvaAXveoVxesWUAQFkeEGRAWuAyc4r1f9Oa8LBUUoIhTZlBZKoS1dadIk5/dHIFIZttKctOn7+TCPnnzPST7fg02TT77f8/laDMMwEBEREREREZGAswa7AyIiIiIiIiINhZJwEREREREREZMoCRcRERERERExiZJwEREREREREZMoCRcRERERERExiZJwEREREREREZMoCRcRERERERExiZJwEREREREREZOEB7sDgdCvXz9cLhcpKSnB7oqIiAgA+fn5REZG8uOPPwa7KyFB7/UiIlLXVPe9PiSTcKfTicfjCXY3RERE/NxuN4ZhBLsbIUPv9SIiUtdU970+JJPwJk2aAPDZZ58FuSciIiI+Z5xxRrC7EFL0Xi8iInVNdd/rdU24iIiIiIiIiEmUhIuIiIiIiIiYREm4iIiIiIiIiEmUhIuIiIiIiIiYREm4iIiIiIiIiEmUhIuIiIiIiIiYpE4k4S6XiwsuuIDly5cf9Zh169YxcuRI0tPTGT58OGvXrjWxhyIiIiIiIiLHL+hJuNPp5LbbbmPjxo1HPaa8vJzrrruOfv368dZbb5GRkcH1119PeXm5iT0VEREREREROT5BTcI3bdrEpZdeyo4dO4553AcffIDNZuOuu+6iffv2TJw4kZiYGD766COTeioiIiIiIiJy/IKahK9YsYIBAwbw+uuvH/O4zMxM+vbti8ViAcBisdCnTx9Wr15tQi9FREREREREakdQk/Arr7ySCRMmEBUVdczj8vPzadKkSZW25ORkdu/eHcjuiYiIiIiIBN2KFSsYM2YMK1asCHZXpBYE/Zrw6nA4HERGRlZpi4yMxOVyBalHwVFZWclTTz3FGWecQY8ePTj11FOZPn06paWlAOzbt48PP/zwTz//Pffcwz333FMrfc3OzubLL7+slecSEREREWmoKioqmDdvHvn5+cybN4+Kiopgd0mOU71Iwm0222EJt8vlwm63B6lHwTF79mw+/vhjpk6dykcffcT06dP59ttvueOOO/z760riO2HCBNasWRPsboiIiIiI1GtLly6loKAAgIKCApYuXRrkHsnxqhdJeGpqKnv37q3Stnfv3sOmqIe6t99+m1tuuYWTTjqJFi1acNJJJzF58mS++OIL9uzZg2EYwe6iiIiIiIjUktzcXJYuXer/nG8YBkuXLiU3NzfIPZPjUS+S8PT0dFatWlXll++nn34iPT29dgIYBrjLzL39iYTZYrHw/fff4/V6/W0ZGRn897//5eWXX+btt9/m7bff5vTTTwegc+fOVdZef+utt/z7AH788UeGDh1Kr169uOWWW3A4HFXiffLJJ5x33nmkp6czYsSIKtegjBo1iqeffpprrrmGXr16cfbZZ/P1118DvmntK1asYM6cOYwaNarG5ykiIiIi0tAZhsH8+fMPG2g7WrvUH+HB7sDR5OfnExcXh91u55xzzuGRRx5h2rRpXH755bz22ms4HA7OPffc4w9kGPDJQNi77PifqyZSToEhX8OBiu/VMXr0aJ588kk+/fRTBg8ezMknn8zAgQPp0KED1113Hdu3bwdg0qRJf/hcBQUFXH/99Vx22WU8+uij/Pe//2XOnDlccsklAGRlZXH33XczZcoUevXqxZdffsk//vEP3nvvPVq3bg3A/Pnzuf/++7n//vt55JFHuO+++/j888+ZOHEi27Zt86/nLiIiIiIiNbNz505WrVp1WLvX62XVqlXs3LmTli1bBqFncrzq7Ej4wIED+eCDDwCIjY3lmWeeYeXKlQwbNozMzEyeffZZoqOjaydYDRLhYBo7diyzZs2iadOmvPHGG4wbN45Bgwbx5ptvEhMTg91ux26306hRoz98rg8//JBGjRpx55130q5dO26++WZ69uzp379w4UIuvfRSLrzwQlq3bs3o0aP5y1/+wquvvuo/ZvDgwQwbNoxWrVrxz3/+k127dvm/PImIiCA6OprExMRA/FOIiIiIiIS0Fi1akJGRgdVaNWWzWq306dOHFi1aBKlncrzqzEj4hg0bjnm/V69evP3227Uf2GLxjUh7ymv/uY8lLPpPJf8XXXQRF110EYWFhXzzzTcsXryYiRMn0rlz5xo9z6ZNm+jSpYt/7XWAnj17+qekb968mQ8//LDKGu6VlZUMHDjQf79Nmzb+7djYWADcbneNz0lERERERKqy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cHq82MOspMXZzQn66xzfz7ZXQUS8OTFFREREGpDwYAXOysrC7XaTkZHhb+vbty/z58/H6/Vitf72/cCKFSs444wzCAv7bVrkm2++aWp/RUTMtrnQV5CtbWI0VjOWJSvbDjnv+bY7jQ18PBEREZEG6LhGwvfv34/X68UwjBo/Nj8/n6SkJCIjI/1tjRs3xul0UlRUVOXY7OxsGjVqxH333ccpp5zCpZdeysqVK4+n6yIidVphRSUFFZVY8CXhptg4HwwvpJ4BCV3NiSkiIiLSwNQ4CTcMg6effpoBAwZw0kknkZOTw5133smkSZNwuVzVfh6Hw1ElAQf893//POXl5Tz77LOkpKTw3HPPccIJJ3DNNdewa9eumnZfRKRe2HJgFLxFnB17uAnF0TwVsPk533anmwIfT0RERKSBqnESPnfuXN577z0efvhhf9J8ySWX8O233zJz5sxqP4/NZjss2T54326veu1jWFgYXbt2Zdy4cXTr1o0777yTNm3a8O6779a0+yIidZ7T4yW7xAFAuySTliXb/jo490F0K2h+gTkxRURERBqgGifhb7/9Ng888ACnnXYalgPXKJ5yyinMmDGDDz/8sNrPk5qaSmFhIW6329+Wn5+P3W4nPr5qMaCUlBTatWtXpa1NmzYaCReRkLS9qByvAYm2cBqZvSxZx3+CNWjlQkRERERCXo2T8H379tGkSZPD2uPj4ykvL6/283Tt2pXw8HBWr17tb1u5ciU9e/asUpQNoHfv3mzYsKFK25YtW2jevHnNOi8iUscZhsGW/b6/pe2SYvxfdgbUvhVQsBKsNmh/TeDjiYiIiDRgNU7CTzzxRBYuXFilrbS0lEcffZQBAwZU+3mioqIYOnQokydPZs2aNXz66acsWrSI0aNHA75R8YqKCgAuv/xyNmzYwFNPPcX27dt54oknyM7O5uKLL65p90VE6rQ95S7KKz1EWC20iIsyJ+jBZclaXw72FHNiioiIiDRQNU7CJ0+ezLp16zjllFNwOp3ceOONDB48mJycHCZOnFij5xo/fjzdu3fnqquuYsqUKdx8882cddZZAAwcOJAPPvgAgObNm7NgwQK++OILLrjgAr744gueffZZUlNTa9p9EZE6bWuRryBbq/gowq0mjII78mDHG75tFWQTERERCbgaX/jXtGlTli5dynfffceWLVtwu920bduWgQMHHjaN/I9ERUUxY8YMZsyYcdi+308/79u3L2+99VZNuysiUm843B52lToBE5cl2/wceF2QfCIk9zMnpoiIiEgDVuOR8NGjR1NcXMxJJ53EX//6V6666ir+8pe/UFRUxLBhwwLRRxGRBmFbUTkGkBwVQbzNhIJs3krf2uCgUXARERERk1RrJPyrr75izZo1APzwww/Mnz+f6OiqozTbt28nJyen9nsoItIAGIbBtgMF2dommrQs2c53wZED9ibQaoQ5MUVEREQauGqNhLdt25YVK1awfPlyDMPgp59+Yvny5f7bihUrKCkpYdq0aYHur4hISNpd5sTh9hIZZqF5rN2coAcLsrW/DsJs5sSUkOJyubjgggtYvny5v23q1Kl07ty5ym3x4sX+/e+//z5DhgwhPT2dsWPHUlBQ4N9nGAazZ8/mxBNPpH///sycOROv12vqOYmIiARatUbCW7ZsyYsvvgj4iqlNnDiR2NjYgHZMRKQh2VrkGwVvHR9NmBkF2Yp+hj1fgiUMOl4f+HgScpxOJ7fffjsbN26s0r5582Zuv/12LrnkEn/bwc8Ma9asYeLEiUyZMoUuXbowbdo0xo8fzzPPPAPAv//9b95//33mzJmD2+3mzjvvJDk5mWuu0dJ5IiISOmpcmG369Om43W7y8vLweDyA75trl8vF+vXrOe+882q9kyIioay80s3uMl9BtjZmFWT7da7vZ4tLILqFOTElZGzatInbb78dwzAO27d582auueYaUlIOX+5u8eLFnHvuuQwdOhSAmTNnctppp5Gdne3/wn/cuHH06+crEnjHHXfwxBNPKAkXEZGQUuMk/LPPPuPee++lqKjosH0pKSlKwkVEamjrfgcAKdGRxEXW+M9yzbmKYOtLvm0VZJM/YcWKFQwYMIBbb72V3r17+9tLS0vJy8ujTZs2R3xcZmYm//jHP/z3mzVrRlpaGpmZmURGRrJr1y5OOOEE//6+ffuSk5PDnj17aNKkSaBOR0RExFQ1ro4+e/ZszjzzTP773/8SHx/Pa6+9xvz582nevDn/+te/AtBFEZHQ5TUMthUdLMhm0ij4lufBUw4JPaDJX8yJKSHlyiuvZMKECURFRVVp37x5MxaLhfnz5/OXv/yFiy66iLffftu//0jJdHJyMrt37yY/Px+gyv7GjRsDsHv37kCdioiIiOlqPOSSnZ3NM888Q6tWrejRowf5+fkMGTIEq9XKzJkztUyZiEgN7CqtwOnxYguzkmZGQTbD+9tU9E43gcWE68+lwdiyZQsWi4V27drxt7/9jR9++IH77ruP2NhYzjzzTCoqKoiMjKzymMjISFwuFxUVFf77h+4DXwE4ERGRUFHjJDw+Ph6Hwzd1sm3btmRlZTFkyBDatWvHzp07a72DIiKhzF+QLSEKqxkJ8a6PoXQTRCRAm78GPp7UWfv37ycuLg6LxYKlln73hg4dymmnnUZiYiIAXbp0Ydu2bbz66quceeaZ2Gy2wxJql8tFVFRUlYTbZrP5t4HDRtxFRETqsxpPRx88eDBTpkxh06ZNDBgwgHfffZdffvmF119/XddriYjUQKnLzZ5yX5LRNsGsgmwHliVr93eI0CoXDY1hGDz99NMMGDCAk046iZycHO68804mTZpUK6PNFovFn4Af1K5dO/Ly8gBITU1l7969Vfbv3buXlJQUUlNTAfzT0g/dPlKRNxERkfqqxkn4xIkTad26NWvXrvWv8zlixAhefvll7rrrrkD0UUQkJG3b7xsFT42xEWNGQbaSzZD7gW+7442Bjyd1zty5c3nvvfd4+OGH/SPPl1xyCd9++y0zZ8487ud/4oknuPrqq6u0ZWVl0a5dOwDS09NZuXKlf9+uXbvYtWsX6enppKamkpaWVmX/ypUrSUtL05f8IiISUmr8qS82Npbp06f778+ePZvJkyf7p46JiMgf83gNth+oim7aKPjGeYABzc6F+I7mxJQ65e233+bhhx/mhBNO8E9BP+WUU5gxYwa33HIL995773E9/2mnncazzz7LwoULOfPMM/nmm2945513ePHFFwG44oorGDVqFL1796Znz55MmzaNU089lZYtW/r3z549m6ZNmwLwyCOPMGbMmOPqk4iISF1T7SS8rKyM5cuXExYWRr9+/YiJifHvi42N5X//+x/Tp0/n//7v/wLSURGRUJJ7oCCbPdxK01gTvsR0l8HmRb5tLUvWYO3bt++Io8rx8fGUl5cf9/P36tWLJ554gieffJInnniC5s2b88gjj5CRkQFARkYGDzzwAE8++ST79+/nlFNO4cEHH/Q//pprrmHfvn3cdNNNhIWFMWLEiMNG1kVEROq7aiXhP/74I2PHjmX//v2Ab8mQRYsW0alTJ3Jzc5kyZQpffvkl/fr1C2hnRURCxcGCbG0Sos0pyLbtFagsgth2kHZO4ONJnXTiiSeycOFCHnjgAX9baWkpjz76KAMGDPhTz7lhw4Yq94cMGcKQIUOOevywYcOOupJKWFgY48ePZ/z48X+qLyIiIvVBta4JnzlzJj169ODLL79k2bJlDBw4kGnTprF8+XIuuugi1q9fz+zZs1m8eHGg+ysiUu+VON3sdfiKYLUxYyq6YfxWkK3jWLDUuByIhIjJkyezbt06TjnlFJxOJzfeeCN/+ctfyMnJOe6p6CIiIlI91RoJ37hxI6+88oq/cumECRM4+eSTufXWWzn//PO58847iY1VlV0RkerYeqAgW7NYG9ERYYEPmP8NFK2BsCho//fAx5M6q2nTpixdupTvvvuOLVu24Ha7adu2LQMHDsRq1ZczIiIiZqhWEu5wOKpcQxYfH09ERASXX34548aNC1jnRERCja8gmy8JN31ZsjZ/g8gkc2JKnfXyyy+TkJDAX//qWyd+7Nix5OTkcMUVVwS5ZyIiIg3DcX3tfeGFF9ZWP0REGoSdJQ4qvQbR4WGkxphQkK08B7Lf8m13Ghv4eFKnPfbYYzz99NNER//2BdCAAQOYN28ec+fODWLPREREGo5qJeEWi8W/lMmhwsNNWNdWRCSE+AuyJUYf8e9qrdv0LBhuSBkESemBjyd12ptvvsnjjz/O6aef7m8bPXo0s2fP5vXXXw9iz0RERBqOamXRhmEwderUKmuBV1ZWMmvWrCpLlQFV1hAXEZHf7HdWUlBRiQVokxAV+IAeF2x6xretZckE3+VlR6rhkpSURElJSRB6JCIi0vBUayT8kksuqZKAg28q+u8TcBERObqDo+BpsXbs4SYUZMt+EyryIKoZtLwk8PGkzhs0aBDTpk0jNzfX35aXl8eMGTMYOHBgEHsmIiLScFRrJFyj2yIix8ft9bKj2AFA20STC7J1uAGsEebElDpt0qRJ3HjjjZxxxhkkJCQAsH//fk488UTuv//+IPdORESkYdBF3SIiJthZXIHbaxATEUZKdGTgAxb8BHuX+ZLvDtcFPp7UC40aNeK1114jKyuLbdu2ER4eTps2bejQoUOwuyYiItJgKAkXETHBloPLkplVkO3XA5WuW46EqKaBjyf1SnJyMgkJCRiGAeCfnp6WlhbMbomIiDQISsJFRAKssKKSoopKrBZoHW9CQTbnPtj+im9bBdnkEN988w2TJk1i165dVdoNw8BisbB+/fog9UxERKThqHESnpubS7NmzQ4byfF4PGRlZdG9e/da65yISCjYWlQGQPNYOzYzCrJtXgieCkjqA41PDHw8qTcefPBBevXqxdNPP33EKukiIiISeDVOws844wy+/fZbGjVqVKV9586dXHnllWRmZtZa50RE6rtKj5fs4grApIJsXg9snOfb7nQTmDH1XeqN3bt3s2DBAlq2bBnsroiIiDRY1UrClyxZwvz58wHflLXhw4djtVZd3ay4uJj27dvXfg9FROqx7GIHHsMgLjKc5CgTCrLl/hfKtkNkI2h9eeDjSb3Sr18/Vq5cqSRcREQkiKqVhA8dOpSIiAi8Xi8TJkzg73//O3Fxcf79FouFqKgoTjxR0x5FRA4yDIOtphdkO7AsWftrIdyE68+lXjnhhBOYMmUK//vf/2jdujUREVWXrrvpJtUQEBERCbRqJeEREREMHToUgBYtWtCnTx/Cw1XTTUTkWAorKtnvdGO1QCszCrLtz4LdnwAW6PjPwMeTeufbb7+lR48e7Nu3j3379lXZZ8qXRCIiIlK9JHzOnDlV7q9YseKox+pbdBERny1FvlHwFnFRRIZZ/+DoWnDwWvDmF0Jsm8DHk3rnpZdeCnYXREREGrxqJeHLly+v1pPpW3QRER+Xx8vOEgcA7cwoyFZZAlue921rWTI5hvXr17Nx40a8Xi/gu2zC5XKxbt06pkyZEuTeiUgoMAwDp9MZ7G6EjIqKiiNuS+2w2Wym57HVSsL1zbmISM3sKHbgNSDBFk6SPeKPH3C8tr4E7hKI7wxNzwh8PKmX5syZw5w5c2jcuDH79u0jNTWVvXv34vF4OPPMM4PdPREJEU6nk5EjRwa7GyFp1KhRwe5CyFmyZAl2u93UmDW+sPudd9455v6D146LiDRUhmGw9cBU9LYJJhRkM4zfCrJ1HAsWE6a+S730+uuvM2XKFC677DJOP/10XnjhBRISErj11ltp1apVsLsnIiLSINQ4CX/yySer3Pd4POzbt4/w8HB69eqlJFxEGrx9DhclLjdhFgstzSjIlvcFFK+H8Fhod1Xg40m9VVhYyKBBgwDo2rUrq1at4qKLLuLWW29l3Lhx3HHHHUHuoYiEmofOXU9kmDfY3aj3DMP3U1f/1g6Xx8qED7sGLX6Nk/DPP//8sLaysjImTZpE586da6VTIiL12cGCbC3j7USYUZDt4Ch426sgIj7w8aTeSk1NJTs7m7S0NNq3b8+6deu46KKLiI2NpaCgINjdE5EQFBnmxRZuBLsbIr8T3C+GauXTYUxMDDfffDP//ve/a+PpRETqLafbQ26pr2hK28SYwAcs2w457/q2O40NfDyp10aOHMltt93Gl19+yZAhQ3jjjTdYtGgRU6dOpUuXLsHunoiISINQa4t9Z2Vl+Sutiog0VNsPFGRLskeYU5Bt43wwvJB6BiQEb1qV1A833HADTZs2JSoqil69ejF+/Hhee+01EhMTeeihh4LdPRERkQahxkn4qFGjDisyVFZWxoYNG7j66qtrq18iIvXO7wuyBZynAjY/59vWsmRSTYfWbhk5cqQqGIuIiJisxkn4gAEDDmuLjIzkjjvu4KSTTqqVTomI1Ed7yl2UVXoIt1poEW/CUhfbXwfnPohuBc0vCHw8qZfGjx9f7WOnT58ewJ6IiIgI/Ikk/KabNNoiInIkB0fBW8VHEW4NcEE2w4Bfn/Jtd/wnWGvt6iIRERERCaAaf2pzOBy8/vrrbNq0CY/H4293uVysW7eODz/8sFY7KCJSHzjcHnb5C7KZMBV93wooWAlWG7S/JvDxpN7S6LaIiEjdUuMk/N5772XZsmWcfPLJfPTRR5x77rls376dn3/+WaPkItJgbd9fjgEkR0WQYDOhINvBZclaXw72lMDHk5BgGAafffYZGzduPOIX6QsWLAhi70RERBqGGifhX331FU888QQnn3wyGzdu5Oqrr6ZHjx48/PDDbNy4MRB9FBGp06oUZDNjWTJHHux4w7etgmxSAw8++CBLly6lW7durFmzhoyMDHbs2MHevXu54oorgt09ERGRBqHGFy06nU7atGkDQMeOHVm7di0Al112GT/++GOtdk5EpD7YXebE4fYSGWaheawJBdk2PwdeFyQPgOR+gY8nIeODDz5g9uzZvPbaa7Rq1YrJkyfzxRdfcP7551NZWRns7omIiDQINU7C27dvz7JlywBfEr5y5UoASkpKcDqdtds7EZF64OAoeOv4aMKslj84+jh5K2Hj075tjYJLDZWWltKjRw8AOnXqxJo1awgPD+f666/nyy+/DHLvREREGoY/VR39lltuwev1cvHFF3P++edzww03sGHDBgYNGhSIPoqI1FnllW52l/m+gGxjRkG27LfBkQv2JtBK6ztLzbRs2ZJ169aRlpZGx44dWbNmDcOHD8cwDEpKSoLdPRERkQahWkn45s2badeuHRaLhTPOOIMPP/wQr9dLs2bNeOWVV3j33Xfp06cPo0aNCnR/RUTqlK37HQCkREcSF2nCMmEHlyXrcD2E2QIfT0LKmDFjuOOOO3jooYc477zzGDZsGOHh4axatYq+ffsGu3siIiINQrU+MY4cOZIPPviApk2bMnr0aObMmUN8fDwAXbp0oUuXLgHtpIhIXeQ1DLYdmIrezoxR8MLVkP8NWMKhww2BjychZ+TIkbRp04aYmBiaNGnCo48+yrvvvkvPnj21womIiIhJqpWE22w2li5dSv/+/VmxYgUrVqwgISHhiMeecMIJtdpBEZG6aldpBU6PF1uYlWZmFGTbcGAUvOVwiE4LfDwJOZWVlSxfvpzXXnuNffv2AdC0aVOuuuoqUlK01J2IiIgZqpWE/+tf/2L27NnMmTMHi8Vy1G/LLRYL69evr9UOiojUVQcLsrVJiMJqCXBBNuc+2P6Kb7vzzYGNJSHrwQcf5Ouvv+aOO+6gW7dueL1e1qxZw5NPPklBQQG33XZbsLsoIiIS8qqVhF922WVcdtllgG/6+TfffEPjxo0D2jERkbqs1OVmT7kLMKkg2+YF4KmApAxofHLg40lI+u9//8szzzxDv36/LW3XpUsXmjdvzm233aYkXERExAQ1XqIsKyuLxo0bU1payrp163C5XJSWlgaibyIiddbBUfDUGBsxEQEuyOZ1w6/zfNudboZAj7pLyIqNjSU8/PDf17i4uCO2i4iISO2rcRLucrmYOHEi/fv3Z8SIEeTl5XHPPfdwzTXXsH///kD0UUSkTvF4DbYXm1iQLec/UL4DbMnQ+vLAx5OQkpub67+NHj2au+++m6+++orCwkKKi4v58ccfuffee7n5Zl3mICIiYoYaf+09c+ZMNm/ezNtvv83ll/s+DN58882MHz+eqVOnMmvWrFrvpIhIXZJbWoHLYxAVbqVpjAnLhB1clqz9PyA8KvDxJKScfvrpWA7MnjAMA4DrrrvusLYpU6b439dFREQkcGqchH/88cfMnTuXzp07+9s6d+7Mgw8+yJgxY2q1cyIiddEWf0G2aH8iEzBFayHvC7BYoeM/AxtLQtJnn30W7C6IiIjIIWqchJeVlREVdfhIjNfrxePx1EqnRETqqmJnJfscLiyYVJDt1zm+ny2GQkyrwMeTkNO8efNgd0FEREQOUeNrwk8//XQee+yxKsXYsrOzmTp1KoMHD67VzomI1DWbD4yCN4u1ExUeFthgrkLY+pJvu5Ou1xUREREJBTVOwidNmoTVaqV///44HA6GDx/OWWedRXx8PPfdd18g+igiUidUerxk73cAJhVk2/xv8JRDQg9ooi85RUREREJBjaejx8XF8dRTT5Gdnc3mzZtxu920bduW9u3b1zi40+lkypQpfPzxx9jtdsaMGfOH15Xv3LmTCy+8kPnz5zNgwIAaxxQR+bN2FDtwGwZxkeGkREcGNpjXAxvn+rY7a1kykUAzDAOn0xnsboSUioqKI27L8bPZbIGvSSIiAVPjJDw7O5tNmzZRVlZGbGwsXbt2/dPXm82cOZO1a9fywgsvkJuby913301aWhrnnHPOUR8zefJkysvL/1Q8EZE/yzAMf0G2dokmFGTb9SGUboGIRGjz18DGEhGcTicjR44MdjdC1qhRo4LdhZCyZMkS7HZ7sLshIn9StZPw7777junTp7Nx40b/ciYAFouF7t27c88999CvX79qBy4vL2fJkiU899xzdO/ene7du7Nx40Zefvnloybh7733HmVlZdWOISJSW/LLXZS43IRbLLSKN2GZsA0HlyW7BsJjAh9PRERERExRrST8m2++4frrr+f8889n0qRJdOjQgbi4OEpLS8nKyuLNN9/k73//Oy+++CIZGRnVCpyVlYXb7a5yfN++fZk/fz5erxerterl6oWFhcyaNYtFixZxwQUX1OAURUSO38FR8FYJUUSE1bicRs3sXw+7PwYs0OnGwMYSkcNcde9DhEcG+JKTBuLgwI2mTh8/t8vFC1MnBLsbIlILqpWEz507l6uvvpo777yzSntCQgIDBgxgwIABJCQk8PTTT/Pss89WK3B+fj5JSUlEHvIm17hxY5xOJ0VFRTRq1KjK8Q8//DCXXHIJHTt2rNbzi4jUlvJKD7tKfdczmlKQbcMTvp8tLoLYdoGPJyJVhEdGEhFpC3Y3REQkRFVrOCcrK4tLLrnkmMeMHDmSdevWVTuww+GokoAD/vsul6tK+7Jly1i5ciU33qgRIREx39b95RhA46hI4m0RgQ3m3AdbX/Rtd741sLFERERExHTVSsIrKipISEg4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IiIiDY6ScBGpF7YUlbPf6VuSrGvjAC5JVvQz/Pqkb7vvUxBm/tqRIiIiIhK6gpqEO51OJkyYQL9+/Rg4cCCLFi066rH/+9//uPjii8nIyODCCy/ks88+M7GnIhJMFW6Pf0my7o3jsIeHBSaQ4YUVNxwoxjZcxdhEREREpNYFNQmfOXMma9eu5YUXXuD+++9nzpw5fPTRR4cdl5WVxU033cTw4cN55513uPzyy7nlllvIysoKQq9FxGxr80uo9Bok2iNoG8glyTbOh73LIDxWxdhEREREJCCCtuhteXk5S5Ys4bnnnqN79+50796djRs38vLLL3POOedUOfb999/nxBNPZPTo0QC0bt2azz//nA8//JAuXboEo/siYpK95U52FDsA6B3IYmxl2bD6Ht9274chpmVg4oiIiIhIgxa0JDwrKwu3201GRoa/rW/fvsyfPx+v14vV+tsg/SWXXEJlZeVhz1FSUmJKX0UkOLyGweq834qxNYqKDEwgw4AfbgR3CTQ+CTr+MzBxRERERKTBC9p09Pz8fJKSkoiM/O1DdePGjXE6nRQVFVU5tn379lVGvDdu3Mh3333HSSedZFZ3RSQINheWUexyExlmpXtKXOAC7VgCue+DNQIGLACLalaKiIiISGAE7ZOmw+GokoAD/vsul+uojysoKODmm2+mT58+nHHGGQHto4gET5nLzbq9pQD0SIkjMixAf66cBbDyZt92twmQ0C0wcUQakE8++YTOnTtXuY0bNw6AdevWMXLkSNLT0xk+fDhr166t8tj333+fIUOGkJ6eztixYykoKAjGKYiIiARM0JJwm812WLJ98L7dbj/iY/bu3ctVV12FYRg8+eSTVaasi0joMAyDn/L24zEMGkdF0jo+KnDBfroVKvZAfFfoPj5wcUQakE2bNnHaaafxzTff+G9Tp06lvLyc6667jn79+vHWW2+RkZHB9ddfT3l5OQBr1qxh4sSJ3HTTTbz++usUFxczfrxelyIiElqClsWmpqZSWFiI2+32t+Xn52O324mPjz/s+Ly8PP7617/icrl48cUXadSokZndFRETbS92kF/uwmqBPk0TAleMLfsd2Pqib/r5gIVaE1yklmzevJlOnTqRkpLiv8XHx/PBBx9gs9m46667aN++PRMnTiQmJsa/MsrixYs599xzGTp0KF26dGHmzJl8+eWXZGdn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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# creating plot\n", "fig, (ax1, ax2) = plt.subplots(1,2, figsize=(12,5))\n", "\n", "# Left plot\n", "ax1.plot(X_test, pd.DataFrame(prob)[1], color='orange', label='Student')\n", "ax1.plot(X_test, pd.DataFrame(prob2)[1], color='lightblue', label='Non-student')\n", "\n", "ax1.set_ylabel('Default Rate')\n", "ax1.set_xlabel('Credit Card Balance')\n", "ax1.set_yticks([0, 0.2, 0.4, 0.6, 0.8, 1.])\n", "ax1.set_xlim(450,2500)\n", "ax1.legend(loc=2)\n", "\n", "# Right plot\n", "sns.boxplot(x='student', y='balance', data=df, orient='v', ax=ax2, palette=c_palette)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 4.4 Linear Discriminant Analysis\n" ] }, { "cell_type": "code", "execution_count": 40, "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", "
True default statusNoYes
Predicted default status
No9645254
Yes2279
\n", "
" ], "text/plain": [ "True default status No Yes\n", "Predicted default status \n", "No 9645 254\n", "Yes 22 79" ] }, "execution_count": 40, "metadata": {}, "output_type": "execute_result" } ], "source": [ "X = df[['balance', 'income', 'student2']].to_numpy()\n", "y = df.default2.to_numpy()\n", "\n", "lda = LinearDiscriminantAnalysis(solver='svd')\n", "y_pred = lda.fit(X, y).predict(X)\n", "\n", "df_ = pd.DataFrame({'True default status': y,\n", " 'Predicted default status': y_pred})\n", "df_.replace(to_replace={0:'No', 1:'Yes'}, inplace=True)\n", "\n", "df_.groupby(['Predicted default status','True default status']).size().unstack('True default status')" ] }, { "cell_type": "code", "execution_count": 65, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " precision recall f1-score support\n", "\n", " No 0.97 1.00 0.99 9667\n", " Yes 0.78 0.24 0.36 333\n", "\n", " accuracy 0.97 10000\n", " macro avg 0.88 0.62 0.67 10000\n", "weighted avg 0.97 0.97 0.97 10000\n", "\n" ] } ], "source": [ "print(classification_report(y, y_pred, target_names=['No', 'Yes']))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "Instead of using the probability of 50% as decision boundary, we say that a probability of default of 20% is to be classified as 'Yes'. " ] }, { "cell_type": "code", "execution_count": 41, "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", "
True default statusNoYes
Predicted default status
No9645254
Yes2279
\n", "
" ], "text/plain": [ "True default status No Yes\n", "Predicted default status \n", "No 9645 254\n", "Yes 22 79" ] }, "execution_count": 41, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_.groupby(['Predicted default status','True default status']).size().unstack('True default status')" ] }, { "cell_type": "code", "execution_count": 46, "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", "
True default statusNoYes
Predicted default status
False9518164
True149169
\n", "
" ], "text/plain": [ "True default status No Yes\n", "Predicted default status \n", "False 9518 164\n", "True 149 169" ] }, "execution_count": 46, "metadata": {}, "output_type": "execute_result" } ], "source": [ "## Because many Yes samples are predicted as No\n", "decision_prob = 0.25\n", "y_prob = lda.fit(X, y).predict_proba(X)\n", "\n", "df_ = pd.DataFrame({'True default status': y,\n", " 'Predicted default status': y_prob[:,1] > decision_prob})\n", "df_.replace(to_replace={0:'No', 1:'Yes', 'True':'Yes', 'False':'No'}, inplace=True)\n", "\n", "df_.groupby(['Predicted default status','True default status']).size().unstack('True default status')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##### 4.6.3 Linear Discriminant Analysis" ] }, { "cell_type": "code", "execution_count": 73, "metadata": {}, "outputs": [], "source": [ "df = pd.read_csv('data/Smarket.csv', usecols=range(1,10), index_col=0, parse_dates=True)" ] }, { "cell_type": "code", "execution_count": 78, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Year\n", "2005-01-01 Down\n", "2005-01-01 Down\n", "2005-01-01 Down\n", "2005-01-01 Up\n", "2005-01-01 Down\n", " ... \n", "2005-01-01 Up\n", "2005-01-01 Down\n", "2005-01-01 Up\n", "2005-01-01 Down\n", "2005-01-01 Down\n", "Name: Direction, Length: 252, dtype: object\n" ] } ], "source": [ "## divide the dataset into train and validation sets\n", "## Daily percentage returns for the S&P 500 stock\n", "X_train = df[:'2004'][['Lag1','Lag2']]\n", "y_train = df[:'2004']['Direction']\n", "\n", "X_test = df['2005':][['Lag1','Lag2']]\n", "y_test = df['2005':]['Direction']\n", "\n", "print(y_test)\n", "\n", "lda = LinearDiscriminantAnalysis()\n", "pred = lda.fit(X_train, y_train).predict(X_test)" ] }, { "cell_type": "code", "execution_count": 61, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([0.49198397, 0.50801603])" ] }, "execution_count": 61, "metadata": {}, "output_type": "execute_result" } ], "source": [ "lda.priors_" ] }, { "cell_type": "code", "execution_count": 62, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[ 0.04279022, 0.03389409],\n", " [-0.03954635, -0.03132544]])" ] }, "execution_count": 62, "metadata": {}, "output_type": "execute_result" } ], "source": [ "lda.means_" ] }, { "cell_type": "code", "execution_count": 64, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " precision recall f1-score support\n", "\n", " Down 0.50 0.32 0.39 111\n", " Up 0.58 0.75 0.66 141\n", "\n", " accuracy 0.56 252\n", " macro avg 0.54 0.53 0.52 252\n", "weighted avg 0.55 0.56 0.54 252\n", "\n" ] } ], "source": [ "print(classification_report(y_test, pred, digits=3))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##### 4.6.4 Quadratic Discriminant Analysis" ] }, { "cell_type": "code", "execution_count": 72, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "['Up' 'Up' 'Up' 'Up' 'Up' 'Up' 'Up' 'Up' 'Up' 'Up' 'Up' 'Down' 'Up' 'Up'\n", " 'Up' 'Up' 'Up' 'Down' 'Up' 'Up' 'Up' 'Down' 'Down' 'Up' 'Down' 'Down'\n", " 'Up' 'Up' 'Up' 'Down' 'Up' 'Up' 'Up' 'Up' 'Up' 'Up' 'Up' 'Down' 'Down'\n", " 'Up' 'Up' 'Up' 'Up' 'Down' 'Down' 'Up' 'Up' 'Up' 'Up' 'Up' 'Up' 'Up' 'Up'\n", " 'Up' 'Up' 'Up' 'Up' 'Up' 'Up' 'Up' 'Down' 'Down' 'Up' 'Up' 'Up' 'Up' 'Up'\n", " 'Up' 'Up' 'Up' 'Up' 'Up' 'Up' 'Up' 'Down' 'Up' 'Down' 'Down' 'Up' 'Up'\n", " 'Up' 'Up' 'Up' 'Down' 'Up' 'Down' 'Down' 'Up' 'Up' 'Up' 'Up' 'Up' 'Up'\n", " 'Up' 'Down' 'Down' 'Down' 'Up' 'Up' 'Up' 'Up' 'Up' 'Up' 'Up' 'Up' 'Down'\n", " 'Up' 'Up' 'Up' 'Up' 'Up' 'Up' 'Up' 'Up' 'Up' 'Up' 'Up' 'Up' 'Up' 'Up'\n", " 'Up' 'Up' 'Up' 'Down' 'Up' 'Up' 'Up' 'Down' 'Up' 'Up' 'Down' 'Down' 'Up'\n", " 'Up' 'Up' 'Up' 'Up' 'Up' 'Down' 'Up' 'Up' 'Up' 'Up' 'Up' 'Down' 'Up' 'Up'\n", " 'Up' 'Up' 'Up' 'Up' 'Up' 'Up' 'Up' 'Up' 'Up' 'Up' 'Up' 'Up' 'Up' 'Up'\n", " 'Up' 'Up' 'Up' 'Up' 'Up' 'Up' 'Up' 'Up' 'Down' 'Up' 'Down' 'Down' 'Up'\n", " 'Up' 'Up' 'Up' 'Up' 'Up' 'Down' 'Up' 'Up' 'Up' 'Up' 'Up' 'Up' 'Up' 'Up'\n", " 'Down' 'Down' 'Up' 'Up' 'Up' 'Up' 'Up' 'Up' 'Up' 'Up' 'Up' 'Up' 'Down'\n", " 'Up' 'Down' 'Up' 'Up' 'Down' 'Down' 'Up' 'Up' 'Down' 'Down' 'Up' 'Up'\n", " 'Down' 'Up' 'Up' 'Up' 'Up' 'Down' 'Down' 'Up' 'Up' 'Up' 'Down' 'Down'\n", " 'Down' 'Down' 'Up' 'Up' 'Up' 'Up' 'Up' 'Up' 'Down' 'Up' 'Up' 'Up' 'Up'\n", " 'Up' 'Up' 'Up' 'Down' 'Up' 'Up' 'Up' 'Up' 'Up' 'Up' 'Up' 'Up' 'Up' 'Up']\n" ] } ], "source": [ "qda = QuadraticDiscriminantAnalysis()\n", "pred = qda.fit(X_train, y_train).predict(X_test)" ] }, { "cell_type": "code", "execution_count": 67, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([0.49198397, 0.50801603])" ] }, "execution_count": 67, "metadata": {}, "output_type": "execute_result" } ], "source": [ "qda.priors_" ] }, { "cell_type": "code", "execution_count": 68, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[ 0.04279022, 0.03389409],\n", " [-0.03954635, -0.03132544]])" ] }, "execution_count": 68, "metadata": {}, "output_type": "execute_result" } ], "source": [ "qda.means_" ] }, { "cell_type": "code", "execution_count": 69, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " precision recall f1-score support\n", "\n", " Down 0.600 0.270 0.373 111\n", " Up 0.599 0.858 0.706 141\n", "\n", " accuracy 0.599 252\n", " macro avg 0.600 0.564 0.539 252\n", "weighted avg 0.599 0.599 0.559 252\n", "\n" ] } ], "source": [ "print(classification_report(y_test, pred, digits=3))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##### 4.6.5 K-Nearest Neighbors" ] }, { "cell_type": "code", "execution_count": 70, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " precision recall f1-score support\n", "\n", " Down 0.426 0.387 0.406 111\n", " Up 0.550 0.589 0.568 141\n", "\n", " accuracy 0.500 252\n", " macro avg 0.488 0.488 0.487 252\n", "weighted avg 0.495 0.500 0.497 252\n", "\n" ] } ], "source": [ "knn = neighbors.KNeighborsClassifier(n_neighbors=1)\n", "pred = knn.fit(X_train, y_train).predict(X_test)\n", "\n", "print(classification_report(y_test, pred, digits=3))" ] }, { "cell_type": "code", "execution_count": 71, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " precision recall f1-score support\n", "\n", " Down 0.466 0.432 0.449 111\n", " Up 0.577 0.610 0.593 141\n", "\n", " accuracy 0.532 252\n", " macro avg 0.522 0.521 0.521 252\n", "weighted avg 0.528 0.532 0.529 252\n", "\n" ] } ], "source": [ "knn = neighbors.KNeighborsClassifier(n_neighbors=3)\n", "pred = knn.fit(X_train, y_train).predict(X_test)\n", "\n", "print(classification_report(y_test, pred, digits=3))" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " precision recall f1-score support\n", "\n", " 0 0.000 0.000 0.000 111\n", " 1 0.560 1.000 0.718 141\n", "\n", " accuracy 0.560 252\n", " macro avg 0.280 0.500 0.359 252\n", "weighted avg 0.313 0.560 0.401 252\n", "\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/tz89p/Library/Python/3.9/lib/python/site-packages/sklearn/metrics/_classification.py:1469: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n", " _warn_prf(average, modifier, msg_start, len(result))\n", "/Users/tz89p/Library/Python/3.9/lib/python/site-packages/sklearn/metrics/_classification.py:1469: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n", " _warn_prf(average, modifier, msg_start, len(result))\n", "/Users/tz89p/Library/Python/3.9/lib/python/site-packages/sklearn/metrics/_classification.py:1469: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n", " _warn_prf(average, modifier, msg_start, len(result))\n" ] } ], "source": [ "df = pd.read_csv('data/Smarket.csv', usecols=range(1,10), index_col=0, parse_dates=True)\n", "X_train = df[:'2004'][['Lag1','Lag2']].values\n", "y_train = df[:'2004']['Direction'].factorize()[0]\n", "\n", "X_test = df['2005':][['Lag1','Lag2']].values\n", "y_test = df['2005':]['Direction'].factorize()[0]\n", "\n", "clf = skl_lm.LogisticRegression(solver='newton-cg')\n", "clf.fit(X_train, y_train)\n", "\n", "prob = clf.predict_proba(X_test)[:,1]\n", "\n", "pred = prob > 0.4\n", "\n", "print(classification_report(y_test, pred, digits=3))\n", "\n", "\n", "\n", "\n" ] } ], "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.9.6" } }, "nbformat": 4, "nbformat_minor": 1 }