From aa41c5b78c33625c448e121e1b673c2335ae2b2d Mon Sep 17 00:00:00 2001 From: ClauCarloni Date: Mon, 6 Dec 2021 23:31:38 +0100 Subject: [PATCH] Adding updated Solutions file --- Solutions.ipynb | 645 ++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 626 insertions(+), 19 deletions(-) diff --git a/Solutions.ipynb b/Solutions.ipynb index 4c0e1c9..c3b01ba 100644 --- a/Solutions.ipynb +++ b/Solutions.ipynb @@ -16,6 +16,443 @@ "For this lab, we will be using the same dataset we used in the previous labs. We recommend using the same notebook since you will be reusing the same variables you previous created and used in labs." ] }, + { + "cell_type": "code", + "execution_count": 1, + "id": "68d5e0bc", + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "\n", + "from sklearn.model_selection import train_test_split\n", + "from sklearn.neighbors import KNeighborsRegressor\n", + "from sklearn.preprocessing import StandardScaler\n", + "from sklearn.neural_network import MLPRegressor\n", + "from sklearn.datasets import make_regression\n", + "from sklearn.linear_model import LinearRegression\n", + "from sklearn.metrics import r2_score, mean_squared_error, mean_absolute_error\n", + "\n", + "import warnings\n", + "warnings.filterwarnings('ignore')" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "1be0d8bf", + "metadata": {}, + "outputs": [], + "source": [ + "data = pd.read_csv(r'C:\\Users\\claud\\lab-cleaning-numerical-data\\files_for_lab\\we_fn_use_c_marketing_customer_value_analysis.csv')" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "b82b3e7f", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Index(['customer', 'state', 'customer_lifetime_value', 'response', 'coverage',\n", + " 'education', 'effective_to_date', 'employmentstatus', 'gender',\n", + " 'income', 'location_code', 'marital_status', 'monthly_premium_auto',\n", + " 'months_since_last_claim', 'months_since_policy_inception',\n", + " 'number_of_open_complaints', 'number_of_policies', 'policy_type',\n", + " 'policy', 'renew_offer_type', 'sales_channel', 'total_claim_amount',\n", + " 'vehicle_class', 'vehicle_size'],\n", + " dtype='object')" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data.columns = [x.lower().replace(\" \", \"_\") for x in data.columns]\n", + "data.columns" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "5128b3f3", + "metadata": {}, + "outputs": [], + "source": [ + "data = data.set_index('customer')" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "0bdfa37d", + "metadata": {}, + "outputs": [], + "source": [ + "data['effective_to_date'] = pd.to_datetime(data['effective_to_date'])" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "id": "30349842", + "metadata": {}, + "outputs": [], + "source": [ + "data['day'] = data['effective_to_date'].dt.day\n", + "data['week'] = data['effective_to_date'].dt.week\n", + "data['month'] = data['effective_to_date'].dt.month" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "id": "05dd9182", + "metadata": {}, + "outputs": [], + "source": [ + "data['day'] = pd.to_numeric(data['day'], errors='coerce')\n", + "data['week'] = pd.to_numeric(data['week'], errors='coerce')\n", + "data['month'] = pd.to_numeric(data['month'], errors='coerce')" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "id": "4de5c7df", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
statecustomer_lifetime_valueresponsecoverageeducationemploymentstatusgenderincomelocation_codemarital_status...policy_typepolicyrenew_offer_typesales_channeltotal_claim_amountvehicle_classvehicle_sizedayweekmonth
customer
BU79786Washington2763.519279NoBasicBachelorEmployedF56274SuburbanMarried...Corporate AutoCorporate L3Offer1Agent384.811147Two-Door CarMedsize2482
QZ44356Arizona6979.535903NoExtendedBachelorUnemployedF0SuburbanSingle...Personal AutoPersonal L3Offer3Agent1131.464935Four-Door CarMedsize3151
AI49188Nevada12887.431650NoPremiumBachelorEmployedF48767SuburbanMarried...Personal AutoPersonal L3Offer1Agent566.472247Two-Door CarMedsize1972
WW63253California7645.861827NoBasicBachelorUnemployedM0SuburbanMarried...Corporate AutoCorporate L2Offer1Call Center529.881344SUVMedsize2031
HB64268Washington2813.692575NoBasicBachelorEmployedM43836RuralSingle...Personal AutoPersonal L1Offer1Agent138.130879Four-Door CarMedsize352
\n", + "

5 rows × 25 columns

\n", + "
" + ], + "text/plain": [ + " state customer_lifetime_value response coverage education \\\n", + "customer \n", + "BU79786 Washington 2763.519279 No Basic Bachelor \n", + "QZ44356 Arizona 6979.535903 No Extended Bachelor \n", + "AI49188 Nevada 12887.431650 No Premium Bachelor \n", + "WW63253 California 7645.861827 No Basic Bachelor \n", + "HB64268 Washington 2813.692575 No Basic Bachelor \n", + "\n", + " employmentstatus gender income location_code marital_status ... \\\n", + "customer ... \n", + "BU79786 Employed F 56274 Suburban Married ... \n", + "QZ44356 Unemployed F 0 Suburban Single ... \n", + "AI49188 Employed F 48767 Suburban Married ... \n", + "WW63253 Unemployed M 0 Suburban Married ... \n", + "HB64268 Employed M 43836 Rural Single ... \n", + "\n", + " policy_type policy renew_offer_type sales_channel \\\n", + "customer \n", + "BU79786 Corporate Auto Corporate L3 Offer1 Agent \n", + "QZ44356 Personal Auto Personal L3 Offer3 Agent \n", + "AI49188 Personal Auto Personal L3 Offer1 Agent \n", + "WW63253 Corporate Auto Corporate L2 Offer1 Call Center \n", + "HB64268 Personal Auto Personal L1 Offer1 Agent \n", + "\n", + " total_claim_amount vehicle_class vehicle_size day week month \n", + "customer \n", + "BU79786 384.811147 Two-Door Car Medsize 24 8 2 \n", + "QZ44356 1131.464935 Four-Door Car Medsize 31 5 1 \n", + "AI49188 566.472247 Two-Door Car Medsize 19 7 2 \n", + "WW63253 529.881344 SUV Medsize 20 3 1 \n", + "HB64268 138.130879 Four-Door Car Medsize 3 5 2 \n", + "\n", + "[5 rows x 25 columns]" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data = data.drop(['effective_to_date'], axis=1)\n", + "data.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "id": "bdb84a68", + "metadata": {}, + "outputs": [], + "source": [ + "data = pd.get_dummies(data, drop_first=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "id": "094f2e49", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "customer_lifetime_value float64\n", + "income int64\n", + "monthly_premium_auto int64\n", + "months_since_last_claim int64\n", + "months_since_policy_inception int64\n", + "number_of_open_complaints int64\n", + "number_of_policies int64\n", + "total_claim_amount float64\n", + "day int64\n", + "week int64\n", + "month int64\n", + "state_California uint8\n", + "state_Nevada uint8\n", + "state_Oregon uint8\n", + "state_Washington uint8\n", + "response_Yes uint8\n", + "coverage_Extended uint8\n", + "coverage_Premium uint8\n", + "education_College uint8\n", + "education_Doctor uint8\n", + "education_High School or Below uint8\n", + "education_Master uint8\n", + "employmentstatus_Employed uint8\n", + "employmentstatus_Medical Leave uint8\n", + "employmentstatus_Retired uint8\n", + "employmentstatus_Unemployed uint8\n", + "gender_M uint8\n", + "location_code_Suburban uint8\n", + "location_code_Urban uint8\n", + "marital_status_Married uint8\n", + "marital_status_Single uint8\n", + "policy_type_Personal Auto uint8\n", + "policy_type_Special Auto uint8\n", + "policy_Corporate L2 uint8\n", + "policy_Corporate L3 uint8\n", + "policy_Personal L1 uint8\n", + "policy_Personal L2 uint8\n", + "policy_Personal L3 uint8\n", + "policy_Special L1 uint8\n", + "policy_Special L2 uint8\n", + "policy_Special L3 uint8\n", + "renew_offer_type_Offer2 uint8\n", + "renew_offer_type_Offer3 uint8\n", + "renew_offer_type_Offer4 uint8\n", + "sales_channel_Branch uint8\n", + "sales_channel_Call Center uint8\n", + "sales_channel_Web uint8\n", + "vehicle_class_Luxury Car uint8\n", + "vehicle_class_Luxury SUV uint8\n", + "vehicle_class_SUV uint8\n", + "vehicle_class_Sports Car uint8\n", + "vehicle_class_Two-Door Car uint8\n", + "vehicle_size_Medsize uint8\n", + "vehicle_size_Small uint8\n", + "dtype: object" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data.dtypes" + ] + }, { "cell_type": "markdown", "id": "2f38d5b3", @@ -26,11 +463,50 @@ }, { "cell_type": "code", - "execution_count": null, - "id": "68d5e0bc", + "execution_count": 31, + "id": "e42f6530", + "metadata": {}, + "outputs": [], + "source": [ + "y = data['total_claim_amount']\n", + "X = data.drop(['total_claim_amount'],axis=1)" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "id": "78099df1", "metadata": {}, "outputs": [], - "source": [] + "source": [ + "transformer = StandardScaler().fit(data)\n", + "\n", + "x_standardized = transformer.transform(data)\n", + "x_standardized = pd.DataFrame(x_standardized, index = data.index)#, columns = ['customer_lifetime_value', 'income', 'monthly_premium_auto',\n", + " #'months_since_last_claim', 'months_since_policy_inception',\n", + " #'number_of_open_complaints', 'number_of_policies',\n", + " #'total_claim_amount'])" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "id": "071a37c0", + "metadata": {}, + "outputs": [], + "source": [ + "X = x_standardized" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "id": "09485eea", + "metadata": {}, + "outputs": [], + "source": [ + "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)" + ] }, { "cell_type": "markdown", @@ -42,11 +518,56 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 38, "id": "947a8b4b", "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "LinearRegression()" + ] + }, + "execution_count": 38, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "model = LinearRegression()\n", + "model.fit(X_train, y_train)" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "id": "88be841d", + "metadata": {}, "outputs": [], - "source": [] + "source": [ + "predictions = model.predict(X_test)" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "id": "a59a3dab", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(1.0, 2.94915010568832e-13, 3.843506696994419e-13)" + ] + }, + "execution_count": 40, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "r2_score(y_test, predictions), mean_absolute_error(y_test, predictions), mean_squared_error(y_test, predictions, squared=False)" + ] }, { "cell_type": "markdown", @@ -58,11 +579,43 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 47, "id": "b095dbc8", "metadata": {}, "outputs": [], - "source": [] + "source": [ + "def models(model_name, X, y, KNN_range = range(2,10)):\n", + " X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)\n", + "\n", + " if model_name == 'LinearRegression':\n", + " model = LinearRegression()\n", + " model.fit(X_train, y_train) \n", + " predictions = model.predict(X_test)\n", + " print('R2 score =', r2_score(y_test, predictions))\n", + "\n", + " if model_name == 'KNN':\n", + " scores = []\n", + " for i in KNN_range:\n", + " model = KNeighborsRegressor(n_neighbors=i)\n", + " model.fit(X_train, y_train)\n", + " scores.append(model.score(X_test, y_test))\n", + " print(scores)\n", + "\n", + " plt.figure(figsize=(10,6))\n", + " plt.plot(KNN_range,scores,color = 'darkslategrey', linestyle='dashdot',\n", + " marker='o', markerfacecolor='darkcyan', markersize=10)\n", + " plt.title('accuracy scores vs. K Value')\n", + " plt.xlabel('K')\n", + " plt.ylabel('Accuracy')\n", + " \n", + " if model_name == 'MLP':\n", + " model = MLPRegressor()\n", + " model.fit(X_train, y_train)\n", + "\n", + " expected_y = y_test\n", + " predicted_y = model.predict(X_test)\n", + " print('R2 score =',r2_score(expected_y, predicted_y))" + ] }, { "cell_type": "markdown", @@ -74,11 +627,51 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 42, "id": "cfb65b4b", "metadata": {}, - "outputs": [], - "source": [] + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "R2 score = 1.0\n" + ] + } + ], + "source": [ + "models('LinearRegression', X, y)" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "id": "1ec7290e", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[0.696016943990347, 0.7302882705107913, 0.7461926073178331, 0.7509089120711043, 0.7548339068787251, 0.7603485434445362, 0.7585738788178724, 0.7527295679482957]\n" + ] + }, + { + "data": { + "image/png": "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VVVfOv4tLz+fb0yezOq+feud+j1h/XpmTZ+uPWjNLJBy1txUzkREol9JaSm5y5bx98WLWfr++1RWVtLz6KMZO2oUY0eObPB4sNZox65d5G3dun+PW829b9u2b2fHrl0kJyXx9jPPYGb87P77WfPxx8z6/e8BuPInP+HVwkI+7dmz3tfosWkT3xs0iNuvvrq53pZQfznTtTVFRKRZfJyXx8PPP8+id96hpLSUozp14rILLmDsqFH069XrgKfqWotOHTrQqUOHeu8vr6hg565d+z+/M045hd41Vi/457p1FJx0UoOvsW+hXpWz6KByJiIiEVFdXc3KtWtJb9uWPj17UllZyZIVKzh/1CjGjhrFKQMG6OzFwyApMZHONa6SMGbkyC/d71VVTVqot6ToK6tVSUD0/woRETls3J3PCwsBqKyq4gd33cUTL7wAwHHHHMNrjz7Kz667jqyBA1XMmklqWhpJpaUNjkkqKyO1TRtKSkt58/33qapxooI0P/0/Q0REDtmm/HwefOYZvnHjjVx12224O0mJifzfL3/JLeGpMjMjMTEx4KStT052NpkFBQ2O6VxQQE52Nq+/8w7X3XEHH6xbB0BFZWVzRJRaNK0pIiIHpWDnTl5eupS/L17MqvXrARhywgmMGTmSqupqEuLjGXTccQGnlEnjxjF30SJ2dOjQ6EK9mUceSVpKCif16wfAfY88wofr1zPurLMYM2IEHep4vBx+OltTRESabE9REa+9/TZ/X7yYZR9+SHV1NccfeyxjR41izIgRXzr2SaLHvnXOGlqot651zma/8gpPvfgi//rPf0hISODMoUMZd9ZZnH7KKSQmaP/OodJSGiIiclBKy8oor6ggvW1b3nz/fa674w66d+4cKmQjR9Kre/fGn0QCdygL9X60cSPzFi1iweLFfL57Nx3bt2fsqFGMHz16/5UR5MCpnImIyAErLSvjvP/6L77+ta9x06RJVFZVsfbjjxnYt6+WvmiFKiorefO993jh9dfJXb6cyspKbpo0iau+/vWgo7VIWudMREQa5O58sG4df1+8mB27dnHvj39MSnIyV3/rW5zQty+AjiNr5RITEsgeNozsYcPYVVjIwiVLGDZoEADLV61i5pw53P6972l6+xCpnImItHIbPvmEBYsXs/Af/2DLZ5+RnJTEmcOG7b8M0BXjxwcdUaJQh/R0Ljn/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0FFEREQkyqicBSAuLo4RQ4YEHUNERESikKY1m9lP77+fGbNnBx1DREREopTKWTP6OC+P+YsWUVpWFnQUERERiVIqZ81o5pw5pCQlcfH55wcdRURERKKUylkz+WznTl7MzeXCc87hiPT0oOOIiIhIlFI5ayZ/nTeP6upqJo4fH3QUERERiWIqZ81gb3Exz7/0EuecdhrdOncOOo6IiIhEMZWzZjDr5ZfZW1zMtydMCDqKiIiIRDmVswirqKjgyXnzGDpoECf06RN0HBEREYlyKmcR9vY//8lnO3ZwpfaaiYiISBPoCgERNjIri6enT+f4Y48NOoqIiIi0ANpzFkHV1dUA9OvVCzMLOI2IiIi0BCpnEXTjr3/N/z75ZNAxREREpAVROYuQispKumZmcmSHDkFHERERkRZEx5xFSGJCArd/73tBxxAREZEWRnvOIiC/oID3Vq/G3YOOIiIiIi2MylkEzJg9m2t+8Qs+37076CgiIiLSwkS0nJnZGDNbZ2YbzOzWOu6famYrw1+rzKzKzDo25bHR6vPCQua++io52dl01PFmIiIicoAiVs7MLB74IzAWGABcamYDao5x93vdfbC7DwZuA3LdfWdTHhutnlmwgNLyciZddFHQUURERKQFiuSes2HABnff6O7lwNPAhQ2MvxR46iAfGxVKysp4ZsECRmVl0at796DjiIiISAsUyXLWFcircXtzeNtXmFkaMAaYdaCPjSYvvPYanxcW6lJNIiIictAiWc7qWhK/vtMXxwFL3X3ngT7WzK4xs+VmtrygoOAgYh4eVVVVPD53LoOOO46TB7SIGVgRERGJQpEsZ5uBmnN73YAt9Yy9hC+mNA/ose7+oLtnuXtWRkbGIcQ9NK+9/Tabt23jygkTdKkmEREROWiRLGfLgL5mdqyZJREqYC/UHmRm7YFsYO6BPjZauDuPzZlD9y5dOHPYsKDjiIiISAsWsSsEuHulmd0AvATEA4+4+2ozuzZ8/wPhoROAl929qLHHRirroaqsqmJUVhbdOncmPj4+6DgiIiLSglksrWKflZXly5cvDzqGiIiISKPMbIW7Z9XerisEHKL/fPopLy9dSlVVVdBRREREJAaonB2iv73yCj///e/ZU1TU+GARERGRRkTsmLPW4qaJE8k580w6pKcHHUVERERigPacHYLq6mri4+M57phjgo4iIiIiMULl7CDtKSriwuuu47W33go6ioiIiMQQlbODNOvll8nbupWjjzoq6CgiIiISQ1TODkJFRQVPzpvHqSeeSP/evYOOIyIiIjFE5ewgLFi8mIKdO/m2LnAuIiIih5nO1myCvPx8Zs6bx/zcXEqKiyEujvT0dLplZgYdTURERGKMylkjlqxYweRp09iakcG2fv0oT0khqbSUoz77jG/efDPTp0xhxJAhQccUERGRGKFpzQbk5eczedo0VvftS16PHpSnpoIZ5ampbO7Zk9V9+zJ52jTy8vODjioiIiIxQuWsATPnzWNrRgbF9SwwW5yezraMDB6fP7+Zk4mIiEisUjlrwPzcXLZlZDQ4ZmtGBvNzc5spkYiIiMQ6lbMGlBQXU56S0uCY8uRkSnRdTRERETlMVM4akJqWRlJpaYNjksrKSG3TppkSiYiISKxTOWtATnY2mQUFDY7pXFBATnZ2MyUSERGRWKdy1oBJ48bRuaCAtMLCOu9PKywks6CAiTk5zZxMREREYpXKWQO6d+nC9ClTOGH9enps2kRSSQlUV5NUUkKPTZs4Yf16pk+ZQvcuXYKOKiIiIjFCi9A2YsSQIcyaPp3H588PXSGgqIjUNm3Iyc5mYk6OipmIiIgcVubuQWc4bLKysnz58uVBxxARERFplJmtcPes2ts1rSkiIiISRVTORERERKKIypmIiIhIFFE5ExEREYkiKmciIiIiUUTlTERERCSKqJyJiIiIRBGVMxEREZEoElOL0JpZAfBJhF/mSGB7hF+jJdPn0zh9Rg3T59M4fUYN0+fTOH1GDWuuz6enu2fU3hhT5aw5mNnyulbzlRB9Po3TZ9QwfT6N02fUMH0+jdNn1LCgPx9Na4qIiIhEEZUzERERkSiicnbgHgw6QJTT59M4fUYN0+fTOH1GDdPn0zh9Rg0L9PPRMWciIiIiUUR7zkRERESiiMpZE5lZdzNbZGZrzWy1md0UdKZoYmYpZvaumf0z/PncEXSmaGRm8Wb2vpnNDzpLNDKz/5jZh2a20syWB50n2phZBzN73sw+Cv8uOi3oTNHEzI4P/9vZ91VoZj8MOlc0MbMfhX9HrzKzp8wsJehM0cbMbgp/PquD+vejac0mMrMuQBd3f8/M2gErgIvcfU3A0aKCmRnQxt33mlkisAS4yd3fDjhaVDGzyUAWkO7uOUHniTZm9h8gy921/lIdzOwx4B/u/pCZJQFp7r4r4FhRyczigU+BU9090utftghm1pXQ7+YB7l5iZs8CC9x9RrDJooeZDQSeBoYB5cBC4Pvuvr45c2jPWRO5e767vxf+fg+wFugabKro4SF7wzcTw19q/jWYWTfgAuChoLNIy2Nm6cAo4GEAdy9XMWvQ2cDHKmZfkQCkmlkCkAZsCThPtOkPvO3uxe5eCeQCE5o7hMrZQTCzY4CTgXcCjhJVwlN2K4HPgFfcXZ/Pl/0P8GOgOuAc0cyBl81shZldE3SYKNMLKAAeDU+NP2RmbYIOFcUuAZ4KOkQ0cfdPgWnAJiAf2O3uLwebKuqsAkaZWSczSwPOB7o3dwiVswNkZm2BWcAP3b0w6DzRxN2r3H0w0A0YFt49LICZ5QCfufuKoLNEuTPc/RRgLHC9mY0KOlAUSQBOAf7P3U8GioBbg40UncJTvuOB54LOEk3M7AjgQuBY4GigjZldEWyq6OLua4HfAq8QmtL8J1DZ3DlUzg5A+FiqWcCT7v63oPNEq/BUyxvAmGCTRJUzgPHhY6qeBkab2RPBRoo+7r4l/L+fAbMJHfchIZuBzTX2SD9PqKzJV40F3nP3bUEHiTLnAP929wJ3rwD+BpwecKao4+4Pu/sp7j4K2Ak06/FmoHLWZOED3h8G1rr79KDzRBszyzCzDuHvUwn9Evgo0FBRxN1vc/du7n4MoemW191d/8Vag5m1CZ9sQ3i67lxCUwwCuPtWIM/Mjg9vOhvQCUl1uxRNadZlEzDczNLCf9POJnT8tNRgZkeF/7cH8HUC+LeU0Nwv2IKdAUwEPgwfVwVwu7svCC5SVOkCPBY+QyoOeNbdtVyEHIhMYHbobwYJwF/dfWGwkaLOjcCT4Wm7jcBVAeeJOuHjhL4GfC/oLNHG3d8xs+eB9whN1b2PrhRQl1lm1gmoAK5398+bO4CW0hARERGJIprWFBEREYkiKmciIiIiUUTlTERERCSKqJyJiIiIRBGVMxEREZEoonImIlIHM9tb4/vzzWx9eN0jEZGI0jpnIiINMLOzgT8A57r7pqDziEjsUzkTEamHmY0E/gKc7+4fB51HRFoHLUIrIlIHM6sA9gBnuvsHQecRkdZDx5yJiNStAngT+G7QQUSkdVE5ExGpWzXw/4ChZnZ70GFEpPXQMWciIvVw92IzywH+YWbb3P3hoDOJSOxTORMRaYC77zSzMcBiM9vu7nODziQisU0nBIiIiIhEER1zJiIiIhJFVM5EREREoojKmYiIiEgUUTkTERERiSIqZyIiIiJRROVMREREJIqonImIiIhEEZUzERERkSjy/wFixqzFWTSBPQAAAABJRU5ErkJggg==\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "models('KNN', X, y)" + ] }, { "cell_type": "markdown", @@ -90,11 +683,21 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 48, "id": "3283e967", "metadata": {}, - "outputs": [], - "source": [] + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "R2 score = 0.9959792628123999\n" + ] + } + ], + "source": [ + "models('MLP',X,y)" + ] }, { "cell_type": "markdown", @@ -105,12 +708,16 @@ ] }, { - "cell_type": "code", - "execution_count": null, - "id": "b83c06cd", + "cell_type": "markdown", + "id": "1402fd6e", "metadata": {}, - "outputs": [], - "source": [] + "source": [ + "All models seems overfitted:\n", + "\n", + "- The Linear Regression is overfitted, therefore we got r2 score = 1\n", + "- KNN presented best performance when k = 7 (score = 0.76)\n", + "- MLP Regressor also seems overfitted with r2 score = 0.99" + ] } ], "metadata": { @@ -129,7 +736,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.5" + "version": "3.8.8" } }, "nbformat": 4,