Python - Linear Regression Projects
{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Regression to predict house price\n", "We will apply several regression methods to predict house price by using the feasures of a house. <br>\n", "If you need some motivation to do this task, see this <br>\n", "a similar dataset on https://www.kaggle.com/c/zillow-prize-1 ($1,200,000 award)\n", "### This is a guided-task:\n", "The assignment is a complex task, not easy for beginners like you. <br>\n", "Doing a real application like this is much better than doing many simple tasks using simple datasets <br>\n", "You will see the output of a code cell and then figure out the code in that cell. <br>\n", "In each code cell, there are instructions to help you. <br>\n", "This is a very efficient and effective way to learn how to program with sk-learn <br>\n", "You will do programming after you see \"Your work begins here\"" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "%matplotlib inline\n", "import numpy as np\n", "import pandas as pd\n", "import matplotlib.pyplot as plt\n", "import seaborn as sns\n", "from sklearn.model_selection import train_test_split" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Load the training and test datasets\n", "https://www.kaggle.com/c/house-prices-advanced-regression-techniques" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "data_train.shape (1460, 82)\n", "data_test.shape (1459, 82)\n", "data.shape (2919, 82)\n" ] } ], "source": [ "data_train = pd.read_csv(\"housing_train.csv\")\n", "data_test = pd.read_csv(\"housing_test.csv\")\n", "data_test_y = pd.read_csv(\"housing_test_y.csv\")\n", "data_test['SalePrice']=data_test_y['SalePrice']\n", "data_train['train']=1\n", "data_test['train']=0\n", "#combine data_train, data_test so that we can 'clean' them together\n", "data = pd.concat([data_train, data_test], axis=0, sort=False)\n", "print('data_train.shape', data_train.shape)\n", "print('data_test.shape', data_test.shape)\n", "print('data.shape', data.shape)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "scrolled": true }, "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>Id</th>\n", " <th>MSSubClass</th>\n", " <th>MSZoning</th>\n", " <th>LotFrontage</th>\n", " <th>LotArea</th>\n", " <th>Street</th>\n", " <th>Alley</th>\n", " <th>LotShape</th>\n", " <th>LandContour</th>\n", " <th>Utilities</th>\n", " <th>...</th>\n", " <th>PoolQC</th>\n", " <th>Fence</th>\n", " <th>MiscFeature</th>\n", " <th>MiscVal</th>\n", " <th>MoSold</th>\n", " <th>YrSold</th>\n", " <th>SaleType</th>\n", " <th>SaleCondition</th>\n", " <th>SalePrice</th>\n", " <th>train</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <th>0</th>\n", " <td>1</td>\n", " <td>60</td>\n", " <td>RL</td>\n", " <td>65.0</td>\n", " <td>8450</td>\n", " <td>Pave</td>\n", " <td>NaN</td>\n", " <td>Reg</td>\n", " <td>Lvl</td>\n", " <td>AllPub</td>\n", " <td>...</td>\n", " <td>NaN</td>\n", " <td>NaN</td>\n", " <td>NaN</td>\n", " <td>0</td>\n", " <td>2</td>\n", " <td>2008</td>\n", " <td>WD</td>\n", " <td>Normal</td>\n", " <td>208500.0</td>\n", " <td>1</td>\n", " </tr>\n", " <tr>\n", " <th>1</th>\n", " <td>2</td>\n", " <td>20</td>\n", " <td>RL</td>\n", " <td>80.0</td>\n", " <td>9600</td>\n", " <td>Pave</td>\n", " <td>NaN</td>\n", " <td>Reg</td>\n", " <td>Lvl</td>\n", " <td>AllPub</td>\n", " <td>...</td>\n", " <td>NaN</td>\n", " <td>NaN</td>\n", " <td>NaN</td>\n", " <td>0</td>\n", " <td>5</td>\n", " <td>2007</td>\n", " <td>WD</td>\n", " <td>Normal</td>\n", " <td>181500.0</td>\n", " <td>1</td>\n", " </tr>\n", " <tr>\n", " <th>2</th>\n", " <td>3</td>\n", " <td>60</td>\n", " <td>RL</td>\n", " <td>68.0</td>\n", " <td>11250</td>\n", " <td>Pave</td>\n", " <td>NaN</td>\n", " <td>IR1</td>\n", " <td>Lvl</td>\n", " <td>AllPub</td>\n", " <td>...</td>\n", " <td>NaN</td>\n", " <td>NaN</td>\n", " <td>NaN</td>\n", " <td>0</td>\n", " <td>9</td>\n", " <td>2008</td>\n", " <td>WD</td>\n", " <td>Normal</td>\n", " <td>223500.0</td>\n", " <td>1</td>\n", " </tr>\n", " <tr>\n", " <th>3</th>\n", " <td>4</td>\n", " <td>70</td>\n", " <td>RL</td>\n", " <td>60.0</td>\n", " <td>9550</td>\n", " <td>Pave</td>\n", " <td>NaN</td>\n", " <td>IR1</td>\n", " <td>Lvl</td>\n", " <td>AllPub</td>\n", " <td>...</td>\n", " <td>NaN</td>\n", " <td>NaN</td>\n", " <td>NaN</td>\n", " <td>0</td>\n", " <td>2</td>\n", " <td>2006</td>\n", " <td>WD</td>\n", " <td>Abnorml</td>\n", " <td>140000.0</td>\n", " <td>1</td>\n", " </tr>\n", " <tr>\n", " <th>4</th>\n", " <td>5</td>\n", " <td>60</td>\n", " <td>RL</td>\n", " <td>84.0</td>\n", " <td>14260</td>\n", " <td>Pave</td>\n", " <td>NaN</td>\n", " <td>IR1</td>\n", " <td>Lvl</td>\n", " <td>AllPub</td>\n", " <td>...</td>\n", " <td>NaN</td>\n", " <td>NaN</td>\n", " <td>NaN</td>\n", " <td>0</td>\n", " <td>12</td>\n", " <td>2008</td>\n", " <td>WD</td>\n", " <td>Normal</td>\n", " <td>250000.0</td>\n", " <td>1</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "<p>5 rows × 82 columns</p>\n", "</div>" ], "text/plain": [ " Id MSSubClass MSZoning LotFrontage LotArea Street Alley LotShape \\\n", "0 1 60 RL 65.0 8450 Pave NaN Reg \n", "1 2 20 RL 80.0 9600 Pave NaN Reg \n", "2 3 60 RL 68.0 11250 Pave NaN IR1 \n", "3 4 70 RL 60.0 9550 Pave NaN IR1 \n", "4 5 60 RL 84.0 14260 Pave NaN IR1 \n", "\n", " LandContour Utilities ... PoolQC Fence MiscFeature MiscVal MoSold YrSold \\\n", "0 Lvl AllPub ... NaN NaN NaN 0 2 2008 \n", "1 Lvl AllPub ... NaN NaN NaN 0 5 2007 \n", "2 Lvl AllPub ... NaN NaN NaN 0 9 2008 \n", "3 Lvl AllPub ... NaN NaN NaN 0 2 2006 \n", "4 Lvl AllPub ... NaN NaN NaN 0 12 2008 \n", "\n", " SaleType SaleCondition SalePrice train \n", "0 WD Normal 208500.0 1 \n", "1 WD Normal 181500.0 1 \n", "2 WD Normal 223500.0 1 \n", "3 WD Abnorml 140000.0 1 \n", "4 WD Normal 250000.0 1 \n", "\n", "[5 rows x 82 columns]" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "the regression target/output is SalePrice" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0 208500.0\n", "1 181500.0\n", "2 223500.0\n", "3 140000.0\n", "4 250000.0\n", "Name: SalePrice, dtype: float64" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data.head().SalePrice" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Handle missing values (NaN and None)\n", "show the missing values for each feature" ] }, { "cell_type": "code", "execution_count": 5, "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>Train</th>\n", " <th>Test</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <th>MSZoning</th>\n", " <td>0</td>\n", " <td>4</td>\n", " </tr>\n", " <tr>\n", " <th>LotFrontage</th>\n", " <td>259</td>\n", " <td>227</td>\n", " </tr>\n", " <tr>\n", " <th>Alley</th>\n", " <td>1369</td>\n", " <td>1352</td>\n", " </tr>\n", " <tr>\n", " <th>Utilities</th>\n", " <td>0</td>\n", " <td>2</td>\n", " </tr>\n", " <tr>\n", " <th>Exterior1st</th>\n", " <td>0</td>\n", " <td>1</td>\n", " </tr>\n", " <tr>\n", " <th>Exterior2nd</th>\n", " <td>0</td>\n", " <td>1</td>\n", " </tr>\n", " <tr>\n", " <th>MasVnrType</th>\n", " <td>8</td>\n", " <td>16</td>\n", " </tr>\n", " <tr>\n", " <th>MasVnrArea</th>\n", " <td>8</td>\n", " <td>15</td>\n", " </tr>\n", " <tr>\n", " <th>BsmtQual</th>\n", " <td>37</td>\n", " <td>44</td>\n", " </tr>\n", " <tr>\n", " <th>BsmtCond</th>\n", " <td>37</td>\n", " <td>45</td>\n", " </tr>\n", " <tr>\n", " <th>BsmtExposure</th>\n", " <td>38</td>\n", " <td>44</td>\n", " </tr>\n", " <tr>\n", " <th>BsmtFinType1</th>\n", " <td>37</td>\n", " <td>42</td>\n", " </tr>\n", " <tr>\n", " <th>BsmtFinSF1</th>\n", " <td>0</td>\n", " <td>1</td>\n", " </tr>\n", " <tr>\n", " <th>BsmtFinType2</th>\n", " <td>38</td>\n", " <td>42</td>\n", " </tr>\n", " <tr>\n", " <th>BsmtFinSF2</th>\n", " <td>0</td>\n", " <td>1</td>\n", " </tr>\n", " <tr>\n", " <th>BsmtUnfSF</th>\n", " <td>0</td>\n", " <td>1</td>\n", " </tr>\n", " <tr>\n", " <th>TotalBsmtSF</th>\n", " <td>0</td>\n", " <td>1</td>\n", " </tr>\n", " <tr>\n", " <th>Electrical</th>\n", " <td>1</td>\n", " <td>0</td>\n", " </tr>\n", " <tr>\n", " <th>BsmtFullBath</th>\n", " <td>0</td>\n", " <td>2</td>\n", " </tr>\n", " <tr>\n", " <th>BsmtHalfBath</th>\n", " <td>0</td>\n", " <td>2</td>\n", " </tr>\n", " <tr>\n", " <th>KitchenQual</th>\n", " <td>0</td>\n", " <td>1</td>\n", " </tr>\n", " <tr>\n", " <th>Functional</th>\n", " <td>0</td>\n", " <td>2</td>\n", " </tr>\n", " <tr>\n", " <th>FireplaceQu</th>\n", " <td>690</td>\n", " <td>730</td>\n", " </tr>\n", " <tr>\n", " <th>GarageType</th>\n", " <td>81</td>\n", " <td>76</td>\n", " </tr>\n", " <tr>\n", " <th>GarageYrBlt</th>\n", " <td>81</td>\n", " <td>78</td>\n", " </tr>\n", " <tr>\n", " <th>GarageFinish</th>\n", " <td>81</td>\n", " <td>78</td>\n", " </tr>\n", " <tr>\n", " <th>GarageCars</th>\n", " <td>0</td>\n", " <td>1</td>\n", " </tr>\n", " <tr>\n", " <th>GarageArea</th>\n", " <td>0</td>\n", " <td>1</td>\n", " </tr>\n", " <tr>\n", " <th>GarageQual</th>\n", " <td>81</td>\n", " <td>78</td>\n", " </tr>\n", " <tr>\n", " <th>GarageCond</th>\n", " <td>81</td>\n", " <td>78</td>\n", " </tr>\n", " <tr>\n", " <th>PoolQC</th>\n", " <td>1453</td>\n", " <td>1456</td>\n", " </tr>\n", " <tr>\n", " <th>Fence</th>\n", " <td>1179</td>\n", " <td>1169</td>\n", " </tr>\n", " <tr>\n", " <th>MiscFeature</th>\n", " <td>1406</td>\n", " <td>1408</td>\n", " </tr>\n", " <tr>\n", " <th>SaleType</th>\n", " <td>0</td>\n", " <td>1</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "</div>" ], "text/plain": [ " Train Test\n", "MSZoning 0 4\n", "LotFrontage 259 227\n", "Alley 1369 1352\n", "Utilities 0 2\n", "Exterior1st 0 1\n", "Exterior2nd 0 1\n", "MasVnrType 8 16\n", "MasVnrArea 8 15\n", "BsmtQual 37 44\n", "BsmtCond 37 45\n", "BsmtExposure 38 44\n", "BsmtFinType1 37 42\n", "BsmtFinSF1 0 1\n", "BsmtFinType2 38 42\n", "BsmtFinSF2 0 1\n", "BsmtUnfSF 0 1\n", "TotalBsmtSF 0 1\n", "Electrical 1 0\n", "BsmtFullBath 0 2\n", "BsmtHalfBath 0 2\n", "KitchenQual 0 1\n", "Functional 0 2\n", "FireplaceQu 690 730\n", "GarageType 81 76\n", "GarageYrBlt 81 78\n", "GarageFinish 81 78\n", "GarageCars 0 1\n", "GarageArea 0 1\n", "GarageQual 81 78\n", "GarageCond 81 78\n", "PoolQC 1453 1456\n", "Fence 1179 1169\n", "MiscFeature 1406 1408\n", "SaleType 0 1" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#show the missing values in a table\n", "Missing = pd.concat([data_train.isnull().sum(), data_test.isnull().sum()], axis=1,\n", " keys=['Train', 'Test'],sort=False)\n", "Missing[Missing.sum(axis=1) > 0]" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "<matplotlib.axes._subplots.AxesSubplot at 0x178b0c1aac0>" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAsYAAAGjCAYAAAAvudPBAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nOzdd5hsVZWw8XcBKgiCIFfEQBARRAwoGBk/FHMCAwqKoqKMCRmzMgbM2VExogiooKKCKCYQwYx6CRJlcEQBZQAdA2bC+v7Yp25XN9X33rPPLijw/T1PP91V3bV6Vzpn1Q5rR2YiSZIk/atb5dpugCRJkjQLTIwlSZIkTIwlSZIkwMRYkiRJAkyMJUmSJMDEWJIkSQJgtWu7AQDrr79+brLJJtd2MyRJknQ9d9JJJ/02M5dM+t1MJMabbLIJS5cuvbabIUmSpOu5iPjVYr9zKoUkSZKEibEkSZIEmBhLkiRJgImxJEmSBJgYS5IkSYCJsSRJkgSYGEuSJEmAibEkSZIEmBhLkiRJwEokxhHx8Yi4JCLOGLtuvYg4NiLO7b6vO/a7V0bEzyPinIh4yLQaLkmSJLW0Mj3GBwMPXXDdK4DjMnNz4LjuMhGxFbArcMfuNh+MiFWbtVaSJEmakhUmxpn5HeD/Fly9E3BI9/MhwM5j138mM/+RmecBPwfu0aitkiRJ0tTUzjHeIDMvAui+37y7/lbABWN/d2F33dVExF4RsTQill566aWVzZAkSZLaaL34LiZcl5P+MDMPyMxtM3PbJUuWNG6GJEmS1M9qlbe7OCI2zMyLImJD4JLu+guB24z93a2B36xs0Es/9KnK5hRLnrP7oNtLkiTpX1dtj/GXgD26n/cAjhq7fteIuFFEbApsDvx4WBMlSZKk6Vthj3FEfBrYAVg/Ii4EXgu8FTg8IvYEzgd2AcjMMyPicOAs4ArgeZl55ZTaLkmSJDWzwsQ4M3db5Fc7LvL3bwLeNKRRkiRJ0jXNne8kSZIkTIwlSZIkwMRYkiRJAkyMJUmSJMDEWJIkSQJMjCVJkiSgfue764RLP/z+Qbdf8uznN2qJJEmSZp09xpIkSRImxpIkSRJgYixJkiQBJsaSJEkSYGIsSZIkASbGkiRJEmBiLEmSJAEmxpIkSRJgYixJkiQB1/Od71q76IP/WX3bDZ/7poYtkSRJUmv2GEuSJEmYGEuSJEmAibEkSZIEmBhLkiRJgImxJEmSBJgYS5IkSYCJsSRJkgSYGEuSJEmAibEkSZIEmBhLkiRJgImxJEmSBJgYS5IkSYCJsSRJkgSYGEuSJEmAibEkSZIEmBhLkiRJgImxJEmSBJgYS5IkSYCJsSRJkgSYGEuSJEmAibEkSZIEmBhLkiRJgImxJEmSBJgYS5IkSYCJsSRJkgSYGEuSJEmAibEkSZIEmBhLkiRJgImxJEmSBJgYS5IkSYCJsSRJkgSYGEuSJEmAibEkSZIEmBhLkiRJgImxJEmSBJgYS5IkScDAxDgiXhgRZ0bEGRHx6YhYPSLWi4hjI+Lc7vu6rRorSZIkTUt1YhwRtwJeAGybmVsDqwK7Aq8AjsvMzYHjusuSJEnSTFutwe3XiIjLgRsDvwFeCezQ/f4Q4ATg5QP/z/XOefvvPOj2m+79xUYtkSRJEgzoMc7MXwPvBM4HLgL+mJnHABtk5kXd31wE3LxFQyVJkqRpGjKVYl1gJ2BT4JbAmhGxe4/b7xURSyNi6aWXXlrbDEmSJKmJIYvvHgicl5mXZublwBHAfYCLI2JDgO77JZNunJkHZOa2mbntkiVLBjRDkiRJGm5IYnw+cK+IuHFEBLAjcDbwJWCP7m/2AI4a1kRJkiRp+qoX32XmjyLi88DJwBXAKcABwFrA4RGxJyV53qVFQyVJkqRpGlSVIjNfC7x2wdX/oPQeS5IkSdcZ7nwnSZIkYWIsSZIkASbGkiRJEmBiLEmSJAEmxpIkSRJgYixJkiQBJsaSJEkSYGIsSZIkASbGkiRJEmBiLEmSJAEmxpIkSRJgYixJkiQBJsaSJEkSYGIsSZIkASbGkiRJEmBiLEmSJAEmxpIkSRJgYixJkiQBJsaSJEkSYGIsSZIkASbGkiRJEmBiLEmSJAEmxpIkSRJgYixJkiQBJsaSJEkSYGIsSZIkASbGkiRJEmBiLEmSJAEmxpIkSRJgYixJkiQBJsaSJEkSYGIsSZIkASbGkiRJEmBiLEmSJAEmxpIkSRJgYixJkiQBJsaSJEkSYGIsSZIkASbGkiRJEmBiLEmSJAEmxpIkSRJgYixJkiQBJsaSJEkSYGIsSZIkASbGkiRJEmBiLEmSJAEmxpIkSRJgYixJkiQBJsaSJEkSYGIsSZIkASbGkiRJEmBiLEmSJAEmxpIkSRIwMDGOiJtGxOcj4mcRcXZE3Dsi1ouIYyPi3O77uq0aK0mSJE3L0B7j9wJfz8wtgbsAZwOvAI7LzM2B47rLkiRJ0kyrTowjYm3gfsCBAJn5z8z8A7ATcEj3Z4cAOw9tpCRJkjRtQ3qMbwtcChwUEadExMciYk1gg8y8CKD7fvMG7ZQkSZKmakhivBpwN+BDmbkN8Bd6TJuIiL0iYmlELL300ksHNEOSJEkabkhifCFwYWb+qLv8eUqifHFEbAjQfb9k0o0z84DM3DYzt12yZMmAZkiSJEnDVSfGmfm/wAURsUV31Y7AWcCXgD266/YAjhrUQkmSJOkasNrA2+8NHBoRNwR+ATydkmwfHhF7AucDuwz8H5IkSdLUDUqMM/NUYNsJv9pxSFxJkiTpmubOd5IkSRImxpIkSRJgYixJkiQBJsaSJEkSYGIsSZIkASbGkiRJEmBiLEmSJAEmxpIkSRJgYixJkiQBJsaSJEkSYGIsSZIkASbGkiRJEmBiLEmSJAEmxpIkSRJgYixJkiQBJsaSJEkSYGIsSZIkASbGkiRJEmBiLEmSJAEmxpIkSRJgYixJkiQBJsaSJEkSYGIsSZIkASbGkiRJEmBiLEmSJAEmxpIkSRJgYixJkiQBJsaSJEkSYGIsSZIkASbGkiRJEmBiLEmSJAGw2rXdALVxyocfNej22zz7y41aIkmSdN1kj7EkSZKEibEkSZIEmBhLkiRJgImxJEmSBJgYS5IkSYCJsSRJkgSYGEuSJEmAibEkSZIEmBhLkiRJgImxJEmSBJgYS5IkSYCJsSRJkgSYGEuSJEmAibEkSZIEmBhLkiRJgImxJEmSBJgYS5IkSYCJsSRJkgSYGEuSJEmAibEkSZIEmBhLkiRJgImxJEmSBDRIjCNi1Yg4JSKO7i6vFxHHRsS53fd1hzdTkiRJmq4WPcb7AGePXX4FcFxmbg4c112WJEmSZtqgxDgibg08AvjY2NU7AYd0Px8C7Dzkf0iSJEnXhKE9xu8BXgZcNXbdBpl5EUD3/eaTbhgRe0XE0ohYeumllw5shiRJkjRMdWIcEY8ELsnMk2pun5kHZOa2mbntkiVLapshSZIkNbHagNveF3h0RDwcWB1YOyI+BVwcERtm5kURsSFwSYuGSpIkSdNU3WOcma/MzFtn5ibArsC3MnN34EvAHt2f7QEcNbiVkiRJ0pRNo47xW4EHRcS5wIO6y5IkSdJMGzKVYpnMPAE4ofv5d8COLeJKkiRJ1xR3vpMkSZIwMZYkSZIAE2NJkiQJMDGWJEmSABNjSZIkCTAxliRJkgATY0mSJAkwMZYkSZIAE2NJkiQJMDGWJEmSABNjSZIkCTAxliRJkgATY0mSJAkwMZYkSZIAE2NJkiQJMDGWJEmSABNjSZIkCTAxliRJkgATY0mSJAkwMZYkSZIAE2NJkiQJMDGWJEmSABNjSZIkCTAxliRJkgATY0mSJAkwMZYkSZIAE2NJkiQJMDGWJEmSABNjSZIkCTAxliRJkgATY0mSJAkwMZYkSZIAE2NJkiQJMDGWJEmSABNjSZIkCTAxliRJkgATY0mSJAkwMZYkSZIAE2NJkiQJMDGWJEmSABNjSZIkCTAxliRJkgATY0mSJAkwMZYkSZIAE2NJkiQJMDGWJEmSABNjSZIkCTAxliRJkgATY0mSJAkwMZYkSZIAE2NJkiQJMDGWJEmSABNjSZIkCRiQGEfEbSLi+Ig4OyLOjIh9uuvXi4hjI+Lc7vu67ZorSZIkTceQHuMrgBdn5h2AewHPi4itgFcAx2Xm5sBx3WVJkiRpplUnxpl5UWae3P18GXA2cCtgJ+CQ7s8OAXYe2khJkiRp2prMMY6ITYBtgB8BG2TmRVCSZ+DmLf6HJEmSNE2DE+OIWAv4AvAfmfmnHrfbKyKWRsTSSy+9dGgzJEmSpEEGJcYRcQNKUnxoZh7RXX1xRGzY/X5D4JJJt83MAzJz28zcdsmSJUOaIUmSJA02pCpFAAcCZ2fmu8d+9SVgj+7nPYCj6psnSZIkXTNWG3Db+wJPAU6PiFO76/YF3gocHhF7AucDuwxroiRJkjR91YlxZn4PiEV+vWNtXEmSJOna4M53kiRJEibGkiRJEmBiLEmSJAEmxpIkSRJgYixJkiQBw8q16XrsOx99xKDb3+9ZX2nUEkmSpGuGPcaSJEkSJsaSJEkSYGIsSZIkASbGkiRJEmBiLEmSJAEmxpIkSRJgYixJkiQBJsaSJEkSYGIsSZIkASbGkiRJEmBiLEmSJAEmxpIkSRJgYixJkiQBJsaSJEkSYGIsSZIkASbGkiRJEmBiLEmSJAEmxpIkSRJgYixJkiQBJsaSJEkSYGIsSZIkASbGkiRJEmBiLEmSJAEmxpIkSRJgYixJkiQBJsaSJEkSYGIsSZIkASbGkiRJEmBiLEmSJAEmxpIkSRJgYixJkiQBJsaSJEkSYGIsSZIkASbGkiRJEgCrXdsN0PXfVw98+KDbP3zPr867fPhBDx0U7wlP//q8yx8/5MGD4j1jj2PmXd7/0IdUx9r7yd+Yd/mNn62PBfCqJ35jxX8kSZIAe4wlSZIkwMRYkiRJAkyMJUmSJMDEWJIkSQJMjCVJkiTAxFiSJEkCTIwlSZIkwDrG0r+UvY8YVgN6/8fOrwH9sKN2q471tZ0+PagtkiS1ZmIsaSY8/IuvHHT7r+78lvnxjnzbsHiPefm8y4844gPVsb7y2OcNaosk6ZrhVApJkiQJE2NJkiQJMDGWJEmSgCkmxhHx0Ig4JyJ+HhGvmNb/kSRJklqYSmIcEasCHwAeBmwF7BYRW03jf0mSJEktTKsqxT2An2fmLwAi4jPATsBZU/p/knSd8cgvHDjo9kc/bs/58T5/6LB4j3/yoNtL0vXFtKZS3Aq4YOzyhd11kiRJ0kyKzGwfNGIX4CGZ+czu8lOAe2Tm3mN/sxewV3dxC+CclQi9PvDbhk2d5Xiz3LbW8Wa5ba3jzXLbZj3eLLetdbxZblvreLPcttbxZrltsx5vltvWOt4st611vGurbRtn5pJJv5jWVIoLgduMXb418JvxP8jMA4AD+gSNiKWZue3w5s1+vFluW+t4s9y21vFmuW2zHm+W29Y63iy3rXW8WW5b63iz3LZZjzfLbWsdb5bb1jreLLZtWlMpfgJsHhGbRsQNgV2BL03pf0mSJEmDTaXHODOviIjnA98AVgU+nplnTuN/SZIkSS1MayoFmflV4KuNw/aaenEdjzfLbWsdb5bb1jreLLdt1uPNcttax5vltrWON8ttax1vlts26/FmuW2t481y21rHm7m2TWXxnSRJknRd45bQkiRJEibGkiRJEmBiLEmSpOuQiNhoWrFnNjGOiIdExOMnXP/kiHjQwNjbR8TTu5+XRMSmlXG2HtKO66JWj11rk9oxK227roiINa/tNlwfRMRalbeLiNg9Il7TXd4oIu7RtnXXXxGxakTcsnvcNhpy4oyIzSLiRt3PO0TECyLipu1aOzsiYp+VuW4lY/1LvIYj4rFjP687MNbdlvc1vLXDzej74YujHyLiCy0Dz+ziu4g4EXhUZl664PpbAEdm5r0r474W2BbYIjNvHxG3BD6XmfetiPU94IbAwcBhmfmHmjaNxdsAeDNwy8x8WERsBdw7Mw+sjHcZMHqCbwjcAPhLZq5dGa/lY3cj4HHAJoxVR8nM11e27eTMvNuC607KzLv3iHE6c4/XvF+VpuWde7bpscv7fWYe0SfeWNzWr5P7AB8D1srMjSLiLsC/Z+Zze8Zpdn+n8FzcCfgoZWv6rwEvz8zfd7/7cWY2O3lHxPmZ2Tspi4gPAVcBD8jMO3Qn3GMyc7sBbXkEcEdg9dF1A95jk56TPwJLgTdm5u96xrsPV3//f6KybXsDrwUupjyGXbh+r5OxeKdSjnWbUMqOfoly3Ht4jxhfZvJreNS4R/ds04uW9/vMfHefeGNxJx07T8nMbSpiNX8NT/gfD8rMYytutzawJDP/Z8H1d87M03rGWvaYTXr8esY6fjm/zsx8QM94TY+dXczB74cF8ZYALwe2Yv6xaaXv6/hrtPb1upiplWtr4MYLk2KAzPzfgT1bjwG2AU7u4v0mIm5SEygzt4+IzYFnAEsj4sfAQTVv2s7BwEHAf3aX/xv4LFCV8GTmvPsVETsDQxKAZo8dcBTlpHoS8I/aBkXElpQT/zoLErO1GXvDraRH1rZjEY/qvt8cuA/wre7y/YETgKrEmMavE+C/gIfQbcKTmT+NiPtVxGl5f1s/Fx8C9gNOBJ4JfC8iHt2dJG/QN9hykpQAqnqMgXtm5t0i4hSAzPx9t0FSlYj4MHBjyuP/MeDxwI9r41E+UFwJHNZd3rX7/ifKa/JRE26zWNs+CWwGnNrFhHIyr0qMgX0oJ+peyflyXNXV438M8J7M3H/0vPTwzkZtGRkda7cAtmNu06xHAd/pGywidgOeBGwaEeMbcK0N1D6OTV/DizgQ6PXBMyKeALwHuCQibgA8LTN/0v36YKBvYhuL/NxbZt5/yO0naH3shDbvh3GHUs5ZjwCeDewBXC3fW4Fc5OfBZjkxXj0iVsvMK8av7F7UawyI+8/MzIjILt6g4ePMPDciXkXpNXkfsE1EBLBvRY/g+pl5eES8sot9RURcuaIb9WjrFyPiFQNCtHzsbp2ZDx1w+5EtKAeCmzL/xHwZ8Kw+gTLzVw3aMx5vNOXkaGCrzLyou7wh8IEBoZu/TjLzgvKyXaZ3vJb3t/VzQekN/3r38zsj4iTg6xHxFOoOqm8G3gFcMeF3tVPULo+IVUft6XpVrlr+TZbrPpl554g4LTNfFxHvov7DGMB9F4wOnR4R38/M+0bE7j1jbUt5jbQ6oV1A+aDdyuVd4rgHc8eVXh+gMvPbDdtDZr4OICKOAe6WmZd1l/cDPlcR8gfARcD6wLvGrr8M6NWDOqbJa3hBoj7vV8DNKtq1L3D3zLyom9rxyYgYnaNrEts1ImIbynt99e7nZXEy8+SKmKPpmQt7UXt9WJzCsRMavB8WuFlmHhgR+3Tvk29HRN/3y10i4k+Ux32NsZ+h9IxXjYzDbCfGRwAfjYjnZ+ZfYFki9j6GHdwPj4iPADeNiGdRens/WhMoIu4MPJ3yqedYytSPk7spBj+saOdfIuJmzB1U7sWAg/2CHtRVKCejISeiZo8d8IOIuFNmnj6gPWTmUcBREXHvzPzhkFgj3eO+P3AHyhSUVRkwBQXYZJQkdi4Gbj+giU1fJ8AF3bB2dr07LwDOHhCv2f1t+FxERKyTmX8EyMzjI+JxwBeA9SqadjLwxcw8acI/emZFPCjHtiOBDSLiTZQe3ldVxgL4W/f9r90x6XfAkHn3a0XEPTPzRwBdgjHqHZ/0AWF5zgBuQUnMqo313P8COCEivsLYCFTt9ALKcf3ZwJsy87wo6xU+VdnGzYG3cPWE57aVbdsI+OfY5X9Shrh76RKoX0XEA4G/ZeZVEXF7YEug9rjc6jX8b8DuwJ8XXB/UjXquOjomZeaPI+L+wNERcWvqzon/C7x7ws908XpNf4BlUxV3oLxOvgo8DPgelaMojc9jzd4Pncu77xdFme71G+DWfQJk5qoD/v9yzXJi/CrgjZQ37q8ob4jbUIZRXl0TsOvJ/Szljf8nSm/jawZMfXg/JTHcNzNHJ6HRFIOag8GLKMNjm0XE94EllANLrfEe1CuAXwI71QbLzHdGWfhY/diNzX9aDXh6RPyCciKrnTu6P3MJ4m4T2vyCPvE676cME3+O8mHiqcDtKuKMnBAR3wA+TWnrrsDy5pWtSOvXybOB91Lm314IHAM8b0C8lve31XPxNsoJ4sTRFZl5WkTsSN3x5OksPty8bUU8MvPQrid7x+6qnTNzyAeUo6MskHkHJZFPypSKWs8EPh5lcWFQjgPP7Dos3rIyAWJu3u1NgLOiTD8bT2R7zbtlbnrB+d3XDbsvGNAJkJlnRcTL6YbsM/M84K2V4Q6izH/+L8q0lqczbPj9k8CPI+JIyn18DPVTUKBMw/i3KPOBj6OMfj4ReHLfQA1fwycCf53U6x4R51TEuywiNhvNL+56jnegLOC6Y99gmblDRRtW5PHAXYBTMvPpUdaSDHm/Njl2diMA+2bmslGhge8HgDdGxDrAiynJ+9rAC3u268bA5Zl5eXd5C+DhwC8z88gBbZvdxXcjEbEGc0/mz8cT0Mp4vRZkrUS8NYCNMrPmzTop3mqUpDOAc0ZP+vVFRGy8vN/3HQaKiD1WEO+QPvG6mEszc9tuCPrO3XU/yMz79I01FvOxlF4QgO8MfuM2ep10B71Dxg96LbS6v9N4LroYa45GolpoFS/KKvTtKQnP92uHZCfEvRGw+qjHfGCsdSjnjt6LjSPi/y3v97XTDyJil8z83Iqu6xHvUZQ5wjfMzE0j4q7A6ysS92XnnIg4PTPv1F333cz8txXddjkx7055nUB5f1XP94xu8ViUBYxrZObbY8Bipmm9hoeIsqD4L5n58wXX3wB4QmYe2jPedsAFmfm/3eWnUhaT/wrYLzP/r6KNP87Me3QfLO5PmdJyRmb2Tty7eM2OnV1Hx6My858r/ONrSER8B9gzy3TW21HWTxxK6XH/SWZWTxud5R7j0dzE51HuKJQFbh/JYQssToyI7XJu4v2Q9i07eFIWMFQfPLt4zwMOzcwzu8vrRsRumfnBilg7AS+j9JJB6QV4fWZ+b3xIuWfM8SoXI6NV6S/OzF+sKMYo8Y2IzYALM/Mf3Sf3O1PR61GT+K6Ev3ZTCk6NiLdThnuHzkU/gmFTgJaJiNWB5zJ38vluRHw4M/9e0a4ro5Tdu2HLg17D+9v0uYixChxAdQWOacSLUuJqF8r0jgAOiojPZeYbK9t2Y0qPzEaZ+awopbP+LTOProw3r5JMdHPSs0eVi1HiGxFvy8yXL4j/NqB2Xu4rufo820nXraz9KEP2JwBk5qlRX/7x7xGxCnBuRDwf+DVlgeoQp1LeC6sBRMRGmXl+ZayIiHtTeoj37K6ryg1avYYj4l6ZeeKK/3KlrZGZP114Zdeh0Csp7nwEeCBAlIXKbwX2Bu4KHEDdCN7SboTno5RF6X9m2GLZlsfOXwLfjzL3e1kHQO1UpShTdj4EbJCZW0eZlvronq+TdTPz3O7nPYBPZ+be3X0+CahOjGe2x7jrWfgU8HHKnQzKytGdu6/XZ+ZTKuKeRZnv+CvKEzykhMlJlLlEJ+Rc2ZDTamJ1tz01M++64Lren9wj4rmU+b8voyStUIZS3kgZMt83M+9S0b7XUeYCHUZ53HalzBM8B3hOn+GlaFT+JSLWp3x4+j3ltfIOSk/l/1CS9Z8v5+aLxdwYuISyuOCFwDrAB2tidfEeSxnKvznlcRu95mrL5h1O6U0YzfHajXKQ2KUy3kco761WB71m93cKz8WPKCetL429Z8/IzKqa5C3jRcTZwDajDzjdaNTJmXmH5d9y0XifpRw7n9qdfNYAfrjwGNMj3teZqySzbHFmZr5r0RstHmtSibDex86IeBhl+PQJlGlyI2tTFvdVVeGJiB9l5j1jfkmoqmN717t4NmWB8Bsor+G31yZ+Mb803ZUMOId18e4HvITSu/u2iLgt8B9ZMQ2t1Ws45pdD+2FWlmedYryfjs6hEfEB4NLM3K+7fLXzeEX8TYC1s2cZuQUxmh07o8x/vprsFoRWxPs28FLgI7XHzQU94d8H3pGZX+wuL3t+asxyj/E7KJ8gxoeIjooyr+qnlAn+NR42uGVzrsjMP0YMmS42zyoREdl9WokyzF1T6mZvygry8eGcb3U93BdS5qjWeGhm3nPs8gERcWJmvj4i9u0Za1T+5bEMK/9yGCX535zy6fogSvL/b5SevB36Bsy56Rx/A6re+Au8nTIMNWS+6LgtFrzpj4+Iq/WG9PCb7msV5uZsDtHs/k7huWhSgWNK8X5JWZw16vm/EeUDXq3NMvOJ0c29z8y/xbCD1eBKMhHxHMpox20jYvykfxNKlYS+fkN5/z+akrCPXEbPOYsLnBERTwJWjbJ47gWV7WNsdPLPlPnFQzUtTZeZ32Gs3Fs38lezNgPavYbHX6d9y25eE/FWjbmqWTsCe439rra3/THAtzLzj5n5y4i4aUTsPEr2+mp57KxNgJfjxlkWQY5f13cB72kR8U7KMeB2lLUxRIONR2Y5MV4rJ8yb6oa0Lqb+ANOyi7zZwbPzDUrlhw9T2vls4OvLv8lkOWGOU2b+LiJ+lZkfqmzfVVHqQX6+uzw+XNT3cR2Vf3kqw8q/bJCZ+3Yn/F9l5ju6638WZWpKbxFxHhPuT9avIr+4YVIMcMr4UGNE3BP4fm2wKRz0mt3fKTwXrStwtIz3D+DMiDiWcp8fRKm3/D6oWkj6z67HbvRBezMG1AynTSWZwyj1kN/C/KHOyyYds1akGx7/aUQclm3XY+xNqRP+D8oi0m9Qent764aNXwpszPzNTHpXLui0Lk13NRFxQGbuteK/vJpWr+FVoiwGXGXs5/FyaH1fK63jfZpSYuy3lMTzuwBR5rrWPjevzbG1GJn5h66ntioxbnnsjFJ272VcfbOg2tfwb7vj0ejY9Hj6V6h5FuVD4kbAgzPzr931WzGwhvgsJ8YREetmtzvV2JXrUXpqa+t7foXyZATlCd6UMhWgZoJ7s4Nn5+XAvwPP6dp3DHWrUv8UEXdZOKcqyvzHIQfUJ1N6Yz9IeQxPBHbvTr7P7xmrVfmXK6GMIx1mEGIAACAASURBVHYHqXG1r5HxqgKrU+bM1ZT0GlnaDWt/kfkr8Gvn4N4TeGpEjOYUbgScHV3Fj4rh6OOZfACtPei1vL+tn4vxChy/prxnh1TgaBnvSOaPhJ0woF1Qhtu/DtwmIg4F7gs8bUC87YGndSfcqkoyWdY2/JEy/YeIuDnleV0rItbK+nmym0REs5Jo3Un2P5nbRGeIzwEfpswdbVGXvklpuu5cOvFXlOkpNVq9htdhbgoldJtKdRLo+7y2jncYpYLHhpSd/UbHz1UoeUGNSfXPh+RoLY+dow05Hkn9hhzjnkeZi71lRPwaOI+eVVCyFGJ4a5RayD8du/4H3fSlarM8x3gvyieClzD3Ir47Ze7igZl5QKP/czfKYpl/bxFvFkTE9pQX8kGUg0FSdkraA9g9M793LTavqYj4A2UYMCjTJ0ZDggFsn5mD9rEf+z/fy8ztV/yXE2970ISrMzOfURmvdWWP8Sotq1MWWF2RmS+raF7z+zshfvVzMcsi4pHAVwd86B+PtQplROc44F6U98OJmbnww2OfmBNfd31fb12sR1Fqv96SMg9yY+DsrF+B/z3mSqI9iq4kWmZOnBu5nDjvycz/iEW2c84BVSn63m458ZrM94yyKdCoFOqyMN3lW2Vm72l8LV/DsyzmKo0cl5k7rvgWKxXz48AfKJshJSXBXjczn9Yifvc/qo6dY/d3fF7vtzNzuVVmFom1KvDWzHxplFKPq2S3WU2NaLil+bLbz2piDMveZKPue4AzKROsv9z4//Ta63yxg+ZIzcGzi3tfymro0ZDbqEemZuhjA8qnsjt2cc4EPpBdeZnK9q1OWbW8cDhlpROeiDg8M58Qi+znXtHb2bz8U/dhaWS0McpzcsBk/pa6eVUfz8yzpvg/qg56U2hH0+ciysKi91KSxaRsxPPCXImKKtOOFxGfAu5NWdF/0NDpKBHxncys2dp7YZy1M/NPi/Uw1kyBiDIn/gHANzNzmygbLuxWOXw/fuIeVBItIu6emSctdlypPJ7sR0n+j2R+D2/vx62liDgX2HFSL31EXJCZt6mI2eQ13H0I+0M3wkD3+tiZMof5A9mzgs4U4p1CGRF7JuXD2Dx9e++7mGtSaqo/kLkR4zdmZRnIlsfOKGuJ7hWlbNv7KPN6P5+Zm1W27VsDRiRHMUZbmm9PN5WlcxPgysx8YG3sWZ5KQZayQlWlhRYTczslQXmx3I3+QwKD5q8sx4GUBSPzVn3XyMyLgddE2zrLnwR+BjwEeD1l6KPvgW+f7nuT/dwz89vRvhbv+Cr70cYoT6gNFmV3pf0pQ9lJ2c1on8y8sDLkzyi7Qq5GGRX4dA6oT7sg4VmFMjJziwHxWt7fps8FZQj0A5RNEaBUVvk0ZXrKtRovM3ePiLUp0wwOirL1+uj5relROTYiXkIZAh2vNtI3ITuM8n4djT4t7GGsma5weZY1D6tExCpZdiJ8W0WckSYl0XJuJ8O7ZuZ7x38XEftQV05uVGv9peP/ip6PW3eceyZlh7CvZeYPxn73quxf1u89wLqUjVEWenvPWEDT1/DhlPfUH6OUQf0cZV76XSlT+fruLtk63q6UxHo12ixYpkuAq0uMTdDy2Dl4Q44FTolS+u1zzD829ZluN40tzYEZ7jGOsR3NJsm6Hc0WDkONXixfyIoasK1FVyKoYbxmReq7eKd0vTunZeadoxRH/8bQT34txAwWIB+JshDlMMoHCyhbnT45Mx80MO4WlCHj3SiL7z6amb13mIu5RRpBeU+cR1fzurJdU7m/LUx6j416Q2YhXnf79SmP2X9QPnjeDnhfZu7fM855E66uGoFqLSK+SUks3kI5sV0CbJeVG7dE+5JozYdnh4qIjwE3plTfeQrw7cx8Ufe7XqOeYzFXAe41nmQ3auug1/CCIft3UqoYvaxr76kVI4tN443FfVhmfq3mtmMxmk/fmXXTmG7XfSAbX9xaPSIzyz3GS1f8J1XOygk7JNGjEPxi0wAoicVVA4bcj4+Id1A2RhgfcqvdOWg/rl6kfpPKWDC3v/kfImJryh7xVfGicW1fGhUgj4htKJ+Kl20qQznB/jzmyvP0tSQzxw8EB0fEf1TEGW/nqpStzbcEfkspYfiiiPj3zNy1T6zMrN24YDFN7u+UnovjI+IVwGco7+EnAl8Z9ZpXHEwHx4uIx2bmEd0H2WcAm1E+VNwjMy+JslHH2ZSempU26XmNUjmjWkTciqtXV/jO4rdY1E6U1fwvpIw8rUMZhaqSjUqijQ3PbtodS0ZuwuJbgK8o5g0oC6pH01pOoNRv7VtF4x5jyd37gQ9GxBGUD8ZVZfgy86qIeBdl+kO1KbyGx+/PAyibtYzaW9XExvFGvhWlMtUmzH9P9HktjzoQmo1Etzp2RtkY5BeZ+eEF178QuEUu2KRnZWXm1d6jUblgLsp6tDdQjidX0eUS1I1klZiz2mO8UETchJI4/XlgnEk9AX3nGE9ahBKUIa59s+cmFWNxJ/X2ZW2PbDQsUt/d9pmUuWN3Ag6m7Pb16sz8SEWsn9Owtm80WJASEY+jJOtvphxIgjKt4AWUE9sbs2KhRdc7djBliB3KiezpfWNFxJuzlKZ7N6Vu63GUhag/HvubczJzi55xdwG+npmXRcSrKNOL3lj7gazF/Z3iczGpF3Wkd29qi3gxtyXvJ4CPTUo0I2LHzDyuT9vGbhuULWafRHnPbVAZ522UxP8s5qZ65dAera538XdZcTKKxhv8dMf2TZlQTg44rebDWNfTewNgtEvnUyhzIHsN30fEzzJzywXXvYYyte3mmbl537Z1MV5HGXo+ouY56GI0fQ1HxHspFR8uohzrbp+Zl0fZDffLmbntcgNMOd5Y3Cab3kTD6YAtj51RNkTbOhcspux62k/Lyo2RxuJsRZmWshvwx5rnIcpc+XvngIXFV5OZM/0FbA2cQlk9ez7lBXjHijgPo3xavZgyeXz0dTDw4wHtuytlPtYvgeOB51/bj9lY2w6knAxPo2yAsT/w4QHxNl2Z61Yy1vcb3ccnNHy8TgM2mXD9JpSC9W+ujLsRZVe5SylDxl8ENq6Ic3L3/RmUAumT/madmvvdfR8tYtgJ+NGAx3Hw/Z3WczGLX6PndQpx70lZGHg+pSd1D8oq99p45wA3Gtime1F6TI8AtgHOoIw8XULZQKhvvGMoCcD+lIT9pZRRlGdRdiSdhef3pytz3UrE+dSkx4gyP/byAe27jNLTdjnwp+7yn3rGaPoahmU7q76QUiFjdP02wEOu7Xhjtz+j4X3+BmXa49A4zY6dwJk1v1tBzI0pHzp/SsnnfjupvT3ifX2x82Ht18z3GEfED4D/zG7uZETsQHlie81Fi1LD966U4brXjP3qMuD4XFAveQWxbs/cp5zfURa3vCQzl1tGayXibkA5yN8yMx/WfZq6d2YeWBnvxpQ6nA/urvoG5dNi1XzqRXrbq0oRdZ/gb8HAWrcRcTRlCOu5WVlZYCzWWZm51SK/690T21qUlfw7sMiwaVbOqYq5ueNvAU7PzMNmYD7lVJ6LiFhK6Vk8LDP/MKSNreJFxF+BST2bVVv9RsSbKItszqf02h8JLM2BU2Yi4mvALjlg1K57vPalTJ04AHhYZp4YEVtSFmj1es1Ft/Vr1yv+q8zcaOx3vbfmja6cVURcxvzpckO2NT+Z8rj9T3f5tpQV/TMzJ3io1q/h64qIOADYP4dtejOK9RHKaN3Q6YDNjp0R8RPgSZl57oLrN6e8X/v23P+A8t7/DPCZzDw3Is4bcmzqpo0cBPyI+blE7e6NMz3HeGTNHFtQlJknRClr0ku23SHpZ5SetUdlN1TXzbkZ6mDKEzwqKv/flKS7KjHORkXqu5PWHYF1oswNHlmb+u011wb+ylzSDuVE1CsxzsxHRsTOlHmdhwEfYmxjj57J4uURsVEuKF/UDa/23jFsCvOztmRu29uFyfGQOVW/7g7KDwTeFhE3YnKx+eVqfH+bPhdjdqXMQV3aJWkHMb9A/7UR7zzmdn9sYS9K7+6HgKMz8+9RqgMM9Vfg1Ig4jvoT0GqZOdq69fXZLY7LzJ9VzvVsusFPdjVeM7NJpYHOSylz0X9Bed9uTOU86Gw0J3ihiHg0Y3Ogs1SE6qP1axhovxaldTwabHoz5jfd1yrMVbqoed+2PHa+BvhaRLyRuXPPtpQ52jXrZC6lTDndAFgCnEvdfRz3EeBbwOnUb+o1X8vu52l8UXo7Xk0ZBtgEeBXwxQHxNqdsaXwWZQehX1BO5n1iPIaSsF5A2c1oR+C8Bvf1J933U8auO3VAvGOBm45dXpdSRaJvnJ0oJ/zfdd9HX+8D7nNtv0a6No529fsl5SB9XsXzujPlw8jTKPOot6acwM4Bdq5o01mU4uULr1+FiiG48ddF48fuxsBjgc27yxtStti81u5v6+dikTY9mlLW6wLgdcB610a81s8rsCpl6tgngAspi3suoiSlQ+LuMemrZ4yTJ/086fJKxvsDpYfty2M/jy7/viLeesv7GvDY3Qi4c3ecGjod5XWUTXii0evlrZT1Cs/ovo6lbMDQJ8a0jk0/B+4ww/E2nvRVGWuXlbluJeK0Po9tTZkff1L3dQhwpwGP2Tpjr7PzKOsD7jEg3g9av+6uC1Mp1qUcCLanfBr7DrBf9pj6sCBekx2SulhrUl6Eu1FWuh4CHJldj0hFvBMoB7xjsyxkuBfwtqzcaGHScPiQIfKIuHdm/rDmtmMxXpaZb49FyvFlz+GPrnfzVZRdvl6a/Xs6Fsa7C2U172hjlDOAd+WC7bVXMtaZuchOXsv73XLiTW16Q3e/R5shfHdG7m+z52JB3DtT3vcPp0wvOpRyfHlK9hx6bxEvSoWBvSknwcP7/v8VxF6dUoN4t65Nx2XmkwbEuyFw++7iOdlz9C3Kbmt/oTyfa1B6oekur56ZN+gZb7nHxuy5IUfML104IdzKL86MiAdk5rcWjLKNB6vaEr6b5rEmpbf8bwzvRT2NUrf5qu7yqpREd6V7PSPi/Zn5/Jr/v4K438/M+85avLj6ZjdJ2UCkOqFaZKpibRm+hcfOM4F3Njh2rpUDCyAsiHdzyoLe3YDbZN2mMm+irEH7Mo020Jn5xHgkSo26q4Y+KdFoh6QJcdej7EX+xKyvInE3yiKSrSlJwBLg8ZlZVaw6Ik4CHpPdkEo3lHJkzRutu/0SyqKWTZhfmqbPznePzMyjI2KPSb/PzEMmXb+ceOdQKmW8Icve6c0MPQhMYX7W0zLz4LHLa2blrkgL4u5DeV5HJ+rHAAdk/7q5Te9vd9tdckJ5xYXXrUScYzLzwd174g+U6UlfyMx/jP3NEZk5MYmZdrzu75vsVNfFWoVy7Dh87Lq1KceDXu+xsdvvQPnw/0vKyfY2lB7jmnJtTUS3JW9EvC0rS0dNS0S8LjNfG1PeIn2oLjHeYZRIdOeyE/okxmOxWq+TabIWpXW8RT5ArUVZUPbMzPxlj1gPo3yofgJlJHpkbWCrzLxHn7ZNQ0Tcm3KMWyszN+oS73/PzOcOjLvsHBYRG2fd9vLnTbi614fYq8Wc9cQ4Iu5EGRIcfUL7LeVgfEZlvO9TesY+T5mX8mvKsNG1trBqfD5QlN3MtqC84Xr3yCyI+1DKApdRr8n9gL0y8xuV8X5AmVu9sDTNF3rEODi7vd8jYo/ak/RYvK1ybGvkFsliq4NAd8DbH5g4Pyszv1rZvvsAHxvavrF4p1FOXqMD1JrAD/ueGKdxf1v1osRcOanb5sBFmtOI18V8NaUHcOhOdaN4zRLtLt5JlA8+53SXb0/5wLPSi28n9LTN0/e+Rikn9Rzgw5QKPPN6erNnycGI2DLLfOeJr6++8bqYm2bmeSu6rmfMoXOCx2PtRplOcTzl8bsf8MrM/ExFrK/RrZPJsihyNUrv850q29b0Q8W0P6R0owN7ZeZDe9ymWWGABXFvD7yEq3dk9e64i4gfUUZlv5RzpV/PyMpyba3PYa1dFxLjJlUpxuIt3CFpbeAdWblDUgvjJ/qI+EJmPq5h7PUpJZKCkuxU1/qLilXeE2KM39eqYaJF4jZ7o7U8CETZCOWllFEAKCMB78wBq5incJA6nbLr2N+7y6tT5rv3Ppm1ur+te1GiLHx6yWK/r+gxahqvi9m052MKifbVaqBPum4FMZpNVejiPR7YkzJNZOGmUNk3CYiIAzJzr2hYU36RD3dV1Xy6274V2I4yZQfKMPRJmVm9nXCUer7bUZ6XH2Xm/1bG+Ulmbhfza+cPPm9cl9Se17oRnb9k5pXd5VUp89H/uvxbLhrvp5QPjAs7sk5a9EaLx5q0J8JPs3Izs8bn2El1+N+QmafUtA3+hapSjN3+JwARkTlh95VryfhJovV2rVdSaoSuDmwVEWT90OfREfHw2p7OKfsvSqH7L0GpQhIR1b1lmXlBzF8lf+Vif7uCOGdQFikNnpqxIG6T9nUOAn4UEUdSXos7UV8J5YyIODoz502Vif7TH35DSXQezVzvM5RelJoKMOtQ5tpOTMjoWQ1lCvHI9jsQjnrBnjf+b6g/xiyNiAOZ26nrycx/blao9X3MzM8Dn4+IV2fmGxrE26v78WG5oKxl94FxpcV0qvlA+cA4Pif4EEqt/16J8YTe8Qu777eMiFvW9I4Df4mIm9GtH4myTuaPfYNE+7UoTeMt5/+sRUVFn84xlMpAo3PEGt11VZ2AwBWZ+aHK2y50Qdf5lFHWGbyA0sFYreE57NWZ+bmI2J6SA7yT8oHgnrVtuy4kxr/oej5GB+PdKSsZq4wPkwOz0oWfi/w8SJSd6vahlEc5ldJz/EPKQsEa+wD7RsQ/mdseOrPfoo9bR8T7KAnF6OdlhhygGr7Rmh4EpvCaa9q+zHx3lIWf23dXPX3Ip23K1ImFSfCk65bXppblFaHUuG05p7N1PGDZyMcmzB/6/ERNrCkk2s+hJNkvgGULoT/YJ8BiUxRGKqY+jOJ9ZVLsyuQO4AeUnqcVXbc8W1A+PN2U+aXMLqPM6R/ipsCo53+dyhgvopT2m7RLW1J3nngRpXNisyjTFpdQegb7Gk2PWzgKUKtpvIh40YSr16V8kH9/ZdjVxztOMvPPUfYiqPXliHgupbLX0EVpz6ZsFnQrygeoY5j/gbuvluew0Xn+EcCHMvOoiNhvQNuuE4nxMyhVKUY9MN+hsgZk5z007Fls5C4R8SfKyWaN7me6y30Tz3H7UIbHTszM+3c9GCu9RfJC2aa250vHfm510IO2b7TWB4HWr7nW7RsJ5vaa73/juekPt1rwgWdtoPdWup2HRMQbKGWQVqP+PVF1n67BeETEJ4HNKB9il225TFljURtzcKIdEVtk5jlZFha+u/sa/e6+wPd7hFveVrk1yVjTeBFxC8r7ao0FifbalLKGKy0zjwKOigbVfBZ4C3BKN91j2ZzgvkG6KSOrAK/KzD7P4fJinhylUsjQdTKPp9TgPiQarEWZQryF58Kk7OC4+4Bpcn+JiLuNPsxFxN0pU6FqjUbtxs+5VSNG3RTMJw9oy0Itz2FN6vCPm9k5xt2w1bOB21EKN3+8Rc9R67kys2xsvtepwD0z8x9D53tFw0UfXbxWlRXWp7zRHkg5IB8D7JOZvxsae6hZf81FxGsoFVW+QHnsdgY+l5lv7Bmn+SKSiPg5pcby6TngYBURW2flgt1rIl4X82zK/OkmB+XFEu2KYeirKCN2z1s4Fah2PuWsilIt52mURaM/GfvVZcAhWTd3/BDKsegP3eV1KWUHq0ccWs0J7mL9MDMHbRgSi5SkG+n7uEXjtSit443FbVI1p7vddpQd4X7TXbUhpcpV7znBrS0c2e38kbKj5lHXdHvGdb3qD6WcI87t3ht3ysqyuTDbPcaHUIbrv0spVn8H6nZaWaj5XJkZdmFE3JRSmubYiPg9c2+63uLqiz72iYjts2LRR+vpBS0/0U7hINB6akbr9u0GbJNzi+/eCpxMqS6x0qYw/QHKZhlnDE0WR0lsNNr5qnW8zhmUUlIXVdx2km1pk2ifSenVOTkinprzFyrXji48ddL1tdNGuphbA1sxNn+3It76wNHdF5QetkuB72V9FYk759h24Zn5+yjb2PYypTnBAMdExOOAIwa8Vpa3613VnPvriMHTxkYy8yfdqO6ot/1nQ46jXcL4ImCjbnRgc2CLys6s1Sk7r47u1+Mox4U9I+L+mdkrN2t5DsuyOPGIiLhxRGxLmeZWnRTDbCfGW+VcneEDgR83ijutYeiZk5mP6X7crxt2Wwf4+oCQTRZ9dJpOL2icLDY9CND+Nde6fb/sYo4WG90I+J8B7Ws1/QHgZcBXI+LbzJ8n9+7Fb7Jcb6ds5d7qw3DLeOsDZ0XEj5l/Xx9dGa9Von15Zv5nRHwD+FREfAJ4Y3ccqE2kthv7eXXK7qEnUzltJCJeC+xASYy/SulM+V5FvLUmXLcx8J8RsV9WlDADVomIdUcjJlFK1tWce6cxJ3gUd03gyoio2jAk2y9kb70WpWm8aUwbG0tkN87MZ0XE5t00ptpR2YMoi2NHi/cupJwzauLdDnhAZl7RtfVDlPPYgygj+n0NPod1o9fvo8y1fxXwAeBiYJOIePmQ6TKznBgv+6SUmVdEDJvSFxGPzcwjMvO3EfH8mmHd64qYXCt09OJdi7lFGzVaLPoAmldWaJksNj0ITGF+VuuD1D+AMyPiWMoJ9kHA90YH/IqT0HtoMP2h8ybKKu3VgRsOjAVwccOkuHW8/RrFGWmaaGfmd7oemQ8C342I6td0Zu49fjki1mFugXWNx1O2Wz4lM58eZaOJj1W0a+IajO6Y+k3KUHdf7wJ+EBGf7y7vQnld921b8znBXdwWa0eWiYhHUKpxjPfcv75nmNZrUVrHa101B+YS2dG0liGJLMBmmfnEKHWqycy/RX0idSvKh6dRhZE1KZu4XBkR/1j8ZotqcQ57A/BgSh5yPGVk5hdRdtM7jjLroMosJ8ajBWkwf1Fabe/Tq5gbzjmOfquLr2tOYjm1Qqkv1/RmGiz66LSe0tIyWWx6EJjC1IfWB6kju6+REypijGsy/aGzXmY+uEGckaUR8Vka7aTVIl6ULaEPy57bF6+E/RrFWXYc6aYEPKmbi/tdei5IW46/ApsPuP3fMvOqiLgiSj3YS2hY+jIz/682qcjMT0TZHOX+lMfysTm2KVHPWFdFxDuZS54G6+7Xk4FNM/MNEXEbYMPM7D1KGxEfprwm7k/5YPJ4KkZ7R719i83hnYF405g21jKRBfhnRKzBXOm8zRg7RvX0duDUKNWLRuf+N0cpnfvNingtzmFXZeZ/A0TEedlttJSZl0RE7WJvYIYT48xctXHIWOTn651sX6aJrqfiKkrJt9Gij5dn/aKP1tMLWiaLrQ8Crac+tG7f1zLzkvEruiG8cypiQdvpD9+MiAcPnTM2Zm1KEjaebA+ZA9ki3rnAu6IsGvksZTe5UyvbM41E+6MLr8iyuv+7lOe6t4j4MnPTMFahTIE4fPFbrNDSKOspPkrpGPgz7abfEREPAIaMMv6su/1qXbxlu51WaDEneNwHKcf2B1B64f5MGZbebnk3WsR9MvPOUTZ+eV1EvIth84ubzeGdUryW08ZaJrIAr6VMnbxNRBwK3JeysLS3zDwwIr4K3INyH/fNzNF6pZcufstFtTiHrRJlIesqwFXdz6Pc7vpZlaK1iPgZZZHRKsCnWLB96ICFCzMtyuKg7Slvtu9m5hcHxGq6xWxLEbEnZVTgBMbeaMCngf0ys9ebt0tSRgeBH48dBGra9i3gwWO92asx1pudmVtVxGzZvnMoRdIP7y6/GNizpl3d7Y+hnFxPp5xwgcWHqVcQ6zLKh5x/UKZXDS1hOLMiYmNg1+5rdcpr9zOjXpEecfbpYjRJtCfEvxnl/XV+Vq6Yj1LSa+QKyoKZCxf7+56xNwHWzszTKm57OlefN70eZej8qZn5s4qYe1OSlIsp08VGr+FeW66PxRu9J66klPMa9J6Iue3NB1fNibkKPCdSplP9H+UY12s0INrvfNk03ljcJlVzulgPopzDtqKcH+4LPC0zTxgQ82bM7Xx7Yg7b+XZdyqjO+BSZ2s3CBp/DIuKXLF5eNLNyx1D410qMJ23xOZJZsdXnrIuID1KmGHy6u+qJwP9kZlXPbDTcYnYK0wtaJ4vNDgJd4nmPzPxjd3kdSomlLcdPRtdi+zYEDqAsvtuAMqXlxVm5S19ELM3MbWtuOy1xHdtJK0rVgo9T5s1VjZ41TLSPBl6RZVfDDSmL5JZSSsEdkJnv6RHr4Mx8WvfzHjmwnmy03zBk44UhgN/lgJKSXfJ0z5yB0pGTRNme9z6UbeDvFhFLgGMqj0uvBvan9D5/oLv6Y5n56p5xmpZ+bB1vLO7xwI7ZLUgfqmUi28W7FXO92UDdeSIW2SxsSN7UOtFu6V8mMf5XFBFnAluPPsl20yFOz8w7VsabVK6o6pNZRBzA5OkFtwF+UTG9oNkbrfVBYAq92dM4SD2PMqR4FbBbDljcE6Xc27daTH+IsoHEqZn5l4jYnbI24D19h6Ej4pGZeXSUubFX0zdBax2vi3kDSj3OXSlVGr5N6e2tHuUZi12daEfEmaNjRkTsC2yZmU+NiJsA3+/T87mgV7JFfdrxDo+7M38h1Ex0eHRtfNBoxKhBvGZzgrt4T6Z0mtyNsmDp8YyNIK1kjO2AC7KbWhelHN/ulCkk+9V0nnRxbpDt5vBOI952lOkn1dPGWn+4G4v7NsrzeiZzI3eZFYtvu5GU0WZhd41us7DMfGJl2wafw6b1uI1u/C/1RZnHetOxy+sCz7222zWl+3oEpfTL6PLGlBNt3ziPHft5vUZt+xaw2tjl1brrVgXOqoj3TMrQ/e8pK1T/RknOatp2OiW5PrW7vCXw2YH3d0NgJ8rmGbccGKtp+4BjKWWtbgpsTZmb+c4B8S6jHIj/Bvypu/ynylino3mE9gAAEydJREFUUT5M3KX7eR/g2xVxDh77eY8hj3/reJQpNR+nLBj7MiXpWbNBG29AqS97KGVXrs8CO1fEOXXs5+OAXSf9biVjnTzp5xZflIoUzeI1bNeBlNJxr6SU43oR8KIB8T5E6Y09u7u8LqW3d0gbt+zOjc8H7lBx+5NH5wbKB//fUDo73gB8fkC7HkkpCfp/Q48lU4p3DOU8+zrKdJnXAq/tGeP45XxVncO6uOcAN2r0Gv5J9/3UUcy+7/0F8Qafw6b1uGXm7C6+m6JnZeZoiIcsxdafRVmAcH1zM+DsKOWaoHzi+2FEjGoHr+wnx/GKHt+kTUWP1pUVWm5//ffM/HtEEBE3ylJUf4vKWMtiUurJrg7cLiJul/XDRq3b94Gc65X8Q5RqIbXVRsi25Z+uyMyMiJ2A92ZZBDKxl3YFxns192FAKZ8pxNsXOAx4SVb2rI3r5iruRkkCfkQpMbZX1k8HuKCbJ3sh5b3/9e7/rEFJvvtoXZ923s0H3Haazu++bkibkoP3zG5OMCw7h1XHjYhPZuZTKL27C69bWauOvXafSJli8wXgC1F2Xq3VsvTjNOINrpqTmfdv0I5JfkF5fw5ZwDfSdLMwGpzDpvi4/UsmxqtERIzeFBGxKm0OVrPoNSv+k5UyjYoerSsrtEwWW+8YOHHYiPqC/E3aF91OWpn5xe4x+wcsqxt+bGXbmk1/6FwWEa+kDMver3u/9k3GZtroAB8Rm0XEX7Js3b4DJfn+RI7tmraSmibawJ6UuZkPpGxRO2rPvSi1V/toXU925mXFotMVuLx7H4zOYUsYW+RaYd7Uui723XvGWDUiVssyXWRHykYkI0PyjJalH6cRb3DVnNF6he7neeXkIuLNmblvz3ijdQ9/pZxjj2P+NI/eHz6z/WZhrc+xLXa9nIvX7vVx3RAR7wA2AT5MefE8mzI36sXXZrumpVtMsnlmfrPr4VktMy/rGWMqFT2i7WK5I4GnU7YNH5VWukFmPrw2Zhf3/9EdBDLzn5Uxms7PatW+8TmeC+d7Dpn/+f/bO//Yverqjr9O20EbsWwElxIIVsFNMrTIRAu4Qegy3fwtKsoAh/hjscjAzS7GRBcZw2ggsrIBTkTc/JEo02DQiimUgQi2YstAllCtxLEBOklaQQTq2z/O5/Z7v0+fb9t777n93n6f80qe8Nzny3P6eZ773M/n3PN5n3PM7G5c+vBCvGnD1bgc56RdvnG8rSX47229pFvN7HDg5KaTnpk9gkdODY9oTWvU0HSxiLZXbG7E2zgvBb6Jd4X8/ba/YfNyT/8T4GiHM+oAzPTaHtipnICw8xBNcSTGJWi2zVnorAkudj6A30Qtwp0o8O/xSeBfJe1xR1Mz+yBe9eFnwOHAsWWn50jgWkknNhlbzW5nDW/P9jpXzYmeh3e3o6bm+RTzgLslHd3kfQ3sd1pjbYaul5Le2HpME+gYz8PvZv8E/xHfiGfNdum6NkiKRORd+HbPEea90q+UtKKhnV4qelhPWakdncXwScDM1ks6rjg+Ly2OykZJx7SwFTY+m54INa06xuhxQ7tV+acPAQ8W+UNEotXBeIWAxpNWD4tFqL1is/re3o/vgKzueB5CHG0r0quZaCDJqtvc6fcwBCegD8ysHn1diGtvn5bUqgZ0sfl8PDJrwFp16L5oZhdLai2dqtlZjudS3FjJdszs94ADOgRPwko/9mEvgh7n4Wfg88j2cjwf1wc/vut3jrX1OeADLXf9Rm2FrrEl8FR1vVxmpeulpFe3tTlxUgp5WZUrgSvN23weNhed4sJKPCJ7J4Ck+83bJTaittW7UNIT9b+Z2cLx79o1kfKC0QtNHRobyDtLbbJuBfhHCds2Ch6fZng+7rgJneUPZZH9KJ4kcyEeeT4Yl0KdJanRNp4G3kmr8JR516u34Ulz0E028usii3k9LmVZbUWX2pDj8S3oL+BzSWs5lU3Vkz3UpuuLF+P1jBvR03kIRTvXev62efObVliMJrjO5hH78/G2042cRUl3jHmtUWnAMUR3vgy1ZzGysb7m4bV4ALAqu7kIDwSe0MLWIcC95vlK9VKtjW+Ke1hjw7teTpxjbK5pfQ3+2TcCPzWzWyS9b1YH1g+/kvSkla6S5o0lulxot7Nz4t241/aEsGS5Hi60sEmgvC9anxU1vpkSoQxPjmzLabj84RxJDxX5w8cb2rgc3+Y9EK9W8meS7ii/ky/Q/vsbciets3Fp10WStpjZc3DpUluiHO0leOWMt+Ln9Qa8us29LWz9L64tfg3TS6ttAy5oYa8i+ryGUQIwFfNw/e6SDiYjNMF1Vph30jsHv/n8NC41GALRnS+j7V0BLDOvk7wKl439G9BENrbMzLbi8+6i8pxy3CrwVFioWi16Sb8ws7Yt3KMj6pFrbHjXy4lzjIEDJW0tEctrJH3YXBM5F7nFvO7oIvNM9ffg5aAaYa7zPLTYeRFTEaPFQNsLLbqyQuSFFjYJREaza0SNb1eJUK0To+S1TC+FHfKHn6h5IsSCavEys49U0ajyO2k8puhIZbQ9AEk/AM6rHW/Bo+ZtCXG0y47aGmCNme2PO8jrynlZ3dDWJmCTmX1eAfVk+zgPPVC/AXga2II7oY2wmiZ4xHl6kjFtu/cUSaeb2Wm4vOBxOtYxD2YlsMq8UlFE58toe52r5qhlA5894DEzO7aSsRRJzy/bGApat+qErbGS3lOeXmlma2jZ9bLOJDrGC8yTvt4MfHC2B9Mzf8dUfd9348L0T7Ww83K8x/phFIensA2fqNsQXf4l8kILmwT6kGZEjS96GzpY/lDPsh+dzNvsekRHKsMjn+Y5ABezc3Z1q23BSEe7OMSvxJ3ipcA/MVXCsQ0vN7MLmerK1dZB6SsC3Znqmpf0nAh7ki4GLo7SBFeU391fA9cBRwFnFm1rYy1qNIot/Rhuj2FXzTkf+JKZVevqIXjzoMaUuX01/vvYD+838FjbG4rINdbM1qrkTUn68ehrrVBA8ed96QG8CW8U8C/l+LnAdbM9rh4+5zy8LE2kzVN7GutJ+MK232x/b2U8y4H1+JbMk8B2uhWBvwlfqNfiCVDXA9cPaHw7NVoY99oe2NkA/Gm5xh4FlpfXn0/D5gvVZyrf29PleXX8VIfP+lvBv5Uwe3gTiBVlfno28Pd49ZK29p4HfBn4AV7T9Ed4V8mmdq7Fnc5/wDtpRnzWzXiVDBvaeQg8n/VmJmFrDC5Rqh/Pp2FTiZH3/zfe1hj8BuVvgHtn+/sr4zmR0uwGdz4vBQ4fkL0leMOWPyrHhwNnzfb3VsayP+6kHw28oDxv1fCjzO1H4s1R5uO7Uf/YYWyd1zA8eHAQsAlvcnNQeSylNL9pPb7ZPnn56O+Bd7xqfdGPsffbZSLZUB6X4NKUpnb6cNrDnMUeJoGTxj062AsZH17WZjXwMB4BrB6fwcvnNbVX75B238jfBtGVjAF30gK+V/77X7XXbu0wthBHG4/eb6s+G9NvUtp+1puBeUM9r0Fj+v645wF2P4/v/h2COzzr6dapcvGY1543m99dbRwhnS/7sjdi+2CCbvSCxhMS8Cjv21B9f7XXbu8wts5rWDl3W/BSeVtqj03AuV2+u4mRUlgpom1TdS+noQHUu+yB0CQyPLHgHlyGAnAmXuD/DU2MqJ/KD5fj20RfwktUnYVHzFohabOZzZfrK68xs9s72ApPZAkaX/Q2dLT8oQ+G3EnriaJJv9/MzgUeBBpXkamxSNJaMzNJD+DJn7fibWv3GEnzOoxhJlYBXy/VGTrXkyX+vEawq2oD7Y0GaYKrNVGeczMqpzqb9jK5SKI6X4baC5aNhdJTTtDj5t0VN5nZx/Aurs/oMs6ua5iky4DLzOy9apjrsDsmxjEGqjqPE9FtqRCdSXqEpFPr9q19u89opz3SmQ2dBKL1WVHjU3AiFP1lV0cy5E5a5+ML13n4YnsKXlGiLdGOdiQX4bs7C4npPBp9XiPY1fWgttd/oCb4LXgHUti5gscrGIZjHK3hjbLXV9WcCPrICToT3+ldiQdNDsPrcbclco29yszOw7vnAqwDruqypk1cg4+kPWb2HeD9km4rxyfiW3jHt7A1tpxN2+iqmf0nXrPxavwi+z/gLyUta2Hr2bi8YD98ElgMXCFp8y7fOLO9DYyJZqthq88ex/cq3BHrmgg1eGzgnbQiKWO7D5dAXYgv4h/TmHqzexsz2yDpxYH2BnseojHvRLqy2g3ANa5vl/QHu3nrqJ1eGktEYkGdL6PtWa1Bk5ndJ+mo2t+G8t2dKum6jjZei/d6+OdyfCd+cy1glaQvt7QbtoaZ2afwm5uqmc+ZwHZJ72gzNpigiLH10L1pqJjZbZJeZt6usn7n09Xh+Svgs2Z2YDl+lJYRrR7kBZ3vaMdMArcwNQl8h5FC+E2IiGb3OL4hbkP3RXSksrO9vuYmSevL01/gW+NDIrqebPR5HTIvkbQVfDIHLtndb2gG+mosEYZiSj/2YW+wsjEzO0PSvwNLzWyn/gwNbxZXMb2Sxf54zewDcBllI8c4cg0zswWSngaOGwmA3WRmm5qMa5SJcYwJ7N60D/AX0Eupm0349uDicrzVzM7HkxgaESUvCHYWQyeBGlHbRn2Nb4jb0H0xxE5aoXPTPhIEiK4nG31eB0cPmuDBSp+iNbw9aIIH+90xtbYcMOZvTef4/ST9pHZ8m6SfAz83bzndlMg17Lt4c7HtZnaEpB8CmNlz8eT71kySYxzZvWnofIXSjc7MrhvRBXemilYU3odHHJsSlSwXeaFFTwIVUfqsvsYXnQg1ZIbYSSt6bhp8ECD6pp348zpEQjXB6q+xRATRGt5QewP/7m4A0JiW3mb26p3/913yO/UDSefWDp/VfGiha1g1r/0tcLOZ/agcL6XjDlkf2caDRNJ2SWskvQ0v7bUZ79703lkeWh/UF8JOPcMb/luNKHqi+eXcXAOc3MLM2AtNXu2i6YUWOgmY2WvNbKWkByQ9AXwLT4p4PXBMU3vR46txEZ7dvhB4Zu0xF1mJd3D7pZltNbNttWjPrNjrYW5agjsBRwOX4U73zyTd0oOEqRVmdmK1EJrZGWZ2adF7tiX6vA4Rm+H5uON9nQWSbixR8YdU63w5EHtDZq2ZLR190czOpnkQ604ze+cYW++mXdvlyDXsWUUqcgxwFX7D8zW8C2QnjfckRYz76N40VHopE7QH/1YTouQFkRfanWb2TknT2qt2mASipQ/R46uY89vQFT3Ii0LsRc5NCmzh3CNX4NvRy/Dr5Gp8e3tsUu7u6CECPUQGrwkOJFrDO1hNcA9cgHeT/XNJ98OOduKn0/z6ugD4qpmdDtxVXvtDfC17XYuxRa5h8/G1tH5TWMlHOs0HE1OVwsyuxSMo3wC+KOmeWR5Sb5jZdrwEmgGL8GggtNTxjUni2/EnvFZq4xusqKxUM/scsG6GC+1kSW9tYOt38RbVv2LMJCDp4YZjWy/puNrx5ZXjbmZ3SFre0F7o+Gp2PwrcNMe3oYEdlVQ2SnrMzM7AJUefUMt62hH2+pibxjja1wOflvRgV9sRmNldko41sw8BD8rryd4l6diW9kLP6xDZzby+UNJQWhF3JvqzTtJ3B2BmK/Ao6uuAdwDHAa+S9GhLe6cAVdWTeyXd1NJO2BrWZb7Yre0Jcox/zVS93MhKDUkDxiTLdSr/0oezGDgJbJZ05Ax/+6GkI1raDRlfzd42PFoflQg1WMzsbrzr1QvxCOXVwBsktYpURtiLnpv2hSBA0bOvwbWAfwz8FHdsX9DSXuh5TZJ9HTN7Gb423g68ucj5BkHEGmY9lsWbGMc4GQZm9m3gLZUu2LxByCkUeYGkFS3thjqLEURGs5MYeohUhtqLYF8IAlh8fdrBnYckmQ1qO7yGB4iewqs0DOb6j8DMDiqJe+FMlMY4GQS9VFYojvCsO8MjROuzemEStqFrDLWTVhjqp4VzKAquT8sAz0OSzAYTorenL6cYJqgqRTIY+qqsMDgkPSLpBLxu5o/L4yOSjm+rB+6JK/BkyCoR6gF8O3ouchouGTmnOGeHAh8fkL05jZktN7N1ZvYfZvYiM7sHuAd42Mxe0cF0nockSUJIKUWyV0l5wfCY1G3oEqn8fwVNgtH25iLm7dGrerKfZKSebIRmMM9DkiRdyIhxsre5ADjbzG42s0vKYx1e3/f8WR3Z5FLfhr5hLm5DR0cqe4x8znVC68nmeUiSJJrUGCd7FUmPACeMJMvdMIRkuQnmNDwR6hxJD5VEqLm2DT3oTloTRHQ92TwPSZKEklKKJEl2MFe3oc1so6RjyvP7JB1V+1vjsj/R9iaFHurT5nlIkiSUlFIkyYQyYdvQ2UlrAEiaL2mxpGdKWlCeV8dt5Dt5HpIkCSUjxkkyoeyNRKihkJ205iZ5HpIkiSYd4ySZUHIbOkmSJEmmk1KKJJlcchs6SZIkSWpkxDhJJpTchk6SJEmS6aRjnCRJkiRJkiSklCJJkiRJkiRJgHSMkyRJkiRJkgRIxzhJkiRJkiRJgHSMkyRJkiRJkgRIxzhJkiRJkiRJAPgNr3b/eaG15EoAAAAASUVORK5CYII=\n", "text/plain": [ "<Figure size 864x432 with 1 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "#show the missing values in a plot\n", "data_missing = (data.isnull().sum(axis=0)/data.shape[0]) * 100\n", "data_missing = data_missing.drop(data_missing[data_missing == 0].index).sort_values(ascending=False)\n", "plt.figure(figsize=(12, 6))\n", "plt.xticks(rotation=\"90\")\n", "sns.barplot(x=data_missing.index, y=data_missing)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "From the figure, we see that nearly 100% values of the feature/column 'PoolQC' are missing <br>\n", "We can simply delete these features (drop these columns from the table) of which >=50% values are missing" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Index(['PoolQC', 'MiscFeature', 'Alley', 'Fence'], dtype='object')" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "feature_drop = data_missing[data_missing >=50].index\n", "feature_drop" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "#drop the columns\n", "data=data.drop(columns=feature_drop)\n", "#drop Id\n", "data=data.drop(columns='Id')" ] }, { "cell_type": "code", "execution_count": 9, "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>MSSubClass</th>\n", " <th>MSZoning</th>\n", " <th>LotFrontage</th>\n", " <th>LotArea</th>\n", " <th>Street</th>\n", " <th>LotShape</th>\n", " <th>LandContour</th>\n", " <th>Utilities</th>\n", " <th>LotConfig</th>\n", " <th>LandSlope</th>\n", " <th>...</th>\n", " <th>3SsnPorch</th>\n", " <th>ScreenPorch</th>\n", " <th>PoolArea</th>\n", " <th>MiscVal</th>\n", " <th>MoSold</th>\n", " <th>YrSold</th>\n", " <th>SaleType</th>\n", " <th>SaleCondition</th>\n", " <th>SalePrice</th>\n", " <th>train</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <th>0</th>\n", " <td>60</td>\n", " <td>RL</td>\n", " <td>65.0</td>\n", " <td>8450</td>\n", " <td>Pave</td>\n", " <td>Reg</td>\n", " <td>Lvl</td>\n", " <td>AllPub</td>\n", " <td>Inside</td>\n", " <td>Gtl</td>\n", " <td>...</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>2</td>\n", " <td>2008</td>\n", " <td>WD</td>\n", " <td>Normal</td>\n", " <td>208500.0</td>\n", " <td>1</td>\n", " </tr>\n", " <tr>\n", " <th>1</th>\n", " <td>20</td>\n", " <td>RL</td>\n", " <td>80.0</td>\n", " <td>9600</td>\n", " <td>Pave</td>\n", " <td>Reg</td>\n", " <td>Lvl</td>\n", " <td>AllPub</td>\n", " <td>FR2</td>\n", " <td>Gtl</td>\n", " <td>...</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>5</td>\n", " <td>2007</td>\n", " <td>WD</td>\n", " <td>Normal</td>\n", " <td>181500.0</td>\n", " <td>1</td>\n", " </tr>\n", " <tr>\n", " <th>2</th>\n", " <td>60</td>\n", " <td>RL</td>\n", " <td>68.0</td>\n", " <td>11250</td>\n", " <td>Pave</td>\n", " <td>IR1</td>\n", " <td>Lvl</td>\n", " <td>AllPub</td>\n", " <td>Inside</td>\n", " <td>Gtl</td>\n", " <td>...</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>9</td>\n", " <td>2008</td>\n", " <td>WD</td>\n", " <td>Normal</td>\n", " <td>223500.0</td>\n", " <td>1</td>\n", " </tr>\n", " <tr>\n", " <th>3</th>\n", " <td>70</td>\n", " <td>RL</td>\n", " <td>60.0</td>\n", " <td>9550</td>\n", " <td>Pave</td>\n", " <td>IR1</td>\n", " <td>Lvl</td>\n", " <td>AllPub</td>\n", " <td>Corner</td>\n", " <td>Gtl</td>\n", " <td>...</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>2</td>\n", " <td>2006</td>\n", " <td>WD</td>\n", " <td>Abnorml</td>\n", " <td>140000.0</td>\n", " <td>1</td>\n", " </tr>\n", " <tr>\n", " <th>4</th>\n", " <td>60</td>\n", " <td>RL</td>\n", " <td>84.0</td>\n", " <td>14260</td>\n", " <td>Pave</td>\n", " <td>IR1</td>\n", " <td>Lvl</td>\n", " <td>AllPub</td>\n", " <td>FR2</td>\n", " <td>Gtl</td>\n", " <td>...</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>12</td>\n", " <td>2008</td>\n", " <td>WD</td>\n", " <td>Normal</td>\n", " <td>250000.0</td>\n", " <td>1</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "<p>5 rows × 77 columns</p>\n", "</div>" ], "text/plain": [ " MSSubClass MSZoning LotFrontage LotArea Street LotShape LandContour \\\n", "0 60 RL 65.0 8450 Pave Reg Lvl \n", "1 20 RL 80.0 9600 Pave Reg Lvl \n", "2 60 RL 68.0 11250 Pave IR1 Lvl \n", "3 70 RL 60.0 9550 Pave IR1 Lvl \n", "4 60 RL 84.0 14260 Pave IR1 Lvl \n", "\n", " Utilities LotConfig LandSlope ... 3SsnPorch ScreenPorch PoolArea MiscVal \\\n", "0 AllPub Inside Gtl ... 0 0 0 0 \n", "1 AllPub FR2 Gtl ... 0 0 0 0 \n", "2 AllPub Inside Gtl ... 0 0 0 0 \n", "3 AllPub Corner Gtl ... 0 0 0 0 \n", "4 AllPub FR2 Gtl ... 0 0 0 0 \n", "\n", " MoSold YrSold SaleType SaleCondition SalePrice train \n", "0 2 2008 WD Normal 208500.0 1 \n", "1 5 2007 WD Normal 181500.0 1 \n", "2 9 2008 WD Normal 223500.0 1 \n", "3 2 2006 WD Abnorml 140000.0 1 \n", "4 12 2008 WD Normal 250000.0 1 \n", "\n", "[5 rows x 77 columns]" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For those features with < 50% missing values, we can use impute methods. <br>\n", "Missing numerical values can be imputed with a constant value, or some statistics (mean, median or most frequent) of each column in which the missing values are located. <br>\n", "Missing categorical/non-numeric values can be imputed with the most frequent category, or a new category-'nothing' <br>\n", "sk-learn has `KNNImputer` method that you may try." ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "scrolled": false }, "outputs": [], "source": [ "numerical_column=[]\n", "categorical_column=[]\n", "for c in data.columns:\n", " v=data[c]\n", " v=v[~v.isnull()]\n", " if data[c].dtype == np.dtype('O'): # non-numeric values \n", " #data[c]=data[c].fillna(v.value_counts().index[0]) # the most frequent category\n", " data[c]=data[c].fillna('nothing') # a new category \n", " categorical_column.append(c)\n", " else: # numeric \n", " if c != 'train' and c != 'SalePrice':\n", " data[c]=data[c].fillna(v.median()) \n", " numerical_column.append(c) " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "check if there is any missing value" ] }, { "cell_type": "code", "execution_count": 11, "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>MSSubClass</th>\n", " <th>MSZoning</th>\n", " <th>LotFrontage</th>\n", " <th>LotArea</th>\n", " <th>Street</th>\n", " <th>LotShape</th>\n", " <th>LandContour</th>\n", " <th>Utilities</th>\n", " <th>LotConfig</th>\n", " <th>LandSlope</th>\n", " <th>...</th>\n", " <th>3SsnPorch</th>\n", " <th>ScreenPorch</th>\n", " <th>PoolArea</th>\n", " <th>MiscVal</th>\n", " <th>MoSold</th>\n", " <th>YrSold</th>\n", " <th>SaleType</th>\n", " <th>SaleCondition</th>\n", " <th>SalePrice</th>\n", " <th>train</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " </tbody>\n", "</table>\n", "<p>0 rows × 77 columns</p>\n", "</div>" ], "text/plain": [ "Empty DataFrame\n", "Columns: [MSSubClass, MSZoning, LotFrontage, LotArea, Street, LotShape, LandContour, Utilities, LotConfig, LandSlope, Neighborhood, Condition1, Condition2, BldgType, HouseStyle, OverallQual, OverallCond, YearBuilt, YearRemodAdd, RoofStyle, RoofMatl, Exterior1st, Exterior2nd, MasVnrType, MasVnrArea, ExterQual, ExterCond, Foundation, BsmtQual, BsmtCond, BsmtExposure, BsmtFinType1, BsmtFinSF1, BsmtFinType2, BsmtFinSF2, BsmtUnfSF, TotalBsmtSF, Heating, HeatingQC, CentralAir, Electrical, 1stFlrSF, 2ndFlrSF, LowQualFinSF, GrLivArea, BsmtFullBath, BsmtHalfBath, FullBath, HalfBath, BedroomAbvGr, KitchenAbvGr, KitchenQual, TotRmsAbvGrd, Functional, Fireplaces, FireplaceQu, GarageType, GarageYrBlt, GarageFinish, GarageCars, GarageArea, GarageQual, GarageCond, PavedDrive, WoodDeckSF, OpenPorchSF, EnclosedPorch, 3SsnPorch, ScreenPorch, PoolArea, MiscVal, MoSold, YrSold, SaleType, SaleCondition, SalePrice, train]\n", "Index: []\n", "\n", "[0 rows x 77 columns]" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data[data.isnull().any(axis=1)]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "convert categorical values to numerical values using one-hot encoding <br>\n", "note: there are other methods to encode categorical values" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(2919, 296)" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data=pd.get_dummies(data, columns=categorical_column)\n", "data.shape" ] }, { "cell_type": "code", "execution_count": 13, "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>MSSubClass</th>\n", " <th>LotFrontage</th>\n", " <th>LotArea</th>\n", " <th>OverallQual</th>\n", " <th>OverallCond</th>\n", " <th>YearBuilt</th>\n", " <th>YearRemodAdd</th>\n", " <th>MasVnrArea</th>\n", " <th>BsmtFinSF1</th>\n", " <th>BsmtFinSF2</th>\n", " <th>...</th>\n", " <th>SaleType_New</th>\n", " <th>SaleType_Oth</th>\n", " <th>SaleType_WD</th>\n", " <th>SaleType_nothing</th>\n", " <th>SaleCondition_Abnorml</th>\n", " <th>SaleCondition_AdjLand</th>\n", " <th>SaleCondition_Alloca</th>\n", " <th>SaleCondition_Family</th>\n", " <th>SaleCondition_Normal</th>\n", " <th>SaleCondition_Partial</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <th>0</th>\n", " <td>60</td>\n", " <td>65.0</td>\n", " <td>8450</td>\n", " <td>7</td>\n", " <td>5</td>\n", " <td>2003</td>\n", " <td>2003</td>\n", " <td>196.0</td>\n", " <td>706.0</td>\n", " <td>0.0</td>\n", " <td>...</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>1</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>1</td>\n", " <td>0</td>\n", " </tr>\n", " <tr>\n", " <th>1</th>\n", " <td>20</td>\n", " <td>80.0</td>\n", " <td>9600</td>\n", " <td>6</td>\n", " <td>8</td>\n", " <td>1976</td>\n", " <td>1976</td>\n", " <td>0.0</td>\n", " <td>978.0</td>\n", " <td>0.0</td>\n", " <td>...</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>1</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>1</td>\n", " <td>0</td>\n", " </tr>\n", " <tr>\n", " <th>2</th>\n", " <td>60</td>\n", " <td>68.0</td>\n", " <td>11250</td>\n", " <td>7</td>\n", " <td>5</td>\n", " <td>2001</td>\n", " <td>2002</td>\n", " <td>162.0</td>\n", " <td>486.0</td>\n", " <td>0.0</td>\n", " <td>...</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>1</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>1</td>\n", " <td>0</td>\n", " </tr>\n", " <tr>\n", " <th>3</th>\n", " <td>70</td>\n", " <td>60.0</td>\n", " <td>9550</td>\n", " <td>7</td>\n", " <td>5</td>\n", " <td>1915</td>\n", " <td>1970</td>\n", " <td>0.0</td>\n", " <td>216.0</td>\n", " <td>0.0</td>\n", " <td>...</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>1</td>\n", " <td>0</td>\n", " <td>1</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " </tr>\n", " <tr>\n", " <th>4</th>\n", " <td>60</td>\n", " <td>84.0</td>\n", " <td>14260</td>\n", " <td>8</td>\n", " <td>5</td>\n", " <td>2000</td>\n", " <td>2000</td>\n", " <td>350.0</td>\n", " <td>655.0</td>\n", " <td>0.0</td>\n", " <td>...</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>1</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>0</td>\n", " <td>1</td>\n", " <td>0</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "<p>5 rows × 296 columns</p>\n", "</div>" ], "text/plain": [ " MSSubClass LotFrontage LotArea OverallQual OverallCond YearBuilt \\\n", "0 60 65.0 8450 7 5 2003 \n", "1 20 80.0 9600 6 8 1976 \n", "2 60 68.0 11250 7 5 2001 \n", "3 70 60.0 9550 7 5 1915 \n", "4 60 84.0 14260 8 5 2000 \n", "\n", " YearRemodAdd MasVnrArea BsmtFinSF1 BsmtFinSF2 ... SaleType_New \\\n", "0 2003 196.0 706.0 0.0 ... 0 \n", "1 1976 0.0 978.0 0.0 ... 0 \n", "2 2002 162.0 486.0 0.0 ... 0 \n", "3 1970 0.0 216.0 0.0 ... 0 \n", "4 2000 350.0 655.0 0.0 ... 0 \n", "\n", " SaleType_Oth SaleType_WD SaleType_nothing SaleCondition_Abnorml \\\n", "0 0 1 0 0 \n", "1 0 1 0 0 \n", "2 0 1 0 0 \n", "3 0 1 0 1 \n", "4 0 1 0 0 \n", "\n", " SaleCondition_AdjLand SaleCondition_Alloca SaleCondition_Family \\\n", "0 0 0 0 \n", "1 0 0 0 \n", "2 0 0 0 \n", "3 0 0 0 \n", "4 0 0 0 \n", "\n", " SaleCondition_Normal SaleCondition_Partial \n", "0 1 0 \n", "1 1 0 \n", "2 1 0 \n", "3 0 0 \n", "4 1 0 \n", "\n", "[5 rows x 296 columns]" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#the table has many new columns\n", "data.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### get training data and test data from `data`" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "data_train = data[data['train']==1]\n", "X_train=data_train.drop(columns=['SalePrice', 'train']).values\n", "Y_train=data_train['SalePrice'].values" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "dtype('float64')" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "X_train.dtype" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(1460, 294)" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "X_train.shape" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "dtype('float64')" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Y_train.dtype" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [], "source": [ "data_test = data[data['train']==0]\n", "X_test=data_test.drop(columns=['SalePrice', 'train']).values\n", "Y_test=data_test['SalePrice'].values" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### show the histograms of prices in the training set and test set" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0.5, 1.0, 'histogram of SalePrice in training set')" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots()\n", "ax.hist(data_train.SalePrice.values, bins=100);\n", "ax.set_title('histogram of SalePrice in training set')" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0.5, 1.0, 'histogram of SalePrice in test set')" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots()\n", "ax.hist(data_test.SalePrice.values, bins=100);\n", "ax.set_title('histogram of SalePrice in test set')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Your work begins here" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### (1) LinearRegression model (Linear)" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [], "source": [ "#define a linear regression model using LinearRegression\n", "#train/fit the model on the training set\n", "#make predictions on the training set and the test set\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "show the training result" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "MSE=432903814.89901304, MAE=13380.819249134816, MAPE=0.07889927660259582\n" ] }, { "data": { "text/plain": [ "(0.0, 1000000.0, 0.0, 1000000.0)" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "#calculate and print MSE, MAE and MAPE using predictions on training set\n", "#then plot Y_train vs Y_train_pred (blue dots) and the 45-degree line (red)\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "show the test result" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "MSE=443564874.6173431, MAE=11916.27992821632, MAPE=0.07244159184619076\n" ] }, { "data": { "text/plain": [ "(0.0, 1000000.0, 0.0, 1000000.0)" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYsAAAESCAYAAAAMifkAAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nO3deXiU9bn/8fc9WVAQhYIbICqKC+BSgoBa92rF2tKqbVVOPa0LVbHnWI8WT1utxdalaou2uODya6W44E4VSrViXUMhVCCBgyAKpIgoBkSwZJn798d3kkyGSWYImcxk8nldV64wzzzz5M5zkbnnu91fc3dERERaEsl2ACIikvuULEREJCUlCxERSUnJQkREUlKyEBGRlJQsREQkpQ6bLMzsITNbZ2blaZ7/bTNbbGYVZvZIpuMTEckn1lHXWZjZ8cBnwMPuPiTFuQOBacDJ7l5lZnu4+7r2iFNEJB902JaFu78KfBJ/zMwOMLO/mFmZmb1mZofEnroEmOTuVbHXKlGIiGyHDpssmjEZ+KG7lwBXA3fHjh8EHGRmb5hZqZmdnrUIRUQ6oMJsB9BWzGwX4BjgCTOrP9wl9r0QGAicCPQDXjOzIe6+ob3jFBHpiPImWRBaSRvc/cgkz1UCpe5eA7xnZksJyWNuewYoItJR5U03lLt/SkgE3wKw4IjY088CJ8WO9yZ0S63ISqAiIh1QRpNFqumtsTf0u8xsuZktNLOh23HtR4G3gIPNrNLMLgLGABeZ2QKgAhgdO30WsN7MFgOzgWvcff2O/G4iIp1JRqfOppreamZnAD8EzgBGAHe6+4iMBSQiIq2S0ZZFsumtCUYTEom7eynQw8z2zmRMIiKy/bI9wN0XWB33uDJ27IPEE81sLDAWoFu3biWHHHJI4ikiIpIoGoUPPoC1aymDj91999ZcJtvJwpIcS9ov5u6TCesoGDZsmM+bNy+TcYmIdHyvvgoXXwxr18KFF2IPPbSytZfK9myoSmCfuMf9gDVZikVEJD98+imMGwcnnAA1NfDii/Dggzt0yWwni+nABbFZUSOBje6+TReUiIikaeZMGDIE7rkHrrwSysvhy1/e4ctmtBsqNr31RKC3mVUCPweKANz9XmAGYSbUcmAL8P1MxiMikrfWr4cf/QimTIFDD4U33oCjj26zy2c0Wbj7eSmed2BcJmMQEclr7vDEE3DFFVBVBdddBz/9KXTpkvq12yHbA9wiItJaa9bA5ZfDc89BSQm89BIcfnhGflS2xyxERGR7uYcB60GDYNYs+PWvobQ0Y4kC1LIQEelYVqyASy6Bl1+G44+HBx6AgQMz/mPVshAR6Qjq6mDiRDjsMJg7N8x2mj27XRIFqGUhIpL7Kirgootgzhw44wy4917YZ5/Ur2tDalmIiOSq6mq48Ub44hdh+XL405/g+efbPVGAWhYiIrlp7tzQmli0CM49F+68E/bYI2vhqGUhIpJLtmyBa66BkSPDQrvnnoNHH81qogC1LEREcscrr4SZTsuXh++33Qa77ZbtqAC1LEREsm/jRrj0UjjppFBS/G9/g8mTcyZRgJKFiEh2vfACDB4M998PV10VxihOPjnbUW1DyUJEJBs++gjGjIEzz4QePeDNN+GOO6Br12xHlpSShYhIe3IPA9aDBoUCgDfcAPPnw4gR2Y6sRRrgFhFpL5WVcNllYa3E8OGhvtOQIdmOKi1qWYiIZFo0GgasBw8Og9d33BG6nTpIogC1LEREMqt+Guwrr4TZTvffDwcckO2otptaFiIimVBXF1oQhx8exiQmTw6tig6YKEAtCxGRtldeDhdeGEp2fO1roUJs377ZjmqHqGUhItJWtm4Ns5uGDoX334fHHgvlOjp4ogC1LERE2sacOaHwX0VFWD8xcSL07p3tqNqMWhYiIjti8+aw8vroo0PZjuefD6XE8yhRgFoWIiKt9/LLYabTihWhttOtt8Kuu2Y7qoxQy0JEZHtt2BCSxCmnQCQSpsXec0/eJgpQshAR2T7Tp4fFdQ89FPadWLAATjgh21FlnJKFiEg61q0LO9aNHg29eoUB7V//OmcL/7U1JQsRkZa4w9SpofDfM8+EPbHnzYNhw7IdWbvSALeISHNWrw4D1zNmhG1OH3wwJI1OSC0LEZFE0WgYsB48OAxeT5wIr7/eaRMFqGUhItLUsmVw8cXw6qthttPkyTBgQLajyjq1LEREAGprw4D14YeHGU4PPggvvqhEEaOWhYjIggWhVEdZGXzjGzBpEvTpk+2ocopaFiLSeW3dCtddF2Y2rV4N06bB008rUSShloWIdE5vvRVaE0uWwAUXwG9+E9ZPSFJqWYhI5/LZZ3DllXDsseHfM2bAH/+oRJGCWhYi0nm8+CKMHRv2mhg3Dm6+Gbp3z3ZUHULGWxZmdrqZLTWz5WZ2bZLndzOzP5vZAjOrMLPvZzomEelkqqpCl9Npp0FxcZgW+/vfK1Fsh4wmCzMrACYBo4BBwHlmlriqZRyw2N2PAE4E7jCz4kzGJSKdyDPPhMV0f/wjXHttmPl03HHZjqrDyXTLYjiw3N1XuHs18BgwOuEcB7qbmQG7AJ8AtRmOS0Ty3Ycfwre/DWedBXvtBf/4R+h22mmnbEfWIWU6WfQFVsc9rowdi/d74FBgDbAI+G93jyZeyMzGmtk8M5v30UcfZSpeEeno3OHhh+HQQ8P+17/6VUgUQ4dmO7IOLdPJwpIc84THXwHeBvoARwK/N7NtdhBx98nuPszdh+2+++5tH6mIdHwrV8KoUfCf/xmSxYIF8JOfQFFRtiPr8DKdLCqBfeIe9yO0IOJ9H3jag+XAe8AhGY5LRPJJNBpWXQ8ZEgr+/e538NprcIjeStpKppPFXGCgme0fG7Q+F5iecM4q4BQAM9sTOBhYkeG4RCRfLF0adqq74go45hgoLw//jmgZWVvK6N1091rgCmAWsASY5u4VZnapmV0aO+1G4BgzWwT8DRjv7h9nMi4RyQM1NXDLLXDEEVBRAX/4A/zlL7DfftmOLC9lfFGeu88AZiQcuzfu32uA0zIdh4jkkX/+M6yb+Oc/4eyzw5qJvfbKdlR5Te00Eek4/v3vMGB91FGwZg08+WT4UqLIOJX7EJGO4Y03Qmti6VL43vfgjjvgC1/IdlSdhloWIpLbNm2CH/4wrLr+979h1iz4f/9PiaKdKVmISO6aNStMh500KSSM8vJQ30nanZKFiOSeTz4JXU2nnw5du4Y1E3feCbvsku3IOi0lCxHJLU89FQr//elP8NOfhhlPxx6b7ag6PQ1wi0hu+OCDsJju6afhi18MayaOPDLbUUmMWhYikl3uYcB60CB44YWw0O4f/1CiyDFqWYhI9rz/fti57sUXw2ynBx6Agw7KdlSShFoWItL+6urgrrvCTKe33gqznV55RYkih6llISLta8kSuPhiePPNMNvpvvugf/9sRyUpqGUhIu2jpiZsRHTkkfB//xc2KJoxQ4mig1DLQkQyr6wslOpYsCBsdXrXXbDnntmOSraDWhYikjmffw7XXgsjRsC6dfDMM/D440oUHZBaFiKSGa++GsYmli0LrYrbb4cePbIdlbSSWhYi0rY+/RTGjQu719XWwksvhSmxShQdmpKFiLSdmTPDdNh77oErr4RFi+CUU7IdlbQBdUOJyI5bvx5+9COYMiWsxH7zTRg5MttRSRtSy0JEWs8dpk2DQw+FRx+F666D+fOVKPKQWhYi0jpr1sDll8Nzz8GwYWFs4vDDsx2VZIhaFiKyfdzhwQdDd9OsWXDbbaFkhxJFXlPLQkTSt2IFXHIJvPxymO30wANw4IHZjkragVoWIpJaXR1MnAiHHQZz58K994aEoUTRaahlISItq6gIi+rmzIGvfjUkin79sh2VtDO1LEQkuepqmDAh7Fq3fDlMnQp//rMSRSelloWIbGvu3NCaWLQIzjsP7rwTdt8921FJFqllISKNtmyBa64J6yQ++QSmT4dHHlGiELUsRCTmlVfCTKfly8NWp7/+Ney2W7ajkhyhloVIZ7dxI1x6KZx0UlhD8fLLYfc6JQqJo2Qh0pm98AIMHgz33w//8z+wcGFIGiIJlCxEOqOPPoIxY+DMM6Fnz7AC+/bboWvXbEcmOUrJQqQzcQ8F/wYNgieegF/8Imx5Onx4tiOTHKcBbpHOorISLrsMnn8+JIcHHwx7T4ikocVkYWaLAG/ueXdX5TCRXBeNhhpO11wDNTXwm9/Af/0XFBRkOzLpQFK1LM6MfR8X+z4l9n0MsCWdH2BmpwN3AgXAA+5+S5JzTgQmAkXAx+5+QjrXFpEUli8P02FfeSUMXN9/PxxwQLajkg6oxWTh7isBzOxYdz827qlrzewNYEJLrzezAmAScCpQCcw1s+nuvjjunB7A3cDp7r7KzPZo3a8iIg3qC/9ddx0UFYUkcdFFYJbtyKSDSneAu5uZfan+gZkdA3RL43XDgeXuvsLdq4HHgNEJ55wPPO3uqwDcfV2aMYlIMuXlcPTRcPXVcOqpsHgxXHyxEoXskHSTxUXAJDN738zeI7QELkzjdX2B1XGPK2PH4h0E9DSzV8yszMwuSHYhMxtrZvPMbN5HH32UZtgincjWrXDDDTB0KLz/Pjz2GDz7LPRN/JMT2X5pzYZy9zLgCDPbFTB335jm9ZN9lEkcMC8ESoBTgJ2Bt8ys1N3fSYhhMjAZYNiwYc0Ouot0SnPmhG6migr4j/+A3/4WevfOdlSSR9JqWZjZnmb2IPC4u280s0FmdlEaL60E9ol73A9Yk+Scv7j7Znf/GHgVOCKduEQ6vc2b4aqrQrfTxo1hWuyUKUoU0ubS7Yb6AzAL6BN7/A5wZRqvmwsMNLP9zawYOBeYnnDOc8BxZlZoZl2BEcCSNOMS6bxefjnse/3b34baThUVYXMikQxIN1n0dvdpQBTA3WuBulQvip13BSHRLAGmuXuFmV1qZpfGzlkC/AVYCPyDML22fLt/E5HOYsOGMB32lFMgEgnTYu++G3bdNduRSR5LdwX3ZjPrRWy8wcxGAmmNW7j7DGBGwrF7Ex7fBtyWZiwindf06WEV9tq18OMfhwHtnXfOdlTSCaSbLK4idB8dEFtfsTtwTsaiEpGm1q0Lq64ffzx0PT33HAwblu2opBNJmSxiC+tOiH0dTJjhtNTdazIcm4i4h72v//u/4bPP4MYbYfz4sNBOpB2lHLNw9zpgtLvXunuFu5crUYi0g9WrQwnx734XDjoI/vlP+NnPlCgkK9LthnrDzH4PPA5srj/o7vMzEpVIZxaNhp3qxo9vLNtxxRUq/CdZlW6yOCb2Pb4WlAMnt204Ip3csmWhNMerr8KXvwyTJ8P++2c7KpG0V3Brn0WRTKqtDaXDf/5z2GkneOgh+N73VM9JckZaySI2bfbnwJcILYrXgQnuvj6DsYl0DgsWhFIdZWXwzW/CpEmw997ZjkqkiXQX5T0GfAScTZgy+xFh/EJEWmvr1lBCfNiwMJj9xBPw1FNKFJKT0h2z+IK73xj3+Jdm9o1MBCSSj8pWVlG6Yj0jB/SiZN+e8NZboTWxZAlccEHogurVK9thijQr3WQx28zOBabFHp8DvJCZkETyS9nKKsY8UEp1bZTigghTN5dScueNsM8+MHMmnH56tkMUSSndbqgfAI8AW2NfjwFXmdkmM/s0U8GJ5IPSFeupro0SdaiprqG0dAmMGxc2KVKikA4i3dlQ3Vt63swGu3tF24Qkkl9G7l5McbSWmigUeZSRP7kcvnZitsMS2S7pdkOlMgUY2kbXEskfzzxDyeWXM7XwC5T+x+WMvPAcSgbume2oRLZbut1QqWgyuEi8tWvhW9+Cs86Cvfai5LkpjLt5HBQXM2n2cspWVjU5vWxlVdLjIrmirVoW2uZUBELhvylT4MorYcsWuOkmuPpqKCpqOtBdGGHqxSMp2bdns8dFcklbtSxEZOVKGDUK/vM/4dBD4e234X//t6HwX5OB7toopSvWt3hcJJe0VbKobqPriHQ80WhYdT1kCLz+Ovzud/Daa3DIIU1OGzmgF8WFEQoMigojjBzQq8XjIrnE3FP3IJnZ39z9lFTH2suwYcN83rx52fjRIk0tXRoK/73+OnzlK6Fa7L77Nnv6NovzUhxP57Ui6TKzMndv1a5ZLY5ZmNlOQFegt5n1pHEge1egT2t+oEheqKmB22+HX/wCunaFP/whrMROUfiv/k2+vqup/nHJvj1bTAAa15BsSzXA/QPgSkJiKKMxWXwKTMpgXCI5p+GTfe16SsZfFjYjOucc+N3vKNvahdJX3k35qb+1b/rJxjWULKQ9tZgs3P1O4E4z+6G7/66dYhJJqb27ZMpWVjHm/lKqa+sorqlmas3OlDz1FJx1FmUrqzhv8ltU1zkFBjd+4zDOH9E/6XVa+6ZfP65RUxvVuIZkRbpTZ9eaWXd332RmPyMswPuldsqTbMhGl0zp7PlUV9cQjRRQXVjExHG3Mqpvf6pmL+ft1Ruorgtjf3UO1z1XzsF7dU8aU2vf9Ev27cnUi0dqzEKyJt1kcZ27P2FmXwK+AtwO3AOMyFhkIs1o1y6ZTZvgJz9h5DMvUXzuTVRHCohahNff38hr7y8iYmAJ4xTRqDcb04686aca1xDJpHSnztbFvn8VuMfdnwOKMxOSSMvabarprFlhOuykSZScfRpTLx7OsQN7E7HGVahRB3cnEpcvUsVUsm9Pxp10oN74pUNJt2XxLzO7D/gycKuZdUEL+iRLMt4l88kn8KMfwcMPh7USr78OxxxDCXDlzl2Z+/4nVNdEiQIRg+LCCNefOZjyNRsx4Kyh/ZQIJO+ku86iK3A6sMjdl5nZ3sBh7v7XTAeYjNZZSMY8+WQoH/7JJzB+PPzsZ2FP7DiPzFnFzPIPGLz3rnTfuUhjCNJhZGydRT1332Jm6wh7cC8DamPfRfLDBx/AFVfA00/D0KGhC+rII7c5rWxlFTdML6emzpmzYj2Pjj1aiUI6hbS6kszs58B44H9jh4qAP2UqKJH2Uvb+J0y6/XHKTvo6zJgBt94Kc+YkTRQAT82vpLrOcaC6znlqfmX7BiySJemOWXwT+CIwH8Dd15hZixsiieS6stLFjHn6HarZmeKv/ZSpo/en5EtHtPiaxPXZqs0vnUW6g9TVHgY3HMDMumUuJJG20eweEXV1cNddlI6/iWoiRCMF1BQWUVqT+r/1WUP7UVwYwQgD22cN7ZeZ4EVyTLoti2mx2VA9zOwS4ELggcyFJbJjml24t2QJXHQRvPUWI8/+HsXFhdTUeZPpri2tDi/ZtyePXqLFcdL5pDvAfbuZnUqoCXUwcL27v5jRyETSFP/mDmHR3r82fN504d6ydZT86W6YMAF22QWmTKFkzBimrtrQ5I0/ndXhWhwnnVFaycLMbnX38cCLSY6JtLv6BNGzazETnq+gujZKYUEE3KmNOoUFEQojRl3UKYrAyBv/B159Ab797VD47/OihsJ/4046sOG6Ktgnkly63VCnEmZDxRuV5JhIxsV/+o+YEXVveHOHMLBWVxfl3KF96FP2BiMfvoeSuirKHn6W0n6D6fnev5nwfFnS7U3/teFzCgsi1NWpYJ9IvFT7WVwGXA4MMLOFcU91B97IZGAizYn/9I87kYhhOAWxlkVd1CkyOOuOH1My5yW4+GLKrryOMY9VUL14KRELLQ6n6Tam591fSk1tlIIC49zh/bUSWyROqpbFI8BM4Gbg2rjjm9z9k/oHZtbT3asSXxx77nTgTqAAeMDdb2nmvKOAUuA77v5k+r+CdDaJlVuvP3MwVVuqQytg82ZKJz9Oz9kvUtp3ADz5V0rOPpXS2csbEwxOQcRwbxzYfnp+JdWxlkltnVP+r42a6SQSJ9V+FhuBjcB5Ka7zN0LZ8ibMrICwSdKpQCUw18ymu/viJOfdCsxKP3TprJLVhipbWUXpzDcZOfnXjFy3jjFjbqU6UkDx27VMHVbVYoIp2bfnNovrFlRuZMwDpdqRTiQm3TGLVJpbmzQcWO7uKwDM7DFgNLA44bwfAk8BR7VRPNLBJZu+mnis4fjC9xjzp4VUYxSe8iMO7bUT1RvrmgxSjzvpwIYE07NrcZNEAXD20H48OW91w74UoAFukXhtlSyaq0bYF1gd97iShD0wzKwvYYX4ybSQLMxsLDAWoH//5LuQSe7YkZ3sylZWNYwfFBVGePSSkQDbTGnFndLpf2fN316n+uATwsZEFLBgQ6ioHzEoiBhrNnzOI3NWUbWlusnsqfjB7ZJ9e3LD14fw+NxVVHzwKR51DXCLxGmrZNGcZC2OxMQyERjv7nWJm8g0eZH7ZGAyhKqzbRahtLlkaxWAtJNH/PhBdW2U+/7+Lkfs06PJlNanX3uHJxaupYZCCg46noKCgth4RKPD+u7GkrWbeGTOqob/dIWRprOn6lsOZSurmkzBPWf4PpytAW6RBqlmQ80ALnf391Ncp7l3+Upgn7jH/YA1CecMAx6LJYrewBlmVuvuz6b4mZKjEtcqPD2/MhTgS3Mb1MRPAi8t/pATD96jccwBZ930mVTvPwzMqCXCgb27sfyjzU1et7m6jpraaJPr1UXD4LbRtOUQH3NdXZS+PXZWohCJk6o21B+Av5rZT82sqIXzTmnm+FxgoJntb2bFwLnA9PgT3H1/d9/P3fcDniQkJyWKDixxJzuHhjfirTXRlJVah/TZrcnjKFC+ZiNTz9iHq1a/xtSHr2GPrkUQ1xIdsPsuFEaafmZZvu6zbRJPQcSYMHoIV512cJOk1W6774l0UKlmQ00zsxeA64F5ZjaF8Ldb//xvYt8/aeb1tWZ2BWGWUwHwkLtXmNmlsefvbZtfQ3JJ4mwloGHw2IEnyyqbdPEkjm+Ur9m4zTU//mcFJbdfSElhIdx+O0sPP42C6YupizrFhRF+cMIBnHjwHlz/XHnDGgoITV4zcG9MFOeP2HbMK+O774l0cOmMWdQAm4EuhMV40ZZPb8rdZwAzEo4lTRLu/r3tubbkrsT6Sd8atk/D2EF911RztZg+3rS16cXc6T3nNTj5ZLj3XsrqujHhgVLcncKIccPXBjf8vIP36s7T8yt5Yt7qsDgvyTTZdGMWkUapxixOB35D6Doa6u5b2iUqyUmtneFUtrIKBwoLjJpY6+KJeasZ3Gc3Hp+7in/XhM8fW2uiTPhzBRUNLQtvGMAYcuZJcMXZYNZkgZ3hVG2pbvhZ9W/4Zw3tp1aCSBtK1bL4KfAtd69oj2Akd6VTjTXV64zQLVS/y9zPnl3UZAaTExbDNTlgRsSgasiRDWMUiQvsko0vqJUg0rZSjVkc116BSG5rbTXW+NdFaBw/ALaZ6trAHXPHI4YBETN6di0GGls36XYtiUjbyPQ6C8kDZSurWLPh88aS33Gf5h+Zs4qZ5R8wasje2wwcJ76uIGLUNpshaMgiBTjfGdqHXXftyv2vraAu6twwvRwg6YI6Eck8JQtpUXw3UmFBhO/ELVZ7ZM4qfvLMIgBeW/YxQEPCiF+FHYkYQ/ruRnVtlCVrNzVcu8DglAO/QOn/reXTSONU2CH9enDTuSWMfXge9dU3quucx+eu0l4TIlmS7h7c0km1tFhtZvkHTc6Nf1y/CtsJC+EWVG5skigALunjnDjlTj6zgibHv3NUf8pWVvG3JR82Ob7nrjtpLYRIlqhlIS1qaTC5V7fiJuf26lbMpNnLGTmgV7PFwhq489Lbq3h3+Bg80viZ5bRBe3L+iP5Mmr28yZhGQcT4wQkH8IMTDtAsJ5EsULKQFjW3WK1sZRXPL2zaspi+YE1s8RvstetODTOfmmqcDrt89/7EV4opjCUECEmqS1GE6prQjTVh9JCGn60kIdL+lCwkpWTTUEtXrCfqTVNBfUugNgqVG/697YXcY+MS3qRUB4SUkZgQtKJaJHcoWXRiO1JGfOSAXhQWRBqqw7assTURCvgVUFsXbVIK4NRY91M8rZUQyR1KFp3Ujiyyq08wB/Tuts2g9TbqWxOxhsRuXYv48VcOAeC62KK8ooLG7icRyU1KFp1Uc4vsWmptlK2s4tzJb1FT5xREIJp2lTCnPlts3FLDhOcrmHrxSKZdeoy6mUQ6CCWLTirZLKfE1kb9KulNn9dQ8cGnfLxpKzWxhQ91zSQKAzx+LCNhbKK+kGB8RVoRyX1KFp1UsgHkSXEF+qprotuU+06lgCg3/vUeKvY5lGXDjmfelsKkJT2KCiP07Frcqm4wEckOJYtOLHEAOb61AWxXoohEo9w4axLnH747TPwJkxZWMe+vS7c5ryBiDS0WrcYW6Ti0glsa1Lc2vjO8P5glTRR7de/S5LG5U1hXyy//MZXzb/4vmDIFevVqSDyRxA133RsKAGo1tkjHoZaF8MicVTz0+gow48Jj9+fjTVupa6bg39q4jYkKams5d9FfGXxIP6quvY6yQ/tQEntu6dpN9OuxM+8m7ItdELGGbi+toxDpOMw93Y6G3DFs2DCfN29etsPIC/HFAOslX3mdwB3zKEf1KmLehtCdVFxgPDr2aJau3bTNNeuNGdGfX33zsDaJXUS2j5mVufuw1rxWLYtOKL6s+ONzV23zfPOJonEKLGa4FfCPqsZpUdV1zn1/f5eFlRuavcLgPru1Om4RyR4li07kkTmrmDR7Gf+KleJ4bdnH244pNKehBbptqY54Ly35sNlNjSLQZAtUEek4NMDdSdR3N/0roWZTS3sRBR63CtuaJIrElBGxba83fL+e7FQUBrKLizSQLdJRqWXRSSTuPZEWd5p0PSU+TUgQB+/ZneLCCEcP6MVDb7xHdWzhXnFhhPGjDgXQQLZIB6dk0UmMGrJ3w252qTUW/gstiea7ndxh2brPiLqz9MNN3PD1IZSv2YgBZ8V21AOVFRfp6JQscsiOVIFt6fVlK6uo2lLN8QN7M39VFQUFxsYttc1fyGl2XGLQ3t1ZunZTw3ankdj+2vVlPKq2VHOTZjuJ5B0lixzRmiqw8ckBSPr6+uv+uyZV1b/41kTyMwoixo3fCIngqfmVGGF204TnKxpqTPXs2rhbnloTIvlDySJHNFcFtjmJyeWsof2Svr7+uqkl35Qo3neO2idpt9LBe3WndMV6enYtZsLzFar3JJKHNBsqRzeTrmIAABAiSURBVGxv+YvE5GKEAeUIYGb07FrccN3CZufHxpoS9QPZLSSKnYoinD20X9LnSvbtybiTDkxa70lE8oNaFjlie8tf1CeX6tooZkb3LoUcP3B3XlryIbVR57rnylm1fjOfbq1tKCu+LYvb6jS5AoNzh/dvMlidKqb4sucikh9U7qODKltZxX1/f5eXFn9I2nsQ1UuRIOoN368n40cdul1dSTs6SC8imaNyHzksE2+e6Q9aJ0gzSdQbuGf37Y5Z+2aL5Ccliwxq7T7Xya4Tn3DSH7ROYNb0e+LTNK0L1fHanCKSKUoWGbS9M5ySKVtZxXmxfa+LYlVd68cGtrtlkcLoI/swY9EHDT+ruQFtEel8NBsqg9pig5+n5ldSXRcWvVXXORP+XAHA1ItHcuDu3dosViN0Oz069miu/srBPDr2aHUniUgDtSwyqC02+EnsMFpQuZGz73mT4gJrqMG0owzoEivypzEHEUkm48nCzE4H7gQKgAfc/ZaE58cA42MPPwMuc/cFmY6rvSS++W7vgPdZQ/vx2NzV2+xctyOJon5sosDgkuMG0H3nIs1eEpEWZTRZmFkBMAk4FagE5prZdHdfHHfae8AJ7l5lZqOAycCITMaVSS0lg3QGvMtWVvH0/Eoc2LVLIc8vXNPsFqfbq/cuxdz33TBrTtNbRWR7ZLplMRxY7u4rAMzsMWA00JAs3P3NuPNLgQ47qpoqGaQa8C5bWcV595e2bqZTCgURuO+7w1QFtgVaIyLSvEwni77A6rjHlbTcargImJnsCTMbC4wF6N+/f1vF16ZSJYNUK5xbPSW2BRGDLx+6Jz844QC9AbagraY5i+SrTCeLZBP6k/apmNlJhGTxpWTPu/tkQhcVw4YNy8klAKmSQXMD3vWfaHt2LU6629yO+OU3DuP8EbmZXHNJW0xzFslnmU4WlcA+cY/7AWsSTzKzw4EHgFHu3mGrz6Uz+6l+wLtsZRWTZi+nZ9dibvhzRazGU9xW10k1v2tdIgN+cPwAJYo0qa6VSMsyWhvKzAqBd4BTgH8Bc4Hz3b0i7pz+wMvABQnjF83q6LWhHpmziuueXUQbzXzdxvkj+nN2GoX/pCmNWUi+y9naUO5ea2ZXALMIU2cfcvcKM7s09vy9wPVAL+BuC2Uoalv7y+S6+plOj85Ztf3F/1I4cI9d2L93Ny7V2ESraY2JSPNUdbadPDJnFdc/V05tWw5IxJw2aE8mX5CX+VVE2lDOtiwkuGXGEu59dUVGrl1UYPzghAMycm0RkXpKFmlqbX/2I3NWZSxRnDZIU2JFpH0oWaQh3Tn4iQmlbGUVk199t83jiZimxIpI+1KySEM6c/ATE8r1Zw7muucWUdf2i7EZe5ymxIpI+1KJ8jSkU2r8qfmVbK1pTCi/eXFpRhJFBOi+c1HbX1hEpAVqWaQh2WK7+C4ngCfLKpssTf/4s+o2jyMCFBdpwZiItD8lizTFz8FP7HI6e2g/auOaEZlYbPeNI/swcM/uWjAmIlmhZNEKiWMYDhQWRNq8CGDfnjvTu1sx3zmqv8YoRCSrlCxaIbGO0K5dCts0UUQMigsj3HXuF9WKEJGcoGSRpsRpsfVjGJs+r2mzdRQFBjd+4zCqtlSru0lEcoqSRRrixygKCyKcU9KPs4f2y0ii6KjdTSrCJ5LflCzSED9GUV0b5dE5q5g2dxVt1fN04B67cOvZh3fYN1ltHCSS/7TOIg31YxT1O0k4tFmiADp0ooDkixZFJL8oWaShfozi/BH9k9+wHajce9M3D+vQiQLSW7QoIh2buqHSVLJvT16sWJt8HwpLb/c6gC6FEXp378KgvXfNm70n0tkhUEQ6NiWLZtRvVOTA2UP7sXTtpjYZzD6npB+/+uZhOx5gjtHGQSL5TckiibKVVZx3f2nD2olp81ZT10bLsgf32a1NriMi0p40ZpFE6Yr11MSNYNfWeWPdpx0YnzCgakvb14wSEck0JYskRg7oRaTJnfHGJLEd4xOJCiKmwV8R6ZDUDRWnfpxi2YebmpYXb2VjImLhKxqFSMSYMHqI+vVFpENSsohJHKcIGSLWimhFa6IgYtw4eggH79Vds4REpMNTsohJHKcAC11Prex28qhTtaVas4REJC9ozCJmZJ9uFHk0JAh3IP1EEUlyWkTjEyKSRzpNsihbWcWk2cspW1m17ZOzZ1Py1eO4sPSp0PFkRkMXVAsMKIwYY48bQHFh460sMDQ+ISJ5pVN0QzVb6G7jRvjxj2HyZMqOOoXJR38r7bHsxJ3rTh28V5NFfEoUIpJPOkWySKwaW7piPSULX4dLL4W1a+Hqq7lv0DlEl36c1vUM6NalkHEnHdhwLNXYhEp4i0hH1im6oXp2LSYaazJEHXo+8kf4+tehVy8oLYXbbuPDzTVpX8+BJ+atTt6llUR9y+aOvy5lzAOlab9ORCRXdIpkUb5mY8O/I9E6qhYvgwkTYN48OOooAL5z1PZtOlQb9bRLcauEt4h0dHmfLMpWVvHkvNUNs5wi7oz81TVw3XVQXNxw3vkj+jN8v+TdQ8mGuiOW/mwnlfAWkY4uv8csolFKH5tJdc0uECkAHC8qgv0HbHNq2coqenQtxmi6YNsIC+yi7kS98fH2zHZSCW8R6ejyN1ksWwaXXMIm3w9GnhM7aNTFuo/i37ATV28bsdmzDsVFEa4/czBVW6rp2bWYqi3VrXrD1+I8EenI8i9Z1NbCxImhm6lLFyqu+i/Y0tiRFDG26QbadvU2nDu8P3177LxDCUJEJF/kV7JYuBAuuigMXI8eDXffzajVtbz2zKKGU8YeN2CbN/2RA3pRVBhpaFkUFRhnD+0HkHx9hohIJ5MfyWLrVrjppvD1hS/AtGlwzjlgxvl9wikzyz9g1JC9OX/EtrOeSvbtyaOXjGyyqA5g4kvvsLUmitM4i0nJQkQ6o46fLEpLQ2ti8WL47nfht78N6yfinD+if0P117KVVUnf8OvHFOrLlD8xbzW10bDpUQTNYhKRzi3jycLMTgfuBAqAB9z9loTnLfb8GcAW4HvuPj/lhTdvDuMSEydCv34wYwaMGpX01GbLfTRzXn1rAsIYx7EH9ubKLx+kVoWIdFoZXWdhZgXAJGAUMAg4z8wGJZw2ChgY+xoL3JPywps2wWGHhVbEZZdBeXmziQLSXxRXf159ojCguDCiRCEinV6mWxbDgeXuvgLAzB4DRgOL484ZDTzs7g6UmlkPM9vb3T9o9qrvvAMDB8Lf/w7HH58yiPpFcTW10Ra7k+LPKyiIcE5JPxUFFBEh88miL7A67nElMCKNc/oCTZKFmY0ltDwAttqyZeWccELagVjxzt0ixV27R6u3bBr2y883p3PezdWfb7457Z+QNb2B9Cog5j/di0a6F410Lxod3NoXZjpZJKuUkVgFPJ1zcPfJwGQAM5vn7sN2PLyOT/eike5FI92LRroXjcxsXmtfm+naUJXAPnGP+wFrWnGOiIhkUaaTxVxgoJntb2bFwLnA9IRzpgMXWDAS2NjieIWIiLS7jHZDuXutmV0BzCJMnX3I3SvM7NLY8/cCMwjTZpcTps5+P41LT85QyB2R7kUj3YtGuheNdC8atfpeWJiEJCIi0ry8389CRER2nJKFiIiklNPJwsxON7OlZrbczK5N8ryZ2V2x5xea2dBsxNke0rgXY2L3YKGZvWlmR2QjzvaQ6l7EnXeUmdWZ2TnNndPRpXMvzOxEM3vbzCrM7O/tHWN7SeNvZDcz+7OZLYjdi3TGRzscM3vIzNaZWXkzz7fufdPdc/KLMCD+LjAAKAYWAIMSzjkDmElYqzESmJPtuLN4L44Besb+Paoz34u4814mTKA4J9txZ/H/RQ9CxYT+scd7ZDvuLN6LnwC3xv69O/AJUJzt2DNwL44HhgLlzTzfqvfNXG5ZNJQKcfdqoL5USLyGUiHuXgr0MLO92zvQdpDyXrj7m+5eFXtYSlivko/S+X8B8EPgKWBdewbXztK5F+cDT7v7KgB3z9f7kc69cKB7rHjpLoRkUdu+YWaeu79K+N2a06r3zVxOFs2VAdnec/LB9v6eFxE+OeSjlPfCzPoC3wTubce4siGd/xcHAT3N7BUzKzOzC9otuvaVzr34PXAoYdHvIuC/3T1K59Oq981c3s+izUqF5IG0f08zO4mQLL6U0YiyJ517MREY7+514UNk3krnXhQCJcApwM7AW2ZW6u7vZDq4dpbOvfgK8DZwMnAA8KKZvebun2Y6uBzTqvfNXE4WKhXSKK3f08wOBx4ARrl78jrsHV8692IY8FgsUfQGzjCzWnd/tn1CbDfp/o187O6bgc1m9ipwBJBvySKde/F94BYPHffLzew94BDgH+0TYs5o1ftmLndDqVRIo5T3wsz6A08D383DT43xUt4Ld9/f3fdz9/2AJ4HL8zBRQHp/I88Bx5lZoZl1JVR9XtLOcbaHdO7FKkILCzPbk1CBdUW7RpkbWvW+mbMtC89cqZAOJ817cT3QC7g79om61vOw0maa96JTSOdeuPsSM/sLsBCIEnarTDqlsiNL8//FjcAfzGwRoStmvLvnXelyM3sUOBHobWaVwM+BItix902V+xARkZRyuRtKRERyhJKFiIikpGQhIiIpKVmIiEhKShYiIjkuVXHAJOd/28wWxwomPtImMWg2lIhIbjOz44HPCDWdhqQ4dyAwDTjZ3avMbI+2qAmmloVIgthipdfNbFTcsW/H1iskntvDzC7fgZ91ZWyxnEizkhUHNLMDzOwvsZpfr5nZIbGnLgEm1RcWbavikUoWIgli5SAuBX5jZjuZWTfgV8C4JKf3AFqdLIArASULaY3JwA/dvQS4Grg7dvwg4CAze8PMSs3s9Lb4YTm7glskm9y93Mz+DIwHuhGa/+8mOfUW4AAzext40d2vMbNrgG8DXYBn3P3nsYQzjVCHp4CwmnhPoA8w28w+dveTMv+bST4ws10Ie9g8EVcss0vseyEwkLCKux/wmpkNcfcNO/IzlSxEmvcLYD5QTShOmMy1wBB3PxLAzE4j/KEOJ5SUmB7rb94dWOPuX42dt5u7bzSzq4CT8rHshGRUBNhQ//8uQSVQ6u41wHtmtpTwf3Lujv5AEUkiVqn1cWCKu29N82Wnxb7+SUg0hxD+UBcBXzazW83sOHffmImYpXOIlVV/z8y+BQ3jbPVbKT8LnBQ73pvQLbXDBROVLERaFo19pcuAm939yNjXge7+YKwScAkhadxsZtdnIljJT7HigG8BB5tZpZldBIwBLjKzBUAFjTsDzgLWm9liYDZwTVtsWaBuKJEdswnoHvd4FnCjmU11989iu/bVEP7WPnH3P5nZZ8D3El6vbihplruf18xT2wxexyZoXBX7ajNKFiI7wN3Xx2adlAMzYwPchxJ2pIMwN/4/gAOB28wsSkgel8UuMRmYaWYfaIBbcpkW5YmISEoasxARkZTUDSWSBjPrBfwtyVOn5PF+5yIN1A0lIiIpqRtKRERSUrIQEZGUlCxERCQlJQsREUnp/wO1Dsq9Xw99QgAAAABJRU5ErkJggg==\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "#calculate and print MSE, MAE and MAPE using predictions on test set\n", "#then plot Y_test vs Y_test_pred (blue dots) and the 45-degree line (red)\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### (2) nonlinear model: KNeighborsRegressor (KNN)" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [], "source": [ "#define a KNN model using KNeighborsRegressor\n", "#set n_neighbors=5\n", "#train/fit the model on the training set\n", "#make predictions on the training set and the test set\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "show the training result" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "MSE=1354710184.3804932, MAE=23249.926301369866, MAPE=0.1364011754648816\n" ] }, { "data": { "text/plain": [ "(0.0, 1000000.0, 0.0, 1000000.0)" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "#calculate and print MSE, MAE and MAPE using predictions on training set\n", "#then plot Y_train vs Y_train_pred (blue dots) and the 45-degree line (red)\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "show the test result" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "MSE=1918276961.5553465, MAE=25973.916404203963, MAPE=0.15209840378677697\n" ] }, { "data": { "text/plain": [ "(0.0, 1000000.0, 0.0, 1000000.0)" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "#calculate and print MSE, MAE and MAPE using predictions on test set\n", "#then plot Y_test vs Y_test_pred (blue dots) and the 45-degree line (red)\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### (3) nonlinear model: RandomForestRegressor (RF)" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [], "source": [ "#define a random forest model using RandomForestRegressor\n", "#set n_estimators=100, max_depth=20, random_state=0\n", "#train/fit the model on the training set\n", "#make predictions on the training set and the test set\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "show the training result" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "MSE=123007238.12766577, MAE=6576.597177611581, MAPE=0.03808244940576383\n" ] }, { "data": { "text/plain": [ "(0.0, 1000000.0, 0.0, 1000000.0)" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "#calculate and print MSE, MAE and MAPE using predictions on training set\n", "#then plot Y_train vs Y_train_pred (blue dots) and the 45-degree line (red)\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "show the test result" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "MSE=600643027.7173524, MAE=10581.38178894092, MAPE=0.05956198577838548\n" ] }, { "data": { "text/plain": [ "(0.0, 1000000.0, 0.0, 1000000.0)" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 432x288 with 1 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "#calculate and print MSE, MAE and MAPE using predictions on test set\n", "#then plot Y_test vs Y_test_pred (blue dots) and the 45-degree line (red)\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### make a table to show the performance of the three models on the test set\n", "table is pandas DataFrame" ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "scrolled": true }, "outputs": [], "source": [ "#make a pandas dataframe using MSE, MAE, MAPE values on the test set\n", "#column names are 'MSE', 'MAE', 'MAPE'\n", "#row names are 'Linear', 'KNN', 'RF'\n" ] }, { "cell_type": "code", "execution_count": 31, "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>MSE</th>\n", " <th>MAE</th>\n", " <th>MAPE</th>\n", " </tr>\n", " </thead>\n", " <tbody>\n", " <tr>\n", " <th>Linear</th>\n", " <td>4.435649e+08</td>\n", " <td>11916.279928</td>\n", " <td>0.072442</td>\n", " </tr>\n", " <tr>\n", " <th>KNN</th>\n", " <td>1.918277e+09</td>\n", " <td>25973.916404</td>\n", " <td>0.152098</td>\n", " </tr>\n", " <tr>\n", " <th>RF</th>\n", " <td>6.006430e+08</td>\n", " <td>10581.381789</td>\n", " <td>0.059562</td>\n", " </tr>\n", " </tbody>\n", "</table>\n", "</div>" ], "text/plain": [ " MSE MAE MAPE\n", "Linear 4.435649e+08 11916.279928 0.072442\n", "KNN 1.918277e+09 25973.916404 0.152098\n", "RF 6.006430e+08 10581.381789 0.059562" ] }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" } ], "source": [ "table" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "from the table, we can see that random forest (RF) is the best (MAPE is the smallest) <br>" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Extra 20 points: (10 for KNeighborsRegressor and 10 for RandomForestRegressor)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To futher improve the performance, you may need to find the optimal hyper parameters of each model using training-validation. Once you have the best models, evalaute them on the test set" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.3" } }, "nbformat": 4, "nbformat_minor": 2 }