{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "1587aa08",
   "metadata": {},
   "source": [
    "# Lesson 28: TensorFlow/Keras classification activity\n",
    "\n",
    "## Notebook set up\n",
    "### Imports"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "id": "39b9bf45",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Standard library imports\n",
    "import itertools\n",
    "\n",
    "from pathlib import Path\n",
    "from shutil import rmtree\n",
    "from typing import Tuple, Optional\n",
    "\n",
    "# Third party imports\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "import tensorflow as tf\n",
    "\n",
    "from sklearn.linear_model import LogisticRegression\n",
    "from sklearn.metrics import accuracy_score, ConfusionMatrixDisplay\n",
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "from sklearn.utils.class_weight import compute_class_weight\n",
    "from tensorflow import keras\n",
    "from tensorflow.keras import layers\n",
    "from tensorflow.keras.callbacks import EarlyStopping, TensorBoard"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1a6707ac",
   "metadata": {},
   "source": [
    "### GPU configuration"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "8982d6f8",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Using GPU: PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU')\n",
      "Memory growth enabled\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "WARNING: All log messages before absl::InitializeLog() is called are written to STDERR\n",
      "I0000 00:00:1769469132.564580  154845 service.cc:145] XLA service 0x559405517050 initialized for platform CUDA (this does not guarantee that XLA will be used). Devices:\n",
      "I0000 00:00:1769469132.564619  154845 service.cc:153]   StreamExecutor device (0): Tesla P100-PCIE-16GB, Compute Capability 6.0\n",
      "I0000 00:00:1769469132.600277  154845 device_compiler.h:188] Compiled cluster using XLA!  This line is logged at most once for the lifetime of the process.\n"
     ]
    }
   ],
   "source": [
    "# Configure GPU settings\n",
    "gpus = tf.config.list_physical_devices('GPU')\n",
    "\n",
    "if gpus:\n",
    "    try:\n",
    "        # Use only GPU 0\n",
    "        tf.config.set_visible_devices(gpus[0], 'GPU')\n",
    "\n",
    "        # Enable memory growth\n",
    "        tf.config.experimental.set_memory_growth(gpus[0], True)\n",
    "\n",
    "        print(f'Using GPU: {gpus[0]}')\n",
    "        print('Memory growth enabled')\n",
    "\n",
    "    except RuntimeError as e:\n",
    "        print(e)\n",
    "\n",
    "# Trigger one-time XLA compilation message so we don't have to look at it later\n",
    "@tf.function(jit_compile=True)\n",
    "def simple_xla_op():\n",
    "    return tf.add(tf.constant(1.0), tf.constant(2.0))\n",
    "\n",
    "_ = simple_xla_op()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "13ba26d9",
   "metadata": {},
   "source": [
    "### Global TensorFlow training configuration"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "73b5ddcb",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Remove and recreate logs directory to clear any old TensorBoard logs\n",
    "log_dir = ('../logs')\n",
    "rmtree(log_dir, ignore_errors=True)\n",
    "Path(log_dir).mkdir(parents=True, exist_ok=True)\n",
    "\n",
    "# Set verbosity for wherever it's accepted\n",
    "verbose = 0\n",
    "\n",
    "# Fix TensorFlow random state for reproducibility\n",
    "tf.random.set_seed(315)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "98f5eab8",
   "metadata": {},
   "source": [
    "## 1. Data preparation\n",
    "\n",
    "### 1.1. Load occupancy data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "e94bf1e5",
   "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>date</th>\n",
       "      <th>Temperature</th>\n",
       "      <th>Humidity</th>\n",
       "      <th>Light</th>\n",
       "      <th>CO2</th>\n",
       "      <th>HumidityRatio</th>\n",
       "      <th>Occupancy</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2015-02-04 17:51:00</td>\n",
       "      <td>23.18</td>\n",
       "      <td>27.2720</td>\n",
       "      <td>426.0</td>\n",
       "      <td>721.25</td>\n",
       "      <td>0.004793</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2015-02-04 17:51:59</td>\n",
       "      <td>23.15</td>\n",
       "      <td>27.2675</td>\n",
       "      <td>429.5</td>\n",
       "      <td>714.00</td>\n",
       "      <td>0.004783</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2015-02-04 17:53:00</td>\n",
       "      <td>23.15</td>\n",
       "      <td>27.2450</td>\n",
       "      <td>426.0</td>\n",
       "      <td>713.50</td>\n",
       "      <td>0.004779</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2015-02-04 17:54:00</td>\n",
       "      <td>23.15</td>\n",
       "      <td>27.2000</td>\n",
       "      <td>426.0</td>\n",
       "      <td>708.25</td>\n",
       "      <td>0.004772</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2015-02-04 17:55:00</td>\n",
       "      <td>23.10</td>\n",
       "      <td>27.2000</td>\n",
       "      <td>426.0</td>\n",
       "      <td>704.50</td>\n",
       "      <td>0.004757</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                  date  Temperature  Humidity  Light     CO2  HumidityRatio  \\\n",
       "0  2015-02-04 17:51:00        23.18   27.2720  426.0  721.25       0.004793   \n",
       "1  2015-02-04 17:51:59        23.15   27.2675  429.5  714.00       0.004783   \n",
       "2  2015-02-04 17:53:00        23.15   27.2450  426.0  713.50       0.004779   \n",
       "3  2015-02-04 17:54:00        23.15   27.2000  426.0  708.25       0.004772   \n",
       "4  2015-02-04 17:55:00        23.10   27.2000  426.0  704.50       0.004757   \n",
       "\n",
       "   Occupancy  \n",
       "0          1  \n",
       "1          1  \n",
       "2          1  \n",
       "3          1  \n",
       "4          1  "
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "occupancy_df = pd.read_csv('https://gperdrizet.github.io/FSA_devops/assets/data/unit4/occupancy_data.csv')\n",
    "occupancy_df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "0561763f",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 20560 entries, 0 to 20559\n",
      "Data columns (total 7 columns):\n",
      " #   Column         Non-Null Count  Dtype  \n",
      "---  ------         --------------  -----  \n",
      " 0   date           20560 non-null  object \n",
      " 1   Temperature    20560 non-null  float64\n",
      " 2   Humidity       20560 non-null  float64\n",
      " 3   Light          20560 non-null  float64\n",
      " 4   CO2            20560 non-null  float64\n",
      " 5   HumidityRatio  20560 non-null  float64\n",
      " 6   Occupancy      20560 non-null  int64  \n",
      "dtypes: float64(5), int64(1), object(1)\n",
      "memory usage: 1.1+ MB\n"
     ]
    }
   ],
   "source": [
    "occupancy_df.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "d5716bd3",
   "metadata": {},
   "outputs": [],
   "source": [
    "label = 'Occupancy'\n",
    "features = ['Temperature','Humidity','Light','CO2','HumidityRatio']"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "bdce7333",
   "metadata": {},
   "source": [
    "### 1.2. Train test split"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "43267e58",
   "metadata": {},
   "outputs": [],
   "source": [
    "training_df, testing_df = train_test_split(occupancy_df, random_state=315)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cea0e509",
   "metadata": {},
   "source": [
    "### 1.3. Standard scale"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "63115680",
   "metadata": {},
   "outputs": [],
   "source": [
    "feature_scaler = StandardScaler()\n",
    "feature_scaler.fit(training_df[features])\n",
    "\n",
    "training_df[features] = feature_scaler.transform(training_df[features])\n",
    "testing_df[features] = feature_scaler.transform(testing_df[features])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9bccff99",
   "metadata": {},
   "source": [
    "## 2. Logistic regression baseline\n",
    "\n",
    "### 2.1. Fit"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "d8e85966",
   "metadata": {},
   "outputs": [],
   "source": [
    "logistic_model = LogisticRegression(n_jobs=-1, random_state=315)\n",
    "fit_result = logistic_model.fit(training_df[features], training_df[label])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "31d5c9c2",
   "metadata": {},
   "source": [
    "### 2.2. Test set evaluation"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "b9eea129",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Logistic regression accuracy on test set: 0.9907\n"
     ]
    }
   ],
   "source": [
    "logistic_predictions = logistic_model.predict(testing_df[features])\n",
    "logistic_accuracy = accuracy_score(testing_df[label], logistic_predictions)\n",
    "print(f'Logistic regression accuracy on test set: {logistic_accuracy:.4f}')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "01f45893",
   "metadata": {},
   "source": [
    "## 3. DNN model\n",
    "\n",
    "### 3.1. Compute class weights"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "b4d0bdae",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Class weights: {0: 0.6505231184610193, 1: 2.1608744394618835}\n"
     ]
    }
   ],
   "source": [
    "# Compute class weights to handle class imbalance\n",
    "class_weights = compute_class_weight(\n",
    "    class_weight='balanced',\n",
    "    classes=np.unique(training_df[label]),\n",
    "    y=training_df[label]\n",
    ")\n",
    "\n",
    "class_weight_dict = dict(enumerate(class_weights))\n",
    "print(f'Class weights: {class_weight_dict}')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cb98d209",
   "metadata": {},
   "source": [
    "### 3.2. Callback constructor function"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "ef3c4b13",
   "metadata": {},
   "outputs": [],
   "source": [
    "def make_callbacks(\n",
    "    learning_rate: float,\n",
    "    batch_size: int,\n",
    "    patience: int = 10,\n",
    ") -> Tuple[keras.callbacks.EarlyStopping, keras.callbacks.TensorBoard]:\n",
    "    '''Create EarlyStopping and TensorBoard callbacks.'''\n",
    "\n",
    "    early_stopping = keras.callbacks.EarlyStopping(\n",
    "        monitor='val_loss',\n",
    "        patience=patience,\n",
    "        verbose=verbose\n",
    "    )\n",
    "\n",
    "    run_log_dir = f'{log_dir}/lr_{learning_rate}_bs_{batch_size}'\n",
    "\n",
    "    Path(run_log_dir).mkdir(parents=True, exist_ok=True)\n",
    "\n",
    "    tensorboard_callback = keras.callbacks.TensorBoard(\n",
    "        log_dir=run_log_dir,\n",
    "        histogram_freq=1,\n",
    "        write_graph=False\n",
    "    )\n",
    "\n",
    "    return early_stopping, tensorboard_callback"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2260c98f",
   "metadata": {},
   "source": [
    "### 3.3. Model constructor function"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "7026c659",
   "metadata": {},
   "outputs": [],
   "source": [
    "def build_model(learning_rate: float=0.01) -> keras.Sequential:\n",
    "    '''Builds and compiles the Keras Sequential model.'''\n",
    "\n",
    "    model = keras.Sequential([\n",
    "        layers.Input(shape=(5,)),\n",
    "        layers.Dense(16, activation='relu'),\n",
    "        layers.Dense(32, activation='relu'),\n",
    "        layers.Dense(16, activation='relu'),\n",
    "        layers.Dense(1, activation='sigmoid')\n",
    "    ])\n",
    "\n",
    "    model.compile(\n",
    "        optimizer=keras.optimizers.Adam(learning_rate=learning_rate),\n",
    "        loss='binary_crossentropy',\n",
    "        metrics=['accuracy']\n",
    "    )\n",
    "\n",
    "    return model"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "04aa4af3",
   "metadata": {},
   "source": [
    "### 3.4. Model training function"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "id": "5178fc7f",
   "metadata": {},
   "outputs": [],
   "source": [
    "def train_model(\n",
    "    model: keras.Sequential,\n",
    "    epochs: int=200,\n",
    "    batch_size: int=128,\n",
    "    validation_split: Optional[float]=0.2,\n",
    "    callbacks: Tuple[keras.callbacks.EarlyStopping, keras.callbacks.TensorBoard]=None\n",
    ") -> Tuple[keras.Sequential, keras.callbacks.History]:\n",
    "    '''Trains the Keras Sequential model. Returns the training history.'''\n",
    "\n",
    "    history = model.fit(\n",
    "        training_df[features],\n",
    "        training_df[label],\n",
    "        epochs=epochs,\n",
    "        batch_size=batch_size,\n",
    "        validation_split=validation_split,\n",
    "        class_weight=class_weight_dict,\n",
    "        callbacks=callbacks,\n",
    "        verbose=verbose\n",
    "    )\n",
    "\n",
    "    return model, history"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1ce92b2b",
   "metadata": {},
   "source": [
    "### 3.5. Optimize batch size and learning rate"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "62e31840",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Batch size: 256, learning rate: 1e-06...\tfinal val loss: 0.6463,  final val accuracy: 80.38%\n",
      "Batch size: 256, learning rate: 1e-05...\tfinal val loss: 0.1256,  final val accuracy: 98.05%\n",
      "Batch size: 256, learning rate: 0.0001...\tfinal val loss: 0.0427,  final val accuracy: 98.90%\n",
      "Batch size: 512, learning rate: 1e-06...\tfinal val loss: 0.7368,  final val accuracy: 61.38%\n",
      "Batch size: 512, learning rate: 1e-05...\tfinal val loss: 0.4012,  final val accuracy: 96.34%\n",
      "Batch size: 512, learning rate: 0.0001...\tfinal val loss: 0.0446,  final val accuracy: 98.80%\n",
      "Batch size: 1024, learning rate: 1e-06...\tfinal val loss: 0.6840,  final val accuracy: 74.81%\n",
      "Batch size: 1024, learning rate: 1e-05...\tfinal val loss: 0.6027,  final val accuracy: 81.81%\n",
      "Batch size: 1024, learning rate: 0.0001...\tfinal val loss: 0.0476,  final val accuracy: 98.74%\n",
      "CPU times: user 10min 47s, sys: 33.1 s, total: 11min 20s\n",
      "Wall time: 8min 52s\n"
     ]
    }
   ],
   "source": [
    "%%time\n",
    "\n",
    "batch_sizes = [256, 512, 1024]\n",
    "learning_rates = [1e-6, 1e-5, 1e-4]\n",
    "\n",
    "for batch_size, learning_rate in itertools.product(batch_sizes, learning_rates):\n",
    "\n",
    "    print(f'Batch size: {batch_size}, learning rate: {learning_rate}...', end='\\t')\n",
    "\n",
    "    # Set-up callback for this run\n",
    "    callbacks = make_callbacks(learning_rate=learning_rate, batch_size=batch_size)\n",
    "\n",
    "    # Build and train the model\n",
    "    model = build_model(learning_rate=learning_rate)\n",
    "    model, history = train_model(model, batch_size=batch_size, callbacks=callbacks)\n",
    "\n",
    "    print(f\"final val loss: {history.history['val_loss'][-1]:.4f}, \", end=' ') \n",
    "    print(f\"final val accuracy: {history.history['val_accuracy'][-1]*100:.2f}%\")\n",
    "\n",
    "print()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "dbcb39fb",
   "metadata": {},
   "source": [
    "Based on the final loss & accuracy and the TensorBoard learning curves the best settings are:\n",
    "\n",
    "- Batch size: 256\n",
    "- Learning rate: 0.0001"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "id": "23813338",
   "metadata": {},
   "outputs": [],
   "source": [
    "batch_size = 256\n",
    "learning_rate = 0.0001"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d4ac5759",
   "metadata": {},
   "source": [
    "### 3.6. Re-train with optimized hyperparameters"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "id": "ff678452",
   "metadata": {},
   "outputs": [],
   "source": [
    "callbacks = make_callbacks(learning_rate=learning_rate, batch_size=batch_size)\n",
    "model = build_model(learning_rate=learning_rate)\n",
    "model, history = train_model(model, batch_size=batch_size, callbacks=callbacks)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d74f3b7e",
   "metadata": {},
   "source": [
    "### 3.7. Learning curves"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "id": "e0f48c27",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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KXf//e9/8fLy4sknnyy0XG9SUhJPPfUU3t7e/Pe//y107LRp0wrcnzJlCgC33367rc3Hx6fQG2B5OXnyJH369OH666/n7bffLrJPnz59OH78ODNmzCj0WEZGBmlpacA/r+n9998v0Gfy5MlXHGdcXBwPP/ww7u7uRf6cL3ThBXHz5s3FOn/+RXfcuHFFPl7SLRTatGlDaGgo06dPLzCs8ueff2bXrl22Vd3S09MLLFsO1guon5+f7bjk5ORCn3jnf6KtIZsiVZeuUbpGFfca5eLiUug68tVXXxXa0ueee+7h9OnTTJ06tdA58o+/5557sFgsRSar+X38/f0JDg7m999/L/D4//73v8vGemHMF54z379/b0ajkV69evH999/btnAoKiaw7sfYr18/vvzyS2bPnk3z5s1p0aJFsWOSsqEtFKTcNWrUiDlz5vDggw/SvHlzHn30UerXr8/hw4f55JNPOH36NF988UWRy0ofOnSIu+66i27durFmzRrb0s0XbpTaunVrli9fzqRJk6hVqxb169e3TUgva8899xynTp3ixRdfLFQNatGiBS1atKB///58+eWXPPXUU6xYsYKOHTtiMpnYvXs3X375JUuXLqVNmzZER0fTr18//ve//5GSkkKHDh2IjY1l//79dsW0adMmPvvsM8xmM2fPnmX9+vW2Cd5z584t1htx/tLTW7ZsKdZGqgEBAQwdOvSin6yWdAsFNzc3JkyYwKBBg+jcuTP9+vWzbaEQERFhW8J579693HLLLfTp04emTZvi6urKokWLSEhI4P777wdgzpw5/O9//6N3795ERkZy7tw5ZsyYgb+/P927d7crLhGpPHSN0jWquNeoO++8k3HjxjFo0CA6dOjAtm3bmDdvXqGq2IABA/j000+JiYlh3bp13HDDDaSlpbF8+XKefvppevbsyU033UT//v15//332bdvH926dcNsNvPHH39w0003MWTIEMC6bcWbb77JY489Rps2bfj999/Zu3fvZV9zPn9/f9s89ZycHGrXrs0vv/zCoUOHCvV94403+OWXX+jcubNtO42TJ0/y1VdfsWrVKtsCZvmv8f3332fFihVMmDCh2PFIGXLYup5S5W3dutXSr18/S82aNS1ubm6WGjVqWPr162fZtm1bob75SwHv3LnTcu+991r8/PwsQUFBliFDhhRYSt9isVh2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CUaPHs3HH3/MtddeS3R0NDNnzsRisRTrPPYuKJaZmcmIESNo2rQpvXv3pnbt2qxatcq2enSllHQQjqwBgxGa9+Hztdahsn2vratVNUVESoHBUtyrViWRmppKQEAAKSkpZTdH4fR+mNqaLIMnURkf88bdLTX8RESkGMrlPfoicnJyWLRoEbNmzWLZsmVcd911PProoxw7doxp06Zx88038/nnn5drTKXFkT/XIq14A36bAA1uYn+3z+gy6TeMBvjz5ZupGaD5eCJStZTFe7Td++Rt2rQJNzc3mjdvDsC3337LrFmzaNq0KWPGjMHd3b1UAqvQgsLB6IqHOZMaJKuSJyLixDZt2sSsWbP44osvMBqNDBgwgHfffZeoqChbn969e3Pttdc6MMpKxJQLm+Zav2/1EF+ss1bxbo4KVYInIlJK7B4T8eSTT7J3714ADh48yP3334+3tzdfffWVbf5AlefiBkHWTdEbGE9oGwURESd27bXXsm/fPj744AOOHz/OxIkTCyR4APXr1+f+++93UISVzL5f4NwJ8K5OZsPutgVXHminES8iIqXF7kre3r17iY6OBuCrr76iU6dOfP755/z555/cf//9TJ48uZRDrKCCG8GZfTQwnGSnkjwREad18OBBwsPDL9nHx8eHWbNmlVNEldzGvJ9j9AN8v+MMKRk51AnyovNVoY6NS0SkErG7kmexWDCbzYB1C4Xu3bsDULduXU6fPl260VVk1a3bKDQwnNRwTRERJ5aYmMjatWsLta9du5YNGzY4IKIK6uwROH6Z1UjPHoF9y6zftx7EZ3/FAdYqnovRUMYBiohUHXYneW3atOH//u//mDt3Lr/99pttC4VDhw7ZVg4TbCtsRhpOaK88EREn9swzz3D06NFC7cePH+eZZ55xQEQV1Lz74OMukLj74n02zQUsUL8T2zKC2XIsBXcXI33a1C23MEVEqgK7k7zJkyezadMmhgwZwquvvkrDhtaK1ddff02HDh1KPcAKK2+vvEijdRuFo0mq5omIOKOdO3dyzTXXFGpv1aoVO3fudEBEFVDKcTi1Gywm2PNj0X1MufB33oIrF1Txbm9eg2Bfj3IKVESkarB7Tl6LFi3Ytm1bofa3334bFxeXUgmqUsir5NU0nMaDbA6dTqdhqJ+DgxIRkX/z8PAgISGBBg0aFGg/efIkrq52XyarpmPr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x48nJSUFiL8c2yLVvjPa2ueJal/brwuqfUSeq/ZdfI5q8gRwvu3buXMn69ati3UozerIkSPMmDGDVatWkZCQEOtwWkQoFCIvL4958+YBMHDgQHbu3MmLL75IUVFRjKNrHm+88QavvPIKr776Ktdddx3btm3j/vvvJzc3N25ybM/q6uq48847McawaNGiWIcj7YhqX9ul2hcfObZnLV37dLhmE2VmZuJyuc658tTx48fJzs6OUVTNY9q0afzxj39k7dq1dO7cOTI/Ozub2tpaTp06FTW+LeW8detWSkpK+OY3v4nb7cbtdvPBBx/w/PPP43a7ycrKavM55uTk0K9fv6h5ffv25fDhwwCRPNrye/df/uVfeOSRR/jRj35E//79mTBhAg888ADz588H4iPHxpqST3Z2NiUlJVHL6+vrOXnyZJvKOVzkDh06xKpVqyLfZEL85NiWqfad0ZZyVu2Lj7qg2kfkuWrfxeeoJq+JvF4vgwYNYs2aNZF5oVCINWvWkJ+fH8PILp0xhmnTprFixQref/99evToEbV80KBBeDyeqJz37NnD4cOH20zOt956Kzt27GDbtm2RKS8vj8LCwsjjtp7j8OHDz7n89969e+nWrRsAPXr0IDs7OyrHsrIyNm3a1GZyrKqqwrajP65cLhehUAiIjxwba0o++fn5nDp1iq1bt0bGvP/++4RCIYYOHdrqMV+KcJHbt28fq1evJiMjI2p5POTY1qn2OdpaXVDti4+6oNqn2hd2STle9GVi2rFly5YZn89nli5daj799FMzZcoUk5aWZoqLi2Md2iW59957TWpqqvnzn/9sPv/888hUVVUVGXPPPfeYrl27mvfff998/PHHJj8/3+Tn58cw6svX+ApjxrT9HDdv3mzcbreZO3eu2bdvn3nllVdMIBAw//Vf/xUZ88wzz5i0tDTzhz/8wfz1r3813/3ud6/oSyyfraioyFx11VWRy0i/+eabJjMz0zz88MORMW0tx/LycvPJJ5+YTz75xABmwYIF5pNPPolcXasp+YwcOdIMHDjQbNq0yaxbt8707t37irqM9IVyrK2tNXfccYfp3Lmz2bZtW9RnUE1NTWQdV3qO7YFqX9urC+ej2nfl14Wzqfap9l1OjmryLtKvfvUr07VrV+P1es2QIUPMxo0bYx3SJQPOOy1ZsiQy5vTp0+bnP/+5SU9PN4FAwHzve98zn3/+eeyCbgZnF7p4yPF//ud/zDe+8Q3j8/lMnz59zEsvvRS1PBQKmTlz5pisrCzj8/nMrbfeavbs2ROjaC9eWVmZmTFjhunatatJSEgwV199tZk1a1bUB2Jby3Ht2rXn/f9XVFRkjGlaPl9++aUZP368SUpKMikpKeYnP/mJKS8vj0E253ehHA8ePPi1n0Fr166NrONKz7G9UO1re3XhbKp9V35dOJtqn2rf5eRoGWNM0/f7iYiIiIiIyJVM5+SJiIiIiIjEETV5IiIiIiIicURNnoiIiIiISBxRkyciIiIiIhJH1OSJiIiIiIjEETV5IiIiIiIicURNnoiIiIiISBxRkyciIiIiIhJH1OSJtFOWZfHWW2/FOgwREZFWo9on7YWaPJEYmDhxIpZlnTONHDky1qGJiIi0CNU+kdbjjnUAIu3VyJEjWbJkSdQ8n88Xo2hERERanmqfSOvQnjyRGPH5fGRnZ0dN6enpgHM4yaJFi7jtttvw+/1cffXV/P73v496/Y4dO/j2t7+N3+8nIyODKVOmUFFRETVm8eLFXHfddfh8PnJycpg2bVrU8hMnTvC9732PQCBA7969efvtt1s2aRERaddU+0Rah5o8kSvUnDlzGDt2LNu3b6ewsJAf/ehH7Nq1C4DKykpGjBhBeno6W7ZsYfny5axevTqqkC1atIipU6cyZcoUduzYwdtvv02vXr2itvHkk09y55138te//pVRo0ZRWFjIyZMnWzVPERGRMNU+kWZiRKTVFRUVGZfLZRITE6OmuXPnGmOMAcw999wT9ZqhQ4eae++91xhjzEsvvWTS09NNRUVFZPk777xjbNs2xcXFxhhjcnNzzaxZs742BsDMnj078ryiosIA5t133222PEVERMJU+0Raj87JE4mRW265hUWLFkXN69ChQ+Rxfn5+1LL8/Hy2bdsGwK5duxgwYACJiYmR5cOHDycUCrFnzx4sy+LYsWPceuutF4zh+uuvjzxOTEwkJSWFkpKSS01JRETkglT7RFqHmjyRGElMTDznEJLm4vf7mzTO4/FEPbcsi1Ao1BIhiYiIqPaJtBKdkydyhdq4ceM5z/v27QtA37592b59O5WVlZHl69evx7Ztrr32WpKTk+nevTtr1qxp1ZhFREQuh2qfSPPQnjyRGKmpqaG4uDhqntvtJjMzE4Dly5eTl5fHjTfeyCuvvMLmzZv5zW9+A0BhYSGPP/44RUVFPPHEE3zxxRdMnz6dCRMmkJWVBcATTzzBPffcQ6dOnbjtttsoLy9n/fr1TJ8+vXUTFRERaaDaJ9I61OSJxMh7771HTk5O1Lxrr72W3bt3A87Vv5YtW8bPf/5zcnJyeO211+jXrx8AgUCAlStXMmPGDAYPHkwgEGDs2LEsWLAgsq6ioiKqq6v5j//4Dx566CEyMzP5wQ9+0HoJioiInEW1T6R1WMYYE+sgRCSaZVmsWLGCMWPGxDoUERGRVqHaJ9J8dE6eiIiIiIhIHFGTJyIiIiIiEkd0uKaIiIiIiEgc0Z48ERERERGROKImT0REREREJI6oyRMREREREYkjavJERERERETiiJo8ERERERGROKImT0REREREJI6oyRMREREREYkjavJERERERETiiJo8ERERERGROPL/AV8t+/XVRinSAAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 900x400 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, axes = plt.subplots(1, 2, figsize=(9, 4))\n",
    "\n",
    "axes[0].set_title('Optimized DNN: loss')\n",
    "axes[0].plot(history.history['loss'], label='Training')\n",
    "axes[0].plot(history.history['val_loss'], label='Validation')\n",
    "axes[0].set_xlabel('Epoch')\n",
    "axes[0].set_ylabel('Loss (binary crossentropy)')\n",
    "axes[0].legend(loc='best')\n",
    "\n",
    "axes[1].set_title('Optimized DNN: accuracy')\n",
    "axes[1].plot(history.history['accuracy'], label='Training')\n",
    "axes[1].plot(history.history['val_accuracy'], label='Validation')\n",
    "axes[1].set_xlabel('Epoch')\n",
    "axes[1].set_ylabel('Accuracy')\n",
    "axes[1].legend(loc='best')\n",
    "\n",
    "plt.tight_layout()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f9f32761",
   "metadata": {},
   "source": [
    "### 3.8. Test set evaluation"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "id": "fa2e6fa3",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Optimized DNN model accuracy on test set: 0.9899\n"
     ]
    }
   ],
   "source": [
    "sequential_probs = model.predict(testing_df[features], verbose=0).flatten()\n",
    "sequential_predictions = (sequential_probs >= 0.5).astype(int)\n",
    "sequential_accuracy = accuracy_score(testing_df[label], sequential_predictions)\n",
    "\n",
    "print(f'Optimized DNN model accuracy on test set: {sequential_accuracy:.4f}')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8a8be77f",
   "metadata": {},
   "source": [
    "### 3.9. Performance analysis"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "id": "97451643",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 400x400 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, ax = plt.subplots(nrows=1, ncols=1, figsize=(4, 4))\n",
    "\n",
    "ax.set_title(f'Optimized DNN test set performance\\n(accuracy: {sequential_accuracy:.2%})')\n",
    "\n",
    "disp = ConfusionMatrixDisplay.from_predictions(\n",
    "    testing_df[label],\n",
    "    sequential_predictions,\n",
    "    normalize='true',\n",
    "    ax=ax,\n",
    "    colorbar=False\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "717d75c2",
   "metadata": {},
   "source": [
    "## 4. Model comparison"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "id": "905307f8",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Logistic regression accuracy on test set: 0.9907\n",
      "Optimized DNN model accuracy on test set: 0.9899\n"
     ]
    }
   ],
   "source": [
    "print(f'Logistic regression accuracy on test set: {logistic_accuracy:.4f}')\n",
    "print(f'Optimized DNN model accuracy on test set: {sequential_accuracy:.4f}')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "id": "74cc4e6d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAArMAAAHICAYAAABd6mKEAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAY31JREFUeJzt3Xd4FGUXBfCzaZveO4GEhBZCD0UpSSgSKSLSe0BAVDoCUqSEKqB0CEUEpYgCCoh0pQoqEESp0jspkAYJaXu/P/JlZdkNJCGwjJzf8+SRfeedmbuT9XKYnZ1ViYiAiIiIiEiBTIxdABERERFRYTHMEhEREZFiMcwSERERkWIxzBIRERGRYjHMEhEREZFiMcwSERERkWIxzBIRERGRYjHMEhEREZFiMcwSERERkWIxzBKRomVlZWH48OEoXrw4TExM0LJlS2OXRAoVFhaGsLAwY5dBRAXEMEtUSCqVKl8/e/fufeZ9paamYvz48UWyrYI6ffo0xo8fjytXrrzwfefHl19+iRkzZqBNmzb46quvMHjwYGOXREREL5CZsQsgUqqVK1fqPP7666+xa9cuvfHAwMBn3ldqaioiIyMB4IWfOTp9+jQiIyMRFhYGPz+/F7rv/Pjll19QrFgxzJo1y9ilkMLt3LnT2CUQUSEwzBIVUpcuXXQe//bbb9i1a5feOBU9EcHDhw9hZWWF2NhYODo6Ftm2NRoNMjIyYGlpWWTbpJdbamoqrK2tYWFhYexSiKgQeJkB0XOk0Wgwe/ZsBAUFwdLSEh4eHujTpw8SEhJ05h09ehTh4eFwdXWFlZUVSpYsiXfffRcAcOXKFbi5uQEAIiMjtZcvjB8/Ps/9ZmZmIjIyEqVLl4alpSVcXFxQt25d7Nq1S2fe2bNn0aZNGzg7O8PS0hLVq1fH5s2btctXrFiBtm3bAgDq16+fr0snunfvDltbW1y6dAnh4eGwsbGBt7c3JkyYABEp1PHx8/ND8+bNsWPHDlSvXh1WVlZYvHgxVCoV9uzZg1OnTunV9uDBA3z00UcoXrw41Go1ypYti88++0yvBpVKhX79+mH16tUICgqCWq3G9u3bsWLFCqhUKhw8eBADBgyAm5sbHB0d0adPH2RkZCAxMRHdunWDk5MTnJycMHz4cL1tf/bZZ6hduzZcXFxgZWWF4OBgrF+/Xu+Y5dawceNGVKhQAWq1GkFBQdi+fbve3Js3b6Jnz57w9vaGWq1GyZIl8cEHHyAjI0M7JzExEYMGDdI+91KlSmHatGnQaDR5/t4etW3bNoSGhsLOzg729vaoUaMG1qxZozNn3bp1CA4OhpWVFVxdXdGlSxfcvHlTZ07ua+HatWto3rw5bG1tUaxYMSxYsAAA8Pfff6NBgwawsbGBr6+v3j5yfwf79+9Hnz594OLiAnt7e3Tr1k3vNbJp0yY0a9ZMe1wCAgIwceJEZGdn68wLCwtDhQoVcOzYMYSEhMDa2hqjRo3SLnv8nY958+YhKCgI1tbWcHJyQvXq1fXqPH78OJo0aQJ7e3vY2tqiYcOG+O233ww+l19//RVDhgyBm5sbbGxs8M477yAuLi4fvxUiypMQUZHo27evPP6/VK9evcTMzEx69+4tixYtko8//lhsbGykRo0akpGRISIiMTEx4uTkJGXKlJEZM2bI0qVLZfTo0RIYGCgiIvfv35eoqCgBIO+8846sXLlSVq5cKSdOnMizllGjRolKpZLevXvL0qVL5fPPP5eOHTvKp59+qp1z8uRJcXBwkPLly8u0adNk/vz5EhISIiqVSr7//nsREbl48aIMGDBAAMioUaO0+75z506e+46IiBBLS0spXbq0dO3aVebPny/NmzcXADJmzJgCHx8REV9fXylVqpQ4OTnJiBEjZNGiRbJlyxZZuXKllCtXTnx8fHRq02g00qBBA1GpVNKrVy+ZP3++vPXWWwJABg0apFMDAAkMDBQ3NzeJjIyUBQsWyPHjx2X58uUCQKpUqSJvvvmmLFiwQLp27SoAZPjw4VK3bl3p1KmTLFy4UPv8vvrqK51t+/j4yIcffijz58+XmTNnSs2aNQWAbNmyRa+GypUri5eXl0ycOFFmz54t/v7+Ym1tLfHx8dp5N2/eFG9vb7G2tpZBgwbJokWLZMyYMRIYGCgJCQkiIvLgwQOpVKmSuLi4yKhRo2TRokXSrVs3UalUMnDgwDx/b7mWL18uKpVKKlSoIJMnT5YFCxZIr169pGvXrjpzAEiNGjVk1qxZMmLECLGyshI/Pz9tHY++FsqXLy/vv/++LFiwQGrXri0AZPny5eLt7S3Dhg2TefPmSVBQkJiamsqlS5f09lOxYkWpV6+ezJ07V/r27SsmJiYSEhIiGo1GO7dly5bSrl07mTFjhkRFRUnbtm0FgAwdOlTn+YWGhoqnp6e4ublJ//79ZfHixbJx40btstDQUO3cJUuWCABp06aNLF68WObMmSM9e/aUAQMGaOecPHlSbGxstL+7Tz/9VEqWLClqtVp+++03vedStWpVadCggcybN08++ugjMTU1lXbt2j3190JEeWOYJSoij4fZAwcOCABZvXq1zrzt27frjP/www8CQI4cOZLntuPi4gSAjBs3Ll+1VK5cWZo1a/bEOQ0bNpSKFSvKw4cPtWMajUZq164tpUuX1o6tW7dOAMiePXvyte+IiAgBIP3799fZbrNmzcTCwkLi4uJEJP/HRyQnzAKQ7du36+0vNDRUgoKCdMY2btwoAGTSpEk6423atBGVSiUXLlzQjgEQExMTOXXqlM7c3PARHh6uE5pef/11UalU8v7772vHsrKyxMfHRycIiYikpqbqPM7IyJAKFSpIgwYNdMYBiIWFhU5dJ06cEAAyb9487Vi3bt3ExMTE4Gslt8aJEyeKjY2N/PPPPzrLR4wYIaampnLt2jW9dXMlJiaKnZ2d1KpVS9LS0gxuPyMjQ9zd3aVChQo6c7Zs2SIAZOzYsdqx3NfClClTtGMJCQliZWUlKpVK1q5dqx0/e/as3ms893cQHBys84+b6dOnCwDZtGmTduzxYy0i0qdPH7G2ttZ5jYeGhgoAWbRokd78x8Ps22+/rffaelzLli3FwsJCLl68qB27deuW2NnZSUhIiN5zadSokc7rafDgwWJqaiqJiYlP3A8R5Y2XGRA9J+vWrYODgwPeeOMNxMfHa3+Cg4Nha2uLPXv2AID2es8tW7YgMzOzSPbt6OiIU6dO4fz58waX37t3D7/88gvatWuHlJQUbW13795FeHg4zp8/r/eWcUH169dP++fct9EzMjKwe/duAPk/PrlKliyJ8PDwfO1769atMDU1xYABA3TGP/roI4gItm3bpjMeGhqK8uXLG9xWz549oVKptI9r1aoFEUHPnj21Y6ampqhevTouXbqks66VlZX2zwkJCUhKSkK9evUQHR2tt59GjRohICBA+7hSpUqwt7fXblOj0WDjxo146623UL16db31c2tct24d6tWrBycnJ53j2qhRI2RnZ2P//v0GnycA7Nq1CykpKRgxYoTeNcO52z969ChiY2Px4Ycf6sxp1qwZypUrh59++klvu7169dL+2dHREWXLloWNjQ3a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xWKYJSIiIiLFemWvmdVoNLh16xbs7Ozy/M5rIqIXQUSQkpICb2/vJ34D3PPGvkhEL4uC9MVXNszeunULxYsXN3YZRERa169fh4+Pj9H2z75IRC+b/PTFVzbM2tnZAQAuHysBO1tebUGF16ZcFWOXQAqXJZk4iJ+0fclYcvd/8Vhx9kV6Ju0Cg41dAilclmTioPyYr774yobZ3LfQ7GxNYG/Hpk2FZ6YyN3YJ9F8gMPpb++yLVFTYF6lI5LMvslsRERERkWIxzBIRERGRYjHMEhEREZFiMcwSERERkWIxzBIRERGRYjHMEhEREZFiMcwSERERkWIxzBIRERGRYjHMEhEREZFiMcwSERERkWIxzBIRERGRYjHMEhEREZFiMcwSERERkWIxzBIRERGRYjHMEhEREZFiMcwSERERkWIxzBIRERGRYjHMEhEREZFiMcwSERERkWIxzBIRERGRYjHMEhEREZFiMcwSERERkWIxzBIRERGRYjHMEhEREZFiMcwSERERkWIxzBIRERGRYjHMEhEREZFiMcwSERERkWIxzBIRERGRYjHMEhEREZFiMcwSERERkWIxzBIRERGRYjHMEhEREZFiMcwSERERkWIxzBIRERGRYjHMEhEREZFiMcwSERERkWIxzBIRERGRYjHMEhEREZFiMcwSERERkWIxzBIRERGRYjHMEhEREZFiMcwSERERkWIxzBIRERGRYjHMEhEREZFiMcwSERERkWIxzBIRERGRYjHMEhEREZFiMcwSERERkWIxzBIRERGRYjHMEhEREZFiMcwSERERkWIxzBIRERGRYjHMEhEREZFiMcwSERERkWIxzBIRERGRYjHMEhEREZFiMcwSERERkWIxzBIRERGRYjHMEhEREZFiMcwSERERkWIxzBIRERGRYjHMEhEREZFiMcwSERERkWIxzBIRERGRYpkZuwB6cX5c4YoNUR5IiDNHyfJp+GDidZStmmpwblYm8N18T+xe54K7d8zh4/8QPUbfQvX6ydo5qfdNsHK6Nw5td0DSXXMEBKWiz4QbKFPF8DZJmd6KiEObD2Lh7JaFS6etsHBMMZz70ybP+fWaJyJi2G14+GTg5mU1lk3xxpFf7LXL6zRJRLOud1G6UirsnbLxQeMyuHTKWmcbTTrHo37LBJSqmAYbOw1aBVbAg2S2Kyp6W1a44ftH+mKfidee2BfXzffCz//vi8X8H6LH6JsIfqwvrprujcPbHZF01xz+Qal4b8J19sX/mLci4tDm/Rg4u2Xi0hkrLBxT/Ml9sVkCIobdyumLV9RYNqUYjvzioF1ep0kCmnWJf6QvlsOl0//2RTvHLHT96DaqhSTDvVgGku6a4dAOR3w1wxupKabP9bkqgaLPzC5YsAB+fn6wtLRErVq18Mcffxi7pJfWvk1OWBrpg05DbmPe9rPwL5+GMZ1LITHecED4ero3tq1yxQcTr2PRntNo2jUek3r54+JJK+2cOUN9cfyAHYbOvYqFu8+gamgKRnUojfjb5i/qadFzFtoiAe+Nu4XVMz3R982yuHTaCpNXX4KDS6bB+eWrP8DIBVew/RsXfBheFod2OGDcssvwLZumnWNprcGpP2ywbLJ3nvu1tNLg6F57rJ3nUeTP6b+OfTH/9m9ywheRPug45DbmbD+DkuVTMbZz6Tz74srpxbBtlSv6TLyGqD2n0LRrHCb3CtDpi/OG+uLPA/b4aO4VzN99GlVDk/FJhzLsi/8hoW/dw3tjb2D1LC/0bVIupy+uupB3Xwy+j5ELLmP7Wld8+GY5HNruiHFfXNLvi0dssWxKMYPbcPbIhItHJpZOLIY+Dcvjs8F+qB6WjCGfXX0uz1FpFBtmv/32WwwZMgTjxo1DdHQ0KleujPDwcMTGxhq7tJfSD0vd8WaneDRufw8lyjxEv0+vQW2lwc61Lgbn/7LBGe3630GNhsnw8s1As4h4VG+QhO8X54SL9DQVft3qiHdH30TF1+7Du2Q6unx0G95+6fjpa9cX+dToOWrVOw7b17hg53cuuHbeEnNH+CA9zQThHe4ZnN+yZxyO7rXH+kXuuH7BEl/P8MKFk1Z4u0e8ds7PG5yxerYnjh+wzXO/P3zhju8WeOBstHWec0gf+2LBbFzqgfBO8Xij/V2UKPMQff/fF3fl0Rf3PNIXPX0z0PT/ffEHnb7ohB6jb6DC//ti549uw8vvIbZ97fYinxo9R63ei8X2b1z/3xetMHdECaQ/NEF4h7sG57fsGfv/vuiB6xes8PVn3jl9sXucds7PG1ywerYXjh+wM7iNq+esMPE9f/y+2xG3r6px4pAdVkzzRq1GSTAxlefyPJVEsWF25syZ6N27N3r06IHy5ctj0aJFsLa2xpdffmns0l46mRkqXPjLGlXqpWjHTEyAKnVTcPaY4bdFMtNNYKHW/R9EbSk49UfO/OxsFTTZKr05FpYanD6Sd0gh5TAz16B0pVREPxI6RVQ4ftAW5YMfGFwnMPiBXkg9ttcOgXnMp6LFvph///bFfy8R+LcvGu5hOX1RozNmYanB6T9y5uf2RXNDvZN98T/BzFyD0hVTEf1I6BRR4fgBO5Sv9qS+aK8zdmyf/TP3RRv7bKTeN4UmW/VM2/kvUGSYzcjIwLFjx9CoUSPtmImJCRo1aoTDhw8bXCc9PR3Jyck6P6+K5Htm0GSr4OSapTPu6JaFe3GG3/qqFpaMH5a44+YlNTQaIHq/HQ5tdcS92Jz51rYaBAbfxzdzPHH3jjmys3PO5p49ZoN7MXw77b/A3jkbpmZAYrzu7zMhzhxOblkG13Fyy0LCY6+phPi851PRYV8smNy+6KjXFzP1XsO5qoUlY+MSD21fPL7fDoe3Oun0xXLB97F2jpe2L+75f19MYF/8T7B3zsrpi3G6l6IkxJvByd3wZQZObllIeOzSlZw+anh+vupwykKngXewbbXhdxFeNYoMs/Hx8cjOzoaHh+71dB4eHrhz547BdaZOnQoHBwftT/HixV9EqYr1/oQb8C6Zjj6h5dHCryqiRhdHo/Z3YfLIK2bo3CsQAboGV8TbJati85duCG2ZoDOHiF4M9sXn770J1+FdMh0fhAahpV81LBpdAo3ax+v0vI/mXgYEiAiuhHdKVsPmL90R0vIeVCZ8K5iKhrVtNiZ+fQHXzlti5cy8P3vwKnllPh48cuRIDBkyRPs4OTn5lWnc9s5ZMDEVvX8ZJsaZwTmPfxk6uGRh7JeXkPFQheQEM7h4ZmL5FG94lkjXzvHyy8D0DefxMNUEqSkmcPbIwtT3S+rMIeVKvmeK7CzA0VX3NeLklomEOMOtIyHOTO9sg5Nr3vPJuNgXRe/DXolPOGPm4JKFT768qNMXV0wpptcXP93wj05fnPZ+SXiWyHiuz4dejOR7Zjl98bF3m5xcs5AQa/jse0Kcmd47o05PeAfgSaxssjF51QWk3TdFZC9/ZGfxEgNAoWdmXV1dYWpqipiYGJ3xmJgYeHp6GlxHrVbD3t5e5+dVYW4hKFUpFScO/nuNj0YD/HnQDuWecs2OhaXA1SsT2VnAr1sd8VrjJL05ltYaOHtkISXRFNH77PBaeGJRPwUygqxME5z/yxpV697XjqlUgip17+N0HtdanzlmgyqPzAeAaiEpOJPHfCo67IsF829f/Pc5azTAiYN2KBd8/wlr6vbFQ1sdUatxot6c3L54P9EU0fvs2Rf/I7IyTXD+b2tUrfvvZ1By+mIKTkc/qS/qXsJTrV7B+6K1bTamrLmAzEwVxvUIQGa6IiPcc6HII2FhYYHg4GD8/PPP2jGNRoOff/4Zr7/+uhEre3m90zsW29e4Yvd3zrh23hILRhRHepoJ3mif8+nLzwb4YvnUf9+uOBttjV+3OuL2VQuc/N0GYzqXgmhUaPPhv39RHttrh6N77HHnmgWi99thZNvS8AlI126TlO/7pW5o0ukuGrW9h+KlHqL/pzdgaaXBzm+dAQDD5lxFjxG3tPM3LnND9bBktO4Ti+IBD9FlyG2UrpSGTcv/vcOFnWMW/INSUaJMztms4gHp8A9K1Tkb5uSWCf+gVHj75ZzNKlnuIfyDUmHnyGtv88K+WHAte8dgxxpX/PydM66ft8TCESXwMM0Ejf7fwz4f4IcVj/TFc9HWOLTVEXeuWuDk77YY27k0NBoVWuv0RXsc+39fPL7fDiPbloFPwEM0ah+vt39Spu+XuKNJx3g0anMXxUulof/U6//viznXrw6bfQU9RtzUzt+4zD2nL74X8/++eAulK6Vi04p/73Bh55gF//KpKFHmIQCgeMBD+Jf/ty/mBNnzsLTOxqyhvrC2y4aTWyac3DJhwktYlHuZwZAhQxAREYHq1aujZs2amD17Nh48eIAePXoYu7SXUujbCUi+Z4aVn3khIc4c/kFpmLDqgvaDOXG3LHSu+8pMN8HX071w55oaVtYaVG+QhKFzr8LWIVs750GyKVZ8Wgzxt81h55iNOk0TEPHxLZjxcw7/Gfs2O8HBOQvdht6Gk1sWLp2ywugu/toPhbl5Z0DzyIe7Tx+1waf9/BAx/Da6f3wbty6rEdmzJK6e+/c+nK81TsLQWde1j0dF5dwnceXnHlg10wsA0KxrPLp+9G9A+PyHCwCAzwYXx67v+IGHvLAvFkzI2wlIumeGVZ95P9IXzz/WF/8NChnpOV8Uk9sXgxsk4aO5V3T6YmqyKb56pC/WbpqAbh/fZF/8D9n3ozMcXHL7YiYunbbC6K6l/u2LxR7ri8ds8Wm/kogYfgvdP76V0xd7+ev2xTeSMHTWv/eMHRV1BQCwcqYnVs30RqmKqQislvPFGyt+PaVTT7fXghBzQ/2cnq0yqEREsZF+/vz5mDFjBu7cuYMqVapg7ty5qFWrVr7WTU5OhoODA+LP+cHeTpEnqOkl0dQn2NglkMJlSSb2ykYkJSU981v9RdEXY8/5si/SM2levKaxSyCFy5JM7NV8n6++qOgw+ywYZqmoMMzSsyrKMPssGGapqDDM0rMqSJhltyIiIiIixWKYJSIiIiLFYpglIiIiIsVimCUiIiIixWKYJSIiIiLFYpglIiIiIsVimCUiIiIixWKYJSIiIiLFYpglIiIiIsVimCUiIiIixWKYJSIiIiLFYpglIiIiIsVimCUiIiIixWKYJSIiIiLFYpglIiIiIsVimCUiIiIixWKYJSIiIiLFYpglIiIiIsVimCUiIiIixWKYJSIiIiLFYpglIiIiIsVimCUiIiIixWKYJSIiIiLFYpglIiIiIsVimCUiIiIixWKYJSIiIiLFYpglIiIiIsVimCUiIiIixTLLz6T9+/cXauMhISGFWo+IiIiIKD/yFWbDwsKgUqnyvVERgUqlQnZ2dqELIyIiIiJ6mnyF2T179jzvOoiIiIiICixfYTY0NPR510FEREREVGDP/AGw27dv48SJE3jw4EFR1ENERERElG+FDrObNm1CuXLl4OPjg2rVquH3338HAMTHx6Nq1arYuHFjUdVIRERERGRQocLsjz/+iFatWsHV1RXjxo2DiGiXubq6olixYli+fHmRFUlEREREZEihwuyECRMQEhKCgwcPom/fvnrLX3/9dRw/fvyZiyMiIiIiepJChdmTJ0+iXbt2eS738PBAbGxsoYsiIiIiIsqPQoVZa2vrJ37g69KlS3BxcSl0UURERERE+VGoMFu/fn189dVXyMrK0lt2584dLF26FI0bN37m4oiIiIiInqRQYXby5Mm4ceMGatSogcWLF0OlUmHHjh345JNPULFiRYgIxo0bV9S1EhERERHpKFSYLVu2LA4ePAgXFxeMGTMGIoIZM2ZgypQpqFixIg4cOAA/P78iLpWIiIiISFe+vgHMkKCgIOzevRsJCQm4cOECNBoN/P394ebmVpT1ERERERHlqdBhNpeTkxNq1KhRFLUQERERERVIob8BLC4uDkOHDkX58uVhbW0Na2trlC9fHkOHDkVMTExR1khEREREZFChwuypU6dQsWJFzJw5Ew4ODmjb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+yIVFfZFelYF6YuvbJhNSUkBABzEViNXQkrnVMbYFdB/RUpKChwcHIy6f4B9kZ4d+yIVlfz0RZUY+1SAkWg0Gty6dQt2dnZQqVTGLuellJycjOLFi+P69euwt7c3djmkUHwdPZ2IICUlBd7e3jAxMd7VX+yLT8fXMxUFvo6eriB98ZU9M2tiYgIfHx9jl6EI9vb2/J+NnhlfR09mzDOyudgX84+vZyoKfB09WX77Ij8ARkRERESKxTBLRERERIrFMEt5UqvVGDduHNRqtbFLIQXj64j+S/h6pqLA11HRemU/AEZEREREysczs0RERESkWAyzRERERKRYDLNEREREpFgMs0RERESkWAyzZNCCBQvg5+cHS0tL1KpVC3/88YexSyKF2b9/P9566y14e3tDpVJh48aNxi6J6JmwL9KzYl98PhhmSc+3336LIUOGYNy4cYiOjkblypURHh6O2NhYY5dGCvLgwQNUrlwZCxYsMHYpRM+MfZGKAvvi88Fbc5GeWrVqoUaNGpg/fz6AnO9rL168OPr3748RI0YYuTpSIpVKhR9++AEtW7Y0dilEhcK+SEWNfbHo8Mws6cjIyMCxY8fQqFEj7ZiJiQkaNWqEw4cPG7EyIiLjYF8kerkxzJKO+Ph4ZGdnw8PDQ2fcw8MDd+7cMVJVRETGw75I9HJjmCUiIiIixWKYJR2urq4wNTVFTEyMznhMTAw8PT2NVBURkfGwLxK93BhmSYeFhQWCg4Px888/a8c0Gg1+/vlnvP7660asjIjIONgXiV5uZsYugF4+Q4YMQUREBKpXr46aNWti9uzZePDgAXr06GHs0khB7t+/jwsXLmgfX758GX/++SecnZ1RokQJI1ZGVHDsi1QU2BefD96aiwyaP38+ZsyYgTt37qBKlSqYO3cuatWqZeyySEH27t2L+vXr641HRERgxYoVL74gomfEvkjPin3x+WCYJSIiIiLF4jWzRERERKRYDLNEREREpFgMs0RERESkWAyzRERERKRYDLNEREREpFgMs0RERESkWAyzRERERKRYDLNEREREpFgMs0RERESkWAyzRERERKRYDLNEREREpFgMs0RERESkWAyzRERERKRYDLNEREREpFgMs0RERESkWAyzRERERKRYDLNEREREpFgMs0RERESkWAyzRERERKRYDLNEREREpFgMs0RERESkWAyz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",
      "text/plain": [
       "<Figure size 700x450 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Compare confusion matrices for logistic regression and DNN\n",
    "fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(7, 4.5))\n",
    "\n",
    "fig.suptitle('Test set performance comparison')\n",
    "fig.supxlabel('Predicted label')\n",
    "fig.supylabel('True label')\n",
    "\n",
    "# Confusion matrix for logistic regression\n",
    "axes[0].set_title(f'Logistic regression\\n(accuracy: {logistic_accuracy:.2%})')\n",
    "\n",
    "disp_logistic = ConfusionMatrixDisplay.from_predictions(\n",
    "    testing_df[label],\n",
    "    logistic_predictions,\n",
    "    normalize='true',\n",
    "    ax=axes[0],\n",
    "    colorbar=False\n",
    ")\n",
    "\n",
    "axes[0].set_xlabel('')\n",
    "axes[0].set_ylabel('')\n",
    "\n",
    "# Confusion matrix for DNN model\n",
    "axes[1].set_title(f'DNN\\n(accuracy: {sequential_accuracy:.2%})')\n",
    "\n",
    "disp_sequential = ConfusionMatrixDisplay.from_predictions(\n",
    "    testing_df[label],\n",
    "    sequential_predictions,\n",
    "    normalize='true',\n",
    "    ax=axes[1],\n",
    "    colorbar=False\n",
    ")\n",
    "\n",
    "axes[1].set_xlabel('')\n",
    "axes[1].set_ylabel('')\n",
    "\n",
    "plt.tight_layout()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "bbfc7d39",
   "metadata": {},
   "source": [
    "## 5. Final training run"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "id": "e4d1ca2d",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Final training accuracy: 98.90%\n",
      "Final training loss: 0.0366\n"
     ]
    }
   ],
   "source": [
    "# Combine training and testing datasets for final training\n",
    "combined_df = pd.concat([training_df, testing_df], ignore_index=True)\n",
    "\n",
    "# Build final model with optimized hyperparameters\n",
    "final_model = build_model(learning_rate=learning_rate)\n",
    "\n",
    "# Train on combined dataset (no validation split for final run)\n",
    "final_history = final_model.fit(\n",
    "    combined_df[features],\n",
    "    combined_df[label],\n",
    "    epochs=200,\n",
    "    batch_size=batch_size,\n",
    "    class_weight=class_weight_dict,\n",
    "    verbose=verbose\n",
    ")\n",
    "\n",
    "print(f\"Final training accuracy: {final_history.history['accuracy'][-1]*100:.2f}%\")\n",
    "print(f\"Final training loss: {final_history.history['loss'][-1]:.4f}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "aa40c199",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "INFO:tensorflow:Assets written to: ../models/optimized_occupancy_dnn_model/assets\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "INFO:tensorflow:Assets written to: ../models/optimized_occupancy_dnn_model/assets\n"
     ]
    }
   ],
   "source": [
    "# Save the final model\n",
    "Path('../models').mkdir(parents=True, exist_ok=True)\n",
    "final_model.save('../models/optimized_occupancy_dnn_model.keras')"
   ]
  }
 ],
 "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.10.12"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
