{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Classifier for Titanic Dataset using Decision Tree "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Import dependencies and packages needed"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The length of the dataset is  891\n",
      "The shape of the dataset (Number of columns / features) is  (891, 12)\n",
      "===============================================\n",
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 891 entries, 0 to 890\n",
      "Data columns (total 12 columns):\n",
      " #   Column       Non-Null Count  Dtype  \n",
      "---  ------       --------------  -----  \n",
      " 0   PassengerId  891 non-null    int64  \n",
      " 1   Survived     891 non-null    int64  \n",
      " 2   Pclass       891 non-null    int64  \n",
      " 3   Name         891 non-null    object \n",
      " 4   Sex          891 non-null    object \n",
      " 5   Age          714 non-null    float64\n",
      " 6   SibSp        891 non-null    int64  \n",
      " 7   Parch        891 non-null    int64  \n",
      " 8   Ticket       891 non-null    object \n",
      " 9   Fare         891 non-null    float64\n",
      " 10  Cabin        204 non-null    object \n",
      " 11  Embarked     889 non-null    object \n",
      "dtypes: float64(2), int64(5), object(5)\n",
      "memory usage: 83.7+ KB\n",
      "None\n"
     ]
    },
    {
     "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>PassengerId</th>\n",
       "      <th>Survived</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Name</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Age</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Parch</th>\n",
       "      <th>Ticket</th>\n",
       "      <th>Fare</th>\n",
       "      <th>Cabin</th>\n",
       "      <th>Embarked</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Braund\\t Mr. Owen Harris</td>\n",
       "      <td>male</td>\n",
       "      <td>22.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>A/5 21171</td>\n",
       "      <td>7.2500</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Cumings\\t Mrs. John Bradley (Florence Briggs T...</td>\n",
       "      <td>female</td>\n",
       "      <td>38.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>PC 17599</td>\n",
       "      <td>71.2833</td>\n",
       "      <td>C85</td>\n",
       "      <td>C</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>Heikkinen\\t Miss Laina</td>\n",
       "      <td>female</td>\n",
       "      <td>26.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>STON/O2. 3101282</td>\n",
       "      <td>7.9250</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Futrelle\\t Mrs. Jacques Heath (Lily May Peel)</td>\n",
       "      <td>female</td>\n",
       "      <td>35.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>113803</td>\n",
       "      <td>53.1000</td>\n",
       "      <td>C123</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Allen\\t Mr. William Henry</td>\n",
       "      <td>male</td>\n",
       "      <td>35.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>373450</td>\n",
       "      <td>8.0500</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>6</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Moran\\t Mr. James</td>\n",
       "      <td>male</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>330877</td>\n",
       "      <td>8.4583</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Q</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>7</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>McCarthy\\t Mr. Timothy J</td>\n",
       "      <td>male</td>\n",
       "      <td>54.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>17463</td>\n",
       "      <td>51.8625</td>\n",
       "      <td>E46</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>8</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Palsson\\t Master Gosta Leonard</td>\n",
       "      <td>male</td>\n",
       "      <td>2.0</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>349909</td>\n",
       "      <td>21.0750</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>9</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>Johnson\\t Mrs. Oscar W (Elisabeth Vilhelmina B...</td>\n",
       "      <td>female</td>\n",
       "      <td>27.0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>347742</td>\n",
       "      <td>11.1333</td>\n",
       "      <td>NaN</td>\n",
       "      <td>S</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>10</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>Nasser\\t Mrs. Nicholas (Adele Achem)</td>\n",
       "      <td>female</td>\n",
       "      <td>14.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>237736</td>\n",
       "      <td>30.0708</td>\n",
       "      <td>NaN</td>\n",
       "      <td>C</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   PassengerId  Survived  Pclass  \\\n",
       "0            1         0       3   \n",
       "1            2         1       1   \n",
       "2            3         1       3   \n",
       "3            4         1       1   \n",
       "4            5         0       3   \n",
       "5            6         0       3   \n",
       "6            7         0       1   \n",
       "7            8         0       3   \n",
       "8            9         1       3   \n",
       "9           10         1       2   \n",
       "\n",
       "                                                Name     Sex   Age  SibSp  \\\n",
       "0                           Braund\\t Mr. Owen Harris    male  22.0      1   \n",
       "1  Cumings\\t Mrs. John Bradley (Florence Briggs T...  female  38.0      1   \n",
       "2                             Heikkinen\\t Miss Laina  female  26.0      0   \n",
       "3      Futrelle\\t Mrs. Jacques Heath (Lily May Peel)  female  35.0      1   \n",
       "4                          Allen\\t Mr. William Henry    male  35.0      0   \n",
       "5                                  Moran\\t Mr. James    male   NaN      0   \n",
       "6                           McCarthy\\t Mr. Timothy J    male  54.0      0   \n",
       "7                     Palsson\\t Master Gosta Leonard    male   2.0      3   \n",
       "8  Johnson\\t Mrs. Oscar W (Elisabeth Vilhelmina B...  female  27.0      0   \n",
       "9               Nasser\\t Mrs. Nicholas (Adele Achem)  female  14.0      1   \n",
       "\n",
       "   Parch            Ticket     Fare Cabin Embarked  \n",
       "0      0         A/5 21171   7.2500   NaN        S  \n",
       "1      0          PC 17599  71.2833   C85        C  \n",
       "2      0  STON/O2. 3101282   7.9250   NaN        S  \n",
       "3      0            113803  53.1000  C123        S  \n",
       "4      0            373450   8.0500   NaN        S  \n",
       "5      0            330877   8.4583   NaN        Q  \n",
       "6      0             17463  51.8625   E46        S  \n",
       "7      1            349909  21.0750   NaN        S  \n",
       "8      2            347742  11.1333   NaN        S  \n",
       "9      0            237736  30.0708   NaN        C  "
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Import dependencies and packages needed from sklearn import datasets\n",
    "import numpy as np\n",
    "import os\n",
    "import pandas as pd\n",
    "from sklearn.model_selection import train_test_split, GridSearchCV\n",
    "from sklearn.tree import DecisionTreeClassifier\n",
    "# from sklearn import metrics\n",
    "from sklearn import tree\n",
    "\n",
    "from sklearn.metrics import classification_report, accuracy_score, confusion_matrix, plot_confusion_matrix\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "\n",
    "\n",
    "# load the dataset (stored in a variable)\n",
    "df_titanic = pd.read_csv('./titanic.csv', sep=',',header = 0)\n",
    "\n",
    "\n",
    "### Overview of the Dataset\n",
    "\n",
    "print (\"The length of the dataset is \", len(df_titanic))\n",
    "print(\"The shape of the dataset (Number of columns / features) is \", df_titanic.shape)\n",
    "print(\"===============================================\")\n",
    "print(df_titanic.info())\n",
    "\n",
    "df_titanic.head(10)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Explore the data"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Class Distribution?"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The target variable is Survival (aka, Dependent variable). We want to know if there are adequate samples for each category to learn from."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0    549\n",
      "1    342\n",
      "Name: Survived, dtype: int64\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<AxesSubplot:title={'center':'Survial Distribution'}>"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAigAAAGsCAYAAAD3xFzWAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAk9klEQVR4nO3df1TV9eHH8dcdP66AcONH3SuDUhttLagZOiZt4eKHmUplO1SulqlbznSjZE5nP7CzgeMstXK52iycZthaljsuJ+ZkeVCHbJa62tpJCyZ3HB27gHGA8PP9o8PnuytgXkTvG3k+zvmc0/183vfe90e88fTz+dx7HZZlWQIAADDIZ4I9AQAAgFMRKAAAwDgECgAAMA6BAgAAjEOgAAAA4xAoAADAOAQKAAAwDoECAACMQ6AAAADjECjAObR3717deuutuvTSS+V0OuV2uzV+/HgtWLAgaHMqLi6Ww+E4p/ftHte9REZGKikpSRMnTtRTTz2llpaWHveZMWOGRo4cGdB8jh49quLiYu3fvz+g+/X2XA6HQ/PmzQvocT7N008/rfLy8h7rjxw5IofD0es2AJ8gUIBzZMuWLcrMzFRzc7PKysq0bds2PfHEE7ruuuu0cePGoM1r9uzZ2r1793l5rq1bt2r37t3aunWrfvazn+nSSy/VwoULddVVV+mtt97yG/vwww9r06ZNAT3+0aNHtXTp0oADpT/P1R99BcqIESO0e/duTZ48+ZzPARisQoM9AeBCVVZWplGjRukPf/iDQkP//6V2xx13qKysbMCep62tTcOGDTvjoyJJSUlKSkoasOc/nfT0dCUkJNi377jjDs2bN09ZWVnKz8/XP/7xDzmdTknS5Zdffs7n89FHHykyMvK8PNfpOJ1OfeUrXwnqHADTcQQFOEeOHz+uhIQEvzjp9pnP+L/0HA6HiouLe4wbOXKkZsyYYd8uLy+Xw+HQtm3bNHPmTF188cWKjIzUxo0b5XA49MYbb/R4jNWrV8vhcOjtt9+W1Ptpmo0bNyovL08jRoxQRESErrzySi1atEgnTpzox56f3jXXXKMlS5boww8/9DuS1Ntpl9/85jfKyMiQy+VSZGSkRo8erZkzZ0qSdu7cqXHjxkmS7r33Xvt0Uvef44wZMzR8+HAdOHBAeXl5io6OVnZ2dp/P1e2ZZ57RFVdcIafTqS9+8YuqqKjw297Xaa7un82RI0ckffKzO3TokKqqquy5dT9nX6d4du3apezsbEVHRysyMlKZmZnasmVLr8/zxz/+Ud/97neVkJCg+Ph4TZs2TUePHu11n4DBiEABzpHx48dr7969+t73vqe9e/eqs7NzwB575syZCgsL07p16/Tyyy/r1ltv1SWXXKLnn3++x9jy8nJde+21uvrqq/t8vPfee0833XST1qxZo61bt6qwsFAvvfSSpk6dOmBz/l/5+fmSpD/96U99jtm9e7duv/12jR49WhUVFdqyZYseeeQRffzxx5Kka6+91t7fhx56SLt379bu3bs1e/Zs+zE6OjqUn5+vG264Qa+99pqWLl162nlt3rxZTz75pB577DG9/PLLuuyyy3TnnXfq5ZdfDngfN23apNGjR2vMmDH23E53Wqmqqko33HCDfD6f1qxZoxdffFHR0dGaOnVqr6cEZ8+erbCwMG3YsEFlZWXauXOn7rrrroDnCZiKUzzAObJs2TK9++67euqpp/TUU08pLCxM48aN09SpUzVv3jwNHz6834+dnZ2tZ555xm/dXXfdpdWrV8vn88nlckmS3nnnHf35z3/WU089ddrHe+ihh+z/tixL1113na688kplZWXp7bffPm3c9Mdll10mSaf9F391dbUsy9IvfvELe38k2UeUYmJilJqaKumT00O9nTLp7OzUI488onvvvfeM5nXs2DHV1NTI7XZLkm666SalpqZq8eLF+sY3vnFGj9FtzJgxioiIUExMzBmdzlm0aJFiY2O1c+dO++/GlClT9KUvfUlFRUUqKCjwO3Jz44036sknn7Rv/+c//9HChQvl9Xrl8XgCmitgIo6gAOdIfHy83nzzTdXU1GjZsmW6+eab9Y9//EOLFy9WWlqajh071u/Hvu2223qsmzlzptra2vz+tf3888/L6XRq+vTpp328999/X9OnT5fH41FISIjCwsKUlZUl6ZPIGWiWZX3qmO7TNwUFBXrppZf0r3/9q1/P1dufVV+ys7PtOJGkkJAQ3X777frnP/+p+vr6fj3/mThx4oT27t2rb3zjG37hGhISorvvvlv19fX6+9//7nef7qNQ3boj8oMPPjhn8wTOJwIFOMfGjh2rH/7wh/rNb36jo0eP6oEHHtCRI0fO6kLZESNG9Fh31VVXady4cfZpj66uLq1fv14333yz4uLi+nys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\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "print(df_titanic['Survived'].value_counts())\n",
    "\n",
    "df_titanic['Survived'].value_counts().plot(kind='bar', title='Survial Distribution')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Are there missing values? \"isna\" checks for null values (NaN)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "PassengerId      0\n",
      "Survived         0\n",
      "Pclass           0\n",
      "Name             0\n",
      "Sex              0\n",
      "Age            177\n",
      "SibSp            0\n",
      "Parch            0\n",
      "Ticket           0\n",
      "Fare             0\n",
      "Cabin          687\n",
      "Embarked         2\n",
      "dtype: int64\n",
      "===========================================================\n",
      "                Age\n",
      "Survived           \n",
      "0         30.626179\n",
      "1         28.343690\n",
      "\n",
      "===== The number of passengers by passenger class ==========\n",
      "Pclass\n",
      "1    216\n",
      "2    184\n",
      "3    491\n",
      "Name: PassengerId, dtype: int64\n",
      "===========================================================\n",
      "AxesSubplot(0.125,0.11;0.775x0.77)\n",
      "\n",
      "===========================================================\n",
      "count    891.000000\n",
      "mean      32.204208\n",
      "std       49.693429\n",
      "min        0.000000\n",
      "25%        7.910400\n",
      "50%       14.454200\n",
      "75%       31.000000\n",
      "max      512.329200\n",
      "Name: Fare, dtype: float64\n",
      "===========================================================\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([[<AxesSubplot:title={'center':'Fare'}>]], dtype=object)"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAh8AAAHACAYAAAAC3Qq2AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA21klEQVR4nO3deXxOZ/7/8fcdiVtks2YjQitiWo3WTmtfKmqnti6i9KuWqlFDMa3oIIqqqjZmOtaWYsYyLWqZknRBG2mD2so0SKdiKyJBiFy/P/rLPW6JJSQnEq/n43Eej55zrnPO55z7xrvXuc59bMYYIwAAAIu4FHQBAADg/kL4AAAAliJ8AAAASxE+AACApQgfAADAUoQPAABgKcIHAACwFOEDAABYivABAAAsRfjAPWHBggWy2Wyy2WyKiYnJtt4Yo6pVq8pms6lZs2aW13enatWqJZvNpunTpxdoHZGRkbLZbDp16lS+HiciIsLxOdpsNtntdoWGhmr8+PG6dOlSvh77fpSenq7Zs2friSeeUOnSpVW8eHFVqFBBPXr0UGxsrKNdTEzMDf9sAQWB8IF7ipeXl+bOnZtteWxsrP7zn//Iy8urAKq6MwkJCfrhhx8kKcdzKqrc3d21bds2bdu2TatXr1b9+vX15ptvqm/fvgVdWpFy6tQpPf744xoxYoRq1KihBQsW6IsvvtDbb7+tYsWKqWXLltq5c2dBlwnkyLWgCwCu1bNnTy1evFjvv/++vL29Hcvnzp2rhg0bKiUlpQCry52///3vkqSnnnpKa9eu1datW9WoUaMCrir/ubi4qEGDBo758PBwHT58WMuXL9eMGTNUoUKFAqyu8Lh69aoyMjJkt9tzXP/8889r586d2rBhg1q0aOG0rlevXhoxYoRKly5tRalArtHzgXtK7969JUmffPKJY9m5c+e0YsUKvfDCCzluc/nyZU2cOFHVq1eX3W5X+fLl1a9fP508edKp3bJly9SmTRsFBATI3d1df/jDH/Taa68pLS3NqV1ERIQ8PT116NAhtWvXTp6engoKCtKrr76q9PT02zqPS5cuacmSJapdu7beeecdSdK8efNybPuvf/1LYWFhstvteuCBB/Tuu+86bpNcyxijDz74QI8++qjc3d1VunRpde/eXT///PNt1SRJSUlJ6tq1q7y9veXj46Nnn33W6Tr1799fZcqU0YULF7Jt26JFCz388MO3faxrZYWRI0eO6OTJkxo8eLAeeugheXp6ytfXVy1atNBXX32Vbbvo6GjVrFlTnp6e8vLyUvXq1TV27FjH+gsXLmjkyJGqUqWKSpQooTJlyqhOnTpO3x9J2rFjhzp27KgyZcqoRIkSeuyxx7R8+XKnNlm3/rZs2aJBgwapXLlyKlu2rLp27apff/3VqW16erpeffVV+fv7q2TJkmrSpIni4+NVuXJlRUREOLVNTk7WwIEDVbFiRRUvXlxVqlTRhAkTlJGR4Whz+PBh2Ww2TZ06VRMnTlSVKlVkt9u1ZcuWHK9nfHy8Pv/8c/Xv3z9b8MhSt25dVapUKcd1WdekV69eqly5stzd3VW5cmX17t1bR44ccWp3O9f4559/Vq9evRQYGCi73S4/Pz+1bNlSCQkJNzw+7m/0fOCe4u3tre7du2vevHkaOHCgpN+DiIuLi3r27KmZM2c6tc/MzFSnTp301VdfadSoUWrUqJGOHDmi8ePHq1mzZtqxY4fc3d0lSQcPHlS7du00fPhweXh4aP/+/Xrrrbf03XffafPmzU77vXLlijp27Kj+/fvr1Vdf1Zdffqm//OUv8vHx0RtvvHHL81i5cqXOnDmjF154QSEhIXriiSe0bNkyzZw5U56eno5269evV9euXdWkSRMtW7ZMGRkZmj59uo4fP55tnwMHDtSCBQs0bNgwvfXWW/rtt9/05ptvqlGjRtq5c6f8/PxuWVeXLl3Uo0cPvfTSS9qzZ49ef/117d27V99++63c3Nz0yiuvaN68eVqyZIkGDBjg2G7v3r3asmWL3n///VseIyeHDh2SJJUvX16//fabJGn8+PHy9/dXamqqVq1apWbNmumLL75wjOlZunSpBg8erJdfflnTp0+Xi4uLDh06pL179zr2O2LECH300UeaOHGiHnvsMaWlpenHH3/U6dOnHW22bNmitm3bqn79+pozZ458fHy0dOlS9ezZUxcuXMgWFgYMGKCnnnpKS5YsUVJSkv70pz/p2WefdfqO9OvXT8uWLdOoUaPUokUL7d27V126dMnWM5ecnKx69erJxcVFb7zxhh588EFt27ZNEydO1OHDhzV//nyn9rNmzVK1atU0ffp0eXt7KyQkJMfruXHjRklS586db/9DuM7hw4cVGhqqXr16qUyZMjp27Jiio6NVt25d7d27V+XKlZN0e9e4Xbt2unr1qqZOnapKlSrp1KlT2rp1q86ePXvH9aGIM8A9YP78+UaSiYuLM1u2bDGSzI8//miMMaZu3bomIiLCGGPMww8/bJo2berY7pNPPjGSzIoVK5z2FxcXZySZDz74IMfjZWZmmitXrpjY2FgjyezcudOxrm/fvkaSWb58udM27dq1M6Ghobd1Pi1atDAlSpQwZ86ccTq/uXPnOrWrW7euCQoKMunp6Y5l58+fN2XLljXX/vHctm2bkWTefvttp+2TkpKMu7u7GTVq1E3rGT9+vJFk/vjHPzotX7x4sZFkPv74Y8eypk2bmkcffdSp3aBBg4y3t7c5f/78TY/Tt29f4+HhYa5cuWKuXLliTp48ad59911js9lM3bp1c9wmIyPDXLlyxbRs2dJ06dLFsXzo0KGmVKlSNz1ejRo1TOfOnW/apnr16uaxxx4zV65ccVrevn17ExAQYK5evWqM+d9nNHjwYKd2U6dONZLMsWPHjDHG7Nmzx0gyo0ePdmqX9V3s27evY9nAgQONp6enOXLkiFPb6dOnG0lmz549xhhjEhMTjSTz4IMPmsuXL9/0fIwx5qWXXjKSzP79+2/Z1hjj+DO1ZcuWG7bJyMgwqampxsPDw7z77ruO5be6xqdOnTKSzMyZM2+rFsAYY7jtgntO06ZN9eCDD2revHnavXu34uLibnjLZc2aNSpVqpQ6dOigjIwMx/Too4/K39/faXT/zz//rD59+sjf31/FihWTm5ubmjZtKknat2+f035tNps6dOjgtCwsLCxbl3ROEhMTtWXLFnXt2lWlSpWSJD399NPy8vJyuvWSlpamHTt2qHPnzipevLhjuaenZ7Zjr1mzRjabTc8++6zTefr7+6tmzZq3/RTDM8884zTfo0cPubq6OnXvv/LKK0pISNA333wjSUpJSdFHH32kvn37OvXa3EhaWprc3Nzk5uam8uXLa/jw4QoPD9eqVascbebMmaNatWqpRIkScnV1lZubm7744gunz6FevXo6e/asevfurX/96185PqlTr149ff7553rttdcUExOjixcvOq0/dOiQ9u/f7zjva69du3btdOzYMR04cMBpm44dOzrNh4WFSZLjs896iqRHjx5O7bp37y5XV+fO5DVr1qh58+YKDAx0OnZ4eLjTvq49tpubW06XNc+lpqZq9OjRqlq1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NW7cWJ988okCAgIkScePH1dgYCDfR1hq/fr16tSpkzw9PXXhwgWtWrVKzz//vGrWrCljjGJjY7Vhwwa1aNGioEst0ggfRcinn3560/U///yzXn31Vf6yhyW6dOmijIwMzZ8/X2fPntWIESP0448/KiYmRpUqVSJ8oEA0atRILVq00MSJE7V06VINHjxYgwYN0qRJkyRJ48aNU1xcnDZu3FjAlRZthI8ixMXFRTabTTf7SG02G3/ZwxJ+fn7697//rUceecSxbMiQIVqzZo22bNkiDw8Pwgcs5+Pjo/j4eFWtWlWZmZmy2+369ttvVatWLUnSjz/+qFatWik5ObmAKy3aGPNRhAQEBGjFihXKzMzMcfr+++8LukTcRy5evChXV+fXR73//vvq2LGjmjZtqp9++qmAKgN+5+LiohIlSqhUqVKOZV5eXjp37lzBFXWfIHwUIbVr175pwLhVrwiQl6pXr64dO3ZkW/7ee++pU6dO6tixYwFUhftd5cqVdejQIcf8tm3bVKlSJcd8UlKSY1wS8g/howj505/+pEaNGt1wfdWqVbVlyxYLK8L9rEuXLvrkk09yXDd79mz17t2bMAzLDRo0yOlWX40aNZx66D7//HMGm1qAMR8AAMBS9HwAAABLET4AAIClCB8AAMBShA8A+SYiIkKdO3cu6DIA3GMIHwBuKiIiQjabTTabTW5ubnrggQc0cuRIpaWlFXRpAAop11s3AXC/a9u2rebPn68rV67oq6++0oABA5SWlqbo6OiCLg1AIUTPB4Bbstvt8vf3V1BQkPr06aNnnnlGq1evliTt2bNHTz31lLy9veXl5aXGjRvrP//5T477Wb9+vZ544gmVKlVKZcuWVfv27Z3aXr58WUOHDlVAQIBKlCihypUrKyoqyrE+MjJSlSpVkt1uV2BgoIYNG5av5w0gf9DzASDX3N3ddeXKFf33v/9VkyZN1KxZM23evFne3t765ptvlJGRkeN2aWlpGjFihB555BGlpaXpjTfeUJcuXZSQkCAXFxfNmjVLn376qZYvX65KlSopKSlJSUlJkqR//vOfeuedd7R06VI9/PDDSk5O1s6dO608bQB5hPABIFe+++47LVmyRC1bttT7778vHx8fLV26VG5ubpKkatWq3XDbbt26Oc3PnTtXvr6+2rt3r2rUqKGjR48qJCRETzzxhGw2m4KDgx1tjx49Kn9/f7Vq1Upubm6qVKmS6tWrlz8nCSBfcdsFwC2tWbNGnp6eKlGihBo2bKgmTZrovffeU0JCgho3buwIHrfyn//8R3369NEDDzwgb29vValSRdLvwUL6fXBrQkKCQkNDNWzYMKfXmj/99NO6ePGiHnjgAb344otatWrVDXtYANzbCB8Abql58+ZKSEjQgQMHdOnSJa1cuVK+vr5yd3fP1X46dOig06dP68MPP9S3336rb7/9VtLvYz0kqVatWkpMTNRf/vIXXbx4UT169FD37t0lSUFBQTpw4IDef/99ubu7a/DgwWrSpImuXLmStycLIN8RPgDckoeHh6pWrarg4GCnXo6wsDB99dVXtxUATp8+rX379unPf/6zWrZsqT/84Q86c+ZMtnbe3t7q2bOnPvzwQy1btkwrVqzQb7/9Jun3sSYdO3bUrFmzFBMTo23btmn37t15d6IALMGYDwB3bOjQoXrvvffUq1cvjRkzRj4+Ptq+fbvq1aun0NBQp7alS5dW2bJl9be//U0BAQE6evSoXnvtNac277zzjgICAvToo4/KxcVF//jHP+Tv769SpUppwYIFunr1qurXr6+SJUvqo48+kru7u9O4EACFAz0fAO5Y2bJltXnzZqWmpqpp06aqXbu2PvzwwxzHgLi4uGjp0qWKj49XjRo19Mc//lHTpk1zauPp6am33npLderUUd26dXX48GGtW7dOLi4uKlWqlD788EM9/vjjCgsL0xdffKHPPvtMZcuWtep0AeQRmzHGFHQRAADg/kHPBwAAsBThAwAAWIrwAQAALEX4AAAAliJ8AAAASxE+AACApQgfAADAUoQPAABgKcIHAACwFOEDAABYivABAAAsRfgAAACW+n9Kt9vtiQRBrQAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "print(df_titanic.isna().sum())\n",
    "\n",
    "print(\"===========================================================\")\n",
    "\n",
    "# Average age by class\n",
    "print(pd.DataFrame(df_titanic.groupby('Survived')['Age'].mean()))\n",
    "\n",
    "print(\"\\n===== The number of passengers by passenger class ==========\")\n",
    "print(df_titanic.groupby('Pclass')['PassengerId'].count())\n",
    "\n",
    "print(\"===========================================================\")\n",
    "\n",
    "# The average age by passenger class.\n",
    "print(pd.DataFrame(df_titanic.groupby('Pclass')['Age'].mean()).plot(kind='bar', title='Mean Age by Passenger Class'))\n",
    "\n",
    "print(\"\\n===========================================================\")\n",
    "\n",
    "# Summary statistics of fares\n",
    "print(df_titanic['Fare'].describe())\n",
    "\n",
    "print(\"===========================================================\")\n",
    "\n",
    "# Distribution of fares\n",
    "df_titanic.hist(column='Fare')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Data Preprocessing"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Deal with missing values"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Before ============ ::\n",
      "PassengerId      0\n",
      "Survived         0\n",
      "Pclass           0\n",
      "Name             0\n",
      "Sex              0\n",
      "Age            177\n",
      "SibSp            0\n",
      "Parch            0\n",
      "Ticket           0\n",
      "Fare             0\n",
      "Cabin          687\n",
      "Embarked         2\n",
      "dtype: int64\n",
      "\n",
      "After ============ :\n",
      "PassengerId    0\n",
      "Survived       0\n",
      "Pclass         0\n",
      "Name           0\n",
      "Sex            0\n",
      "Age            0\n",
      "SibSp          0\n",
      "Parch          0\n",
      "Ticket         0\n",
      "Fare           0\n",
      "Embarked       0\n",
      "dtype: int64\n",
      "===============================\n",
      "<class 'pandas.core.frame.DataFrame'>\n",
      "Int64Index: 712 entries, 0 to 890\n",
      "Data columns (total 11 columns):\n",
      " #   Column       Non-Null Count  Dtype  \n",
      "---  ------       --------------  -----  \n",
      " 0   PassengerId  712 non-null    int64  \n",
      " 1   Survived     712 non-null    int64  \n",
      " 2   Pclass       712 non-null    int64  \n",
      " 3   Name         712 non-null    object \n",
      " 4   Sex          712 non-null    object \n",
      " 5   Age          712 non-null    float64\n",
      " 6   SibSp        712 non-null    int64  \n",
      " 7   Parch        712 non-null    int64  \n",
      " 8   Ticket       712 non-null    object \n",
      " 9   Fare         712 non-null    float64\n",
      " 10  Embarked     712 non-null    object \n",
      "dtypes: float64(2), int64(5), object(4)\n",
      "memory usage: 66.8+ KB\n",
      "None\n",
      "===============================\n",
      "Index(['PassengerId', 'Survived', 'Pclass', 'Name', 'Sex', 'Age', 'SibSp',\n",
      "       'Parch', 'Ticket', 'Fare', 'Embarked'],\n",
      "      dtype='object')\n"
     ]
    }
   ],
   "source": [
    "## Check for missing \n",
    "print(\"Before ============ ::\")\n",
    "print(df_titanic.isna().sum())\n",
    "\n",
    "# Delete the column \"Cabin\", which has 687 out of 890 missing.\n",
    "df_titanic.drop(\"Cabin\", axis=1, inplace=True)\n",
    "\n",
    "## Delete the rows with missing values for \"Embarked\"\n",
    "df_titanic.dropna(subset=[\"Embarked\"], axis=0, how=\"all\", inplace=True)\n",
    "\n",
    "\n",
    "## Delete the rows with missing values for \"Age\"\n",
    "df_titanic.dropna(subset=[\"Age\"], axis=0, how=\"all\", inplace=True)\n",
    "#=================================IMPUTE===================================\n",
    "## ALTERNATIVE TO DELETING ROWS IS TO IMPUTE\n",
    "# # We may put a reasonable value for the missing 'Age' instead of deleting. \n",
    "\n",
    "# # --------- Option 1 ----------\n",
    "# # Replace with the mean value of \"Age\"\n",
    "# df_titanic['Age'] = df_titanic['Age'].fillna(df_titanic['Age'].mean())\n",
    "\n",
    "# # --------- Option 2 ----------\n",
    "# # Because we saw that \"Age\" changes by PClass, we willl replace with the average value of the PClass that passenger belongs\n",
    "\n",
    "# def input_na_age(age, pclass):\n",
    "#     if pd.isnull(age):\n",
    "#         if pclass == 1:\n",
    "#             return 38\n",
    "#         elif pclass == 2:\n",
    "#             return 30\n",
    "#         else:\n",
    "#             return 25\n",
    "#     else:\n",
    "#         return age\n",
    "\n",
    "# df_titanic['Age'] = df_titanic.apply(lambda x: input_na_age(x['Age'], x['Pclass']), axis=1)\n",
    "\n",
    "# print(df_titanic.isna().sum())\n",
    "#==========================================================================\n",
    "\n",
    "print(\"\\nAfter ============ :\")\n",
    "print(df_titanic.isna().sum())\n",
    "\n",
    "print(\"===============================\")\n",
    "\n",
    "print(df_titanic.info())\n",
    "\n",
    "print(\"===============================\")\n",
    "print(df_titanic.columns)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### ENCODING: change 'Male' and 'Female' to '0' and '1' in column \"Sex\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['S' 'C' 'Q']\n"
     ]
    },
    {
     "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>PassengerId</th>\n",
       "      <th>Survived</th>\n",
       "      <th>Pclass</th>\n",
       "      <th>Name</th>\n",
       "      <th>Sex</th>\n",
       "      <th>Age</th>\n",
       "      <th>SibSp</th>\n",
       "      <th>Parch</th>\n",
       "      <th>Ticket</th>\n",
       "      <th>Fare</th>\n",
       "      <th>Embarked</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Braund\\t Mr. Owen Harris</td>\n",
       "      <td>0</td>\n",
       "      <td>22.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>A/5 21171</td>\n",
       "      <td>7.2500</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Cumings\\t Mrs. John Bradley (Florence Briggs T...</td>\n",
       "      <td>1</td>\n",
       "      <td>38.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>PC 17599</td>\n",
       "      <td>71.2833</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>Heikkinen\\t Miss Laina</td>\n",
       "      <td>1</td>\n",
       "      <td>26.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>STON/O2. 3101282</td>\n",
       "      <td>7.9250</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Futrelle\\t Mrs. Jacques Heath (Lily May Peel)</td>\n",
       "      <td>1</td>\n",
       "      <td>35.0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>113803</td>\n",
       "      <td>53.1000</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Allen\\t Mr. William Henry</td>\n",
       "      <td>0</td>\n",
       "      <td>35.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>373450</td>\n",
       "      <td>8.0500</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>885</th>\n",
       "      <td>886</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Rice\\t Mrs. William (Margaret Norton)</td>\n",
       "      <td>1</td>\n",
       "      <td>39.0</td>\n",
       "      <td>0</td>\n",
       "      <td>5</td>\n",
       "      <td>382652</td>\n",
       "      <td>29.1250</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>886</th>\n",
       "      <td>887</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>Montvila\\t Rev. Juozas</td>\n",
       "      <td>0</td>\n",
       "      <td>27.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>211536</td>\n",
       "      <td>13.0000</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>887</th>\n",
       "      <td>888</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Graham\\t Miss Margaret Edith</td>\n",
       "      <td>1</td>\n",
       "      <td>19.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>112053</td>\n",
       "      <td>30.0000</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>889</th>\n",
       "      <td>890</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Behr\\t Mr. Karl Howell</td>\n",
       "      <td>0</td>\n",
       "      <td>26.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>111369</td>\n",
       "      <td>30.0000</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>890</th>\n",
       "      <td>891</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>Dooley\\t Mr. Patrick</td>\n",
       "      <td>0</td>\n",
       "      <td>32.0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>370376</td>\n",
       "      <td>7.7500</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>712 rows × 11 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "     PassengerId  Survived  Pclass  \\\n",
       "0              1         0       3   \n",
       "1              2         1       1   \n",
       "2              3         1       3   \n",
       "3              4         1       1   \n",
       "4              5         0       3   \n",
       "..           ...       ...     ...   \n",
       "885          886         0       3   \n",
       "886          887         0       2   \n",
       "887          888         1       1   \n",
       "889          890         1       1   \n",
       "890          891         0       3   \n",
       "\n",
       "                                                  Name  Sex   Age  SibSp  \\\n",
       "0                             Braund\\t Mr. Owen Harris    0  22.0      1   \n",
       "1    Cumings\\t Mrs. John Bradley (Florence Briggs T...    1  38.0      1   \n",
       "2                               Heikkinen\\t Miss Laina    1  26.0      0   \n",
       "3        Futrelle\\t Mrs. Jacques Heath (Lily May Peel)    1  35.0      1   \n",
       "4                            Allen\\t Mr. William Henry    0  35.0      0   \n",
       "..                                                 ...  ...   ...    ...   \n",
       "885              Rice\\t Mrs. William (Margaret Norton)    1  39.0      0   \n",
       "886                             Montvila\\t Rev. Juozas    0  27.0      0   \n",
       "887                       Graham\\t Miss Margaret Edith    1  19.0      0   \n",
       "889                             Behr\\t Mr. Karl Howell    0  26.0      0   \n",
       "890                               Dooley\\t Mr. Patrick    0  32.0      0   \n",
       "\n",
       "     Parch            Ticket     Fare  Embarked  \n",
       "0        0         A/5 21171   7.2500         2  \n",
       "1        0          PC 17599  71.2833         0  \n",
       "2        0  STON/O2. 3101282   7.9250         2  \n",
       "3        0            113803  53.1000         2  \n",
       "4        0            373450   8.0500         2  \n",
       "..     ...               ...      ...       ...  \n",
       "885      5            382652  29.1250         1  \n",
       "886      0            211536  13.0000         2  \n",
       "887      0            112053  30.0000         2  \n",
       "889      0            111369  30.0000         0  \n",
       "890      0            370376   7.7500         1  \n",
       "\n",
       "[712 rows x 11 columns]"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Replace 'male' with 0 and 'female' with 1\n",
    "df_titanic['Sex'] = df_titanic['Sex'].replace({'male': 0, 'female': 1})\n",
    "\n",
    "# Get all the unique values in the Embark column.\n",
    "print(df_titanic['Embarked'].unique())\n",
    "\n",
    "# Replace the values in Embark with numeric ones\n",
    "df_titanic['Embarked'] = df_titanic['Embarked'].replace({'C': 0, 'Q': 1, 'S': 2})\n",
    "df_titanic"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### **Feature Scaling**"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "You may Scale the numeric variables that have wide ranges."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "=== Before ====\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([[<AxesSubplot:title={'center':'Fare'}>,\n",
       "        <AxesSubplot:title={'center':'Age'}>]], dtype=object)"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAigAAAGxCAYAAABIjE2TAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA/BUlEQVR4nO3df1hUdd7/8dcIwwgGKhIMFBK1VFuYmZSlbWAKRmp3WWlpm+62rX0tNxZdjdquxs3A3GvTFstqb1PKXKpNq12twErMm7tSvG3V2tJdMi2ILX8gwg4TnO8fXszuxK8ZHZkzw/NxXXPp+ZzPnPm8z8jh5efMnGMxDMMQAACAifQJ9AAAAAC+j4ACAABMh4ACAABMh4ACAABMh4ACAABMh4ACAABMh4ACAABMh4ACAABMh4ACAABMh4ACr6xatUoWi6XDx9y5cwM9PAAh5ve//70sFovS09MDPRQESHigB4DgsnLlSp1//vkebUlJSQEaDYBQ9eyzz0qSdu/erQ8++EAjRowI8IjQ0wgo8El6eroyMjL8tj2XyyWLxaLwcP4pAjhu27Zt+uijjzR+/HitX79eK1asIKD0QpziwUnbu3evfvKTnygtLU1RUVE644wzNHHiRO3cudOj36ZNm2SxWPT8889rzpw5OuOMM2Sz2bR3715J0saNGzVmzBjFxMQoKipKo0aN0ttvvx2IkgAE0IoVKyRJixYt0siRI1VaWqrGxkaPPgcOHNBNN92k6OhoDRgwQNOmTdPWrVtlsVi0atUqj77btm3Tddddp9jYWPXt21fDhg3TSy+91FPl4AQRUOCTlpYWfffddx6Pr776SoMGDdKiRYv05ptv6oknnlB4eLhGjBihTz/9tN02CgoK9MUXX+ipp57Sn//8Z8XHx2v16tXKyclRTEyMSkpK9NJLLyk2Nlbjxo0jpAC9SFNTk/74xz/q0ksvVXp6un7605/q6NGjevnll919jh07ptGjR+vdd9/Vo48+qpdeekkJCQmaMmVKu+29++67GjVqlA4fPqynnnpKr732mi6++GJNmTKlXZCByRiAF1auXGlI6vDhcrk8+n733XdGc3OzkZaWZvzyl790t7/77ruGJOOqq67y6H/s2DEjNjbWmDhxokd7S0uLMXToUOOyyy47dYUBMJXnnnvOkGQ89dRThmEYxtGjR43TTjvN+NGPfuTu88QTTxiSjDfeeMPjuTNnzjQkGStXrnS3nX/++cawYcPaHacmTJhgJCYmGi0tLaeuGJwUZlDgk+eee05bt271eEhSYWGhLrjgAkVERCg8PFwRERHas2ePPvnkk3bbuPHGGz2WKysrdfDgQU2fPt1jZqa1tVXXXHONtm7dqmPHjvVIfQACa8WKFYqMjNQtt9wiSTrttNN0880367333tOePXskSRUVFYqOjtY111zj8dxbb73VY3nv3r3629/+pmnTpkmSx/Hl2muvVU1NTYezvDAHPpkIn/zwhz9s9yHZX/ziF3riiSc0f/58ZWZmauDAgerTp49+9rOfqampqd02EhMTPZa//vprSdJNN93U6esePHhQ/fr180MFAMxq79692rx5s2688UYZhqHDhw9LOn5sWLlypZ599lkVFRXp22+/VUJCQrvnf7+t7dgyd+7cTi+H8M033/i3CPgNAQUnbfXq1br99ttVWFjo0f7NN99owIAB7fpbLBaP5bi4OElScXGxLr/88g5fo6ODEYDQ8uyzz8owDP3pT3/Sn/70p3brS0pKtHDhQg0aNEgffvhhu/W1tbUey23HloKCAk2aNKnD1zzvvPP8MHKcCgQUnDSLxSKbzebRtn79en355Zf6wQ9+0O3zR40apQEDBujjjz/WPffcc6qGCcDEWlpaVFJSonPOOUf//d//3W79X/7yF/3ud7/TG2+8oczMTL300kt64403lJub6+5TWlrq8ZzzzjtPaWlp+uijj9r9BwrmR0DBSZswYYJWrVql888/XxdddJGqqqr029/+VmeeeaZXzz/ttNNUXFys6dOn6+DBg7rpppsUHx+vf/7zn/roo4/0z3/+U8uXLz/FVQAIpDfeeENfffWVHn30UWVlZbVbn56ermXLlmnFihVavXq1lixZottuu00LFy7UD37wA73xxht66623JEl9+vz745VPP/20cnNzNW7cOM2YMUNnnHGGDh48qE8++UTbt2/3+HYQzIWAgpP2+OOPy2q1qqioSA0NDbrkkku0du1a/frXv/Z6G7fddpsGDx6sxYsXa+bMmTp69Kji4+N18cUXa8aMGadu8ABMYcWKFYqIiNBPfvKTDtfHxcXphhtu0J/+9Cc1NDTonXfeUV5enubNmyeLxaKcnBw9+eSTuvbaaz1OLY8ePVoffvihHnnkEeXl5enQoUMa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\n",
      "text/plain": [
       "<Figure size 640x480 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "print(\"=== Before ====\")\n",
    "df_titanic.hist(column=['Fare', 'Age'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "# ### You may Scale the numeric variables with large numbers because they can impact the learning.\n",
    "\n",
    "df_titanic[\"Fare\"] = df_titanic[\"Fare\"].apply(lambda x: np.log(x) if x > 0 else 0)\n",
    "# df_titanic[\"Age\"] = df_titanic[\"Age\"].apply(lambda x: np.log(x) if x > 0 else 0)\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Split Data -- keep aside data for testing."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "# split the data into train and test using the SciKitLearn package\n",
    "\n",
    "# specify the target variables (dependent/predicted): \"y\"\n",
    "y = df_titanic['Survived']\n",
    "\n",
    "# Drop the 'y' column and unwanted columns i.e. the predictors (a.k.a. independent) variables : \"x\"\n",
    "X = df_titanic.drop(['Survived','PassengerId', 'Name', 'Ticket'],axis=1)\n",
    "\n",
    "\n",
    "# split the data into train and test using the SciKitLearn package \"train_test_split\"\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y , test_size=0.25, random_state=104) \n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Create the model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "DecisionTreeClassifier(random_state=42)"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# make a copy of the algorithm\n",
    "DT_clf = DecisionTreeClassifier(random_state=42)\n",
    "\n",
    "# fits a model using training data\n",
    "DT_clf.fit(X_train, y_train)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "The accuracy score:  0.7528089887640449\n",
      "\n",
      "============== Metric ===============================\n",
      "\n",
      "              precision    recall  f1-score   support\n",
      "\n",
      "           0       0.83      0.77      0.80       114\n",
      "           1       0.64      0.72      0.68        64\n",
      "\n",
      "    accuracy                           0.75       178\n",
      "   macro avg       0.73      0.75      0.74       178\n",
      "weighted avg       0.76      0.75      0.76       178\n",
      "\n"
     ]
    }
   ],
   "source": [
    "# make a copy of the algorithm\n",
    "DT_clf = DecisionTreeClassifier(random_state=42)\n",
    "\n",
    "# fits a model using training data\n",
    "DT_clf.fit(X_train, y_train)\n",
    "\n",
    "\n",
    "# check with test data\n",
    "y_pred = DT_clf.predict(X_test)\n",
    "\n",
    "# Print the accuracy score\n",
    "print('\\nThe accuracy score: ', accuracy_score(y_test, y_pred))\n",
    "\n",
    "print(\"\\n============== Metric ===============================\\n\")\n",
    "# Print the evaluation metrics\n",
    "print(classification_report(y_test, y_pred))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Precision:** measures the proportion of _true positive_ predictions among _all positive predictions_ made (both true and untrue) by the model. In other words, Precision indicates how many of the predicted positive instances are actually positive. \n",
    "\n",
    "A high precision indicates that the model is making few false positive predictions. If this was a diagnostic tool, a high Precision means the test _rarely misdiagnoses healthy people as sick_.\n",
    "\n",
    "**Recall (Sensitivity):**  measures the proportion of _true positive_ predictions among _all actual positive instances in the dataset_. In other words, Recall indicates how many of the actual positive instances the model is able to correctly identify. \n",
    "\n",
    "If this was a diagnostic tool, a high recall means it _rarely misses sick people_.\n",
    "\n",
    "**F1-Score:** combines _precision_ and _recall_ into a single metric (using the harmonic mean) to provide a balance between the two, making it useful when both false positives and false negatives are important. \n",
    "\n",
    "**Support:** refers to the number of actual occurrences of the class. "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Test and Evaluate the model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\a.sambo\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:87: FutureWarning: Function plot_confusion_matrix is deprecated; Function `plot_confusion_matrix` is deprecated in 1.0 and will be removed in 1.2. Use one of the class methods: ConfusionMatrixDisplay.from_predictions or ConfusionMatrixDisplay.from_estimator.\n",
      "  warnings.warn(msg, category=FutureWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<sklearn.metrics._plot.confusion_matrix.ConfusionMatrixDisplay at 0x241481c4730>"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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R48eys/Pd/ucS5cuVceOHb2OzWKxaNWqVV6fB0BzJHKEpFtuuUUWi0UWi0Xt2rVTz549de+996q6urrVr/3kk0+6/VhPd5IvAJwOL01ByPr5z3+uJUuW6NixY/rggw80ZcoUVVdXa+HChc32PXbsmNq1a+eT68bGxvrkPADgDipyhCyr1Sq73a7ExESNHz9eEyZMcLZ3T7TD//a3v6lnz56yWq0yDENHjhzR7373O8XFxSkmJkY/+9nP9Nlnn7mc97HHHpPNZlN0dLQmT56suro6l+9/3Fp3OByaM2eOzjvvPFmtVnXr1k2zZ8+WJCUlJUmSBg0aJIvFohEjRjiPW7JkiXr37q2IiAhdcMEFWrBggct1PvnkEw0aNEgREREaMmSINm/e7PGfUV5envr376/27dsrMTFRGRkZOnr0aLP9Vq1apV69eikiIkIjR45UaWmpy/f/+Mc/NHjwYEVERKhnz5566KGH1NjY6HE8ADxHIodpREZG6tixY87PX3/9tV588UW9/PLLztb2tddeq7KyMr3xxhsqKirSRRddpCuvvFLfffedJOnFF1/Ugw8+qNmzZ2vTpk2Kj49vlmB/bNasWZozZ47uv/9+bd26VcuWLZPNZpN0PBlL0ltvvaX9+/frlVdekSQtXrxYWVlZmj17trZt26acnBzdf//9KigokCRVV1fruuuu0/nnn6+ioiJlZ2fr3nvv9fjPJCwsTE899ZS+/PJLFRQU6J133tGMGTNc9qmpqdHs2bNVUFCgjz76SJWVlbrpppuc37/55pv69a9/rWnTpmnr1q1atGiRli5d6vxlBUArM4AQNHHiRGPMmDHOz//617+MLl26GDfccINhGIbx4IMPGu3atTPKy8ud+7z99ttGTEyMUVdX53Kuc88911i0aJFhGIaRmppqTJ061eX7lJQUY+DAgSe9dmVlpWG1Wo3FixefNM6SkhJDkrF582aX8cTERGPZsmUuY4888oiRmppqGIZhLFq0yOjcubNRXV3t/H7hwoUnPdcPde/e3XjiiSdO+f2LL75odOnSxfl5yZIlhiRjw4YNzrFt27YZkox//etfhmEYxmWXXWbk5OS4nOf555834uPjnZ8lGStXrjzldQG0HHPkCFmvv/66OnTooMbGRh07dkxjxozRvHnznN93795dZ599tvNzUVGRjh49qi5duricp7a2Vt98840kadu2bZo6darL96mpqXr33XdPGsO2bdtUX1+vK6+80u24Dx48qNLSUk2ePFm33nqrc7yxsdE5/75t2zYNHDhQUVFRLnF46t1331VOTo62bt2qyspKNTY2qq6uTtXV1Wrfvr0kqW3bthoyZIjzmAsuuEAdO3bUtm3bdPHFF6uoqEgbN250qcCbmppUV1enmpoalxgB+B6JHCHriiuu0MKFC9WuXTslJCQ0W8x2IlGd4HA4FB8fr/fee6/ZuVp6C1ZkZKTHxzgcDknH2+spKSku37Vp00aSZBhGi+L5oV27dumaa67R1KlT9cgjj6hz58768MMPNXnyZJcpCOn47WM/dmLM4XDooYce0rhx45rtExER4XWcAE6PRI6Q1b59e5133nlu73/RRReprKxMbdu2VY8ePU66T+/evbVhwwb95je/cY5t2LDhlOdMTk5WZGSk3n77bU2ZMqXZ9+Hh4ZKOV7An2Gw2nXPOOdqxY4cmTJhw0vP26dNHzz//vGpra52/LJwujpPZtGmTGhsb9fjjjyss7PhymRdffLHZfo2Njdq0aZMuvvhiSdL27dt1+PBhXXDBBZKO/7lt377doz9rAL5DIge+d9VVVyk1NVVjx47VnDlzdP7552vfvn164403NHbsWA0ZMkR33323Jk6cqCFDhujSSy/VCy+8oOLiYvXs2fOk54yIiNDMmTM1Y8YMhYeH65JLLtHBgwdVXFysyZMnKy4uTpGRkVqzZo26du2qiIgIxcbGKjs7W9OmTVNMTIxGjRql+vp6bdq0SRUVFZo+fbrGjx+vrKwsTZ48WX/605+0c+dO/eUvf/Ho5z333HPV2NioefPmafTo0froo4/09NNPN9uvXbt2uuuuu/TUU0+pXbt2uvPOOzVs2DBnYn/ggQd03XXXKTExUddff73CwsL0+eef64svvtCjjz7q+f8IAB5h1TrwPYvFojfeeEOXX365Jk2apF69eummm27Szp07navMb7zxRj3wwAOaOXOmBg8erF27dun2228/7Xnvv/9+/f73v9cDDzyg3r1768Ybb1R5ebmk4/PPTz31lBYtWqSEhASNGTNGkjRlyhT9z//8j5YuXar+/ftr+PDhWrp0qfN2tQ4dOugf//iHtm7dqkGDBikrK0tz5szx6Oe98MILlZeXpzlz5qhfv3564YUXlJub22y/qKgozZw5U+PHj1dqaqoiIyO1fPly5/dXX321Xn/9dRUWFmro0KEaNmyY8vLy1L17d4/iAdAyFsMXk20AAMAvqMgBAAhiJHIAAIIYiRwAgCBGIgcAIIiRyAEACGIkcgAAghiJHACAIEYiBwAgiJHIAQAIYiRyAACCGIkcAIAg9v8BJO5gu0UNzosAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 640x480 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Performance on Test Data\n",
    "plot_confusion_matrix(DT_clf, X_test, y_test)  "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Compare Train Accuracy Vs Test Accuracy"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Overfitting** is a model shows high accuracy when tested with training data but does poorly with new data i.e. test data. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\a.sambo\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:87: FutureWarning: Function plot_confusion_matrix is deprecated; Function `plot_confusion_matrix` is deprecated in 1.0 and will be removed in 1.2. Use one of the class methods: ConfusionMatrixDisplay.from_predictions or ConfusionMatrixDisplay.from_estimator.\n",
      "  warnings.warn(msg, category=FutureWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<sklearn.metrics._plot.confusion_matrix.ConfusionMatrixDisplay at 0x2414e845460>"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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oqKiAEYG+JbNZtPatWs1YcKEQIcC+AyVPc7oxGsac3Nz3fYH4jWNAADvkexxRh3pNY0AAO+R7OGxjvCaRgCA90j2OKOO9JpGAID3SPY4o470mkYAgPd46x080lFe0wj4Q319vT7++GPX57KyMu3cuVOJiYnq2bNnACMDfINb7+CxJ598Uo8++qjrNY0LFizQ1VdfHeiwANM2btyoESNGtNk/depUFRcXt39AgI+R7AEACHHM2QMAEOJI9gAAhDiSPQAAIY5kDwBAiCPZAwAQ4kj2AACEOJI9AAAhjmQPAECII9kDJhUWFuqyyy5zfb755ps1YcKEdo9j//79stls2rlz5ynHnHvuuVq4cKHH1ywuLlaXLl1Mx2az2bRu3TrT1wFwdkj2CEk333yzbDabbDabIiMjdd5552nWrFlqaGjw+3c//vjjHj9i1ZMEDQBm8SIchKxrr71Wy5YtU0tLi9555x3ddtttamho0JIlS9qMbWlpUWRkpE++NyEhwSfXAQBfobJHyLLb7UpNTVVGRoamTJmiG2+80dVKPtF6/+Mf/6jzzjtPdrtdhmGopqZGP/rRj5ScnKz4+Hhdc801+te//uV23UceeUQpKSmKi4tTfn6+jh075nb82218p9OpefPm6YILLpDdblfPnj318MMPS5KysrIkSf3795fNZtPw4cNd5y1btkx9+vRRdHS0LrroIj355JNu3/PPf/5T/fv3V3R0tAYMGKAdO3Z4/Wc0f/589e3bV7GxscrIyNC0adNUX1/fZty6devUu3dvRUdHa/To0SovL3c7/pe//EU5OTmKjo7Weeedp4ceekitra1exwPAP0j2sIyYmBi1tLS4Pn/88cd6/vnn9cILL7ja6N/97ndVWVmp9evXq7S0VJdffrlGjhypr776SpL0/PPP68EHH9TDDz+s7du3Ky0trU0S/rb77rtP8+bN0y9+8Qvt2bNHq1atUkpKiqTjCVuS3njjDVVUVOjFF1+UJC1dulRz5szRww8/rL1792ru3Ln6xS9+oeXLl0uSGhoaNHbsWF144YUqLS1VYWGhZs2a5fWfSVhYmJ544gnt2rVLy5cv15tvvqnZs2e7jTl69KgefvhhLV++XH//+99VW1urG264wXX8tdde0w9+8APdc8892rNnj55++mkVFxe7fqEB0AEYQAiaOnWqMX78eNfnf/zjH0a3bt2MSZMmGYZhGA8++KARGRlpVFVVucb87W9/M+Lj441jx465Xev88883nn76acMwDGPIkCHGnXfe6XZ80KBBRr9+/U763bW1tYbdbjeWLl160jjLysoMScaOHTvc9mdkZBirVq1y2/erX/3KGDJkiGEYhvH0008biYmJRkNDg+v4kiVLTnqtb8rMzDQWLFhwyuPPP/+80a1bN9fnZcuWGZKMrVu3uvbt3bvXkGT84x//MAzDMK666ipj7ty5btdZsWKFkZaW5vosyVi7du0pvxeAfzFnj5D117/+VZ07d1Zra6taWlo0fvx4LVq0yHU8MzNT3bt3d30uLS1VfX29unXr5nadxsZGffLJJ5KkvXv36s4773Q7PmTIEL311lsnjWHv3r1qamrSyJEjPY770KFDKi8vV35+vm6//XbX/tbWVtd6gL1796pfv37q1KmTWxzeeuuttzR37lzt2bNHtbW1am1t1bFjx9TQ0KDY2FhJUkREhAYMGOA656KLLlKXLl20d+9eXXHFFSotLdW2bdvcKnmHw6Fjx47p6NGjbjECCAySPULWiBEjtGTJEkVGRio9Pb3NArwTyewEp9OptLQ0bdy4sc21zvb2s5iYGK/PcTqdko638gcNGuR2LDw8XJJkGMZZxfNNBw4c0He+8x3deeed+tWvfqXExERt3rxZ+fn5btMd0vFb577txD6n06mHHnpIEydObDMmOjradJwAzCPZI2TFxsbqggsu8Hj85ZdfrsrKSkVEROjcc8896Zg+ffpo69at+uEPf+jat3Xr1lNes1evXoqJidHf/vY33XbbbW2OR0VFSTpeCZ+QkpKic845R59++qluvPHGk1734osv1ooVK9TY2Oj6heJ0cZzM9u3b1draqscee0xhYceX7zz//PNtxrW2tmr79u264oorJEn79u3TkSNHdNFFF0k6/ue2b98+r/6sAbQvkj3wtVGjRmnIkCGaMGGC5s2bpwsvvFCff/651q9frwkTJmjAgAH6yU9+oqlTp2rAgAG68sortXLlSu3evVvnnXfeSa8ZHR2te++9V7Nnz1ZUVJT+53/+R4cOHdLu3buVn5+v5ORkxcTEaMOGDerRo4eio6OVkJCgwsJC3XPPPYqPj1deXp6ampq0fft2VVdXa8aMGZoyZYrmzJmj/Px8/fznP9f+/fv129/+1quf9/zzz1dra6sWLVqkcePG6e9//7ueeuqpNuMiIyM1ffp0PfHEE4qMjNTdd9+twYMHu5L/Aw88oLFjxyojI0P/+7//q7CwML3//vv64IMP9Otf/9r7/yEA+Byr8YGv2Ww2rV+/XldffbVuvfVW9e7dWzfccIP279/vWj0/efJkPfDAA7r33nuVk5OjAwcO6Mc//vFpr/uLX/xCM2fO1AMPPKA+ffpo8uTJqqqqknR8PvyJJ57Q008/rfT0dI0fP16SdNttt+kPf/iDiouL1bdvXw0bNkzFxcWuW/U6d+6sv/zlL9qzZ4/69++vOXPmaN68eV79vJdddpnmz5+vefPmKTs7WytXrlRRUVGbcZ06ddK9996rKVOmaMiQIYqJidHq1atdx8eMGaO//vWvKikp0cCBAzV48GDNnz9fmZmZXsUDwH9shi8m/wAAQIdFZQ8AQIgj2QMAEOJI9gAAhDiSPQAAIY5kDwBAiCPZAwAQ4kj2AACEOJI9AAAhjmQPAECII9kDABDiSPYAAIS4/w+ySKtI1gkKCQAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 640x480 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Performance on Training Data\n",
    "\n",
    "plot_confusion_matrix(DT_clf, X_train, y_train)  "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Optimising the Model - Hyperparameter Tuning"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "What are the parameters?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'ccp_alpha': 0.0,\n",
       " 'class_weight': None,\n",
       " 'criterion': 'gini',\n",
       " 'max_depth': None,\n",
       " 'max_features': None,\n",
       " 'max_leaf_nodes': None,\n",
       " 'min_impurity_decrease': 0.0,\n",
       " 'min_samples_leaf': 1,\n",
       " 'min_samples_split': 2,\n",
       " 'min_weight_fraction_leaf': 0.0,\n",
       " 'random_state': None,\n",
       " 'splitter': 'best'}"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "DecisionTreeClassifier().get_params()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Automated Search for best parameters:**\n",
    "\n",
    "We can write scripts to explore the different parameter settings.\n",
    "\n",
    "Alternatively, we use available tools e.g. **'GridSearchCV'** in SKlearn\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Accuracy with max_depth 3 is =  0.8370786516853933\n",
      "Accuracy with max_depth 4 is =  0.8202247191011236\n",
      "Accuracy with max_depth 5 is =  0.8370786516853933\n",
      "Accuracy with max_depth 6 is =  0.8258426966292135\n",
      "Accuracy with max_depth 7 is =  0.8146067415730337\n",
      "Accuracy with max_depth 8 is =  0.7471910112359551\n",
      "Accuracy with max_depth 9 is =  0.7584269662921348\n",
      "Accuracy with max_depth 10 is =  0.7921348314606742\n",
      "Accuracy with max_depth 11 is =  0.7808988764044944\n",
      "Accuracy with max_depth 12 is =  0.7752808988764045\n",
      "Accuracy with max_depth 13 is =  0.7752808988764045\n",
      "Accuracy with max_depth 14 is =  0.7528089887640449\n",
      "Accuracy with max_depth 15 is =  0.7471910112359551\n",
      "Accuracy with max_depth 16 is =  0.7696629213483146\n",
      "Accuracy with max_depth 17 is =  0.7528089887640449\n",
      "Accuracy with max_depth 18 is =  0.7528089887640449\n",
      "Accuracy with max_depth 19 is =  0.7528089887640449\n"
     ]
    }
   ],
   "source": [
    "# Check for the best max_depth\n",
    "\n",
    "for i in range(3, 20):\n",
    "    DT_clf_x = DecisionTreeClassifier(max_depth=i, random_state=42)\n",
    "    DT_clf_x.fit(X_train, y_train)\n",
    "    y_pred_x = DT_clf_x.predict(X_test)\n",
    "    print('Accuracy with max_depth', i, 'is = ', accuracy_score(y_test, y_pred_x))\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [],
   "source": [
    "# ## GridSearchCV to find the best parameters\n",
    "# from sklearn.model_selection import GridSearchCV\n",
    "\n",
    "# tree_param = {'max_depth':[3,4,5,6,7,8,9,10,11,12,13,14,15,20], 'criterion':['gini','entropy']}\n",
    "\n",
    "\n",
    "# dtree_model=DecisionTreeClassifier(random_state=42)\n",
    "\n",
    "# #use gridsearch to test all values\n",
    "# dtree_gscv = GridSearchCV(dtree_model, tree_param, cv=10)\n",
    "\n",
    "# #fit model to data\n",
    "# dtree_gscv.fit(X, y)\n",
    "# dtree_gscv.best_params_\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Create the Final Model with Optimal Parameters"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "The accuracy score:  0.8370786516853933\n",
      "\n",
      "============== Metric ===============================\n",
      "\n",
      "              precision    recall  f1-score   support\n",
      "\n",
      "           0       0.83      0.93      0.88       114\n",
      "           1       0.84      0.67      0.75        64\n",
      "\n",
      "    accuracy                           0.84       178\n",
      "   macro avg       0.84      0.80      0.81       178\n",
      "weighted avg       0.84      0.84      0.83       178\n",
      "\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\a.sambo\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:87: FutureWarning: Function plot_confusion_matrix is deprecated; Function `plot_confusion_matrix` is deprecated in 1.0 and will be removed in 1.2. Use one of the class methods: ConfusionMatrixDisplay.from_predictions or ConfusionMatrixDisplay.from_estimator.\n",
      "  warnings.warn(msg, category=FutureWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<sklearn.metrics._plot.confusion_matrix.ConfusionMatrixDisplay at 0x2414eb149a0>"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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VvKZ1vuf//xndenSRW63W4Zh6MSJE7r11lvVtm1bxcbG6mc/+5k+/vhjv+s+8sgj8ng8iomJ0fTp01VeXu63/4dtfK/Xq4ULF+qCCy6Q2+1Wx44dtWDBAklSUlKSJKl///5yuVwaPny477yVK1eqR48eioyMVPfu3bVkyRK/7/nwww/Vv39/RUZGauDAgdqxY0fAf0aZmZnq06ePmjVrpsTERKWkpOjkyZO1jtuwYYO6du2qyMhIjRgxQvn5+X77//a3v2nAgAGKjIxUly5d9NBDD6m6ujrgeAA0DJI9HCMqKkpVVVW+z59//rmef/55vfjii742+nXXXaeCggK98sorys3N1UUXXaSrrrpK33zzjSTp+eef14MPPqgFCxZo+/btateuXa0k/EPz5s3TwoULdf/992vPnj1au3atPB6PpNMJW5Jef/11ffnll/rrX/8qSVqxYoXmz5+vBQsWaO/evUpPT9f999+v7OxsSVJpaanGjBmjbt26KTc3V2lpabrnnnsC/jMJCwvTE088oV27dik7O1tvvvmm5s6d63fMqVOntGDBAmVnZ+u9995TcXGxJk+e7Nv/z3/+U7/61a80e/Zs7dmzR8uWLdOqVat8v9AAOAcYgA1NmzbNGDdunO/zBx98YLRq1cqYOHGiYRiG8eCDDxrh4eFGYWGh75g33njDiI2NNcrLy/2udf755xvLli0zDMMwhgwZYtx2221++wcPHmz07dv3rN9dXFxsuN1uY8WKFWeNMy8vz5Bk7Nixw288MTHRWLt2rd/Y73//e2PIkCGGYRjGsmXLjJYtWxqlpaW+/UuXLj3rtb6vU6dOxmOPPfaj+59//nmjVatWvs8rV640JBlbt271je3du9eQZHzwwQeGYRjG5ZdfbqSnp/tdZ/Xq1Ua7du18nyUZ69ev/9HvBdCwmLOHbf3973/Xeeedp+rqalVVVWncuHF68sknffs7deqkNm3a+D7n5ubq5MmTatWqld91ysrKtH//fknS3r17ddttt/ntHzJkiN56662zxrB3715VVFToqquuqnPcx44dU35+vqZPn65bbrnFN15dXe1bD7B371717dtX0dHRfnEE6q233lJ6err27Nmj4uJiVVdXq7y8XKWlpWrWrJkkqWnTpho4cKDvnO7du6t58+bau3evLr74YuXm5mrbtm1+lXxNTY3Ky8t16tQpvxgBBAfJHrZ15ZVXaunSpQoPD1dCQkKtBXhnktkZXq9X7dq109tvv13rWvW9/SwqKirgc7xer6TTrfzBgwf77WvSpIkkyTCMesXzfYcOHdK1116r2267Tb///e/VsmVLvfvuu5o+fbrfdId0+ta5Hzoz5vV69dBDD2nChAm1jomMjDQdJwDzSPawrWbNmumCCy6o8/EXXXSRCgoK1LRpU3Xu3Pmsx/To0UNbt27VDTfc4BvbunXrj14zOTlZUVFReuONNzRjxoxa+yMiIiSdroTP8Hg8at++vQ4cOKCpU6ee9bo9e/bU6tWrVVZW5vuF4j/FcTbbt29XdXW1Hn30UYWFnV6+8/zzz9c6rrq6Wtu3b9fFF18sSdq3b5++/fZbde/eXdLpP7d9+/YF9GcNoHGR7IHvXH311RoyZIjGjx+vhQsXqlu3bjp69KheeeUVjR8/XgMHDtRdd92ladOmaeDAgbrsssu0Zs0a7d69W126dDnrNSMjI3Xfffdp7ty5ioiI0KWXXqpjx45p9+7dmj59utq2bauoqCi99tpr6tChgyIjIxUXF6e0tDTNnj1bsbGxGj16tCoqKrR9+3YVFRVpzpw5mjJliubPn6/p06frd7/7nQ4ePKg//vGPAf28559/vqqrq/Xkk09q7Nixeu+99/TUU0/VOi48PFx33nmnnnjiCYWHh+uOO+7QJZdc4kv+DzzwgMaMGaPExET98pe/VFhYmP71r3/pk08+0R/+8IfA/0EAsByr8YHvuFwuvfLKK7riiit08803q2vXrpo8ebIOHjzoWz0/adIkPfDAA7rvvvs0YMAAHTp0SLfffvt/vO7999+vu+++Ww888IB69OihSZMmqbCwUNLp+fAnnnhCy5YtU0JCgsaNGydJmjFjhp5++mmtWrVKffr00bBhw7Rq1SrfrXrnnXee/va3v2nPnj3q37+/5s+fr4ULFwb08/br10+ZmZlauHChevfurTVr1igjI6PWcdHR0brvvvs0ZcoUDRkyRFFRUXruued8+0eNGqW///3vysnJ0aBBg3TJJZcoMzNTnTp1CigeAA3HZVgx+QcAAM5ZVPYAANgcyR4AAJsj2QMAYHMkewAAbI5kDwCAzZHsAQCwOZI9AAA2R7IHAMDmSPYAANgcyR4AAJsj2QMAYHP/H5sM3R8gvtJSAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 640x480 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "DT_clf_Op = DecisionTreeClassifier(max_depth=5, random_state=42)\n",
    "DT_clf_Op.fit(X_train, y_train)\n",
    "# check with test data\n",
    "y_pred = DT_clf_Op.predict(X_test)\n",
    "\n",
    "# Print the accuracy score\n",
    "print('\\nThe accuracy score: ', accuracy_score(y_test, y_pred))\n",
    "\n",
    "print(\"\\n============== Metric ===============================\\n\")\n",
    "# Print the evaluation metrics\n",
    "print(classification_report(y_test, y_pred))\n",
    "\n",
    "plot_confusion_matrix(DT_clf_Op, X_test, y_test)  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "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.13"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
