{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Session 1 - Your \"first\" DataScience problem"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# some imports\n",
"\n",
"from IPython.core.display import display, HTML\n",
"display(HTML(\"\"))\n",
"\n",
"# Python ≥3.5 is required\n",
"import sys\n",
"assert sys.version_info >= (3, 5)\n",
" \n",
"# Scikit-Learn ≥0.20 is required\n",
"import sklearn\n",
"assert sklearn.__version__ >= \"0.20\"\n",
"\n",
"# Common imports\n",
"import numpy as np\n",
"import os\n",
"\n",
"# to make this notebook's output stable across runs\n",
"np.random.seed(42)\n",
"\n",
"# To plot pretty figures\n",
"%matplotlib inline\n",
"import matplotlib as mpl\n",
"import matplotlib.pyplot as plt\n",
"mpl.rc('axes', labelsize=14)\n",
"mpl.rc('xtick', labelsize=12)\n",
"mpl.rc('ytick', labelsize=12)\n",
"plt.rc('font', size=12) \n",
"plt.rc('figure', figsize = (12, 5))\n",
"\n",
"# Settings for the visualizations\n",
"import seaborn as sns\n",
"sns.set_style(\"whitegrid\")\n",
"sns.set_context(\"notebook\", font_scale=1, rc={\"lines.linewidth\": 2,'font.family': [u'times']})\n",
"\n",
"import pandas as pd\n",
"pd.set_option('display.max_rows', 25)\n",
"pd.set_option('display.max_columns', 500)\n",
"pd.set_option('display.max_colwidth', 50)\n",
"\n",
"# Ignore useless warnings (see SciPy issue #5998)\n",
"import warnings\n",
"warnings.filterwarnings(action=\"ignore\", message=\"^internal gelsd\")\n",
"\n",
"# create output folder\n",
"if not os.path.exists('output'):\n",
" os.makedirs('output')\n",
"if not os.path.exists('output/session1'):\n",
" os.makedirs('output/session1')"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"## load data\n",
"train_set = pd.read_csv('dataset/housing-snapshot/train_set.csv',index_col=0) \n",
"test_set = pd.read_csv('dataset/housing-snapshot/test_set.csv',index_col=0) \n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## The problem\n",
"The machine learning is to predict the house price, but before that it is imporntat to study the dataset and its features"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"There is 5432 samples\n",
"Each sample has 21 features\n"
]
}
],
"source": [
"# print the dataset size\n",
"print(\"There is\", train_set.shape[0], \"samples\")\n",
"print(\"Each sample has\", train_set.shape[1], \"features\")"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Suburb | \n",
" Address | \n",
" Rooms | \n",
" Type | \n",
" Price | \n",
" Method | \n",
" SellerG | \n",
" Date | \n",
" Distance | \n",
" Postcode | \n",
" Bedroom2 | \n",
" Bathroom | \n",
" Car | \n",
" Landsize | \n",
" BuildingArea | \n",
" YearBuilt | \n",
" CouncilArea | \n",
" Lattitude | \n",
" Longtitude | \n",
" Regionname | \n",
" Propertycount | \n",
"
\n",
" \n",
" index | \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",
" 0 | \n",
" Aberfeldie | \n",
" 241 Buckley St | \n",
" 4 | \n",
" h | \n",
" 1380000.0 | \n",
" VB | \n",
" Nelson | \n",
" 12/08/2017 | \n",
" 7.5 | \n",
" 3040.0 | \n",
" 4.0 | \n",
" 2.0 | \n",
" 2.0 | \n",
" 766.0 | \n",
" NaN | \n",
" NaN | \n",
" Moonee Valley | \n",
" -37.75595 | \n",
" 144.90551 | \n",
" Western Metropolitan | \n",
" 1543.0 | \n",
"
\n",
" \n",
" 1 | \n",
" Northcote | \n",
" 67 Charles St | \n",
" 2 | \n",
" h | \n",
" 1100000.0 | \n",
" SP | \n",
" Jellis | \n",
" 20/05/2017 | \n",
" 5.5 | \n",
" 3070.0 | \n",
" 2.0 | \n",
" 1.0 | \n",
" 1.0 | \n",
" 189.0 | \n",
" NaN | \n",
" NaN | \n",
" Darebin | \n",
" -37.77670 | \n",
" 144.99240 | \n",
" Northern Metropolitan | \n",
" 11364.0 | \n",
"
\n",
" \n",
" 2 | \n",
" Balwyn North | \n",
" 42 Maud St | \n",
" 3 | \n",
" h | \n",
" 1480000.0 | \n",
" PI | \n",
" Jellis | \n",
" 15/10/2016 | \n",
" 9.2 | \n",
" 3104.0 | \n",
" 3.0 | \n",
" 1.0 | \n",
" 4.0 | \n",
" 605.0 | \n",
" 116.0 | \n",
" 1950.0 | \n",
" Boroondara | \n",
" -37.79510 | \n",
" 145.06960 | \n",
" Southern Metropolitan | \n",
" 7809.0 | \n",
"
\n",
" \n",
" 3 | \n",
" Brunswick | \n",
" 13 Percy St | \n",
" 3 | \n",
" h | \n",
" 1055000.0 | \n",
" S | \n",
" Nelson | \n",
" 7/05/2016 | \n",
" 5.2 | \n",
" 3056.0 | \n",
" 3.0 | \n",
" 1.0 | \n",
" 1.0 | \n",
" 324.0 | \n",
" NaN | \n",
" 1930.0 | \n",
" Moreland | \n",
" -37.76530 | \n",
" 144.95860 | \n",
" Northern Metropolitan | \n",
" 11918.0 | \n",
"
\n",
" \n",
" 4 | \n",
" Templestowe Lower | \n",
" 253 Thompsons Rd | \n",
" 4 | \n",
" h | \n",
" 1000000.0 | \n",
" VB | \n",
" hockingstuart | \n",
" 13/08/2016 | \n",
" 13.8 | \n",
" 3107.0 | \n",
" 4.0 | \n",
" 3.0 | \n",
" 2.0 | \n",
" 728.0 | \n",
" 164.0 | \n",
" 1970.0 | \n",
" Manningham | \n",
" -37.76800 | \n",
" 145.10270 | \n",
" Eastern Metropolitan | \n",
" 5420.0 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Suburb Address Rooms Type Price Method \\\n",
"index \n",
"0 Aberfeldie 241 Buckley St 4 h 1380000.0 VB \n",
"1 Northcote 67 Charles St 2 h 1100000.0 SP \n",
"2 Balwyn North 42 Maud St 3 h 1480000.0 PI \n",
"3 Brunswick 13 Percy St 3 h 1055000.0 S \n",
"4 Templestowe Lower 253 Thompsons Rd 4 h 1000000.0 VB \n",
"\n",
" SellerG Date Distance Postcode Bedroom2 Bathroom Car \\\n",
"index \n",
"0 Nelson 12/08/2017 7.5 3040.0 4.0 2.0 2.0 \n",
"1 Jellis 20/05/2017 5.5 3070.0 2.0 1.0 1.0 \n",
"2 Jellis 15/10/2016 9.2 3104.0 3.0 1.0 4.0 \n",
"3 Nelson 7/05/2016 5.2 3056.0 3.0 1.0 1.0 \n",
"4 hockingstuart 13/08/2016 13.8 3107.0 4.0 3.0 2.0 \n",
"\n",
" Landsize BuildingArea YearBuilt CouncilArea Lattitude \\\n",
"index \n",
"0 766.0 NaN NaN Moonee Valley -37.75595 \n",
"1 189.0 NaN NaN Darebin -37.77670 \n",
"2 605.0 116.0 1950.0 Boroondara -37.79510 \n",
"3 324.0 NaN 1930.0 Moreland -37.76530 \n",
"4 728.0 164.0 1970.0 Manningham -37.76800 \n",
"\n",
" Longtitude Regionname Propertycount \n",
"index \n",
"0 144.90551 Western Metropolitan 1543.0 \n",
"1 144.99240 Northern Metropolitan 11364.0 \n",
"2 145.06960 Southern Metropolitan 7809.0 \n",
"3 144.95860 Northern Metropolitan 11918.0 \n",
"4 145.10270 Eastern Metropolitan 5420.0 "
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# print the top elements from the dataset\n",
"train_set.head()"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"# As it can be seen the database contains several features, some of them numerical and some of them are categorical.\n",
"# It is important to check each of the to understand it."
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Suburb object\n",
"Address object\n",
"Rooms int64\n",
"Type object\n",
"Price float64\n",
"Method object\n",
"SellerG object\n",
"Date object\n",
"Distance float64\n",
"Postcode float64\n",
"Bedroom2 float64\n",
"Bathroom float64\n",
"Car float64\n",
"Landsize float64\n",
"BuildingArea float64\n",
"YearBuilt float64\n",
"CouncilArea object\n",
"Lattitude float64\n",
"Longtitude float64\n",
"Regionname object\n",
"Propertycount float64\n",
"dtype: object"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# we can see the type of each features as follows\n",
"train_set.dtypes"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Suburb | \n",
" Address | \n",
" Type | \n",
" Method | \n",
" SellerG | \n",
" Date | \n",
" CouncilArea | \n",
" Regionname | \n",
"
\n",
" \n",
" index | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" Aberfeldie | \n",
" 241 Buckley St | \n",
" h | \n",
" VB | \n",
" Nelson | \n",
" 12/08/2017 | \n",
" Moonee Valley | \n",
" Western Metropolitan | \n",
"
\n",
" \n",
" 1 | \n",
" Northcote | \n",
" 67 Charles St | \n",
" h | \n",
" SP | \n",
" Jellis | \n",
" 20/05/2017 | \n",
" Darebin | \n",
" Northern Metropolitan | \n",
"
\n",
" \n",
" 2 | \n",
" Balwyn North | \n",
" 42 Maud St | \n",
" h | \n",
" PI | \n",
" Jellis | \n",
" 15/10/2016 | \n",
" Boroondara | \n",
" Southern Metropolitan | \n",
"
\n",
" \n",
" 3 | \n",
" Brunswick | \n",
" 13 Percy St | \n",
" h | \n",
" S | \n",
" Nelson | \n",
" 7/05/2016 | \n",
" Moreland | \n",
" Northern Metropolitan | \n",
"
\n",
" \n",
" 4 | \n",
" Templestowe Lower | \n",
" 253 Thompsons Rd | \n",
" h | \n",
" VB | \n",
" hockingstuart | \n",
" 13/08/2016 | \n",
" Manningham | \n",
" Eastern Metropolitan | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Suburb Address Type Method SellerG \\\n",
"index \n",
"0 Aberfeldie 241 Buckley St h VB Nelson \n",
"1 Northcote 67 Charles St h SP Jellis \n",
"2 Balwyn North 42 Maud St h PI Jellis \n",
"3 Brunswick 13 Percy St h S Nelson \n",
"4 Templestowe Lower 253 Thompsons Rd h VB hockingstuart \n",
"\n",
" Date CouncilArea Regionname \n",
"index \n",
"0 12/08/2017 Moonee Valley Western Metropolitan \n",
"1 20/05/2017 Darebin Northern Metropolitan \n",
"2 15/10/2016 Boroondara Southern Metropolitan \n",
"3 7/05/2016 Moreland Northern Metropolitan \n",
"4 13/08/2016 Manningham Eastern Metropolitan "
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# print those categorical features\n",
"train_set.select_dtypes(include=['object']).head()"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"h 3765\n",
"u 1191\n",
"t 476\n",
"Name: Type, dtype: int64"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# We can check how many different type there is in the dataset using the folliwing line\n",
"train_set[\"Type\"].value_counts()"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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1bNnz9i7d2/U1dXF6dOnY9u2bfGlL33pQw8KAACdpc3PJD/66KMxbty4+PWvfx2HDx8+5x989dVXx+jRo6OysjJuu+22uO6669o1KAAAdJY27yQvW7Ys9uzZE6tWrYrp06fHZz/72fja174WI0eObPOH//SnP+2QIQEAoDO1eSc5IuKKK66I22+/PWpqauKVV16JO+64I6qqqmL79u35ng8AADpdq3eS6+vro7y8PHbv3h2rVq2KtWvXxuDBg2P+/PkxZsyYeOmll+J73/te/OlPf+rMeQEAIO9avZN80003RUTE9OnTo7GxMR577LF48MEHY9y4cdGlS5e49tprY9iwYZ02KAAAdJZW7yS/8/VtmzZtiq5du571NXfffXd+pgIAgAJqNZLr6uri73//+3u+6/jdhgwZkrehAACgkFqN5L1798att9561kjO5XLx3HPP5XUwAAAolFYj+dOf/nQ8+eSTnTgKAAAUh3P6CjgAALiYtBrJQ4cO7cw5AACgaLQayQsWLOjMOQAAoGj4uAUAACREMgAAJEQyAAAkRDIAACREMgAAJEQyAAAkRDIAACREMgAAJEQyAAAkRDIAACREMgAAJEQyAAAkRDIAACREMgAAJEQyAAAkRDIAACREMgAAJEQyAAAkRDIAACREMgAAJEQyAAAkSgs9QGuer6qKioqKQo8BRetMU1NcUlJS6DEA4ILkTvJFYtu2bYUe4YJSDPsUyACQPyIZAAASIhkAABIiGQAAEiIZAAASIhkAABIiGQAAEiIZAAASIhkAABIiGQAAEiIZAAASIhkAABIiGQAAEiIZAAASIhkAABIiGQAAEiIZAAASIvkCdKapqdAjAACc10oLPUBrhq1bF4caGws9xnnpwIwZhR4BAOC85k4yAAAkRDIAACREMgAAJEQyAAAkRDIAACREMgAAJEQyAAAkRDIAACREMgAAJEQyAAAkRDIAACREMgAAJEQyAAAkRDIAACREMgAAJEQyAAAkRDIAACREMgAAJEQyAAAkRDIAACREMgAAJEQyAAAkRDIAACREMgAAJEQyAAAkRDIAACREMgAAJEQyAAAkRDIAACREMgAAJEQyAAAk8h7JJ06ciLlz5+b7MgAA0GHyHsnHjx+PHTt25PsyAADQYfIeyQsXLoxDhw65mwwAwHkj75G8YMGC6Nu3b9x///35vhQAAHQI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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"sns.countplot(y=\"Type\", data=train_set, color=\"c\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"It would be interesting to visualize all features (numerical and catergorical) in order to undertand them.\n",
"\n",
"Check out this blog for plotting distribution: https://seaborn.pydata.org/tutorial/distributions.html\n",
"+ Seaborn version of this blog can be different from the one intalled in your machine (version 0.11 has been just realeased)\n",
"\n",
"Check out this blog for plotting categorical data: https://seaborn.pydata.org/tutorial/categorical.html"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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FhZqz549drcliVAdcsstt2j37t06efKkzpw5o9dff105OTl2t4U+6Pjx43rwwQdVVlam/Px8u9uJC0ePHpXb7VZ7e7va29v1xhtvaNy4cXa3FdM2bdqkbdu2qbKyUosXL9aPfvQjFRcX291WzGtpadG6devk8/nk9Xq1efNmTZgwwe62Yt748eP1zjvv6NSpUwoEAnr77beVmZlpd1sx7+DBg7ryyiv5jEgEMjIyVF1drdbWVhmGoZ07d2r06NF2tyWJPdUhl156qZYsWaKioiL5/X7NmDFD1157rd1toQ/auHGjfD6f1q5dG6rNnDlTs2bNsrGr2Jabm6t9+/Zp+vTpcjqdysvL4xcSWGL8+PHau3evpk+frmAwqNmzZ+u6666zu62YN2bMGN17772aPXu2/H6/br31Vt155512txXzjhw5ovT0dLvbiCu33XabPv74YxUWFiopKUmjR4/W/fffb3dbkiSHYRiG3U0AAAAA8YztHwAAAIBJhGoAAADAJEI1AAAAYBKhGgAAADCJUA0AAIALgtfr1dSpU3X06NEuj/v00081d+5c3X777fqnf/onNTc3n/fchGoA6AOOHj2qa665RtOmTQv9uf3221VRURF27BtvvKFVq1bZ0CUA2Gfv3r2aNWuW6urqujzOMAw98MADuu+++7R161Zdc801+rd/+7fznp/rVANAH9G/f39VVlaGHtfX12vq1KnKyspSRkZGqP7jH/9YP/7xj+1oEQBsU15ertLSUi1btixU27Jli/7jP/5DwWBQmZmZKi0t1aFDhzRw4MDQTQAXLFigU6dOnff8hGoA6KMuvfRSDR8+XO+++64ee+wxnTlzRsnJybrjjju0Y8cO/e53v1NjY6NKS0v16aefKiEhQTNnzlRRUZFaWlq0evVqffLJJ/L7/crOztayZcu4ZTeAuLV69eqzHh86dEjl5eX64x//KJfLpV//+tfauHGjrrzySg0ZMkTFxcXav3+/rrrqKj3yyCPnPT/bPwCgj/rLX/6izz//XG1tbfqf//kfPffcc3ruuefOOmblypW68sorVVVVpRdeeEHl5eU6fPiw1qxZo8zMTL388svasmWLvvzyS23atMmmnwQAou/999/X4cOH9ZOf/ETTpk3TG2+8oU8//VQdHR3as2ePZs2apc2bN2vYsGFn3QW5Myw5AEAf0dbWpmnTpkmSAoGABg0apF/96lc6ceKEvv/97ys5OTnsNdXV1Vq6dKkkKSUlRdu2bZMkvfXWW/rwww9De7Lb2tp66acAgN4RCAQ0efJkud1uSdLp06cVCAT00Ucfafjw4Ro9erQkaerUqVq8ePF5z0eoBoA+4m/3VH/j5Zdf1sCBA8/5msTERDkcjtDjI0eOaNCgQQoGg3ryySc1YsQISdKpU6fOOg4A4t1NN92k3//+93rggQc0ePBgPfroo/q7v/s73XfffTp58qQOHDigjIwM7dy5U5mZmec9H9s/AOAClp2drZdeekmS1NLSonnz5qmurk633Xab/v3f/12GYai9vV0PPPCAnn/+eZu7BYDoycjI0MKFCzVv3jzl5+crGAzq/vvvV//+/fX000/L7XYrPz9f77//vpYvX37e87FSDQAXsBUrVujRRx9VQUGBDMPQ/PnzlZWVpZKSEq1evVoFBQXy+/265ZZbdO+999rdLgCYtnPnztDXd911l+66666wY8aMGXPOS5J2xWEYhmG6OwAAAOACxvYPAAAAwCRCNQAAAGASoRoAAAAwiVANAAAAmESoBgAAAEwiVAMAAAAmEaoBAAAAk/4/VyF1RGFDsf4AAAAASUVORK5CYII=\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"sns.histplot(train_set[\"Price\"])\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## BASELINE MODEL\n",
"### https://www.kaggle.com/t/b02bcc4763e14d0486715e7c8bc946fe\n",
"\n",
"This is a simple model that uses the K-nearest Neighbors Regressor\n",
"\n",
"This model only uses 4 feaures: 'Rooms','Landsize', 'BuildingArea', 'YearBuilt'"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"----- EVALUATION ON TRAIN SET ------\n",
"RMSE 397813.8038017269\n",
"R^2: 0.6219552116625728\n"
]
},
{
"data": {
"image/png": "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qTBIJiIiIiJSYZBMRERERKTCIJmIiIiISIVBMhERERGRCoNkIiIiIiIVBslERERERCoMkomIiIiIVAo6SF69ejWuv/56XHvttXjttde8Xk7eOHnyJCZMmIAvv/zS66XkhV//+tcYP348xo8fjyeffNLr5eSNp59+Gtdffz3Gjx+PF1980evl5JUnnngC1dXVXi8jb8ycORPjx4/H5MmTMXnyZGzbts3rJflefX09pkyZguuuuw4LFizwejl5YdmyZalzbPLkyaioqMCvfvUrr5fle2+99Vbqb+gTTzzh9XLSSQXqq6++ksaMGSMdPXpUam5uliZOnCh9+umnXi/L97Zu3SpNmDBBKi0tlb744guvl+N769evl6ZPny61trZKbW1t0m233Sa9++67Xi/L9zZv3izdfPPNUjwel2KxmDRmzBjps88+83pZeWHDhg3SFVdcIf3yl7/0eil5IZlMSldeeaUUj8e9Xkre2L9/v3TllVdKBw8elNra2qQZM2ZIH3zwgdfLyiu7d++WrrnmGunw4cNeL8XXWlpapMsuu0w6fPiwFI/HpalTp0rr16/3elkpBZtJ3rBhA0aOHIlIJIJwOIxx48bhnXfe8XpZvrd06VLMnTsX5557rtdLyQt9+/ZFdXU1unXrBlEUMXjwYBw4cMDrZfne5ZdfjpdffhlFRUU4fPgwEokEwuGw18vyvaamJixevBizZs3yeil5Y8+ePQCAO+64A5MmTcKrr77q8Yr8b926dbj++utx/vnnQxRFLF68GMOHD/d6WXll3rx5mD17Nvr06eP1UnwtkUggmUwiFouhvb0d7e3tKC4u9npZKUVeL8At//jHP9C3b9/U1+eeey4++ugjD1eUHx577DGvl5BXvvGNb6T+e+/evfjjH/+I119/3cMV5Q9RFPHMM8/g97//Pb73ve/hvPPO83pJvvfoo49i9uzZOHjwoNdLyRvHjx/HqFGj8MgjjyAej+O2227DoEGDMHr0aK+X5lv79u2DKIqYNWsWDh48iO985zu4//77vV5W3tiwYQNOnTqF6667zuul+F7Pnj1x33334brrrkMoFMJll12GSy+91OtlpRRsJjmZTEIQhNTXkiSlfU3kpE8//RR33HEHHnzwQQwcONDr5eSNe++9Fxs3bsTBgwexdOlSr5fja8uWLcMFF1yAUaNGeb2UvFJeXo4nn3wSZ511Fvr06YOpU6fif/7nf7xelq8lEgls3LgRjz/+OJYsWYKPPvoIK1eu9HpZeeONN97AD3/4Q6+XkRd27tyJ5cuX4/3338ef//xnBAIBvPDCC14vK6Vgg+Tzzz8fhw4dSn196NAhlhCQKxoaGvCDH/wADzzwAG644Qavl5MXPvvsM3zyyScAgFAohGuvvRa7du3yeFX+9oc//AHr16/H5MmT8cwzz6C+vh6PP/6418vyvQ8//BAbN25MfS1JEoqKCvYiqiPOOeccjBo1Cn369EH37t3xr//6r7wSa1FbWxv+93//F2PHjvV6KXnhL3/5C0aNGoWzzz4b3bp1w5QpU7Blyxavl5VSsEHyt7/9bWzcuBFHjhxBLBbDu+++i6uuusrrZVGBOXjwIH7605/i3//93zF+/Hivl5M3vvzyS9TU1KCtrQ1tbW147733UFFR4fWyfO3FF1/E22+/jbfeegv33nsvxo4di4ceesjrZfneiRMn8OSTT6K1tRUnT57EypUrcc0113i9LF8bM2YM/vKXv+D48eNIJBL485//jNLSUq+XlRd27dqFgQMHco+FRUOHDsWGDRvQ0tICSZJQX1+PsrIyr5eVUrAfp8877zzMnj0bt912G+LxOKZOnYp/+Zd/8XpZVGBeeOEFtLa2YtGiRanbbr75ZsyYMcPDVfnf1VdfjY8++giVlZUIBoO49tpr+SGDXDFmzBhs27YNlZWVSCaT+P73v4/y8nKvl+Vrw4cPx5133onvf//7iMfjGD16NG688Uavl5UXvvjiC5x//vleLyNvXHnllfjrX/+KKVOmQBRFlJWV4a677vJ6WSmCJEmS14sgIiIiIvKTgi23ICIiIiLKFINkIiIiIiIVBslERERERCoMkomIiIiIVBgkExEREVFeOnnyJCZMmIAvv/zS8H579uzBzJkzMWnSJPzoRz/CsWPHTB+bQTIRkQ99+eWXuOSSSzB58uTU/02aNAlvvvlmp/u+9957WLBggQerJCLyzrZt2zBjxgzs3bvX8H6SJOGee+7Bj3/8Y6xatQqXXHIJnn/+edPHL9g+yURE+a579+546623Ul///e9/x4QJEzBs2DAMHTo0dft3v/tdfPe73/ViiUREnlm6dCnmzp2LBx98MHVbXV0dXnrpJSSTSZSWlmLu3Ln49NNPEQ6HU0PlZs2ahePHj5s+PoNkIqI8cd5552HAgAFYv349fvWrXyEWi6Fnz5644YYbsHbtWvz2t7/FoUOHMHfuXOzZsweBQAA333wzbrvtNpw4cQKPPfYYdu/ejXg8jlGjRuHBBx/kiGYiyluPPfZY2teffvopli5dijfeeAPFxcV46qmn8MILL2DgwIE455xz8NBDD+GTTz7BxRdfjEceecT08VluQUSUJxobG7F//36cOnUKf/vb3/DKK6/glVdeSbvP/PnzMXDgQLzzzjtYsmQJli5din379uHxxx9HaWkpVqxYgbq6Ohw9ehQvvviiR6+EiMh5mzdvxr59+3DTTTdh8uTJeO+997Bnzx60t7djy5YtmDFjBlauXImLLroobVKuHqYQiIh86tSpU5g8eTIAIJFIoHfv3qitrcXhw4cxZMgQ9OzZs9PPbNiwAVVVVQCAs846C2+//TYA4IMPPsD27dtTNc2nTp3K0asgIsqNRCKB6667DjU1NQCA5uZmJBIJ7NixAwMGDEBZWRkAYMKECbj33ntNH49BMhGRT6lrkmUrVqxAOBzW/JmioiIIgpD6+osvvkDv3r2RTCbx9NNPY/DgwQCA48ePp92PiCjfXXHFFfj973+Pe+65B3369MG8efPQv39//PjHP8aRI0ewc+dODB06FPX19SgtLTV9PJZbEBEVkFGjRmH58uUAgBMnTuD222/H3r17ceWVV+K///u/IUkS2tracM899+DVV1/1eLVERM4ZOnQofvazn+H222/H+PHjkUwmcdddd6F79+549tlnUVNTg/Hjx2Pz5s2orq42fTxmkomICsijjz6KefPmYeLEiZAkCXfffTeGDRuGhx9+GI899hgmTpyIeDyOb3/727jzzju9Xi4RUdbq6+tT/z1t2jRMmzat032GDx+u2ULTiCBJkpT16oiIiIiICgjLLYiIiIiIVBgkExERERGpMEgmIiIiIlJhkExEREREpMIgmYiIiIhIhUEyEREREZEKg2QiIiIiIpX/D/h7w5+mDocsAAAAAElFTkSuQmCC\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"## the features\n",
"\n",
"features = ['Rooms','Landsize', 'BuildingArea', 'YearBuilt']\n",
"## DEFINE YOUR FEATURES\n",
"X = train_set[features].fillna(0)\n",
"y = train_set[['Price']]\n",
"\n",
"## the model\n",
"# KNeighborsRegressor\n",
"from sklearn import neighbors\n",
"n_neighbors = 3 # you can modify this paramenter (ONLY THIS ONE!!!)\n",
"model = neighbors.KNeighborsRegressor(n_neighbors)\n",
"\n",
"## fit the model\n",
"model.fit(X, y)\n",
"\n",
"## predict training set\n",
"y_pred = model.predict(X)\n",
"\n",
"## Evaluate the model and plot it\n",
"from sklearn.metrics import mean_squared_error, r2_score\n",
"print(\"----- EVALUATION ON TRAIN SET ------\")\n",
"print(\"RMSE\",np.sqrt(mean_squared_error(y, y_pred)))\n",
"print(\"R^2: \",r2_score(y, y_pred))\n",
"\n",
"\n",
"plt.scatter(y, y_pred)\n",
"plt.xlabel('Price')\n",
"plt.ylabel('Predicted price');\n",
"plt.show()\n",
"\n",
"## predict the test set and generate the submission file\n",
"X_test = test_set[features].fillna(0)\n",
"y_pred = model.predict(X_test)\n",
"\n",
"df_output = pd.DataFrame(y_pred)\n",
"df_output = df_output.reset_index()\n",
"df_output.columns = ['index','Price']\n",
"\n",
"df_output.to_csv('output/session1/baseline.csv',index=False)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## EXERCICE - TRAIN A MODEL and upload your best solution to the Kaggle Challenge\n",
"\n",
"Tasks: \n",
"+ Choose the best features for the problem. Some features are numercial but others categorical, think how to codify all of them.\n",
"+ Choose the model. You have two choice: LinearRegression and KNeighborsRegressor\n",
" + You can chanege the paramenter n_neighbors from the KNeighborsRegressor\n",
" \n",
"LINEAR REGRESSOR:\n",
">from sklearn.linear_model import LinearRegression\n",
"\n",
">model = LinearRegression()\n",
"\n",
"KNeighborsRegressor\n",
"> from sklearn import neighbors\n",
"\n",
"> n_neighbors = 3 # you can modify this paramenter (ONLY THIS ONE!!!)\n",
"\n",
"> model = neighbors.KNeighborsRegressor(n_neighbors=n_neighbors)\n"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [],
"source": [
"## the features\n",
"\n",
"## the model\n",
"\n",
"## fit the model\n",
"\n",
"## predict training set\n",
"\n",
"## Evaluate the model and plot it\n",
"\n",
"## predict the test set and generate the submission file"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Explain the choosed model and why you think that is is the best"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.11.7"
}
},
"nbformat": 4,
"nbformat_minor": 4
}