-
Notifications
You must be signed in to change notification settings - Fork 0
/
Minor Project -Used Cars Price Detection
1 lines (1 loc) · 76.1 KB
/
Minor Project -Used Cars Price Detection
1
{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.7.6","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"none","dataSources":[{"sourceId":4897786,"sourceType":"datasetVersion","datasetId":2840264}],"dockerImageVersionId":30017,"isInternetEnabled":false,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"# MINOR PROJECT \n\n***\n\n## Used Car Price Prediction \n\nGiven *data about used cars*, let's try to predict the **price** of a given car. \n \nWe will use linear regression and gradient boosting (LightGBM) to make our predictions.","metadata":{}},{"cell_type":"markdown","source":"# Getting Started","metadata":{}},{"cell_type":"code","source":"import numpy as np\nimport pandas as pd\n\nfrom sklearn.preprocessing import StandardScaler\nfrom sklearn.model_selection import train_test_split\n\nfrom sklearn.linear_model import LinearRegression\nimport lightgbm as lgb\n\nfrom sklearn.metrics import mean_squared_error","metadata":{"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","execution":{"iopub.status.busy":"2024-05-03T04:03:07.302905Z","iopub.execute_input":"2024-05-03T04:03:07.303398Z","iopub.status.idle":"2024-05-03T04:03:07.311113Z","shell.execute_reply.started":"2024-05-03T04:03:07.303268Z","shell.execute_reply":"2024-05-03T04:03:07.309376Z"},"trusted":true},"execution_count":4,"outputs":[]},{"cell_type":"code","source":"data = pd.read_csv('/kaggle/input/used-car-price-dataset/used_car_dataset.csv')","metadata":{"execution":{"iopub.status.busy":"2024-05-03T05:06:22.615895Z","iopub.execute_input":"2024-05-03T05:06:22.616572Z","iopub.status.idle":"2024-05-03T05:06:22.635839Z","shell.execute_reply.started":"2024-05-03T05:06:22.616501Z","shell.execute_reply":"2024-05-03T05:06:22.634971Z"},"trusted":true},"execution_count":30,"outputs":[]},{"cell_type":"code","source":"data","metadata":{"execution":{"iopub.status.busy":"2024-05-03T05:06:26.902622Z","iopub.execute_input":"2024-05-03T05:06:26.903402Z","iopub.status.idle":"2024-05-03T05:06:26.931065Z","shell.execute_reply.started":"2024-05-03T05:06:26.903348Z","shell.execute_reply":"2024-05-03T05:06:26.929976Z"},"trusted":true},"execution_count":31,"outputs":[{"execution_count":31,"output_type":"execute_result","data":{"text/plain":" car_name car_price_in_rupees \\\n0 Hyundai Grand i10 Magna 1.2 Kappa VTVT [2017-2... ₹ 4.45 Lakh \n1 Maruti Suzuki Alto 800 Lxi ₹ 2.93 Lakh \n2 Tata Safari XZ Plus New ₹ 22.49 Lakh \n3 Maruti Suzuki Ciaz ZXI+ ₹ 6.95 Lakh \n4 Jeep Compass Sport Plus 1.4 Petrol [2019-2020] ₹ 12 Lakh \n... ... ... \n2100 Ford Figo Titanium1.5 TDCi ₹ 3.6 Lakh \n2101 MINI Cooper Countryman Cooper D ₹ 22 Lakh \n2102 Hyundai Verna 1.6 VTVT SX ₹ 8.38 Lakh \n2103 Maruti Suzuki Ciaz VXi+ AT ₹ 6.75 Lakh \n2104 Hyundai Verna 1.6 VTVT SX ₹ 8.76 Lakh \n\n kms_driven fuel_type city year_of_manufacture \n0 22,402 km Petrol Mumbai 2016 \n1 10,344 km Petrol Kolkata 2019 \n2 12,999 km Diesel Bangalore 2021 \n3 45,000 km Petrol Thane 2016 \n4 11,193 km Petrol Kolkata 2019 \n... ... ... ... ... \n2100 42,158 km Diesel Kolkata 2015 \n2101 68,862 km Diesel Hyderabad 2013 \n2102 37,622 km Petrol Chennai 2018 \n2103 64,726 km Petrol Mumbai 2017 \n2104 29,150 km Petrol Pune 2017 \n\n[2105 rows x 6 columns]","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>car_name</th>\n <th>car_price_in_rupees</th>\n <th>kms_driven</th>\n <th>fuel_type</th>\n <th>city</th>\n <th>year_of_manufacture</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>0</th>\n <td>Hyundai Grand i10 Magna 1.2 Kappa VTVT [2017-2...</td>\n <td>₹ 4.45 Lakh</td>\n <td>22,402 km</td>\n <td>Petrol</td>\n <td>Mumbai</td>\n <td>2016</td>\n </tr>\n <tr>\n <th>1</th>\n <td>Maruti Suzuki Alto 800 Lxi</td>\n <td>₹ 2.93 Lakh</td>\n <td>10,344 km</td>\n <td>Petrol</td>\n <td>Kolkata</td>\n <td>2019</td>\n </tr>\n <tr>\n <th>2</th>\n <td>Tata Safari XZ Plus New</td>\n <td>₹ 22.49 Lakh</td>\n <td>12,999 km</td>\n <td>Diesel</td>\n <td>Bangalore</td>\n <td>2021</td>\n </tr>\n <tr>\n <th>3</th>\n <td>Maruti Suzuki Ciaz ZXI+</td>\n <td>₹ 6.95 Lakh</td>\n <td>45,000 km</td>\n <td>Petrol</td>\n <td>Thane</td>\n <td>2016</td>\n </tr>\n <tr>\n <th>4</th>\n <td>Jeep Compass Sport Plus 1.4 Petrol [2019-2020]</td>\n <td>₹ 12 Lakh</td>\n <td>11,193 km</td>\n <td>Petrol</td>\n <td>Kolkata</td>\n <td>2019</td>\n </tr>\n <tr>\n <th>...</th>\n <td>...</td>\n <td>...</td>\n <td>...</td>\n <td>...</td>\n <td>...</td>\n <td>...</td>\n </tr>\n <tr>\n <th>2100</th>\n <td>Ford Figo Titanium1.5 TDCi</td>\n <td>₹ 3.6 Lakh</td>\n <td>42,158 km</td>\n <td>Diesel</td>\n <td>Kolkata</td>\n <td>2015</td>\n </tr>\n <tr>\n <th>2101</th>\n <td>MINI Cooper Countryman Cooper D</td>\n <td>₹ 22 Lakh</td>\n <td>68,862 km</td>\n <td>Diesel</td>\n <td>Hyderabad</td>\n <td>2013</td>\n </tr>\n <tr>\n <th>2102</th>\n <td>Hyundai Verna 1.6 VTVT SX</td>\n <td>₹ 8.38 Lakh</td>\n <td>37,622 km</td>\n <td>Petrol</td>\n <td>Chennai</td>\n <td>2018</td>\n </tr>\n <tr>\n <th>2103</th>\n <td>Maruti Suzuki Ciaz VXi+ AT</td>\n <td>₹ 6.75 Lakh</td>\n <td>64,726 km</td>\n <td>Petrol</td>\n <td>Mumbai</td>\n <td>2017</td>\n </tr>\n <tr>\n <th>2104</th>\n <td>Hyundai Verna 1.6 VTVT SX</td>\n <td>₹ 8.76 Lakh</td>\n <td>29,150 km</td>\n <td>Petrol</td>\n <td>Pune</td>\n <td>2017</td>\n </tr>\n </tbody>\n</table>\n<p>2105 rows × 6 columns</p>\n</div>"},"metadata":{}}]},{"cell_type":"code","source":"data.info()","metadata":{"execution":{"iopub.status.busy":"2024-05-03T05:06:59.742792Z","iopub.execute_input":"2024-05-03T05:06:59.743266Z","iopub.status.idle":"2024-05-03T05:06:59.758056Z","shell.execute_reply.started":"2024-05-03T05:06:59.743212Z","shell.execute_reply":"2024-05-03T05:06:59.756337Z"},"trusted":true},"execution_count":33,"outputs":[{"name":"stdout","text":"<class 'pandas.core.frame.DataFrame'>\nRangeIndex: 2105 entries, 0 to 2104\nData columns (total 6 columns):\n # Column Non-Null Count Dtype \n--- ------ -------------- ----- \n 0 car_name 2105 non-null object\n 1 car_price_in_rupees 2105 non-null object\n 2 kms_driven 2105 non-null object\n 3 fuel_type 2105 non-null object\n 4 city 2105 non-null object\n 5 year_of_manufacture 2105 non-null int64 \ndtypes: int64(1), object(5)\nmemory usage: 98.8+ KB\n","output_type":"stream"}]},{"cell_type":"markdown","source":"# Preprocessing","metadata":{}},{"cell_type":"code","source":"data.isna().sum()","metadata":{"execution":{"iopub.status.busy":"2024-05-03T05:07:13.456019Z","iopub.execute_input":"2024-05-03T05:07:13.456475Z","iopub.status.idle":"2024-05-03T05:07:13.468115Z","shell.execute_reply.started":"2024-05-03T05:07:13.456423Z","shell.execute_reply":"2024-05-03T05:07:13.466990Z"},"trusted":true},"execution_count":34,"outputs":[{"execution_count":34,"output_type":"execute_result","data":{"text/plain":"car_name 0\ncar_price_in_rupees 0\nkms_driven 0\nfuel_type 0\ncity 0\nyear_of_manufacture 0\ndtype: int64"},"metadata":{}}]},{"cell_type":"code","source":"null_columns = data.columns[data.isna().mean() > 0.25]\n\ndata = data.drop(null_columns, axis=1)","metadata":{"execution":{"iopub.status.busy":"2024-05-03T04:04:07.419621Z","iopub.execute_input":"2024-05-03T04:04:07.420057Z","iopub.status.idle":"2024-05-03T04:04:08.398050Z","shell.execute_reply.started":"2024-05-03T04:04:07.420017Z","shell.execute_reply":"2024-05-03T04:04:08.396674Z"},"trusted":true},"execution_count":9,"outputs":[]},{"cell_type":"code","source":"data","metadata":{"execution":{"iopub.status.busy":"2024-05-03T05:07:27.657839Z","iopub.execute_input":"2024-05-03T05:07:27.658235Z","iopub.status.idle":"2024-05-03T05:07:27.681608Z","shell.execute_reply.started":"2024-05-03T05:07:27.658200Z","shell.execute_reply":"2024-05-03T05:07:27.679874Z"},"trusted":true},"execution_count":35,"outputs":[{"execution_count":35,"output_type":"execute_result","data":{"text/plain":" car_name car_price_in_rupees \\\n0 Hyundai Grand i10 Magna 1.2 Kappa VTVT [2017-2... ₹ 4.45 Lakh \n1 Maruti Suzuki Alto 800 Lxi ₹ 2.93 Lakh \n2 Tata Safari XZ Plus New ₹ 22.49 Lakh \n3 Maruti Suzuki Ciaz ZXI+ ₹ 6.95 Lakh \n4 Jeep Compass Sport Plus 1.4 Petrol [2019-2020] ₹ 12 Lakh \n... ... ... \n2100 Ford Figo Titanium1.5 TDCi ₹ 3.6 Lakh \n2101 MINI Cooper Countryman Cooper D ₹ 22 Lakh \n2102 Hyundai Verna 1.6 VTVT SX ₹ 8.38 Lakh \n2103 Maruti Suzuki Ciaz VXi+ AT ₹ 6.75 Lakh \n2104 Hyundai Verna 1.6 VTVT SX ₹ 8.76 Lakh \n\n kms_driven fuel_type city year_of_manufacture \n0 22,402 km Petrol Mumbai 2016 \n1 10,344 km Petrol Kolkata 2019 \n2 12,999 km Diesel Bangalore 2021 \n3 45,000 km Petrol Thane 2016 \n4 11,193 km Petrol Kolkata 2019 \n... ... ... ... ... \n2100 42,158 km Diesel Kolkata 2015 \n2101 68,862 km Diesel Hyderabad 2013 \n2102 37,622 km Petrol Chennai 2018 \n2103 64,726 km Petrol Mumbai 2017 \n2104 29,150 km Petrol Pune 2017 \n\n[2105 rows x 6 columns]","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>car_name</th>\n <th>car_price_in_rupees</th>\n <th>kms_driven</th>\n <th>fuel_type</th>\n <th>city</th>\n <th>year_of_manufacture</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>0</th>\n <td>Hyundai Grand i10 Magna 1.2 Kappa VTVT [2017-2...</td>\n <td>₹ 4.45 Lakh</td>\n <td>22,402 km</td>\n <td>Petrol</td>\n <td>Mumbai</td>\n <td>2016</td>\n </tr>\n <tr>\n <th>1</th>\n <td>Maruti Suzuki Alto 800 Lxi</td>\n <td>₹ 2.93 Lakh</td>\n <td>10,344 km</td>\n <td>Petrol</td>\n <td>Kolkata</td>\n <td>2019</td>\n </tr>\n <tr>\n <th>2</th>\n <td>Tata Safari XZ Plus New</td>\n <td>₹ 22.49 Lakh</td>\n <td>12,999 km</td>\n <td>Diesel</td>\n <td>Bangalore</td>\n <td>2021</td>\n </tr>\n <tr>\n <th>3</th>\n <td>Maruti Suzuki Ciaz ZXI+</td>\n <td>₹ 6.95 Lakh</td>\n <td>45,000 km</td>\n <td>Petrol</td>\n <td>Thane</td>\n <td>2016</td>\n </tr>\n <tr>\n <th>4</th>\n <td>Jeep Compass Sport Plus 1.4 Petrol [2019-2020]</td>\n <td>₹ 12 Lakh</td>\n <td>11,193 km</td>\n <td>Petrol</td>\n <td>Kolkata</td>\n <td>2019</td>\n </tr>\n <tr>\n <th>...</th>\n <td>...</td>\n <td>...</td>\n <td>...</td>\n <td>...</td>\n <td>...</td>\n <td>...</td>\n </tr>\n <tr>\n <th>2100</th>\n <td>Ford Figo Titanium1.5 TDCi</td>\n <td>₹ 3.6 Lakh</td>\n <td>42,158 km</td>\n <td>Diesel</td>\n <td>Kolkata</td>\n <td>2015</td>\n </tr>\n <tr>\n <th>2101</th>\n <td>MINI Cooper Countryman Cooper D</td>\n <td>₹ 22 Lakh</td>\n <td>68,862 km</td>\n <td>Diesel</td>\n <td>Hyderabad</td>\n <td>2013</td>\n </tr>\n <tr>\n <th>2102</th>\n <td>Hyundai Verna 1.6 VTVT SX</td>\n <td>₹ 8.38 Lakh</td>\n <td>37,622 km</td>\n <td>Petrol</td>\n <td>Chennai</td>\n <td>2018</td>\n </tr>\n <tr>\n <th>2103</th>\n <td>Maruti Suzuki Ciaz VXi+ AT</td>\n <td>₹ 6.75 Lakh</td>\n <td>64,726 km</td>\n <td>Petrol</td>\n <td>Mumbai</td>\n <td>2017</td>\n </tr>\n <tr>\n <th>2104</th>\n <td>Hyundai Verna 1.6 VTVT SX</td>\n <td>₹ 8.76 Lakh</td>\n <td>29,150 km</td>\n <td>Petrol</td>\n <td>Pune</td>\n <td>2017</td>\n </tr>\n </tbody>\n</table>\n<p>2105 rows × 6 columns</p>\n</div>"},"metadata":{}}]},{"cell_type":"code","source":"data","metadata":{"execution":{"iopub.status.busy":"2024-05-03T05:07:48.949218Z","iopub.execute_input":"2024-05-03T05:07:48.949642Z","iopub.status.idle":"2024-05-03T05:07:48.970343Z","shell.execute_reply.started":"2024-05-03T05:07:48.949604Z","shell.execute_reply":"2024-05-03T05:07:48.969318Z"},"trusted":true},"execution_count":37,"outputs":[{"execution_count":37,"output_type":"execute_result","data":{"text/plain":" car_name car_price_in_rupees \\\n0 Hyundai Grand i10 Magna 1.2 Kappa VTVT [2017-2... ₹ 4.45 Lakh \n1 Maruti Suzuki Alto 800 Lxi ₹ 2.93 Lakh \n2 Tata Safari XZ Plus New ₹ 22.49 Lakh \n3 Maruti Suzuki Ciaz ZXI+ ₹ 6.95 Lakh \n4 Jeep Compass Sport Plus 1.4 Petrol [2019-2020] ₹ 12 Lakh \n... ... ... \n2100 Ford Figo Titanium1.5 TDCi ₹ 3.6 Lakh \n2101 MINI Cooper Countryman Cooper D ₹ 22 Lakh \n2102 Hyundai Verna 1.6 VTVT SX ₹ 8.38 Lakh \n2103 Maruti Suzuki Ciaz VXi+ AT ₹ 6.75 Lakh \n2104 Hyundai Verna 1.6 VTVT SX ₹ 8.76 Lakh \n\n kms_driven fuel_type city year_of_manufacture \n0 22,402 km Petrol Mumbai 2016 \n1 10,344 km Petrol Kolkata 2019 \n2 12,999 km Diesel Bangalore 2021 \n3 45,000 km Petrol Thane 2016 \n4 11,193 km Petrol Kolkata 2019 \n... ... ... ... ... \n2100 42,158 km Diesel Kolkata 2015 \n2101 68,862 km Diesel Hyderabad 2013 \n2102 37,622 km Petrol Chennai 2018 \n2103 64,726 km Petrol Mumbai 2017 \n2104 29,150 km Petrol Pune 2017 \n\n[2105 rows x 6 columns]","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>car_name</th>\n <th>car_price_in_rupees</th>\n <th>kms_driven</th>\n <th>fuel_type</th>\n <th>city</th>\n <th>year_of_manufacture</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>0</th>\n <td>Hyundai Grand i10 Magna 1.2 Kappa VTVT [2017-2...</td>\n <td>₹ 4.45 Lakh</td>\n <td>22,402 km</td>\n <td>Petrol</td>\n <td>Mumbai</td>\n <td>2016</td>\n </tr>\n <tr>\n <th>1</th>\n <td>Maruti Suzuki Alto 800 Lxi</td>\n <td>₹ 2.93 Lakh</td>\n <td>10,344 km</td>\n <td>Petrol</td>\n <td>Kolkata</td>\n <td>2019</td>\n </tr>\n <tr>\n <th>2</th>\n <td>Tata Safari XZ Plus New</td>\n <td>₹ 22.49 Lakh</td>\n <td>12,999 km</td>\n <td>Diesel</td>\n <td>Bangalore</td>\n <td>2021</td>\n </tr>\n <tr>\n <th>3</th>\n <td>Maruti Suzuki Ciaz ZXI+</td>\n <td>₹ 6.95 Lakh</td>\n <td>45,000 km</td>\n <td>Petrol</td>\n <td>Thane</td>\n <td>2016</td>\n </tr>\n <tr>\n <th>4</th>\n <td>Jeep Compass Sport Plus 1.4 Petrol [2019-2020]</td>\n <td>₹ 12 Lakh</td>\n <td>11,193 km</td>\n <td>Petrol</td>\n <td>Kolkata</td>\n <td>2019</td>\n </tr>\n <tr>\n <th>...</th>\n <td>...</td>\n <td>...</td>\n <td>...</td>\n <td>...</td>\n <td>...</td>\n <td>...</td>\n </tr>\n <tr>\n <th>2100</th>\n <td>Ford Figo Titanium1.5 TDCi</td>\n <td>₹ 3.6 Lakh</td>\n <td>42,158 km</td>\n <td>Diesel</td>\n <td>Kolkata</td>\n <td>2015</td>\n </tr>\n <tr>\n <th>2101</th>\n <td>MINI Cooper Countryman Cooper D</td>\n <td>₹ 22 Lakh</td>\n <td>68,862 km</td>\n <td>Diesel</td>\n <td>Hyderabad</td>\n <td>2013</td>\n </tr>\n <tr>\n <th>2102</th>\n <td>Hyundai Verna 1.6 VTVT SX</td>\n <td>₹ 8.38 Lakh</td>\n <td>37,622 km</td>\n <td>Petrol</td>\n <td>Chennai</td>\n <td>2018</td>\n </tr>\n <tr>\n <th>2103</th>\n <td>Maruti Suzuki Ciaz VXi+ AT</td>\n <td>₹ 6.75 Lakh</td>\n <td>64,726 km</td>\n <td>Petrol</td>\n <td>Mumbai</td>\n <td>2017</td>\n </tr>\n <tr>\n <th>2104</th>\n <td>Hyundai Verna 1.6 VTVT SX</td>\n <td>₹ 8.76 Lakh</td>\n <td>29,150 km</td>\n <td>Petrol</td>\n <td>Pune</td>\n <td>2017</td>\n </tr>\n </tbody>\n</table>\n<p>2105 rows × 6 columns</p>\n</div>"},"metadata":{}}]},{"cell_type":"code","source":"{column: len(data[column].unique()) for column in data.columns if data.dtypes[column] == 'object'}","metadata":{"execution":{"iopub.status.busy":"2024-05-03T05:07:56.173453Z","iopub.execute_input":"2024-05-03T05:07:56.173891Z","iopub.status.idle":"2024-05-03T05:07:56.187624Z","shell.execute_reply.started":"2024-05-03T05:07:56.173852Z","shell.execute_reply":"2024-05-03T05:07:56.186334Z"},"trusted":true},"execution_count":38,"outputs":[{"execution_count":38,"output_type":"execute_result","data":{"text/plain":"{'car_name': 946,\n 'car_price_in_rupees': 811,\n 'kms_driven': 1628,\n 'fuel_type': 8,\n 'city': 16}"},"metadata":{}}]},{"cell_type":"code","source":"data = data.drop('kms_driven', axis=1)","metadata":{"execution":{"iopub.status.busy":"2024-05-03T05:08:22.538805Z","iopub.execute_input":"2024-05-03T05:08:22.539248Z","iopub.status.idle":"2024-05-03T05:08:22.546784Z","shell.execute_reply.started":"2024-05-03T05:08:22.539211Z","shell.execute_reply":"2024-05-03T05:08:22.545218Z"},"trusted":true},"execution_count":39,"outputs":[]},{"cell_type":"code","source":"def onehot_encode(df, columns, prefixes):\n df = df.copy()\n for column, prefix in zip(columns, prefixes):\n dummies = pd.get_dummies(df[column], prefix=prefix)\n df = pd.concat([df, dummies], axis=1)\n df = df.drop(column, axis=1)\n return df","metadata":{"execution":{"iopub.status.busy":"2024-05-03T05:13:25.907315Z","iopub.execute_input":"2024-05-03T05:13:25.907813Z","iopub.status.idle":"2024-05-03T05:13:25.916266Z","shell.execute_reply.started":"2024-05-03T05:13:25.907771Z","shell.execute_reply":"2024-05-03T05:13:25.914769Z"},"trusted":true},"execution_count":47,"outputs":[]},{"cell_type":"code","source":"data = onehot_encode(\n data,\n ['car_name', 'car_price_in_rupees', 'fuel_type', 'city'],\n ['cname', 'price', 'fname', 'state']\n)","metadata":{"execution":{"iopub.status.busy":"2024-05-03T05:15:55.179839Z","iopub.execute_input":"2024-05-03T05:15:55.180257Z","iopub.status.idle":"2024-05-03T05:15:55.235095Z","shell.execute_reply.started":"2024-05-03T05:15:55.180220Z","shell.execute_reply":"2024-05-03T05:15:55.233867Z"},"trusted":true},"execution_count":49,"outputs":[]},{"cell_type":"code","source":"data","metadata":{"execution":{"iopub.status.busy":"2024-05-03T05:16:04.140269Z","iopub.execute_input":"2024-05-03T05:16:04.140692Z","iopub.status.idle":"2024-05-03T05:16:04.174522Z","shell.execute_reply.started":"2024-05-03T05:16:04.140649Z","shell.execute_reply":"2024-05-03T05:16:04.173353Z"},"trusted":true},"execution_count":50,"outputs":[{"execution_count":50,"output_type":"execute_result","data":{"text/plain":" year_of_manufacture cname_Audi A3 35 TDI Premium + Sunroof \\\n0 2016 0 \n1 2019 0 \n2 2021 0 \n3 2016 0 \n4 2019 0 \n... ... ... \n2100 2015 0 \n2101 2013 0 \n2102 2018 0 \n2103 2017 0 \n2104 2017 0 \n\n cname_Audi A3 35 TDI Premium Plus \\\n0 0 \n1 0 \n2 0 \n3 0 \n4 0 \n... ... \n2100 0 \n2101 0 \n2102 0 \n2103 0 \n2104 0 \n\n cname_Audi A3 35 TDI Premium Plus + Sunroof \\\n0 0 \n1 0 \n2 0 \n3 0 \n4 0 \n... ... \n2100 0 \n2101 0 \n2102 0 \n2103 0 \n2104 0 \n\n cname_Audi A3 35 TDI Technology + Sunroof \\\n0 0 \n1 0 \n2 0 \n3 0 \n4 0 \n... ... \n2100 0 \n2101 0 \n2102 0 \n2103 0 \n2104 0 \n\n cname_Audi A3 35 TFSI Premium Plus cname_Audi A3 40 TFSI Premium \\\n0 0 0 \n1 0 0 \n2 0 0 \n3 0 0 \n4 0 0 \n... ... ... \n2100 0 0 \n2101 0 0 \n2102 0 0 \n2103 0 0 \n2104 0 0 \n\n cname_Audi A3 40 TFSI Premium Plus + sunroof \\\n0 0 \n1 0 \n2 0 \n3 0 \n4 0 \n... ... \n2100 0 \n2101 0 \n2102 0 \n2103 0 \n2104 0 \n\n cname_Audi A4 2.0 TDI (143 bhp) cname_Audi A4 2.0 TDI (143bhp) ... \\\n0 0 0 ... \n1 0 0 ... \n2 0 0 ... \n3 0 0 ... \n4 0 0 ... \n... ... ... ... \n2100 0 0 ... \n2101 0 0 ... \n2102 0 0 ... \n2103 0 0 ... \n2104 0 0 ... \n\n state_Gurgaon state_Hyderabad state_Kolkata state_Mumbai \\\n0 0 0 0 1 \n1 0 0 1 0 \n2 0 0 0 0 \n3 0 0 0 0 \n4 0 0 1 0 \n... ... ... ... ... \n2100 0 0 1 0 \n2101 0 1 0 0 \n2102 0 0 0 0 \n2103 0 0 0 1 \n2104 0 0 0 0 \n\n state_Noida state_Pallikarnai state_Poonamallee state_Pune \\\n0 0 0 0 0 \n1 0 0 0 0 \n2 0 0 0 0 \n3 0 0 0 0 \n4 0 0 0 0 \n... ... ... ... ... \n2100 0 0 0 0 \n2101 0 0 0 0 \n2102 0 0 0 0 \n2103 0 0 0 0 \n2104 0 0 0 1 \n\n state_Thane state_Thiruvallur \n0 0 0 \n1 0 0 \n2 0 0 \n3 1 0 \n4 0 0 \n... ... ... \n2100 0 0 \n2101 0 0 \n2102 0 0 \n2103 0 0 \n2104 0 0 \n\n[2105 rows x 1782 columns]","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>year_of_manufacture</th>\n <th>cname_Audi A3 35 TDI Premium + Sunroof</th>\n <th>cname_Audi A3 35 TDI Premium Plus</th>\n <th>cname_Audi A3 35 TDI Premium Plus + Sunroof</th>\n <th>cname_Audi A3 35 TDI Technology + Sunroof</th>\n <th>cname_Audi A3 35 TFSI Premium Plus</th>\n <th>cname_Audi A3 40 TFSI Premium</th>\n <th>cname_Audi A3 40 TFSI Premium Plus + sunroof</th>\n <th>cname_Audi A4 2.0 TDI (143 bhp)</th>\n <th>cname_Audi A4 2.0 TDI (143bhp)</th>\n <th>...</th>\n <th>state_Gurgaon</th>\n <th>state_Hyderabad</th>\n <th>state_Kolkata</th>\n <th>state_Mumbai</th>\n <th>state_Noida</th>\n <th>state_Pallikarnai</th>\n <th>state_Poonamallee</th>\n <th>state_Pune</th>\n <th>state_Thane</th>\n <th>state_Thiruvallur</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>0</th>\n <td>2016</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>...</td>\n <td>0</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>0</td>\n </tr>\n <tr>\n <th>1</th>\n <td>2019</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>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>0</td>\n <td>0</td>\n </tr>\n <tr>\n <th>2</th>\n <td>2021</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>...</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</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>3</th>\n <td>2016</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>...</td>\n <td>0</td>\n <td>0</td>\n <td>0</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>4</th>\n <td>2019</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>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>0</td>\n <td>0</td>\n </tr>\n <tr>\n <th>...</th>\n <td>...</td>\n <td>...</td>\n <td>...</td>\n <td>...</td>\n <td>...</td>\n <td>...</td>\n <td>...</td>\n <td>...</td>\n <td>...</td>\n <td>...</td>\n <td>...</td>\n <td>...</td>\n <td>...</td>\n <td>...</td>\n <td>...</td>\n <td>...</td>\n <td>...</td>\n <td>...</td>\n <td>...</td>\n <td>...</td>\n <td>...</td>\n </tr>\n <tr>\n <th>2100</th>\n <td>2015</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>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>0</td>\n <td>0</td>\n </tr>\n <tr>\n <th>2101</th>\n <td>2013</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>...</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>0</td>\n <td>0</td>\n <td>0</td>\n </tr>\n <tr>\n <th>2102</th>\n <td>2018</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>...</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</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>2103</th>\n <td>2017</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>...</td>\n <td>0</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>0</td>\n </tr>\n <tr>\n <th>2104</th>\n <td>2017</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>...</td>\n <td>0</td>\n <td>0</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 <td>0</td>\n </tr>\n </tbody>\n</table>\n<p>2105 rows × 1782 columns</p>\n</div>"},"metadata":{}}]},{"cell_type":"code","source":"data.isna().sum().sum()","metadata":{"execution":{"iopub.status.busy":"2024-05-03T05:16:14.860446Z","iopub.execute_input":"2024-05-03T05:16:14.861328Z","iopub.status.idle":"2024-05-03T05:16:14.891065Z","shell.execute_reply.started":"2024-05-03T05:16:14.861259Z","shell.execute_reply":"2024-05-03T05:16:14.889925Z"},"trusted":true},"execution_count":51,"outputs":[{"execution_count":51,"output_type":"execute_result","data":{"text/plain":"0"},"metadata":{}}]},{"cell_type":"markdown","source":"# Splitting and Scaling","metadata":{}},{"cell_type":"code","source":"y = data.loc[:, 'year_of_manufacture']\nX = data.drop('year_of_manufacture', axis=1)","metadata":{"execution":{"iopub.status.busy":"2024-05-03T05:17:21.349495Z","iopub.execute_input":"2024-05-03T05:17:21.349917Z","iopub.status.idle":"2024-05-03T05:17:21.359688Z","shell.execute_reply.started":"2024-05-03T05:17:21.349879Z","shell.execute_reply":"2024-05-03T05:17:21.358257Z"},"trusted":true},"execution_count":54,"outputs":[]},{"cell_type":"code","source":"data","metadata":{"execution":{"iopub.status.busy":"2024-05-03T05:29:18.859033Z","iopub.execute_input":"2024-05-03T05:29:18.859478Z","iopub.status.idle":"2024-05-03T05:29:18.893583Z","shell.execute_reply.started":"2024-05-03T05:29:18.859428Z","shell.execute_reply":"2024-05-03T05:29:18.892402Z"},"trusted":true},"execution_count":77,"outputs":[{"execution_count":77,"output_type":"execute_result","data":{"text/plain":" year_of_manufacture cname_Audi A3 35 TDI Premium + Sunroof \\\n0 2016 0 \n1 2019 0 \n2 2021 0 \n3 2016 0 \n4 2019 0 \n... ... ... \n2100 2015 0 \n2101 2013 0 \n2102 2018 0 \n2103 2017 0 \n2104 2017 0 \n\n cname_Audi A3 35 TDI Premium Plus \\\n0 0 \n1 0 \n2 0 \n3 0 \n4 0 \n... ... \n2100 0 \n2101 0 \n2102 0 \n2103 0 \n2104 0 \n\n cname_Audi A3 35 TDI Premium Plus + Sunroof \\\n0 0 \n1 0 \n2 0 \n3 0 \n4 0 \n... ... \n2100 0 \n2101 0 \n2102 0 \n2103 0 \n2104 0 \n\n cname_Audi A3 35 TDI Technology + Sunroof \\\n0 0 \n1 0 \n2 0 \n3 0 \n4 0 \n... ... \n2100 0 \n2101 0 \n2102 0 \n2103 0 \n2104 0 \n\n cname_Audi A3 35 TFSI Premium Plus cname_Audi A3 40 TFSI Premium \\\n0 0 0 \n1 0 0 \n2 0 0 \n3 0 0 \n4 0 0 \n... ... ... \n2100 0 0 \n2101 0 0 \n2102 0 0 \n2103 0 0 \n2104 0 0 \n\n cname_Audi A3 40 TFSI Premium Plus + sunroof \\\n0 0 \n1 0 \n2 0 \n3 0 \n4 0 \n... ... \n2100 0 \n2101 0 \n2102 0 \n2103 0 \n2104 0 \n\n cname_Audi A4 2.0 TDI (143 bhp) cname_Audi A4 2.0 TDI (143bhp) ... \\\n0 0 0 ... \n1 0 0 ... \n2 0 0 ... \n3 0 0 ... \n4 0 0 ... \n... ... ... ... \n2100 0 0 ... \n2101 0 0 ... \n2102 0 0 ... \n2103 0 0 ... \n2104 0 0 ... \n\n state_Gurgaon state_Hyderabad state_Kolkata state_Mumbai \\\n0 0 0 0 1 \n1 0 0 1 0 \n2 0 0 0 0 \n3 0 0 0 0 \n4 0 0 1 0 \n... ... ... ... ... \n2100 0 0 1 0 \n2101 0 1 0 0 \n2102 0 0 0 0 \n2103 0 0 0 1 \n2104 0 0 0 0 \n\n state_Noida state_Pallikarnai state_Poonamallee state_Pune \\\n0 0 0 0 0 \n1 0 0 0 0 \n2 0 0 0 0 \n3 0 0 0 0 \n4 0 0 0 0 \n... ... ... ... ... \n2100 0 0 0 0 \n2101 0 0 0 0 \n2102 0 0 0 0 \n2103 0 0 0 0 \n2104 0 0 0 1 \n\n state_Thane state_Thiruvallur \n0 0 0 \n1 0 0 \n2 0 0 \n3 1 0 \n4 0 0 \n... ... ... \n2100 0 0 \n2101 0 0 \n2102 0 0 \n2103 0 0 \n2104 0 0 \n\n[2105 rows x 1782 columns]","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>year_of_manufacture</th>\n <th>cname_Audi A3 35 TDI Premium + Sunroof</th>\n <th>cname_Audi A3 35 TDI Premium Plus</th>\n <th>cname_Audi A3 35 TDI Premium Plus + Sunroof</th>\n <th>cname_Audi A3 35 TDI Technology + Sunroof</th>\n <th>cname_Audi A3 35 TFSI Premium Plus</th>\n <th>cname_Audi A3 40 TFSI Premium</th>\n <th>cname_Audi A3 40 TFSI Premium Plus + sunroof</th>\n <th>cname_Audi A4 2.0 TDI (143 bhp)</th>\n <th>cname_Audi A4 2.0 TDI (143bhp)</th>\n <th>...</th>\n <th>state_Gurgaon</th>\n <th>state_Hyderabad</th>\n <th>state_Kolkata</th>\n <th>state_Mumbai</th>\n <th>state_Noida</th>\n <th>state_Pallikarnai</th>\n <th>state_Poonamallee</th>\n <th>state_Pune</th>\n <th>state_Thane</th>\n <th>state_Thiruvallur</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>0</th>\n <td>2016</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>...</td>\n <td>0</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>0</td>\n </tr>\n <tr>\n <th>1</th>\n <td>2019</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>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>0</td>\n <td>0</td>\n </tr>\n <tr>\n <th>2</th>\n <td>2021</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>...</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</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>3</th>\n <td>2016</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>...</td>\n <td>0</td>\n <td>0</td>\n <td>0</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>4</th>\n <td>2019</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>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>0</td>\n <td>0</td>\n </tr>\n <tr>\n <th>...</th>\n <td>...</td>\n <td>...</td>\n <td>...</td>\n <td>...</td>\n <td>...</td>\n <td>...</td>\n <td>...</td>\n <td>...</td>\n <td>...</td>\n <td>...</td>\n <td>...</td>\n <td>...</td>\n <td>...</td>\n <td>...</td>\n <td>...</td>\n <td>...</td>\n <td>...</td>\n <td>...</td>\n <td>...</td>\n <td>...</td>\n <td>...</td>\n </tr>\n <tr>\n <th>2100</th>\n <td>2015</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>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>0</td>\n <td>0</td>\n </tr>\n <tr>\n <th>2101</th>\n <td>2013</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>...</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>0</td>\n <td>0</td>\n <td>0</td>\n </tr>\n <tr>\n <th>2102</th>\n <td>2018</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>...</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</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>2103</th>\n <td>2017</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>...</td>\n <td>0</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>0</td>\n </tr>\n <tr>\n <th>2104</th>\n <td>2017</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>0</td>\n <td>...</td>\n <td>0</td>\n <td>0</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 <td>0</td>\n </tr>\n </tbody>\n</table>\n<p>2105 rows × 1782 columns</p>\n</div>"},"metadata":{}}]},{"cell_type":"code","source":"scaler = StandardScaler()\n\nX = scaler.fit_transform(X)","metadata":{"execution":{"iopub.status.busy":"2024-05-03T05:17:25.089104Z","iopub.execute_input":"2024-05-03T05:17:25.089915Z","iopub.status.idle":"2024-05-03T05:17:25.245333Z","shell.execute_reply.started":"2024-05-03T05:17:25.089858Z","shell.execute_reply":"2024-05-03T05:17:25.244089Z"},"trusted":true},"execution_count":55,"outputs":[]},{"cell_type":"code","source":"X_train, X_test, y_train, y_test = train_test_split(X, y, train_size=0.7, random_state=34)","metadata":{"execution":{"iopub.status.busy":"2024-05-03T05:17:28.768661Z","iopub.execute_input":"2024-05-03T05:17:28.769281Z","iopub.status.idle":"2024-05-03T05:17:28.871602Z","shell.execute_reply.started":"2024-05-03T05:17:28.769240Z","shell.execute_reply":"2024-05-03T05:17:28.870580Z"},"trusted":true},"execution_count":56,"outputs":[]},{"cell_type":"markdown","source":"# Training","metadata":{}},{"cell_type":"code","source":"lin_model = LinearRegression()\n\nlin_model.fit(X_train, y_train)\n\nlin_y_preds = lin_model.predict(X_test)","metadata":{"execution":{"iopub.status.busy":"2024-05-03T05:17:34.505167Z","iopub.execute_input":"2024-05-03T05:17:34.505613Z","iopub.status.idle":"2024-05-03T05:17:35.570164Z","shell.execute_reply.started":"2024-05-03T05:17:34.505574Z","shell.execute_reply":"2024-05-03T05:17:35.569088Z"},"trusted":true},"execution_count":57,"outputs":[]},{"cell_type":"code","source":"lgb_model = lgb.LGBMRegressor(\n boosting_type='gbdt',\n num_leaves=31,\n n_estimators=100,\n reg_lambda=1.0\n)\n\nlgb_model.fit(X_train, y_train)\n\nlgb_y_preds = lgb_model.predict(X_test)","metadata":{"execution":{"iopub.status.busy":"2024-05-03T05:17:37.855640Z","iopub.execute_input":"2024-05-03T05:17:37.856090Z","iopub.status.idle":"2024-05-03T05:17:38.162505Z","shell.execute_reply.started":"2024-05-03T05:17:37.856055Z","shell.execute_reply":"2024-05-03T05:17:38.161396Z"},"trusted":true},"execution_count":58,"outputs":[]},{"cell_type":"code","source":"lin_loss = np.sqrt(mean_squared_error(y_test, lin_y_preds))\nlgb_loss = np.sqrt(mean_squared_error(y_test, lgb_y_preds))","metadata":{"execution":{"iopub.status.busy":"2024-05-03T05:17:44.273125Z","iopub.execute_input":"2024-05-03T05:17:44.273817Z","iopub.status.idle":"2024-05-03T05:17:44.280151Z","shell.execute_reply.started":"2024-05-03T05:17:44.273776Z","shell.execute_reply":"2024-05-03T05:17:44.279207Z"},"trusted":true},"execution_count":59,"outputs":[]},{"cell_type":"code","source":"print(data.columns)","metadata":{"execution":{"iopub.status.busy":"2024-05-03T05:31:31.406667Z","iopub.execute_input":"2024-05-03T05:31:31.407552Z","iopub.status.idle":"2024-05-03T05:31:31.415326Z","shell.execute_reply.started":"2024-05-03T05:31:31.407488Z","shell.execute_reply":"2024-05-03T05:31:31.413786Z"},"trusted":true},"execution_count":79,"outputs":[{"name":"stdout","text":"Index(['year_of_manufacture', 'cname_Audi A3 35 TDI Premium + Sunroof',\n 'cname_Audi A3 35 TDI Premium Plus',\n 'cname_Audi A3 35 TDI Premium Plus + Sunroof',\n 'cname_Audi A3 35 TDI Technology + Sunroof',\n 'cname_Audi A3 35 TFSI Premium Plus', 'cname_Audi A3 40 TFSI Premium',\n 'cname_Audi A3 40 TFSI Premium Plus + sunroof',\n 'cname_Audi A4 2.0 TDI (143 bhp)', 'cname_Audi A4 2.0 TDI (143bhp)',\n ...\n 'state_Gurgaon', 'state_Hyderabad', 'state_Kolkata', 'state_Mumbai',\n 'state_Noida', 'state_Pallikarnai', 'state_Poonamallee', 'state_Pune',\n 'state_Thane', 'state_Thiruvallur'],\n dtype='object', length=1782)\n","output_type":"stream"}]},{"cell_type":"code","source":"These two lines of code calculate and print the Root Mean Squared Error (RMSE) for two different models:\na Linear Regression model (lin_loss) and a Gradient Boosted model (lgb_loss).\n \nRMSE is a measure of the average magnitude of the errors between predicted and actual values.\nLower RMSE values indicate better model performance in terms of prediction accuracy.","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print(\"Linear Regression RMSE:\", lin_loss)\nprint(\"Gradient Boosted RMSE:\", lgb_loss)","metadata":{"execution":{"iopub.status.busy":"2024-05-03T05:25:45.662574Z","iopub.execute_input":"2024-05-03T05:25:45.663099Z","iopub.status.idle":"2024-05-03T05:25:45.670017Z","shell.execute_reply.started":"2024-05-03T05:25:45.663047Z","shell.execute_reply":"2024-05-03T05:25:45.668419Z"},"trusted":true},"execution_count":71,"outputs":[{"name":"stdout","text":"Linear Regression RMSE: 340159668607913.44\nGradient Boosted RMSE: 2.86068559927202\n","output_type":"stream"}]},{"cell_type":"code","source":"These two lines of code calculate and print the R-squared scores for two different models (linear regression and gradient boosted) on a test dataset.\nThe R-squared score measures the proportion of the variance in the dependent variable that is predictable from the independent variables in a regression model.\nHigher R-squared scores indicate a better fit of the model to the data.","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print(\"Linear Regression R^2 Score:\", lin_model.score(X_test, y_test))\nprint(\"Gradient Boosted R^2 Score:\", lgb_model.score(X_test, y_test))","metadata":{"execution":{"iopub.status.busy":"2024-05-03T05:17:49.704445Z","iopub.execute_input":"2024-05-03T05:17:49.704908Z","iopub.status.idle":"2024-05-03T05:17:49.724745Z","shell.execute_reply.started":"2024-05-03T05:17:49.704865Z","shell.execute_reply":"2024-05-03T05:17:49.723755Z"},"trusted":true},"execution_count":61,"outputs":[{"name":"stdout","text":"Linear Regression R^2 Score: -1.3682711338193156e+28\nGradient Boosted R^2 Score: 0.03228653313268315\n","output_type":"stream"}]},{"cell_type":"code","source":"EVALUATION OF THE MODEL","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import matplotlib.pyplot as plt\nfrom sklearn.linear_model import LinearRegression\nfrom sklearn.model_selection import train_test_split\nimport pandas as pd\n\n# Assuming you have a DataFrame 'data' with columns 'kms_driven' and 'price'\n# Split the data into training and testing sets\nX_train, X_test, y_train, y_test = train_test_split(data[['year_of_manufacture']], data['cname_Audi A3 35 TDI Premium + Sunroof'], test_size=0.2, random_state=42)\n\n# Train a linear regression model\nmodel = LinearRegression()\nmodel.fit(X_train, y_train)\n\n# Make predictions on the testing set\ny_pred = model.predict(X_test)\n\n# Visualize the results using a scatter plot\nplt.figure(figsize=(8, 6))\nplt.scatter(X_test, y_test, color='blue', label='Actual')\nplt.scatter(X_test, y_pred, color='red', label='Predicted')\nplt.xlabel('year_of_manufacture')\nplt.ylabel('cname_Audi A3 35 TDI Premium + Sunroof')\nplt.title('Actual vs Predicted Price')\nplt.legend()\nplt.show()\n","metadata":{"execution":{"iopub.status.busy":"2024-05-03T05:32:11.305537Z","iopub.execute_input":"2024-05-03T05:32:11.306139Z","iopub.status.idle":"2024-05-03T05:32:11.600866Z","shell.execute_reply.started":"2024-05-03T05:32:11.306100Z","shell.execute_reply":"2024-05-03T05:32:11.599508Z"},"trusted":true},"execution_count":80,"outputs":[{"output_type":"display_data","data":{"text/plain":"<Figure size 576x432 with 1 Axes>","image/png":"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+42Ov9yOS1Udf7kAJ5/cc/UyM+vjvv3tNf/0dlixIktfn39+r732Wr72ta8BcMIJJ3DttdfyxBNPMGnSJDbcMPv53HLLLTtVZnt7O5/97GdZunQp77zzTkNvk+wuDhwapai/XDMzq2nJks6l57F8+XLuuOMO5s+fjyRWrVqFJPbYY49cdyqUHlN6O+SXv/xlvvGNb/DpT3+au+66i3PPPbfrlewh7qpolCL+cs3MrK7hwzuXnsf111/PKaecwtNPP81TTz3FM888w8iRIxk7dixTpkxh5cqVALz00ksAbLbZZrz22mur82+77bYsXLiQ9957jxtvXDN7wCuvvMIOO2TLLl199dVdr2APcuDQKEX85ZqZWV3nnw9DhqydNmRIlt5V1157Lcccc8xaaccddxzPPfccw4cPZ8yYMey666788pe/BGDixIkcfvjhqwdHXnDBBRx55JEcdNBBbLfddqvLOPfcczn++OPZb7/92HrrrbtewR6kbP6l/qu1tTXa2trWv6DyMQ6Q/eVOnequCjOzTlq4cCEf/ehHcx8/bVrWM7xkSfb/tfPP9z+9HSq9l5JmR0RrV8rzGIdG6fgL9V+umVm3O/lk/3PbXRw4NJL/cs3MrI/zGAczMzPLzYGDmZmZ5ebAwczMzHJz4GBmZma5OXAwMzOrYMCAAey222587GMf4/jjj1+v1S9PO+00rr/+egDOOOMMHn300arH3nXXXdx3332dPseIESN48cUXu1zHvBw4mJmZVTB48GAeeugh5s+fz8CBA5kyZcpa+1etWtWlcq+88kpaWlqq7u9q4NBdHDiYmVnvV/DqxPvttx+LFy/mrrvu4sADD+Skk05il112YdWqVZx99tnsueeejBkzhiuuuAKAiGDy5Mm0tLTwqU99ihdeeGF1WQcccAAdEw/+7ne/Y+zYsey6666MGzeOp556iilTpnDRRRex22678Yc//IFly5Zx3HHHseeee7Lnnnty7733Atl6Gocccgi77747Z555Jt01oaPncTAzs96t4NWJV65cyS233MJhhx0GwIMPPsj8+fMZOXIkU6dO5f3vfz+zZs3i7bff5hOf+ASHHHIIc+fOZdGiRTzyyCM8//zztLS08PnPf36tcpctW8YXv/hF7rnnHkaOHMlLL73ElltuyaRJk9h0000566yzADjppJP4+te/zr777suSJUs49NBDWbhwIeeddx777rsv3/3ud7npppuYOnXqerc1DwcOZmbWuxW0OvGbb77JbrvtBmRXHL7whS9w3333sddee61eDvu2225j3rx5q8cvvPLKKzz22GPcc889nHjiiQwYMIDtt9+egw46aJ3yH3jgAfbff//VZVVbovv2229fa0zEq6++ymuvvcY999zDDTfcAMCnPvUptthiiy63tTMcOJiZWe9W0OrEHWMcym2yySarX0cEl156KYceeuhax9x88811l9+OiFxLdL/33nvcf//9DB48eJ19efI3msc4mJlZ79aDqxMfeuihXH755bz77rsA/PnPf+aNN95g//33Z/r06axatYqlS5dy5513rpP34x//OHfffTdPPvkkUH2J7kMOOYTLLrts9XZHMLP//vszLY3luOWWW3j55ZeLaWQZBw5mZta7FbGudk5nnHEGLS0tjB07lo997GOceeaZrFy5kmOOOYZRo0axyy678Ld/+7d88pOfXCfv0KFDmTp1Ksceeyy77rorn/3sZwE46qijuPHGG1cPjrzkkktoa2tjzJgxtLS0rL6743vf+x733HMPY8eO5bbbbmN4NwRK4GW1G7estpmZNUxnl9X2utrVeVltMzOzcl6duNu4q8LMzMxyc+BgZmZmuTlwMDOzptTfx+A1QhHvoQMHMzNrOoMGDWL58uUOHtZDRLB8+XIGDRrU0HILHxwp6TDgR8AA4MqIuKBsv9L+I4AVwGkRMadWXknHA+cCHwX2ioi2sjKHA48C50bEvxbXOjMzK8KwYcNob29n2bJlPV2VXm3QoEEMGzasoWUWGjhIGgD8GDgYaAdmSZoREaXriR4OjEqPvYHLgb3r5J0PHAtcUeXUFwG3FNAkMzPrBhtttNHqqZituRR9xWEvYHFEPAEgaTowgexqQIcJwDWRXY96QNLmkrYDRlTLGxELU9o6J5R0NPAE8EZRjTIzM+uvih7jsAPwTMl2e0rLc0yevGuRtAnwTeC8LtbXzMzMaig6cKi0+kb5SJdqx+TJW+484KKIeL1mpaSJktoktbn/zMzMLL+iuyragR1LtocBz+U8ZmCOvOX2Bv5G0oXA5sB7kt6KiMtKD4qIqcBUyKacztcUMzMzKzpwmAWMkjQSeBY4ATip7JgZwOQ0hmFv4JWIWCppWY68a4mI/TpeSzoXeL08aDAzM7Ou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\n"},"metadata":{"needs_background":"light"}}]}]}