StudentPerformanceNN.ipynb (29777B)
1 { 2 "cells": [ 3 { 4 "cell_type": "markdown", 5 "metadata": {}, 6 "source": [ 7 "https://www.kaggle.com/datasets/rabieelkharoua/students-performance-dataset/data\n", 8 "\n", 9 "MAE:\n", 10 "\n", 11 "0.10496861395429209\n", 12 "\n", 13 "3.5% MAPE" 14 ] 15 }, 16 { 17 "cell_type": "code", 18 "execution_count": 51, 19 "metadata": {}, 20 "outputs": [ 21 { 22 "data": { 23 "text/plain": [ 24 "(1794, 12)" 25 ] 26 }, 27 "execution_count": 51, 28 "metadata": {}, 29 "output_type": "execute_result" 30 } 31 ], 32 "source": [ 33 "import pandas as pd\n", 34 "from sklearn.model_selection import train_test_split\n", 35 "from sklearn.preprocessing import StandardScaler\n", 36 "\n", 37 "df = pd.read_csv('../datasets/studentPerformance/StudentPerformance.csv')\n", 38 "X = df.drop(columns=['GPA', 'GradeClass', 'StudentID'], axis=1)\n", 39 "y = df['GradeClass']\n", 40 "sclr = StandardScaler()\n", 41 "X = sclr.fit_transform(X)\n", 42 "X_train, X_test, y_train, y_test = train_test_split(X,y)\n", 43 "X_val, X_test, y_val, y_test = train_test_split(X_train,y_train, test_size=.5)\n", 44 "\n", 45 "X_train.shape" 46 ] 47 }, 48 { 49 "cell_type": "code", 50 "execution_count": 52, 51 "metadata": {}, 52 "outputs": [], 53 "source": [ 54 "import keras\n", 55 "import tensorflow as tf\n", 56 "\n", 57 "model = keras.Sequential(layers=[\n", 58 "\n", 59 " keras.layers.Input(shape=(12,)),\n", 60 " keras.layers.Dense(256, activation='relu'),\n", 61 " keras.layers.Dropout(.1),\n", 62 " keras.layers.Dense(256, activation='relu'),\n", 63 " keras.layers.Dropout(.1),\n", 64 " keras.layers.Dense(256, activation='relu'),\n", 65 " keras.layers.Dropout(.1),\n", 66 " keras.layers.Dense(256, activation='relu'),\n", 67 " keras.layers.Dense(1)\n", 68 "])" 69 ] 70 }, 71 { 72 "cell_type": "code", 73 "execution_count": 53, 74 "metadata": {}, 75 "outputs": [ 76 { 77 "name": "stdout", 78 "output_type": "stream", 79 "text": [ 80 "Epoch 1/100\n", 81 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 5ms/step - loss: 2.9243 - mae: 1.3415 - val_loss: 0.7946 - val_mae: 0.6464\n", 82 "Epoch 2/100\n", 83 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.7969 - mae: 0.6824 - val_loss: 0.6778 - val_mae: 0.6281\n", 84 "Epoch 3/100\n", 85 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.6274 - mae: 0.5849 - val_loss: 0.6190 - val_mae: 0.6068\n", 86 "Epoch 4/100\n", 87 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.5872 - mae: 0.5563 - val_loss: 0.4950 - val_mae: 0.4443\n", 88 "Epoch 5/100\n", 89 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.5568 - mae: 0.5244 - val_loss: 0.4614 - val_mae: 0.4691\n", 90 "Epoch 6/100\n", 91 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.5457 - mae: 0.5076 - val_loss: 0.4437 - val_mae: 0.4255\n", 92 "Epoch 7/100\n", 93 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.5544 - mae: 0.5246 - val_loss: 0.4566 - val_mae: 0.4545\n", 94 "Epoch 8/100\n", 95 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.4496 - mae: 0.4792 - val_loss: 0.3990 - val_mae: 0.4142\n", 96 "Epoch 9/100\n", 97 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.4472 - mae: 0.4745 - val_loss: 0.3991 - val_mae: 0.4445\n", 98 "Epoch 10/100\n", 99 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.4941 - mae: 0.4969 - val_loss: 0.4244 - val_mae: 0.4763\n", 100 "Epoch 11/100\n", 101 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.4168 - mae: 0.4510 - val_loss: 0.4499 - val_mae: 0.4338\n", 102 "Epoch 12/100\n", 103 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.4840 - mae: 0.4939 - val_loss: 0.3797 - val_mae: 0.4034\n", 104 "Epoch 13/100\n", 105 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.4371 - mae: 0.4686 - val_loss: 0.3647 - val_mae: 0.3907\n", 106 "Epoch 14/100\n", 107 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.4781 - mae: 0.4995 - val_loss: 0.4937 - val_mae: 0.5747\n", 108 "Epoch 15/100\n", 109 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.4719 - mae: 0.4944 - val_loss: 0.3294 - val_mae: 0.3549\n", 110 "Epoch 16/100\n", 111 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.3997 - mae: 0.4483 - val_loss: 0.3152 - val_mae: 0.3549\n", 112 "Epoch 17/100\n", 113 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.4213 - mae: 0.4487 - val_loss: 0.3297 - val_mae: 0.4052\n", 114 "Epoch 18/100\n", 115 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.3893 - mae: 0.4380 - val_loss: 0.3285 - val_mae: 0.4176\n", 116 "Epoch 19/100\n", 117 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.3952 - mae: 0.4418 - val_loss: 0.3014 - val_mae: 0.3542\n", 118 "Epoch 20/100\n", 119 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.3588 - mae: 0.4229 - val_loss: 0.3074 - val_mae: 0.3983\n", 120 "Epoch 21/100\n", 121 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.3325 - mae: 0.4002 - val_loss: 0.2826 - val_mae: 0.3712\n", 122 "Epoch 22/100\n", 123 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.3545 - mae: 0.4104 - val_loss: 0.2708 - val_mae: 0.3508\n", 124 "Epoch 23/100\n", 125 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.3169 - mae: 0.3996 - val_loss: 0.2538 - val_mae: 0.3331\n", 126 "Epoch 24/100\n", 127 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.3375 - mae: 0.4106 - val_loss: 0.3023 - val_mae: 0.4265\n", 128 "Epoch 25/100\n", 129 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 0.2909 - mae: 0.3760 - val_loss: 0.2453 - val_mae: 0.3518\n", 130 "Epoch 26/100\n", 131 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.3147 - mae: 0.3939 - val_loss: 0.2206 - val_mae: 0.3004\n", 132 "Epoch 27/100\n", 133 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.2455 - mae: 0.3495 - val_loss: 0.4073 - val_mae: 0.5486\n", 134 "Epoch 28/100\n", 135 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.3003 - mae: 0.4157 - val_loss: 0.2155 - val_mae: 0.3147\n", 136 "Epoch 29/100\n", 137 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.2819 - mae: 0.3813 - val_loss: 0.2175 - val_mae: 0.3168\n", 138 "Epoch 30/100\n", 139 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.2887 - mae: 0.3885 - val_loss: 0.2135 - val_mae: 0.3201\n", 140 "Epoch 31/100\n", 141 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.2825 - mae: 0.3714 - val_loss: 0.1951 - val_mae: 0.2933\n", 142 "Epoch 32/100\n", 143 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.2718 - mae: 0.3738 - val_loss: 0.2076 - val_mae: 0.3302\n", 144 "Epoch 33/100\n", 145 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.2659 - mae: 0.3757 - val_loss: 0.1839 - val_mae: 0.3012\n", 146 "Epoch 34/100\n", 147 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.2200 - mae: 0.3312 - val_loss: 0.1660 - val_mae: 0.2752\n", 148 "Epoch 35/100\n", 149 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.2170 - mae: 0.3346 - val_loss: 0.1693 - val_mae: 0.2718\n", 150 "Epoch 36/100\n", 151 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.2241 - mae: 0.3506 - val_loss: 0.1500 - val_mae: 0.2731\n", 152 "Epoch 37/100\n", 153 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.1994 - mae: 0.3174 - val_loss: 0.1448 - val_mae: 0.2549\n", 154 "Epoch 38/100\n", 155 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.2183 - mae: 0.3237 - val_loss: 0.1595 - val_mae: 0.2743\n", 156 "Epoch 39/100\n", 157 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.2041 - mae: 0.3234 - val_loss: 0.1782 - val_mae: 0.3303\n", 158 "Epoch 40/100\n", 159 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.2374 - mae: 0.3542 - val_loss: 0.1570 - val_mae: 0.2853\n", 160 "Epoch 41/100\n", 161 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.1880 - mae: 0.3193 - val_loss: 0.1136 - val_mae: 0.2300\n", 162 "Epoch 42/100\n", 163 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.1670 - mae: 0.2956 - val_loss: 0.1222 - val_mae: 0.2595\n", 164 "Epoch 43/100\n", 165 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.2178 - mae: 0.3238 - val_loss: 0.1602 - val_mae: 0.2842\n", 166 "Epoch 44/100\n", 167 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.1981 - mae: 0.3220 - val_loss: 0.1752 - val_mae: 0.3231\n", 168 "Epoch 45/100\n", 169 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.2190 - mae: 0.3447 - val_loss: 0.1033 - val_mae: 0.2224\n", 170 "Epoch 46/100\n", 171 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.1589 - mae: 0.2896 - val_loss: 0.0976 - val_mae: 0.2108\n", 172 "Epoch 47/100\n", 173 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.1519 - mae: 0.2855 - val_loss: 0.0830 - val_mae: 0.1973\n", 174 "Epoch 48/100\n", 175 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.1612 - mae: 0.2926 - val_loss: 0.1134 - val_mae: 0.2580\n", 176 "Epoch 49/100\n", 177 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.1532 - mae: 0.2821 - val_loss: 0.0859 - val_mae: 0.2061\n", 178 "Epoch 50/100\n", 179 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.1620 - mae: 0.2898 - val_loss: 0.1085 - val_mae: 0.2440\n", 180 "Epoch 51/100\n", 181 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.1482 - mae: 0.2890 - val_loss: 0.0829 - val_mae: 0.2060\n", 182 "Epoch 52/100\n", 183 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.1384 - mae: 0.2624 - val_loss: 0.0862 - val_mae: 0.2048\n", 184 "Epoch 53/100\n", 185 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.1698 - mae: 0.2971 - val_loss: 0.1102 - val_mae: 0.2372\n", 186 "Epoch 54/100\n", 187 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.1452 - mae: 0.2742 - val_loss: 0.0799 - val_mae: 0.2044\n", 188 "Epoch 55/100\n", 189 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.1291 - mae: 0.2642 - val_loss: 0.0784 - val_mae: 0.2106\n", 190 "Epoch 56/100\n", 191 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.1115 - mae: 0.2429 - val_loss: 0.0709 - val_mae: 0.1973\n", 192 "Epoch 57/100\n", 193 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.1301 - mae: 0.2654 - val_loss: 0.0734 - val_mae: 0.2040\n", 194 "Epoch 58/100\n", 195 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.1104 - mae: 0.2438 - val_loss: 0.0709 - val_mae: 0.2018\n", 196 "Epoch 59/100\n", 197 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.1043 - mae: 0.2390 - val_loss: 0.1021 - val_mae: 0.2712\n", 198 "Epoch 60/100\n", 199 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.1094 - mae: 0.2521 - val_loss: 0.0577 - val_mae: 0.1695\n", 200 "Epoch 61/100\n", 201 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.1382 - mae: 0.2671 - val_loss: 0.0514 - val_mae: 0.1597\n", 202 "Epoch 62/100\n", 203 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.1001 - mae: 0.2352 - val_loss: 0.0511 - val_mae: 0.1575\n", 204 "Epoch 63/100\n", 205 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.1007 - mae: 0.2296 - val_loss: 0.0517 - val_mae: 0.1556\n", 206 "Epoch 64/100\n", 207 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.1007 - mae: 0.2289 - val_loss: 0.0489 - val_mae: 0.1612\n", 208 "Epoch 65/100\n", 209 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.0935 - mae: 0.2201 - val_loss: 0.0707 - val_mae: 0.1960\n", 210 "Epoch 66/100\n", 211 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.1339 - mae: 0.2470 - val_loss: 0.0883 - val_mae: 0.2245\n", 212 "Epoch 67/100\n", 213 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.1343 - mae: 0.2542 - val_loss: 0.0594 - val_mae: 0.1778\n", 214 "Epoch 68/100\n", 215 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - loss: 0.1072 - mae: 0.2423 - val_loss: 0.0512 - val_mae: 0.1513\n", 216 "Epoch 69/100\n", 217 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.1180 - mae: 0.2368 - val_loss: 0.0663 - val_mae: 0.1832\n", 218 "Epoch 70/100\n", 219 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.0984 - mae: 0.2299 - val_loss: 0.0417 - val_mae: 0.1391\n", 220 "Epoch 71/100\n", 221 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.0837 - mae: 0.2177 - val_loss: 0.0346 - val_mae: 0.1242\n", 222 "Epoch 72/100\n", 223 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.0960 - mae: 0.2116 - val_loss: 0.0540 - val_mae: 0.1525\n", 224 "Epoch 73/100\n", 225 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.0995 - mae: 0.2215 - val_loss: 0.0543 - val_mae: 0.1666\n", 226 "Epoch 74/100\n", 227 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.1190 - mae: 0.2285 - val_loss: 0.0403 - val_mae: 0.1366\n", 228 "Epoch 75/100\n", 229 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.0802 - mae: 0.2053 - val_loss: 0.0432 - val_mae: 0.1350\n", 230 "Epoch 76/100\n", 231 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.0952 - mae: 0.2193 - val_loss: 0.0439 - val_mae: 0.1392\n", 232 "Epoch 77/100\n", 233 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.1020 - mae: 0.2256 - val_loss: 0.0387 - val_mae: 0.1320\n", 234 "Epoch 78/100\n", 235 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.0946 - mae: 0.2127 - val_loss: 0.0648 - val_mae: 0.2079\n", 236 "Epoch 79/100\n", 237 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.0882 - mae: 0.2201 - val_loss: 0.0460 - val_mae: 0.1463\n", 238 "Epoch 80/100\n", 239 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.1007 - mae: 0.2220 - val_loss: 0.0440 - val_mae: 0.1515\n", 240 "Epoch 81/100\n", 241 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.1145 - mae: 0.2329 - val_loss: 0.0507 - val_mae: 0.1608\n", 242 "Epoch 82/100\n", 243 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.0999 - mae: 0.2143 - val_loss: 0.0429 - val_mae: 0.1396\n", 244 "Epoch 83/100\n", 245 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.0860 - mae: 0.2129 - val_loss: 0.0424 - val_mae: 0.1305\n", 246 "Epoch 84/100\n", 247 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.0933 - mae: 0.2084 - val_loss: 0.0455 - val_mae: 0.1348\n", 248 "Epoch 85/100\n", 249 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.0860 - mae: 0.2102 - val_loss: 0.0403 - val_mae: 0.1489\n", 250 "Epoch 86/100\n", 251 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.0746 - mae: 0.1942 - val_loss: 0.0390 - val_mae: 0.1293\n", 252 "Epoch 87/100\n", 253 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.0756 - mae: 0.1961 - val_loss: 0.0345 - val_mae: 0.1207\n", 254 "Epoch 88/100\n", 255 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.0724 - mae: 0.1843 - val_loss: 0.0352 - val_mae: 0.1299\n", 256 "Epoch 89/100\n", 257 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.0866 - mae: 0.1971 - val_loss: 0.0398 - val_mae: 0.1482\n", 258 "Epoch 90/100\n", 259 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.0777 - mae: 0.1965 - val_loss: 0.0336 - val_mae: 0.1218\n", 260 "Epoch 91/100\n", 261 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.0859 - mae: 0.2065 - val_loss: 0.0318 - val_mae: 0.1220\n", 262 "Epoch 92/100\n", 263 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.0538 - mae: 0.1644 - val_loss: 0.0318 - val_mae: 0.1289\n", 264 "Epoch 93/100\n", 265 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.0655 - mae: 0.1806 - val_loss: 0.0357 - val_mae: 0.1242\n", 266 "Epoch 94/100\n", 267 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.0698 - mae: 0.1770 - val_loss: 0.0311 - val_mae: 0.1224\n", 268 "Epoch 95/100\n", 269 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.0716 - mae: 0.1887 - val_loss: 0.0315 - val_mae: 0.1187\n", 270 "Epoch 96/100\n", 271 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.0782 - mae: 0.1907 - val_loss: 0.0349 - val_mae: 0.1142\n", 272 "Epoch 97/100\n", 273 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.0609 - mae: 0.1673 - val_loss: 0.0417 - val_mae: 0.1586\n", 274 "Epoch 98/100\n", 275 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - loss: 0.0655 - mae: 0.1834 - val_loss: 0.0480 - val_mae: 0.1177\n", 276 "Epoch 99/100\n", 277 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.0569 - mae: 0.1673 - val_loss: 0.0425 - val_mae: 0.1254\n", 278 "Epoch 100/100\n", 279 "\u001b[1m57/57\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - loss: 0.0719 - mae: 0.1797 - val_loss: 0.0276 - val_mae: 0.1050\n" 280 ] 281 }, 282 { 283 "data": { 284 "text/plain": [ 285 "<keras.src.callbacks.history.History at 0x7efb79f8c990>" 286 ] 287 }, 288 "execution_count": 53, 289 "metadata": {}, 290 "output_type": "execute_result" 291 } 292 ], 293 "source": [ 294 "model.compile(optimizer='adam', loss='mse', metrics=['mae'])\n", 295 "model.fit(X_train,y_train, validation_data=[X_test,y_test], epochs=100, batch_size=32)" 296 ] 297 }, 298 { 299 "cell_type": "code", 300 "execution_count": 83, 301 "metadata": {}, 302 "outputs": [ 303 { 304 "name": "stdout", 305 "output_type": "stream", 306 "text": [ 307 "\u001b[1m29/29\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 1ms/step \n" 308 ] 309 }, 310 { 311 "data": { 312 "text/plain": [ 313 "3.4900187146428183" 314 ] 315 }, 316 "execution_count": 83, 317 "metadata": {}, 318 "output_type": "execute_result" 319 } 320 ], 321 "source": [ 322 "from sklearn.metrics import mean_absolute_error\n", 323 "\n", 324 "y_pred = model.predict(X_val)\n", 325 "mean_absolute_error(y_pred=y_pred, y_true=y_val) / y_val.mean() * 100" 326 ] 327 }, 328 { 329 "cell_type": "code", 330 "execution_count": 76, 331 "metadata": {}, 332 "outputs": [ 333 { 334 "name": "stdout", 335 "output_type": "stream", 336 "text": [ 337 "\u001b[1m29/29\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 1ms/step \n" 338 ] 339 }, 340 { 341 "data": { 342 "text/plain": [ 343 "0.1043893000154591" 344 ] 345 }, 346 "execution_count": 76, 347 "metadata": {}, 348 "output_type": "execute_result" 349 } 350 ], 351 "source": [ 352 "y_pred = model.predict(X_val)\n", 353 "mean_absolute_error(y_pred=y_pred, y_true=y_val)" 354 ] 355 }, 356 { 357 "cell_type": "markdown", 358 "metadata": {}, 359 "source": [ 360 "This kills the others models.\n", 361 "\n", 362 "This only had an average error of 3.5%" 363 ] 364 } 365 ], 366 "metadata": { 367 "kernelspec": { 368 "display_name": ".venv", 369 "language": "python", 370 "name": "python3" 371 }, 372 "language_info": { 373 "codemirror_mode": { 374 "name": "ipython", 375 "version": 3 376 }, 377 "file_extension": ".py", 378 "mimetype": "text/x-python", 379 "name": "python", 380 "nbconvert_exporter": "python", 381 "pygments_lexer": "ipython3", 382 "version": "3.11.2" 383 } 384 }, 385 "nbformat": 4, 386 "nbformat_minor": 2 387 }