{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Diabetes prediction using sklearn logistic regression\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We will:\n",
    "\n",
    "    1: load our diabetes dataset\n",
    "    2: preprocess data (normalise it)\n",
    "    3: split it (80:20 train:test)\n",
    "    4: train logistic regressor\n",
    "    5: test it against the test set// you can do this bit"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "#1: import relevant packages and load data file akamsdiabetes.csv\n",
    "#load data\n",
    "import pandas as pd\n",
    "diabetes = pd.read_csv(\"akamsdiabetes.csv\")\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "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>PatientID</th>\n",
       "      <th>Pregnancies</th>\n",
       "      <th>PlasmaGlucose</th>\n",
       "      <th>DiastolicBloodPressure</th>\n",
       "      <th>TricepsThickness</th>\n",
       "      <th>SerumInsulin</th>\n",
       "      <th>BMI</th>\n",
       "      <th>DiabetesPedigree</th>\n",
       "      <th>Age</th>\n",
       "      <th>Diabetic</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1354778</td>\n",
       "      <td>0</td>\n",
       "      <td>171</td>\n",
       "      <td>80</td>\n",
       "      <td>34</td>\n",
       "      <td>23</td>\n",
       "      <td>43.509726</td>\n",
       "      <td>1.213191</td>\n",
       "      <td>21</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1147438</td>\n",
       "      <td>8</td>\n",
       "      <td>92</td>\n",
       "      <td>93</td>\n",
       "      <td>47</td>\n",
       "      <td>36</td>\n",
       "      <td>21.240576</td>\n",
       "      <td>0.158365</td>\n",
       "      <td>23</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1640031</td>\n",
       "      <td>7</td>\n",
       "      <td>115</td>\n",
       "      <td>47</td>\n",
       "      <td>52</td>\n",
       "      <td>35</td>\n",
       "      <td>41.511523</td>\n",
       "      <td>0.079019</td>\n",
       "      <td>23</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1883350</td>\n",
       "      <td>9</td>\n",
       "      <td>103</td>\n",
       "      <td>78</td>\n",
       "      <td>25</td>\n",
       "      <td>304</td>\n",
       "      <td>29.582192</td>\n",
       "      <td>1.282870</td>\n",
       "      <td>43</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1424119</td>\n",
       "      <td>1</td>\n",
       "      <td>85</td>\n",
       "      <td>59</td>\n",
       "      <td>27</td>\n",
       "      <td>35</td>\n",
       "      <td>42.604536</td>\n",
       "      <td>0.549542</td>\n",
       "      <td>22</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   PatientID  Pregnancies  PlasmaGlucose  DiastolicBloodPressure  \\\n",
       "0    1354778            0            171                      80   \n",
       "1    1147438            8             92                      93   \n",
       "2    1640031            7            115                      47   \n",
       "3    1883350            9            103                      78   \n",
       "4    1424119            1             85                      59   \n",
       "\n",
       "   TricepsThickness  SerumInsulin        BMI  DiabetesPedigree  Age  Diabetic  \n",
       "0                34            23  43.509726          1.213191   21         0  \n",
       "1                47            36  21.240576          0.158365   23         0  \n",
       "2                52            35  41.511523          0.079019   23         0  \n",
       "3                25           304  29.582192          1.282870   43         1  \n",
       "4                27            35  42.604536          0.549542   22         0  "
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#quick look at our data structure\n",
    "diabetes.head()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "#create train/test datasets\n",
    "#split 80:20\n",
    "from sklearn.model_selection import train_test_split\n",
    "train,test=train_test_split(diabetes,test_size=0.2,random_state=42)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "Int64Index: 8000 entries, 9254 to 7270\n",
      "Data columns (total 10 columns):\n",
      " #   Column                  Non-Null Count  Dtype  \n",
      "---  ------                  --------------  -----  \n",
      " 0   PatientID               8000 non-null   int64  \n",
      " 1   Pregnancies             8000 non-null   int64  \n",
      " 2   PlasmaGlucose           8000 non-null   int64  \n",
      " 3   DiastolicBloodPressure  8000 non-null   int64  \n",
      " 4   TricepsThickness        8000 non-null   int64  \n",
      " 5   SerumInsulin            8000 non-null   int64  \n",
      " 6   BMI                     8000 non-null   float64\n",
      " 7   DiabetesPedigree        8000 non-null   float64\n",
      " 8   Age                     8000 non-null   int64  \n",
      " 9   Diabetic                8000 non-null   int64  \n",
      "dtypes: float64(2), int64(8)\n",
      "memory usage: 687.5 KB\n"
     ]
    }
   ],
   "source": [
    "#quick look at our training data structure\n",
    "train.info()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "Int64Index: 8000 entries, 9254 to 7270\n",
      "Data columns (total 8 columns):\n",
      " #   Column                  Non-Null Count  Dtype  \n",
      "---  ------                  --------------  -----  \n",
      " 0   Pregnancies             8000 non-null   int64  \n",
      " 1   PlasmaGlucose           8000 non-null   int64  \n",
      " 2   DiastolicBloodPressure  8000 non-null   int64  \n",
      " 3   TricepsThickness        8000 non-null   int64  \n",
      " 4   SerumInsulin            8000 non-null   int64  \n",
      " 5   BMI                     8000 non-null   float64\n",
      " 6   DiabetesPedigree        8000 non-null   float64\n",
      " 7   Age                     8000 non-null   int64  \n",
      "dtypes: float64(2), int64(6)\n",
      "memory usage: 562.5 KB\n"
     ]
    }
   ],
   "source": [
    "#target is y\n",
    "y_train=train['Diabetic']\n",
    "y_test=test['Diabetic']\n",
    "#drop the unwanted columns, features are in X\n",
    "X_train=train.drop(['PatientID','Diabetic'],axis=1)\n",
    "X_test=train.drop(['PatientID','Diabetic'],axis=1)\n",
    "X_test.info()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "# normalize\n",
    "from sklearn.preprocessing import MinMaxScaler\n",
    "min_max_scaler=MinMaxScaler()\n",
    "X_train=min_max_scaler.fit_transform(X_train)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[0.42857143, 0.58783784, 0.58064516, ..., 0.7318668 , 0.03992778,\n",
       "        0.01785714],\n",
       "       [0.21428571, 0.7972973 , 0.6344086 , ..., 0.51321579, 0.00874833,\n",
       "        0.01785714],\n",
       "       [0.07142857, 0.07432432, 0.74193548, ..., 0.49851367, 0.06168239,\n",
       "        0.08928571],\n",
       "       ...,\n",
       "       [0.42857143, 0.47297297, 0.49462366, ..., 0.07105176, 0.02107189,\n",
       "        0.26785714],\n",
       "       [0.07142857, 0.41891892, 0.40860215, ..., 0.33078954, 0.01112777,\n",
       "        0.        ],\n",
       "       [0.21428571, 0.53378378, 0.88172043, ..., 0.70527449, 0.17353183,\n",
       "        0.07142857]])"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X_train"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "LogisticRegression()"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.linear_model import LogisticRegression\n",
    "log_res=LogisticRegression()\n",
    "log_res.fit(X_train,y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[1 0 0 ... 1 0 0]\n",
      "9254    1\n",
      "1561    0\n",
      "1670    0\n",
      "6087    0\n",
      "6669    0\n",
      "       ..\n",
      "5734    0\n",
      "5191    0\n",
      "5390    1\n",
      "860     1\n",
      "7270    0\n",
      "Name: Diabetic, Length: 8000, dtype: int64\n"
     ]
    }
   ],
   "source": [
    "from sklearn.model_selection import cross_val_predict\n",
    "\n",
    "y_train_pred=cross_val_predict(log_res,X_train,y_train,cv=3)\n",
    "print(y_train_pred)\n",
    "print(y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[4626,  664],\n",
       "       [1101, 1609]], dtype=int64)"
      ]
     },
     "execution_count": 35,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.metrics import confusion_matrix\n",
    "confusion_matrix(y_train,y_train_pred)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "                            Predicted\n",
    "                          Neg      Pos  \n",
    "     Actual(correct)Neg TN=4626 , FP=664\n",
    "\n",
    "                    Pos FN=1101 , TP=1609\n",
    "                    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "recall is  0.5937269372693726\n",
      "precision is  0.7078750549934008\n"
     ]
    }
   ],
   "source": [
    "TN=4626\n",
    "FP=664\n",
    "FN=1101\n",
    "TP=1609\n",
    "recall= TP/(TP+FN) #what proportion of actual positives were correctly predicted\n",
    "print(\"recall is \",recall) \n",
    "precision = TP/(TP+FP) #what proportion of predicted positives\n",
    "                          #were correctly predicted\n",
    "print (\"precision is \",precision)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYIAAAEGCAYAAABo25JHAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/d3fzzAAAACXBIWXMAAAsTAAALEwEAmpwYAAA3XklEQVR4nO3deZyNdf/H8ddndsPY931fRpJmKBURRStF3bmluyJpuVt090spJaVFd0KINnWr3C0qSSglImWUdSQijJCxjtnnnM/vj3PMPU1jHMw515w5n+fjMY8517muc877spzPtX6+oqoYY4wJXWFOBzDGGOMsKwTGGBPirBAYY0yIs0JgjDEhzgqBMcaEuAinA5ys6tWra+PGjZ2OYYwxQWXVqlWpqlqjqHlBVwgaN25MUlKS0zGMMSaoiMj2482zQ0PGGBPirBAYY0yIs0JgjDEhzgqBMcaEOCsExhgT4vxWCETkdRH5Q0TWH2e+iMhEEdkiImtF5Gx/ZTHGGHN8/twjmAH0Lmb+pUAL789QYKofsxhjjDkOv91HoKpLRKRxMYv0Ad5STx/sFSJSWUTqqOpuf2UyxoSeQxk5bN+fQa7LjcutuFRxuZX07DwOZuQSFR6GAqqKAigoiire5/88jXc51f+95kB6Dtl5bmIi/LNt7crL5cCeFC69IIGuLYu8J+y0OHlDWT1gZ4HpFO9zfykEIjIUz14DDRs2DEg4Y0zJUlXy3MreI1kcSM/BreBWzf9CPTbtVsXthpSDGURHhpHn8nxx/7Y/g5jIMFxuJdelpBzMyP8CX7PzMFXKR5LnUn7ek0ZsVDhuVbJy3QFfT5GSfb/sPb+yf94EXBmHiP3PF2WuEBT1x1XkKDmqOh2YDpCYmGgj6RjjZ0eycknLyiPP5SbXpew5nIUI/9uidin7jmaT51ZcLjdbU9OJCg8jz61sS01HgV//OEp0RBi5bjc7D2SWWLYwgYiwMBDIyXPTvGYF4mIiyMxx0bxmBZrVrMDRrDxa1Y4jMlxIz3bRrGYF6laKISYynPAwITxMCBPP7yqxkQiS/wUuAiKCHHvsnScAhaYLLlcuKpzoiPASW8+srCxGjx7NuP+Mo3r16kx58xWu6eufU6lOFoIUoEGB6frA7w5lMSakuN1K6tFsMnNdfL/tAOtSDrP9QAbhAl9v2nfK71upXCThYcLBjBw6NKjM4cxcEhtVpXNTITvPTfMaFYgID6NahShqVIgGgTARwry/5dhvwK1Qq2I0keFhRIQf+9KOIjI8NC527Nu3LwsWLODmm2/m3//+N1WqVPHbZzlZCOYAd4nILOAc4LCdHzDm9OW53BzJyiM7z8Xvh7L4LTWd77buJzPXxZqdh0g5ePyt84gwoV29StSqGM25TatRJTaKiHAh16XUr1KOCO/W9LEt6tiocM+Xc0QYsZHhhIWV8HGREJOWlkZkZCQxMTGMGDGC+++/n4svvtjvn+u3QiAi7wLdgOoikgI8BkQCqOrLwDzgMmALkAHc7K8sxpQluS43a3YeIi07j/Uph9my7yg5eW7mb9hDhegI0rLyjvvaVrXiaF07jmY1K1C/cjma16xAVEQYFzSvTrUK0QFcC1PYggULGDp0KDfccANPPfUU3bp1C9hn+/OqoQEnmK/Anf76fGOCVXp2Htv3Z7B9fzoHM3JxqZLncrMu5TCzf9p13Nc1r1kBAf7eqSYAjaqVJ8/tpmWtOOpWKkeDquWQkj6TaU7bgQMHGD58OG+++SatW7fm8ssvD3iGoGtDbUxZs+tQJtO++ZUtf3i27JO2Hyx2+Zpx0XRuVo3+CfWpWj6KFjXjiPLTZYvGvxYtWsTAgQPZv38/I0eO5JFHHiEmJibgOawQGBMgKQczWLBhL6lHs5m3bjfloyJI3n3kT8tEhYfRvn4lurSoQXzdijStUZ6q5aOIDAsjKiKM8tH2X7YsqVmzJk2aNGH+/PmcddZZjuWwf1XGlDCXW/l+635+TU3H5XKz/Nf9bP7jKNtS0/OXCROoVTGGy9rVxuVWuraswfUdGxJuJ1vLNFXlzTff5Mcff2TixIm0a9eO5cuXO37IzgqBMadBVclxudlzOIs1KYe5+92filxOBK5sX5euLapzUeuadmI2BG3bto3bbruNL774gi5dupCZmUm5cqXjvI0VAmNOws97jvDdr/vZlprOzgMZRV5zHxku/L1TQ645uz61KsZQOTaSmMiSu9HIBBeXy8XkyZN56KGHCAsLY8qUKdx2222EhZWe8zpWCIw5jjyXm1eWbmPp5n1k5rr4eXcambmuPy1TIy6atnUrckHz6oSJcGm72tSpVM6hxKY0Sk1NZdSoUVx44YW8/PLLpbJNjhUCE9JUlSWbU0k5mMGG34+w53AWGTl5rNh64E/Lta1bkVa146hbOYa/dWzImfUqUTk2slTs1pvSJzc3l7fffpsbb7yRWrVq8eOPP9KkSZNS++/FCoEJOXkuN19u3Msnq3/n8/V7/jI/TOCMehWJjYzgvObVuOLMOjSvGedAUhOMVq1axS233MLatWupU6cOvXr1omnTpk7HKpYVAhNSFmzYw23/WfWn5xpWjWXaoATqVylHXEykQ8lMsMvMzGT06NE8//zz1KxZk48++ohevXo5HcsnVghMmaaq/LL3KHPW7GLy17/mP9/nrLo82Ls1dSvb8XxTMvr27cvChQsZMmQI48aNo3Llyk5H8pl4Oj0Ej8TERE1KSnI6hinFkn47wKyVO/lxx0G27kv/07ym1cvz8qAEWtayQz3m9B05coSoqChiYmL45ptvyMvLo0ePHk7HKpKIrFLVxKLm2R6BKTPyXG7+8cYPLNuyP/+5S+JrUbtSDBe2rMH5zavbZZymxMybN49hw4Zxww03MHbsWC688EKnI50yKwQmqK3afoCXvtryl+v5pw1KoFfb2g6lMmVZamoq9913HzNnziQ+Pp6rrrrK6UinzQqBCTobfj/M69/+xoc/pvzp+Z5tatGzTU3+1rFBqb1MzwS3L774goEDB3Lw4EFGjRrFww8/THR08N8lboXABIU/0rJ4b+VO5qz5nV/2Hs1//uyGlRl7TTta167oYDoTKurUqUPLli2ZOnUq7dq1czpOibFCYEq11KPZJD755Z+eu7J9Xa5NqO+5m9eatBk/UlVee+01fvrpJyZPnswZZ5zB0qVLy9wepxUCUyqlHs3mvv+uZunm1PznJg7owKVn1A6ZMWuNs7Zu3cqtt97KV199Rbdu3UpVk7iSZoXAlBp5Ls+gLO8l7WT2j/8biat/Qn2ev7a9g8lMKHG5XEycOJGRI0cSERHBtGnTGDJkSKlqElfSrBAYx+W63PSfupw1KYfzn6sSG8mNnRtzb88WZXILzJReqampjB49mh49ejB16lTq16/vdCS/s0JgHDNnze9/6d9/+Zl1GNCxIRe0qO5QKhOKcnJymDlzJjfddBO1atVi9erVNGrUKGQ2QqwQmIBbvfMQfScv+9Nzt3ZpwsOXtQmZ/3im9Fi5ciW33HIL69evp379+lxyySU0btzY6VgBZYXABEROnptXlm7l3ws34fZ2NakSG8mi+7tRtXyUs+FMSMrIyGDUqFGMHz+eOnXqMGfOHC655BKnYznCCoHxq7SsXO777xq+3Lg3/7lK5SJ55cZEOjWp6mAyE+r69OnDl19+ydChQ3nuueeoVKmS05EcY03njF/8lprOrW8lsfmP/938NezCZtx+YTMqxVqrZ+OMw4cPEx0dTUxMDEuWLMHlctG9e3enYwWENZ0zAfNHWhaXT/yWfWnZ+c89ekU8N3ZuZNf/G0fNnTuXYcOGMWjQIJ5++mm6du3qdKRSwwqBKTHfbk7lhte+B6BRtVjG9W9PQqMqhNvdv8ZB+/bt45577uHdd9+lXbt2XHPNNU5HKnWsEJjTkpaVy3tJKYyZm5z/3MOXtWZo12YOpjLGY+HChQwcOJDDhw8zevRoRowYQVSUXZxQmBUCc0pUlVtmrPxT++fmNSswdeDZtLBBX0wpUa9ePdq0acPUqVNp27at03FKLSsE5qSoKo9+sp6ZK3bkP3d7t2bc2qWpXQZqHOd2u3n11Vf56aef8r/8lyxZ4nSsUs8KgfFZRk4e8aMW5E+3rh3H6zd1tHF/TamwZcsWbr31VhYvXkz37t3zm8SZE7NCYHySnp1H28f+VwSWjbiIelYATCngcrl48cUXefTRR4mMjOSVV15h8ODBdpf6SfDr9Xwi0ltENonIFhEZUcT8SiLyqYisEZENInKzP/OYU7MvLTu/CERFhPHbM5dbETClRmpqKk8++SQXX3wxycnJDBkyxIrASfJbIRCRcGAycCkQDwwQkfhCi90JJKtqe6Ab8G8RsQPNpcjDH62j41OegWFuu7Apm8b0djiRMZCdnc0rr7yC2+3ObxL38ccfU69ePaejBSV/7hF0Arao6lZVzQFmAX0KLaNAnHjKdwXgAJDnx0zmJMxd+zvvfO85KTzh+rN46FJrCmec9/3335OQkMDQoUP58kvPRkoodQr1B38WgnrAzgLTKd7nCnoJaAP8DqwD7lFVd+E3EpGhIpIkIkn79u0rPNuUMLdbufvdn7jrHU+L6Cf7nkGfs2xLyzgrPT2d4cOH07lzZw4fPsxnn30Wsk3iSpo/TxYXVZ4LNzbqBawGLgKaAV+IyFJVPfKnF6lOB6aDp9dQyUc1x6gqTR+elz89+47zOLthFQcTGePRt29fvvzyS26//XaeeeYZKlas6HSkMsOfewQpQIMC0/XxbPkXdDMwWz22ANuA1n7MZIrhditNHvpfEUh+opcVAeOoQ4cOkZmZCcCoUaP45ptvmDJlihWBEubPQrASaCEiTbwngK8H5hRaZgfQA0BEagGtgK1+zGSO448jWfl7AvUql+O3Zy4nNsquLjbOmTNnDm3btmX06NEAdOnSxRrF+YnfCoGq5gF3AQuAjcB7qrpBRIaJyDDvYmOA80RkHbAIeFBVU/2VyRTtw1UpdBq7KH96wX32n804548//uD666+nT58+VK9enf79+zsdqczz6yafqs4D5hV67uUCj38H7GyPQ3YeyOCRj9fzzS+eE/CPXRnPzec3cTiVCWXz589n4MCBHD16lDFjxvDggw8SGWnjV/ib7fuHqDyXmy7PfZ0//eHtnUloZCOGGWc1aNCAdu3aMWXKFOLjC992ZPzFCkEISsvKpd3jCwG4JL4Wk/7egeiIcIdTmVDkdruZNm0aq1evZtq0abRt25bFixc7HSvk2JBRIWbXocz8ItC6dhzTBiVYETCO+OWXX+jWrRt33HEH27ZtIysry+lIIcsKQQj5fN1uzn/mKwCqxEYy/96udjemCbi8vDyeffZZzjzzTNatW8cbb7zBggULiImJcTpayLJDQyHi4Y/W5beLGNq1KQ9f1sbhRCZU7d+/n2effZbLLruMyZMnU6dOHacjhTwrBGWcqvK3aSv44bcDADx+ZTw32ZVBJsCys7OZMWMGt956K7Vq1WLNmjU0aNDgxC80AWGFoAzbvDeNflOXcyQrDxFIHt2bclF2PsAE1nfffcfgwYPZuHEjzZo1o2fPnlYEShk7R1AGbd+fztljvuDi8Us4kuVp5rrxCSsCJrCOHj3Kvffey/nnn096ejrz58+nZ8+eTscyRbA9gjJm/vo9DJu5CoDqFaIZd+2ZXNC8OpHhVvNNYPXt25dFixZx1113MXbsWOLi4pyOZI5DVIOrmWdiYqImJSU5HaNUOpieQ4cxXwAwpu8ZDDq3kcOJTKg5ePAgMTExlCtXjm+//RaACy64wOFUBkBEVqlqYlHzfN5MFJHyJRfJ+MN1074DYPAFTawImICbPXs28fHxPP7444CnAFgRCA4nLAQicp6IJONpHIeItBeRKX5PZk7Kk3OT2fzHUQAevcJuzTeBs2fPHvr370+/fv2oXbs2119/vdORzEnyZY9gPJ4BZPYDqOoawNpTliJz1/7Oq99uA2Dt49bDzwTO559/Tnx8PHPnzmXs2LH88MMPdOjQwelY5iT5dLJYVXcWugPV5Z845mTd/e5PzFnjGe/n9m7NqBhjnRpN4DRq1IgOHTowefJkWre2MaWClS+FYKeInAeod4CZu/EeJjLOevCDtflFIOmRnlSvEO1wIlPWud1upkyZwpo1a3jllVeIj49n0aJFJ36hKdV8KQTDgAl4Bp5PARYCd/gzlCleZo6LNqPm50//8HAPKwLG7zZt2sTgwYNZtmwZvXr1Iisry/oDlRG+nCNopaoDVbWWqtZU1RsAa1TjoElfbc5/vGzERdSsaP8Zjf/k5uby9NNP0759e5KTk5kxYwaff/65FYEyxJc9gknA2T48Z/ws5WAGD81ex9LNntE8fx7Tm5hIu1vY+NfBgwcZN24cV155JZMmTaJ27dpORzIl7LiFQEQ6A+cBNURkeIFZFQH79gmwz9bu5s53fsyffrB3aysCxm+ysrJ4/fXXGTZsGDVr1mTt2rXUr1/f6VjGT4rbI4gCKniXKXhv+BHARpMOoG2p6flF4PZuzXiwt12dYfzn22+/ZfDgwfzyyy+0bNmSnj17WhEo445bCFT1G+AbEZmhqtsDmMkUMnjGSgCGXNDEioDxm7S0NB566CEmT55M48aNWbhwoTWJCxG+nCPIEJFxQFsg/+yQql7kt1QmX9JvB9iamk6T6uV5xO4YNn7Ut29fvv76a+655x6efPJJKlSo4HQkEyC+FIK3gf8CV+C5lPQfwD5/hjIeWbku+r/s6R/02JVWBEzJO3DgADExMcTGxjJmzBhEhM6dOzsdywSYL5ePVlPV14BcVf1GVW8BzvVzLgO85m0b0b1VDbq1qulwGlPWfPDBB7Rp0ya/Sdx5551nRSBE+VIIcr2/d4vI5SLSAbAzR36W53IzbsEmAEZfdYbDaUxZsnv3bq655hquvfZaGjRowMCBA52OZBzmy6GhJ0WkEnA/nvsHKgL3+jOUgYGvfg/A5WfWoWG1WIfTmLLis88+44YbbiArK4tnn32W4cOHExFh41OFuhP+C1DVud6Hh4HuACJyvj9DhbrJX2/h+20HiAoPY9L11snRlJymTZvSsWNHXnrpJVq2bOl0HFNKHPfQkIiEi8gAEfmXiJzhfe4KEVkOvBSwhCHG5db8Q0Izh5xDWJic4BXGHJ/L5WLChAkMHjwYgDZt2rBw4UIrAuZPitsjeA1oAPwATBSR7UBnYISqfhyAbCEnM8dFzxe+AWBApwZ0alLV4UQmmCUnJzNkyBC+++47LrvsMmsSZ46ruEKQCJypqm4RiQFSgeaquicw0ULPsY6i5aPCeezKtg6nMcEqJyeH5557jjFjxhAXF8fMmTP5+9//TqExRYzJV9xVQzmq6gZQ1Szgl5MtAiLSW0Q2icgWERlxnGW6ichqEdkgIt+czPuXJRO+/F9H0fWje1kfIXPKDh06xPjx47n66qtJTk5m4MCBVgRMsYrbI2gtImu9jwVo5p0WQFX1zOLeWETCgcnAxXjGMVgpInNUNbnAMpWBKUBvVd0hIiF7sfz4L38BYOn/dbf/tOakZWZm8tprr3HHHXdQs2ZN1q1bR926dZ2OZYJEcYXgdMcc6ARsUdWtACIyC+gDJBdY5u/AbFXdAaCqf5zmZwal2T+mANCxcRUaVLVLRc3JWbJkCUOGDGHz5s20adOGHj16WBEwJ+W4h4ZUdXtxPz68dz1gZ4HpFO9zBbUEqojIYhFZJSI3FvVGIjJURJJEJGnfvrLV3UJVGf7eGspHhfP2ELth2/juyJEj3HHHHVx44YXk5eXx5Zdf0qNHD6djmSDkzztJijq+oUV8fgLQAygHfCciK1T1lz+9SHU6MB0gMTGx8HsErTyXm2EzVwHQuVl1oiJ8udHbGI++ffuyePFi7rvvPsaMGUP58uWdjmSClD8LQQqey0+PqQ/8XsQyqaqaDqSLyBKgPfALZdzhzFzOHbuIzFwXAA9dZu2lzYmlpqYSGxtLbGwsTz31FCLCuefanqQ5PT5tgopIORFpdZLvvRJoISJNRCQKuB6YU2iZT4AuIhIhIrHAOcDGk/ycoLPrUCbtRy8kM9dF42qxbB17Gc1qWMtfc3yqyqxZs2jTpg2PPfYYAJ07d7YiYErECQuBiFwJrAbme6fPEpHCX+h/oap5wF3AAjxf7u+p6gYRGSYiw7zLbPS+71o8N669qqrrT3FdgsLHP+3i/Ge+AqBlrQosfqC73T1sirVr1y769u3LgAEDaNKkCTfeWOSpNGNOmagWf8hdRFYBFwGLVbWD97m1J7p81F8SExM1KSnJiY8uEY1HfAbA09e0Y0Cnhg6nMaXd3LlzGThwILm5uYwZM4Z7772X8HC7x8ScPBFZpaqJRc3z5RxBnqoetmvbT9/mvWkAtKoVZ0XA+KR58+acd955TJo0iebNmzsdx5RRvpwjWC8ifwfCRaSFiEwClvs5V5mzfX86F49fAsD9l1jDL1M0l8vF+PHjuemmmwBo3bo1n3/+uRUB41e+FIJ/4hmvOBt4B0876nv9mKlMunTCUgCiI8K4pG1th9OY0mjDhg2cf/75DB8+nNTUVLKyspyOZEKEL4WglaqOVNWO3p9HvL2HjI92HsggI8dFtfJRbHryUqfjmFImJyeHJ554gg4dOvDrr7/yzjvv8Omnn1qnUBMwvhSCF0TkZxEZIyLWEvMUPP2554rYJ/rYkJPmrw4dOsTEiRO59tprSU5OZsCAAdZvygTUCQuBqnYHugH7gOkisk5EHvF3sLJi+ZZU5q3zNG3t1baWw2lMaZGRkcGECRNwuVz5TeLefvttatSo4XQ0E4J8uqFMVfeo6kRgGJ57Ckb5M1RZ8nfv2MNv3NyRiHBrIWHg66+/pl27dtx7770sXrwYgDp16jgbyoQ0X24oayMij4vIejxDVC7H0y7CnMDWfUcBKBcZTvdWIdth23gdPnyY2267jYsuuggR4euvv7YmcaZU8OU+gjeAd4FLVLVwryBTjP4vfwdYHyHj0bdvX5YsWcIDDzzA448/TmystRw3pcMJC4GqWjOTU/DzniMcSM+hfpVy3Ni5sdNxjEP27dtH+fLliY2N5emnnyY8PJyOHTs6HcuYPznuoSERec/7e52IrC3ws67AyGXmOB77ZAMA4/q3dziJcYKq8s477/ypSdy5555rRcCUSsXtEdzj/X1FIIKUJTNXbOf7bQcAOLdpVYfTmEBLSUnh9ttvZ+7cuZxzzjn5dwkbU1oVN0LZbu/DO4oYneyOwMQLTtOXbAXg2wdt/OFQM2fOHOLj4/nqq68YP348y5Yto21bu/3GlG6+XM94cRHP2e2xRXC5lT6Tl7HjQAbdW9WgfhU7GRhqWrZsyQUXXMC6deusU6gJGsc9NCQit+PZ8m9a6JxAHLDM38GC0ZSvt7Bm5yEARl9ldxGHgry8PF588UXWrl3LW2+9RevWrZk3b57TsYw5KcWdI3gH+Bx4GhhR4Pk0VT3g11RB6rut+wFYM+oSKsVGOpzG+NvatWsZPHgwSUlJ9OnTh6ysLOsPZIJScYeGVFV/A+4E0gr8ICJ2BrSQI1m5LP91P1ecWceKQBmXnZ3NY489RkJCAjt27OC9997jo48+siJggtaJ9giuAFYBChQ866lAUz/mCjpTF/8KQEKjKg4nMf525MgRpkyZwoABAxg/fjzVqlVzOpIxp+W4hUBVr/D+bhK4OMFJVfMLQb8E675RFqWnpzN9+nTuvvtuatSowfr166lVy5oImrLBl15D54tIee/jG0TkBRGxcRYL6Pb8YgDOrF+JijF2WKisWbRoEe3atWP48OF88803AFYETJniy+WjU4EMEWkP/B+wHfiPX1MFEVVl+/4MAD68/TyH05iSdOjQIYYMGULPnj2JiIjgm2++4aKLLnI6ljElzpdCkKeqCvQBJqjqBDyXkBpg+HtrAOhzVl0irc10mXL11VczY8YMHnzwQdasWUPXrl2djmSMX/jSfTRNRB4CBgFdRCQcsOMfXh/9tAuAZ/ud6XASUxL27t1LhQoVKF++PM888wwREREkJCQ4HcsYv/JlE/ZveAauv0VV9wD1gHF+TRUkhv93NQBdW9YgJtLuIA1mqsp//vMf4uPj85vEnXPOOVYETEjwZajKPcDbQCURuQLIUtW3/J6slPvPiu3M9u4NvHCddRgNZjt27ODyyy/nxhtvpFWrVgwePNjpSMYElC9XDV0H/ABcC1wHfC8i/f0drLR7YeEmAFaO7En1CtEOpzGn6pNPPqFt27YsWbKEiRMnsnTpUtq0aeN0LGMCypdzBCOBjqr6B4CI1AC+BD7wZ7DS7EB6Dgczcrm6Qz1qxFkRCEaqiojQunVrunXrxqRJk2jcuLHTsYxxhC/nCMKOFQGv/T6+rsy6Z9ZPAFzYsobDSczJysvL49lnn2XQoEEAtGrVik8//dSKgAlpvnyhzxeRBSJyk4jcBHwGhHR7xaWbUwHo26Gew0nMyVizZg3nnHMOI0aMICMjg6ysLKcjGVMq+HKy+AFgGnAm0B6YrqoP+jtYaTVl8RYALo63O0uDRVZWFo888giJiYns2rWLDz74gNmzZ1uTOGO8ihuPoAXwPNAMWAf8S1V3BSpYaeR2K+MWeE4Sj77KRp0KFmlpaUybNo2BAwfywgsvULWqNc81pqDi9gheB+YC/fB0IJ10sm8uIr1FZJOIbBGREcUs11FEXKX9aqRhM1ehCjed15i6lcs5HccU4+jRozz//PO4XC5q1KhBcnIyM2bMsCJgTBGKu2ooTlVf8T7eJCI/nswbe+9AnoxnqMsUYKWIzFHV5CKWexZYcDLvH2ib96axMHkvAKOuiHc4jSnOwoULGTp0KDt27CAhIYHu3btTo4ad2DfmeIrbI4gRkQ4icraInA2UKzR9Ip2ALaq6VVVzgFl4+hUV9k/gQ+CPIuaVGiu8o4+9PeQcwsJsQPrS6MCBA9x888306tWLmJgYli5dSvfu3Z2OZUypV9wewW7ghQLTewpMK3CiNoz1gJ0FplOAcwouICL1gKu979XxeG8kIkOBoQANGzrTAfvRTzYA0KZORUc+35zY1VdfzbJly3j44Yd59NFH7WSwMT4qbmCa092UKmqzWQtNvwg8qKoukeNvZavqdGA6QGJiYuH3CKiq5aOc/HhTyJ49e4iLi6N8+fKMGzeOqKgozjrrLKdjGRNU/HljWArQoMB0feD3QsskArNE5DegPzBFRPr6MdMp+XqT56jVgE4NTrCkCRRVZcaMGcTHxzNq1CgAOnXqZEXAmFPgz0KwEmghIk1EJAq4HphTcAFVbaKqjVW1MZ6WFXeo6sd+zHRKHvloPQD39GjpcBID8Ntvv9G7d29uvvlm2rZty9ChQ52OZExQ86XX0ClR1TwRuQvP1UDhwOuqukFEhnnnv+yvzy5J4xb8zK5DmTSqFkvtSnbM2WkfffQRgwYNQkR46aWXuP322wkLC+mOJ8acthMWAvEcvB8INFXVJ7zjFddW1R9O9FpVnUehdhTHKwCqepNPiQNs8teeQekfudwuGXXSsSZxbdu2pWfPnkyYMIFGjRo5HcuYMsGXTakpQGdggHc6Dc/9AWVedp4LgMRGVaylhENyc3MZO3YsAwcOBKBly5Z8/PHHVgSMKUG+FIJzVPVOIAtAVQ8CIXHpzPpdRwBIaFzF4SSh6ccff6RTp06MHDkSl8tFdna205GMKZN8KQS53rt/FfLHI3D7NVUpccfbqwC4JL62w0lCS2ZmJg899BCdOnViz549fPTRR/z3v/8lOtrGfjDGH3wpBBOBj4CaIvIU8C0w1q+pSoG9R7LYeySbOpViSGhkewSBlJ6ezmuvvcY//vEPkpOT6du3r9ORjCnTTniyWFXfFpFVQA88N4n1VdWNfk/msOlLtgLWZTRQ0tLSmDp1Kvfffz/Vq1cnOTmZ6tWrOx3LmJDgy5jFDYEM4FM89wGke58r0177dhsAXW0UMr+bP38+Z5xxBiNGjGDp0qUAVgSMCSBf7iP4DM/5AQFigCbAJqDMbir/uOMgAB0aViYmMtzhNGXX/v37GT58OG+99RZt2rRh2bJldO7c2elYxoQcXw4NtSs47e08epvfEpUCU772jEL2QK9WDicp26655hqWL1/Oo48+ysiRI+1ksDEOOek7i1X1RxE5bqfQsmD5r/sJDxPOa2aHJ0ra7t27iYuLo0KFCjz//PNERUXRvn17p2MZE9J8ubN4eIHJMOBsYJ/fEjls/a7DZOS4aFwt1ukoZYqq8sYbbzB8+HBuueUWXnjhBTp2LNPbE8YEDV8uH40r8BON55xBUQPMlAkjP1oHwGN2tVCJ2bp1K5dccgmDBw+mffv2DBs2zOlIxpgCit0j8N5IVkFVHwhQHscdyswFoHurmg4nKRtmz57NoEGDCA8PZ+rUqQwdOtSaxBlTyhy3EIhIhLeDqC/DUpYJB9Nz2L4/g390tj42p+tYk7h27drRu3dvXnzxRRo0sPEcjCmNitsj+AHP+YDVIjIHeB9IPzZTVWf7OVvATVi0GYCOTao6nCR45eTk8Nxzz7FhwwbeeecdWrRowYcffuh0LGNMMXzZR68K7MczrvAVwJXe32XO3LW7Abj0jDoOJwlOSUlJdOzYkUcffRTwFAVjTOlX3B5BTe8VQ+v53w1lxzg6brC/pB7NJi4mgvCw44+fbP4qMzOTxx57jH//+9/Url2bTz75hKuuusrpWMYYHxVXCMKBCvg2CH3Q27rvKAAXWkuJk5aens6MGTMYPHgwzz33HJUrV3Y6kjHmJBRXCHar6hMBS+KwL5L3AtCrrbWc9sWRI0eYMmUKDzzwANWrV2fjxo1Uq1bN6VjGmFNQ3DmCkDo+Mn/DHgB6tLHLRk/ks88+o23btowcOTK/SZwVAWOCV3GFoEfAUjjsj7QsftpxCIDYqJPuuhEy9u3bx8CBA7niiiuoVKkSy5cvp1u3bk7HMsacpuN+66nqgUAGcdK4+ZsAuP/ilg4nKd369evHihUrePzxx3nooYeIigqJEUuNKfNs8xfIyPUMUn9H9+YOJyl9du3aRaVKlahQoQLjx48nOjqaM844w+lYxpgSZPf6A5+t3U3NuGi7bLQAVeWVV14hPj6eUaNGAZCQkGBFwJgyKOQLwartnkFo/kjLdjhJ6fHrr7/So0cPhg4dSkJCAnfeeafTkYwxfhTyheD7bfsBmDigg8NJSocPPviAdu3asWrVKqZPn86iRYto1qyZ07GMMX4U8ucIlvziGVrh4ja1HE7irGNN4tq3b8/ll1/O+PHjqV+/vtOxjDEBEPJ7BCu2ei6OKhcVmmMT5+TkMHr0aK6//npUlRYtWvD+++9bETAmhIR0IXC7PZ0yLmsXmncT//DDDyQkJPD4448TERFhTeKMCVEhXQj2HfWcIG5crbzDSQIrIyODf/3rX3Tu3JmDBw/y6aef8vbbb9vg8caEqJAuBLsPZwHQuHpoFYLMzExmzpzJ0KFDSU5O5oorymRXcWOMj/xaCESkt4hsEpEtIjKiiPkDRWSt92e5iLT3Z57Cfkv1jLNTNbbs3yF7+PBhnnrqKfLy8qhWrRobN25k6tSpVKxY0eloxhiH+a0QeMc7ngxcCsQDA0QkvtBi24ALVfVMYAww3V95is7o+d2kRtneI/j000/zbwz79ttvAahSpYrDqYwxpYU/9wg6AVtUdauq5gCzgD4FF1DV5ap60Du5AgjopSrLt3juIYiJLJtXDO3bt48BAwZw1VVXUa1aNb7//ntrEmeM+Qt/FoJ6wM4C0yne545nMPB5UTNEZKiIJIlI0r59+0os4H+TPPFqV4wpsfcsTfr168eHH37IE088QVJSEomJiU5HMsaUQv68ocznkc1EpDueQnBBUfNVdTrew0aJiYklMjpaTp4bgArRZWtoypSUFCpXrkyFChV48cUXiY6Opm3btk7HMsaUYv7cI0gBGhSYrg/8XnghETkTeBXoo6r7/ZjnT77e9AcAV3cobicleLjdbqZNm0Z8fHz+4PFnn322FQFjzAn5sxCsBFqISBMRiQKuB+YUXEBEGgKzgUGq+osfs/zF5r1pAAzp0iSQH+sXmzdv5qKLLmLYsGF06tSJf/7zn05HMsYEEb8dGlLVPBG5C1gAhAOvq+oGERnmnf8yMAqoBkwRzyU8eaoakAPZG3enESZQr3K5QHyc37z//vvceOONREdH89prr3HzzTcjUnYOdRlj/M+vTedUdR4wr9BzLxd4PAQY4s8Mx/PZOs8YBBHhwXlP3bEmcR06dKBPnz688MIL1K1b1+lYxpggFJzfgqcpIycPgG6tajic5ORlZ2czatQorrvuOlSV5s2bM2vWLCsCxphTFpKFYMVWzznpdvUqOZzk5KxYsYKzzz6bMWPGUK5cOWsSZ4wpESFZCN5bmQLAxfHB0XU0PT2d++67j/POO4+0tDTmzZvHW2+9ZU3ijDElIiQLQXSkZ7VrVwqOG8mysrKYNWsWd9xxBxs2bODSSy91OpIxpgwJyRHK0rNdNC3l/YUOHTrEpEmTeOihh/KbxFWuXNnpWMaYMigk9whWbN1PeCm+xPLjjz8mPj6e0aNHs3z5cgArAsYYvwm5QpCV6+Jodh7t6pe+E8V79+7luuuu4+qrr6ZmzZp8//33dO3a1elYxpgyLuQODe1P91xp06BKrMNJ/qp///788MMPPPnkk/zf//0fkZGRTkcyxoSAkCsEX23cC5SeO4p37NhBlSpViIuLY+LEiURHRxMfX3jYBmOM8Z+QOzS0eudhwPmbydxuN5MnT6Zt27aMGjUKgA4dOlgRMMYEXMgVgl/2plGpXCQ1HRyDYNOmTVx44YXcdddddO7cmXvuucexLMYYE1KFwO1W1u06TBMHB6t/7733aN++PevXr+eNN95gwYIFNG7c2LE8xhgTUoUgx+UZjKZDw8oB/2xVz3g6CQkJXHPNNWzcuJGbbrrJOoUaYxwXUoXgaLan2VzdSoE7UZyVlcXIkSPp378/qkqzZs145513qF07ONpbGGPKvpAqBEcycwHQokfMLHHLly+nQ4cOjB07lri4OGsSZ4wplUKqEBzM8HwR1/fzPQRHjx7l7rvv5oILLiAjI4P58+czY8YMaxJnjCmVQqoQrN91BPD/zWQ5OTl88MEH3Hnnnaxfv55evXr59fOMMeZ0hNQNZcfOy1arEFXi733gwAEmTpzII488QtWqVdm4cSOVKpW+NhbGGFNYSO0R5Lk85wbKR5Vs/fvwww+Jj4/nySefzG8SZ0XAGBMsQqoQuNyeQhBWQmu9e/du+vXrR//+/albty5JSUnWJM4YE3RC6tDQsctHI0qoElx33XWsXLmSZ555hvvvv5+IiJD64zTGlBEh9c2140AG5SLDiY449UKwfft2qlatSlxcHJMmTaJcuXK0atWqBFMaY0xghdShoZ0HMmhaozxhYSd/N6/b7WbSpEm0bduWRx99FICzzjrLioAxJuiFVCFIOZhJzbiTv5b/559/pmvXrtx999106dKF++67zw/pjDHGGSFVCFKPZnMwI/ekXjNr1izat2/Pxo0beeutt5g3bx6NGjXyU0JjjAm8kCoEEeHCGfUq+rSs2+1pUNexY0euvfZakpOTGTRokDWJM8aUOSFVCABiT3APQWZmJiNGjKBfv375TeJmzpxJrVq1ApTQGGMCK6QKgdsNYcVs0S9dupSzzjqLZ599lmrVqpGbe3KHkYwxJhiFTCFwuZUcl5vwItY4LS2NO++8k65du5Kbm8sXX3zBq6++SlRUybeiMMaY0iZkCsGxm8kyc9x/mZebm8vHH3/Mvffey7p16+jZs2eg4xljjGNC5oaynDxPAWhc3dN5dP/+/UyYMIFRo0ZRtWpVfv75Z+Li4pyMaIwxjvDrHoGI9BaRTSKyRURGFDFfRGSid/5aETnbX1lSj2YDkJ3r4v333yc+Pp6nn36a7777DsCKgDEmZPmtEIhIODAZuBSIBwaISHyhxS4FWnh/hgJT/ZVnz+Es8tL2M2P0XVx33XU0aNCApKQkunTp4q+PNMaYoODPPYJOwBZV3aqqOcAsoE+hZfoAb6nHCqCyiNTxR5jsPDepnzzLqmWLee6551ixYgXt27f3x0cZY0xQ8ec5gnrAzgLTKcA5PixTD9hdcCERGYpnj4GGDRueUpgacVFcefsj3Nv7DM5PaHdK72GMMWWRPwtBURfsFx413pdlUNXpwHSAxMTEUxp5PqFRVd4fOeBUXmqMMWWaPw8NpQANCkzXB34/hWWMMcb4kT8LwUqghYg0EZEo4HpgTqFl5gA3eq8eOhc4rKq7C7+RMcYY//HboSFVzRORu4AFQDjwuqpuEJFh3vkvA/OAy4AtQAZws7/yGGOMKZpfbyhT1Xl4vuwLPvdygccK3OnPDMYYY4oXMi0mjDHGFM0KgTHGhDgrBMYYE+KsEBhjTIgTz/na4CEi+4Dtp/jy6kBqCcYJBrbOocHWOTSczjo3UtUaRc0IukJwOkQkSVUTnc4RSLbOocHWOTT4a53t0JAxxoQ4KwTGGBPiQq0QTHc6gANsnUODrXNo8Ms6h9Q5AmOMMX8VansExhhjCrFCYIwxIa5MFgIR6S0im0Rki4iMKGK+iMhE7/y1InK2EzlLkg/rPNC7rmtFZLmIBP04nSda5wLLdRQRl4j0D2Q+f/BlnUWkm4isFpENIvJNoDOWNB/+bVcSkU9FZI13nYO6i7GIvC4if4jI+uPML/nvL1UtUz94Wl7/CjQFooA1QHyhZS4DPsczQtq5wPdO5w7AOp8HVPE+vjQU1rnAcl/h6YLb3+ncAfh7rgwkAw290zWdzh2AdX4YeNb7uAZwAIhyOvtprHNX4Gxg/XHml/j3V1ncI+gEbFHVraqaA8wC+hRapg/wlnqsACqLSJ1ABy1BJ1xnVV2uqge9kyvwjAYXzHz5ewb4J/Ah8Ecgw/mJL+v8d2C2qu4AUNVgX29f1lmBOBERoAKeQpAX2JglR1WX4FmH4ynx76+yWAjqATsLTKd4nzvZZYLJya7PYDxbFMHshOssIvWAq4GXKRt8+XtuCVQRkcUiskpEbgxYOv/wZZ1fAtrgGeZ2HXCPqroDE88RJf795deBaRwiRTxX+BpZX5YJJj6vj4h0x1MILvBrIv/zZZ1fBB5UVZdnYzHo+bLOEUAC0AMoB3wnIitU9Rd/h/MTX9a5F7AauAhoBnwhIktV9YifszmlxL+/ymIhSAEaFJiuj2dL4WSXCSY+rY+InAm8ClyqqvsDlM1ffFnnRGCWtwhUBy4TkTxV/TggCUuer/+2U1U1HUgXkSVAeyBYC4Ev63wz8Ix6DqBvEZFtQGvgh8BEDLgS//4qi4eGVgItRKSJiEQB1wNzCi0zB7jRe/b9XOCwqu4OdNASdMJ1FpGGwGxgUBBvHRZ0wnVW1Saq2lhVGwMfAHcEcREA3/5tfwJ0EZEIEYkFzgE2BjhnSfJlnXfg2QNCRGoBrYCtAU0ZWCX+/VXm9ghUNU9E7gIW4Lni4HVV3SAiw7zzX8ZzBcllwBYgA88WRdDycZ1HAdWAKd4t5DwN4s6NPq5zmeLLOqvqRhGZD6wF3MCrqlrkZYjBwMe/5zHADBFZh+ewyYOqGrTtqUXkXaAbUF1EUoDHgEjw3/eXtZgwxpgQVxYPDRljjDkJVgiMMSbEWSEwxpgQZ4XAGGNCnBUCY4wJcVYITKnk7Ra6usBP42KWPVoCnzdDRLZ5P+tHEel8Cu/xqojEex8/XGje8tPN6H2fY38u670dNyufYPmzROSykvhsU3bZ5aOmVBKRo6paoaSXLeY9ZgBzVfUDEbkEeF5VzzyN9zvtTCd6XxF5E/hFVZ8qZvmbgERVvauks5iyw/YITFAQkQoissi7tb5ORP7SaVRE6ojIkgJbzF28z18iIt95X/u+iJzoC3oJ0Nz72uHe91ovIvd6nysvIp95+9+vF5G/eZ9fLCKJIvIMUM6b423vvKPe3/8tuIXu3RPpJyLhIjJORFaKp8f8bT78sXyHt9mYiHQSzzgTP3l/t/LeifsE8Ddvlr95s7/u/ZyfivpzNCHI6d7b9mM/Rf0ALjyNxFYDH+G5C76id151PHdVHtujPer9fT8w0vs4HIjzLrsEKO99/kFgVBGfNwPveAXAtcD3eJq3rQPK42lvvAHoAPQDXinw2kre34vxbH3nZyqwzLGMVwNveh9H4ekiWQ4YCjzifT4aSAKaFJHzaIH1ex/o7Z2uCER4H/cEPvQ+vgl4qcDrxwI3eB9XxtODqLzTf9/24+xPmWsxYcqMTFU969iEiEQCY0WkK57WCfWAWsCeAq9ZCbzuXfZjVV0tIhcC8cAyb2uNKDxb0kUZJyKPAPvwdGjtAXykngZuiMhsoAswH3heRJ7Fczhp6Ums1+fARBGJBnoDS1Q103s46kz53yhqlYAWwLZCry8nIquBxsAq4IsCy78pIi3wdKKMPM7nXwJcJSL/8k7HAA0J7n5E5jRZITDBYiCe0acSVDVXRH7D8yWWT1WXeAvF5cB/RGQccBD4QlUH+PAZD6jqB8cmRKRnUQup6i8ikoCn38vTIrJQVZ/wZSVUNUtEFuNpnfw34N1jHwf8U1UXnOAtMlX1LBGpBMwF7gQm4um387WqXu09sb74OK8XoJ+qbvIlrwkNdo7ABItKwB/eItAdaFR4ARFp5F3mFeA1PMP9rQDOF5Fjx/xjRaSlj5+5BOjrfU15PId1lopIXSBDVWcCz3s/p7Bc755JUWbhaRTWBU8zNby/bz/2GhFp6f3MIqnqYeBu4F/e11QCdnln31Rg0TQ8h8iOWQD8U7y7RyLS4XifYUKHFQITLN4GEkUkCc/ewc9FLNMNWC0iP+E5jj9BVffh+WJ8V0TW4ikMrX35QFX9Ec+5gx/wnDN4VVV/AtoBP3gP0YwEnizi5dOBtcdOFheyEM+4tF+qZ/hF8IwTkQz8KJ5By6dxgj12b5Y1eFozP4dn72QZnvMHx3wNxB87WYxnzyHSm229d9qEOLt81BhjQpztERhjTIizQmCMMSHOCoExxoQ4KwTGGBPirBAYY0yIs0JgjDEhzgqBMcaEuP8HAfbiRRdp+MsAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "from sklearn.metrics import roc_curve\n",
    "y_scores = cross_val_predict(log_res,X_train,y_train,cv=3,method=\"decision_function\")\n",
    "fpr,tpr,thresholds = roc_curve(y_train,y_scores)\n",
    "import matplotlib\n",
    "import matplotlib.pyplot as plt\n",
    "plt.plot(fpr,tpr,label=None)\n",
    "plt.plot([0,1],[0,1],'k--')\n",
    "plt.xlabel('False Positive Rate')\n",
    "plt.ylabel('True Positive Rate')\n",
    "\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Not brilliant but better than a kick in the head."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.9"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
