2744 lines
205 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"vscode": {
"languageId": "plaintext"
}
},
"source": [
"#### Загрузка набора данных"
]
},
{
"cell_type": "code",
"execution_count": 971,
"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>Price</th>\n",
" <th>Levy</th>\n",
" <th>Manufacturer</th>\n",
" <th>Model</th>\n",
" <th>Prod. year</th>\n",
" <th>Category</th>\n",
" <th>Leather interior</th>\n",
" <th>Fuel type</th>\n",
" <th>Engine volume</th>\n",
" <th>Mileage</th>\n",
" <th>Cylinders</th>\n",
" <th>Gear box type</th>\n",
" <th>Drive wheels</th>\n",
" <th>Doors</th>\n",
" <th>Wheel</th>\n",
" <th>Color</th>\n",
" <th>Airbags</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>13328</td>\n",
" <td>1399</td>\n",
" <td>LEXUS</td>\n",
" <td>RX 450</td>\n",
" <td>2010</td>\n",
" <td>Jeep</td>\n",
" <td>Yes</td>\n",
" <td>Hybrid</td>\n",
" <td>3.5</td>\n",
" <td>186005 km</td>\n",
" <td>6.0</td>\n",
" <td>Automatic</td>\n",
" <td>4x4</td>\n",
" <td>04-May</td>\n",
" <td>Left wheel</td>\n",
" <td>Silver</td>\n",
" <td>12</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>16621</td>\n",
" <td>1018</td>\n",
" <td>CHEVROLET</td>\n",
" <td>Equinox</td>\n",
" <td>2011</td>\n",
" <td>Jeep</td>\n",
" <td>No</td>\n",
" <td>Petrol</td>\n",
" <td>3</td>\n",
" <td>192000 km</td>\n",
" <td>6.0</td>\n",
" <td>Tiptronic</td>\n",
" <td>4x4</td>\n",
" <td>04-May</td>\n",
" <td>Left wheel</td>\n",
" <td>Black</td>\n",
" <td>8</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>8467</td>\n",
" <td>-</td>\n",
" <td>HONDA</td>\n",
" <td>FIT</td>\n",
" <td>2006</td>\n",
" <td>Hatchback</td>\n",
" <td>No</td>\n",
" <td>Petrol</td>\n",
" <td>1.3</td>\n",
" <td>200000 km</td>\n",
" <td>4.0</td>\n",
" <td>Variator</td>\n",
" <td>Front</td>\n",
" <td>04-May</td>\n",
" <td>Right-hand drive</td>\n",
" <td>Black</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>3607</td>\n",
" <td>862</td>\n",
" <td>FORD</td>\n",
" <td>Escape</td>\n",
" <td>2011</td>\n",
" <td>Jeep</td>\n",
" <td>Yes</td>\n",
" <td>Hybrid</td>\n",
" <td>2.5</td>\n",
" <td>168966 km</td>\n",
" <td>4.0</td>\n",
" <td>Automatic</td>\n",
" <td>4x4</td>\n",
" <td>04-May</td>\n",
" <td>Left wheel</td>\n",
" <td>White</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>11726</td>\n",
" <td>446</td>\n",
" <td>HONDA</td>\n",
" <td>FIT</td>\n",
" <td>2014</td>\n",
" <td>Hatchback</td>\n",
" <td>Yes</td>\n",
" <td>Petrol</td>\n",
" <td>1.3</td>\n",
" <td>91901 km</td>\n",
" <td>4.0</td>\n",
" <td>Automatic</td>\n",
" <td>Front</td>\n",
" <td>04-May</td>\n",
" <td>Left wheel</td>\n",
" <td>Silver</td>\n",
" <td>4</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",
" </tr>\n",
" <tr>\n",
" <th>19232</th>\n",
" <td>8467</td>\n",
" <td>-</td>\n",
" <td>MERCEDES-BENZ</td>\n",
" <td>CLK 200</td>\n",
" <td>1999</td>\n",
" <td>Coupe</td>\n",
" <td>Yes</td>\n",
" <td>CNG</td>\n",
" <td>2.0 Turbo</td>\n",
" <td>300000 km</td>\n",
" <td>4.0</td>\n",
" <td>Manual</td>\n",
" <td>Rear</td>\n",
" <td>02-Mar</td>\n",
" <td>Left wheel</td>\n",
" <td>Silver</td>\n",
" <td>5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>19233</th>\n",
" <td>15681</td>\n",
" <td>831</td>\n",
" <td>HYUNDAI</td>\n",
" <td>Sonata</td>\n",
" <td>2011</td>\n",
" <td>Sedan</td>\n",
" <td>Yes</td>\n",
" <td>Petrol</td>\n",
" <td>2.4</td>\n",
" <td>161600 km</td>\n",
" <td>4.0</td>\n",
" <td>Tiptronic</td>\n",
" <td>Front</td>\n",
" <td>04-May</td>\n",
" <td>Left wheel</td>\n",
" <td>Red</td>\n",
" <td>8</td>\n",
" </tr>\n",
" <tr>\n",
" <th>19234</th>\n",
" <td>26108</td>\n",
" <td>836</td>\n",
" <td>HYUNDAI</td>\n",
" <td>Tucson</td>\n",
" <td>2010</td>\n",
" <td>Jeep</td>\n",
" <td>Yes</td>\n",
" <td>Diesel</td>\n",
" <td>2</td>\n",
" <td>116365 km</td>\n",
" <td>4.0</td>\n",
" <td>Automatic</td>\n",
" <td>Front</td>\n",
" <td>04-May</td>\n",
" <td>Left wheel</td>\n",
" <td>Grey</td>\n",
" <td>4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>19235</th>\n",
" <td>5331</td>\n",
" <td>1288</td>\n",
" <td>CHEVROLET</td>\n",
" <td>Captiva</td>\n",
" <td>2007</td>\n",
" <td>Jeep</td>\n",
" <td>Yes</td>\n",
" <td>Diesel</td>\n",
" <td>2</td>\n",
" <td>51258 km</td>\n",
" <td>4.0</td>\n",
" <td>Automatic</td>\n",
" <td>Front</td>\n",
" <td>04-May</td>\n",
" <td>Left wheel</td>\n",
" <td>Black</td>\n",
" <td>4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>19236</th>\n",
" <td>470</td>\n",
" <td>753</td>\n",
" <td>HYUNDAI</td>\n",
" <td>Sonata</td>\n",
" <td>2012</td>\n",
" <td>Sedan</td>\n",
" <td>Yes</td>\n",
" <td>Hybrid</td>\n",
" <td>2.4</td>\n",
" <td>186923 km</td>\n",
" <td>4.0</td>\n",
" <td>Automatic</td>\n",
" <td>Front</td>\n",
" <td>04-May</td>\n",
" <td>Left wheel</td>\n",
" <td>White</td>\n",
" <td>12</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>19237 rows × 17 columns</p>\n",
"</div>"
],
"text/plain": [
" Price Levy Manufacturer Model Prod. year Category \\\n",
"0 13328 1399 LEXUS RX 450 2010 Jeep \n",
"1 16621 1018 CHEVROLET Equinox 2011 Jeep \n",
"2 8467 - HONDA FIT 2006 Hatchback \n",
"3 3607 862 FORD Escape 2011 Jeep \n",
"4 11726 446 HONDA FIT 2014 Hatchback \n",
"... ... ... ... ... ... ... \n",
"19232 8467 - MERCEDES-BENZ CLK 200 1999 Coupe \n",
"19233 15681 831 HYUNDAI Sonata 2011 Sedan \n",
"19234 26108 836 HYUNDAI Tucson 2010 Jeep \n",
"19235 5331 1288 CHEVROLET Captiva 2007 Jeep \n",
"19236 470 753 HYUNDAI Sonata 2012 Sedan \n",
"\n",
" Leather interior Fuel type Engine volume Mileage Cylinders \\\n",
"0 Yes Hybrid 3.5 186005 km 6.0 \n",
"1 No Petrol 3 192000 km 6.0 \n",
"2 No Petrol 1.3 200000 km 4.0 \n",
"3 Yes Hybrid 2.5 168966 km 4.0 \n",
"4 Yes Petrol 1.3 91901 km 4.0 \n",
"... ... ... ... ... ... \n",
"19232 Yes CNG 2.0 Turbo 300000 km 4.0 \n",
"19233 Yes Petrol 2.4 161600 km 4.0 \n",
"19234 Yes Diesel 2 116365 km 4.0 \n",
"19235 Yes Diesel 2 51258 km 4.0 \n",
"19236 Yes Hybrid 2.4 186923 km 4.0 \n",
"\n",
" Gear box type Drive wheels Doors Wheel Color Airbags \n",
"0 Automatic 4x4 04-May Left wheel Silver 12 \n",
"1 Tiptronic 4x4 04-May Left wheel Black 8 \n",
"2 Variator Front 04-May Right-hand drive Black 2 \n",
"3 Automatic 4x4 04-May Left wheel White 0 \n",
"4 Automatic Front 04-May Left wheel Silver 4 \n",
"... ... ... ... ... ... ... \n",
"19232 Manual Rear 02-Mar Left wheel Silver 5 \n",
"19233 Tiptronic Front 04-May Left wheel Red 8 \n",
"19234 Automatic Front 04-May Left wheel Grey 4 \n",
"19235 Automatic Front 04-May Left wheel Black 4 \n",
"19236 Automatic Front 04-May Left wheel White 12 \n",
"\n",
"[19237 rows x 17 columns]"
]
},
"execution_count": 971,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import pandas as pd\n",
"import seaborn as sns\n",
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
"import featuretools as ft\n",
"import re\n",
"from sklearn.preprocessing import StandardScaler\n",
"from imblearn.over_sampling import RandomOverSampler\n",
"from sklearn.model_selection import train_test_split\n",
"\n",
"\n",
"df = pd.read_csv(\"../data/car_price_prediction.csv\")\n",
"\n",
"df = df.drop(columns=[\"ID\"])\n",
"\n",
"df"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Анализ датасета и очистка данных"
]
},
{
"cell_type": "code",
"execution_count": 972,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Price int64\n",
"Levy object\n",
"Manufacturer object\n",
"Model object\n",
"Prod. year int64\n",
"Category object\n",
"Leather interior object\n",
"Fuel type object\n",
"Engine volume object\n",
"Mileage object\n",
"Cylinders float64\n",
"Gear box type object\n",
"Drive wheels object\n",
"Doors object\n",
"Wheel object\n",
"Color object\n",
"Airbags int64\n",
"dtype: object"
]
},
"execution_count": 972,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.dtypes"
]
},
{
"cell_type": "code",
"execution_count": 973,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([ 3.5, 3. , 1.3, 2.5, 2. , 1.8, 2.4, 4. , 1.6, 3.3, 2.2,\n",
" 4.7, 1.5, 4.4, 1.4, 3.6, 2.3, 5.5, 2.8, 3.2, 3.8, 4.6,\n",
" 1.2, 5. , 1.7, 2.9, 0.5, 1.9, 2.7, 4.8, 5.3, 0.4, 1.1,\n",
" 2.1, 0.7, 5.4, 3.7, 1. , 2.6, 0.8, 0.2, 5.7, 6.7, 6.2,\n",
" 3.4, 6.3, 4.3, 4.2, 0. , 20. , 0.3, 5.9, 5.6, 6. , 0.6,\n",
" 6.8, 4.5, 7.3, 0.1, 3.1, 6.4, 3.9, 0.9, 5.2, 5.8])"
]
},
"execution_count": 973,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df[\"Engine volume\"] = df[\"Engine volume\"].str.replace(\"Turbo\", \"\")\n",
"df[\"Engine volume\"] = pd.to_numeric(df[\"Engine volume\"])\n",
"df[\"Engine volume\"].unique()"
]
},
{
"cell_type": "code",
"execution_count": 974,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([186005, 192000, 200000, ..., 140607, 307325, 186923])"
]
},
"execution_count": 974,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df[\"Mileage\"] = df[\"Mileage\"].str.replace(\"km\", \"\")\n",
"df[\"Mileage\"] = df[\"Mileage\"].astype(\"int64\")\n",
"df[\"Mileage\"].unique()"
]
},
{
"cell_type": "code",
"execution_count": 975,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([ 1399, 1018, 0, 862, 446, 891, 761, 751, 394,\n",
" 1053, 1055, 1079, 810, 2386, 1850, 531, 586, 1249,\n",
" 2455, 583, 1537, 1288, 915, 1750, 707, 1077, 1486,\n",
" 1091, 650, 382, 1436, 1194, 503, 1017, 1104, 639,\n",
" 629, 919, 781, 530, 640, 765, 777, 779, 934,\n",
" 769, 645, 1185, 1324, 830, 1187, 1111, 760, 642,\n",
" 1604, 1095, 966, 473, 1138, 1811, 988, 917, 1156,\n",
" 687, 11714, 836, 1347, 2866, 1646, 259, 609, 697,\n",
" 585, 475, 690, 308, 1823, 1361, 1273, 924, 584,\n",
" 2078, 831, 1172, 893, 1872, 1885, 1266, 447, 2148,\n",
" 1730, 730, 289, 502, 333, 1325, 247, 879, 1342,\n",
" 1327, 1598, 1514, 1058, 738, 1935, 481, 1522, 1282,\n",
" 456, 880, 900, 798, 1277, 442, 1051, 790, 1292,\n",
" 1047, 528, 1211, 1493, 1793, 574, 930, 1998, 271,\n",
" 706, 1481, 1677, 1661, 1286, 1408, 1090, 595, 1451,\n",
" 1267, 993, 1714, 878, 641, 749, 1511, 603, 353,\n",
" 877, 1236, 1141, 397, 784, 1024, 1357, 1301, 770,\n",
" 922, 1438, 753, 607, 1363, 638, 490, 431, 565,\n",
" 517, 833, 489, 1760, 986, 1841, 1620, 1360, 474,\n",
" 1099, 978, 1624, 1946, 1268, 1307, 696, 649, 666,\n",
" 2151, 551, 800, 971, 1323, 2377, 1845, 1083, 694,\n",
" 463, 419, 345, 1515, 1505, 2056, 1203, 729, 460,\n",
" 1356, 876, 911, 1190, 780, 448, 2410, 1848, 1148,\n",
" 834, 1275, 1028, 1197, 724, 890, 1705, 505, 789,\n",
" 2959, 518, 461, 1719, 2858, 3156, 2225, 2177, 1968,\n",
" 1888, 1308, 2736, 1103, 557, 2195, 843, 1664, 723,\n",
" 4508, 562, 501, 2018, 1076, 1202, 3301, 691, 1440,\n",
" 1869, 1178, 418, 1820, 1413, 488, 1304, 363, 2108,\n",
" 521, 1659, 87, 1411, 1528, 3292, 7058, 1578, 627,\n",
" 874, 1996, 1488, 5679, 1234, 5603, 400, 889, 3268,\n",
" 875, 949, 2265, 441, 742, 425, 2476, 2971, 614,\n",
" 1816, 1375, 1405, 2297, 1062, 1113, 420, 2469, 658,\n",
" 1951, 2670, 2578, 1995, 1032, 994, 1011, 2421, 1296,\n",
" 155, 494, 426, 1086, 961, 2236, 1829, 764, 1834,\n",
" 1054, 617, 1529, 2266, 637, 626, 1832, 1016, 2002,\n",
" 1756, 746, 1285, 2690, 1118, 5332, 980, 1807, 970,\n",
" 1228, 1195, 1132, 1768, 1384, 1080, 7063, 1817, 1452,\n",
" 1975, 1368, 702, 1974, 1781, 1036, 944, 663, 364,\n",
" 1539, 1345, 1680, 2209, 741, 1575, 695, 1317, 294,\n",
" 1525, 424, 997, 1473, 1552, 2819, 2188, 1668, 3057,\n",
" 799, 1502, 2606, 552, 1694, 1759, 1110, 399, 1470,\n",
" 1174, 5877, 1474, 1688, 526, 686, 5908, 1107, 2070,\n",
" 1468, 1246, 1685, 556, 1533, 1917, 1346, 732, 692,\n",
" 579, 421, 362, 3505, 1855, 2711, 1586, 3739, 681,\n",
" 1708, 2278, 1701, 722, 1482, 928, 827, 832, 527,\n",
" 604, 173, 1341, 3329, 1553, 859, 167, 916, 828,\n",
" 2082, 1176, 1108, 975, 3008, 1516, 2269, 1699, 2073,\n",
" 1031, 1503, 2364, 1030, 1442, 5666, 2715, 1437, 2067,\n",
" 1426, 2908, 1279, 866, 4283, 279, 2658, 3015, 2004,\n",
" 1391, 4736, 748, 1466, 644, 683, 2705, 1297, 731,\n",
" 1252, 2216, 3141, 3273, 1518, 1723, 1588, 972, 682,\n",
" 1094, 668, 175, 967, 402, 3894, 1960, 1599, 2000,\n",
" 2084, 1621, 714, 1109, 3989, 873, 1572, 1163, 1991,\n",
" 1716, 1673, 2562, 2874, 965, 462, 605, 1948, 1736,\n",
" 3518, 2054, 2467, 1681, 1272, 1205, 750, 2156, 2566,\n",
" 115, 524, 3184, 676, 1678, 612, 328, 955, 1441,\n",
" 1675, 3965, 2909, 623, 822, 867, 3025, 1993, 792,\n",
" 636, 4057, 3743, 2337, 2570, 2418, 2472, 3910, 1662,\n",
" 2123, 2628, 3208, 2080, 3699, 2913, 864, 2505, 870,\n",
" 7536, 1924, 1671, 1064, 1836, 1866, 4741, 841, 1369,\n",
" 5681, 3112, 1366, 2223, 1198, 1039, 3811, 3571, 1387,\n",
" 1171, 1365, 1531, 1590, 11706, 2308, 4860, 1641, 1045,\n",
" 1901])"
]
},
"execution_count": 975,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df[\"Levy\"] = df[\"Levy\"].replace(\"-\", \"0\")\n",
"df[\"Levy\"] = df[\"Levy\"].astype(\"int64\")\n",
"df[\"Levy\"].unique()"
]
},
{
"cell_type": "code",
"execution_count": 976,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([ 6, 4, 8, 1, 12, 3, 2, 16, 5, 7, 9, 10, 14])"
]
},
"execution_count": 976,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df[\"Cylinders\"] = df[\"Cylinders\"].astype(\"int64\")\n",
"df[\"Cylinders\"].unique()"
]
},
{
"cell_type": "code",
"execution_count": 977,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array(['04-May', '02-Mar', '>5'], dtype=object)"
]
},
"execution_count": 977,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df[\"Doors\"].unique()"
]
},
{
"cell_type": "code",
"execution_count": 978,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array(['Четырехдверный', 'Двухдверный', 'Многодверный'], dtype=object)"
]
},
"execution_count": 978,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df[\"Doors\"] = df[\"Doors\"].map(\n",
" {\"02-Mar\": \"Двухдверный\", \"04-May\": \"Четырехдверный\", \">5\": \"Многодверный\"}\n",
")\n",
"df[\"Doors\"].unique()"
]
},
{
"cell_type": "code",
"execution_count": 979,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([ 1, 3, 6, ..., 627220, 872946, 26307500])"
]
},
"execution_count": 979,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sorted_df = df.sort_values(by=\"Price\")\n",
"sorted_df[\"Price\"].unique()"
]
},
{
"cell_type": "code",
"execution_count": 980,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Количество строк до удаления некорректных значений: 19237\n",
"Количество строк после удаления некорректных значений: 17574\n"
]
}
],
"source": [
"print(f\"Количество строк до удаления некорректных значений: {len(df)}\")\n",
"df = df[df[\"Price\"] >= 500]\n",
"print(f\"Количество строк после удаления некорректных значений: {len(df)}\")"
]
},
{
"cell_type": "code",
"execution_count": 981,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([ 500, 549, 600, ..., 627220, 872946, 26307500])"
]
},
"execution_count": 981,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sorted_df = df.sort_values(by=\"Price\")\n",
"sorted_df[\"Price\"].unique()"
]
},
{
"cell_type": "code",
"execution_count": 982,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([1943, 1953, 1957, 1964, 1965, 1968, 1973, 1974, 1977, 1978, 1980,\n",
" 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991,\n",
" 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,\n",
" 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013,\n",
" 2014, 2015, 2016, 2017, 2018, 2019, 2020])"
]
},
"execution_count": 982,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sorted_df = df.sort_values(by=\"Prod. year\")\n",
"sorted_df[\"Prod. year\"].unique()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Ручной синтез признаков."
]
},
{
"cell_type": "code",
"execution_count": 983,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,\n",
" 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33,\n",
" 34, 35, 36, 37, 38, 39, 40, 42, 43, 46, 47, 52, 55, 56, 63, 67, 77])"
]
},
"execution_count": 983,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df[\"Age\"] = 2020 - df[\"Prod. year\"]\n",
"df = df.drop(\"Prod. year\", axis=1)\n",
"sorted_df = df.sort_values(by=\"Age\")\n",
"sorted_df[\"Age\"].unique()"
]
},
{
"cell_type": "code",
"execution_count": 984,
"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>Price</th>\n",
" <th>Levy</th>\n",
" <th>Manufacturer</th>\n",
" <th>Model</th>\n",
" <th>Category</th>\n",
" <th>Leather interior</th>\n",
" <th>Fuel type</th>\n",
" <th>Engine volume</th>\n",
" <th>Mileage</th>\n",
" <th>Cylinders</th>\n",
" <th>Gear box type</th>\n",
" <th>Drive wheels</th>\n",
" <th>Doors</th>\n",
" <th>Wheel</th>\n",
" <th>Color</th>\n",
" <th>Airbags</th>\n",
" <th>Age</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>13328</td>\n",
" <td>1399</td>\n",
" <td>LEXUS</td>\n",
" <td>RX 450</td>\n",
" <td>Jeep</td>\n",
" <td>Yes</td>\n",
" <td>Hybrid</td>\n",
" <td>3.5</td>\n",
" <td>186005</td>\n",
" <td>6</td>\n",
" <td>Automatic</td>\n",
" <td>4x4</td>\n",
" <td>Четырехдверный</td>\n",
" <td>Left wheel</td>\n",
" <td>Silver</td>\n",
" <td>12</td>\n",
" <td>10</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>16621</td>\n",
" <td>1018</td>\n",
" <td>CHEVROLET</td>\n",
" <td>Equinox</td>\n",
" <td>Jeep</td>\n",
" <td>No</td>\n",
" <td>Petrol</td>\n",
" <td>3.0</td>\n",
" <td>192000</td>\n",
" <td>6</td>\n",
" <td>Tiptronic</td>\n",
" <td>4x4</td>\n",
" <td>Четырехдверный</td>\n",
" <td>Left wheel</td>\n",
" <td>Black</td>\n",
" <td>8</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>8467</td>\n",
" <td>0</td>\n",
" <td>HONDA</td>\n",
" <td>FIT</td>\n",
" <td>Hatchback</td>\n",
" <td>No</td>\n",
" <td>Petrol</td>\n",
" <td>1.3</td>\n",
" <td>200000</td>\n",
" <td>4</td>\n",
" <td>Variator</td>\n",
" <td>Front</td>\n",
" <td>Четырехдверный</td>\n",
" <td>Right-hand drive</td>\n",
" <td>Black</td>\n",
" <td>2</td>\n",
" <td>14</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>3607</td>\n",
" <td>862</td>\n",
" <td>FORD</td>\n",
" <td>Escape</td>\n",
" <td>Jeep</td>\n",
" <td>Yes</td>\n",
" <td>Hybrid</td>\n",
" <td>2.5</td>\n",
" <td>168966</td>\n",
" <td>4</td>\n",
" <td>Automatic</td>\n",
" <td>4x4</td>\n",
" <td>Четырехдверный</td>\n",
" <td>Left wheel</td>\n",
" <td>White</td>\n",
" <td>0</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>11726</td>\n",
" <td>446</td>\n",
" <td>HONDA</td>\n",
" <td>FIT</td>\n",
" <td>Hatchback</td>\n",
" <td>Yes</td>\n",
" <td>Petrol</td>\n",
" <td>1.3</td>\n",
" <td>91901</td>\n",
" <td>4</td>\n",
" <td>Automatic</td>\n",
" <td>Front</td>\n",
" <td>Четырехдверный</td>\n",
" <td>Left wheel</td>\n",
" <td>Silver</td>\n",
" <td>4</td>\n",
" <td>6</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",
" </tr>\n",
" <tr>\n",
" <th>19231</th>\n",
" <td>5802</td>\n",
" <td>1055</td>\n",
" <td>MERCEDES-BENZ</td>\n",
" <td>E 350</td>\n",
" <td>Sedan</td>\n",
" <td>Yes</td>\n",
" <td>Diesel</td>\n",
" <td>3.5</td>\n",
" <td>107800</td>\n",
" <td>6</td>\n",
" <td>Automatic</td>\n",
" <td>Rear</td>\n",
" <td>Четырехдверный</td>\n",
" <td>Left wheel</td>\n",
" <td>Grey</td>\n",
" <td>12</td>\n",
" <td>7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>19232</th>\n",
" <td>8467</td>\n",
" <td>0</td>\n",
" <td>MERCEDES-BENZ</td>\n",
" <td>CLK 200</td>\n",
" <td>Coupe</td>\n",
" <td>Yes</td>\n",
" <td>CNG</td>\n",
" <td>2.0</td>\n",
" <td>300000</td>\n",
" <td>4</td>\n",
" <td>Manual</td>\n",
" <td>Rear</td>\n",
" <td>Двухдверный</td>\n",
" <td>Left wheel</td>\n",
" <td>Silver</td>\n",
" <td>5</td>\n",
" <td>21</td>\n",
" </tr>\n",
" <tr>\n",
" <th>19233</th>\n",
" <td>15681</td>\n",
" <td>831</td>\n",
" <td>HYUNDAI</td>\n",
" <td>Sonata</td>\n",
" <td>Sedan</td>\n",
" <td>Yes</td>\n",
" <td>Petrol</td>\n",
" <td>2.4</td>\n",
" <td>161600</td>\n",
" <td>4</td>\n",
" <td>Tiptronic</td>\n",
" <td>Front</td>\n",
" <td>Четырехдверный</td>\n",
" <td>Left wheel</td>\n",
" <td>Red</td>\n",
" <td>8</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>19234</th>\n",
" <td>26108</td>\n",
" <td>836</td>\n",
" <td>HYUNDAI</td>\n",
" <td>Tucson</td>\n",
" <td>Jeep</td>\n",
" <td>Yes</td>\n",
" <td>Diesel</td>\n",
" <td>2.0</td>\n",
" <td>116365</td>\n",
" <td>4</td>\n",
" <td>Automatic</td>\n",
" <td>Front</td>\n",
" <td>Четырехдверный</td>\n",
" <td>Left wheel</td>\n",
" <td>Grey</td>\n",
" <td>4</td>\n",
" <td>10</td>\n",
" </tr>\n",
" <tr>\n",
" <th>19235</th>\n",
" <td>5331</td>\n",
" <td>1288</td>\n",
" <td>CHEVROLET</td>\n",
" <td>Captiva</td>\n",
" <td>Jeep</td>\n",
" <td>Yes</td>\n",
" <td>Diesel</td>\n",
" <td>2.0</td>\n",
" <td>51258</td>\n",
" <td>4</td>\n",
" <td>Automatic</td>\n",
" <td>Front</td>\n",
" <td>Четырехдверный</td>\n",
" <td>Left wheel</td>\n",
" <td>Black</td>\n",
" <td>4</td>\n",
" <td>13</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>17574 rows × 17 columns</p>\n",
"</div>"
],
"text/plain": [
" Price Levy Manufacturer Model Category Leather interior \\\n",
"0 13328 1399 LEXUS RX 450 Jeep Yes \n",
"1 16621 1018 CHEVROLET Equinox Jeep No \n",
"2 8467 0 HONDA FIT Hatchback No \n",
"3 3607 862 FORD Escape Jeep Yes \n",
"4 11726 446 HONDA FIT Hatchback Yes \n",
"... ... ... ... ... ... ... \n",
"19231 5802 1055 MERCEDES-BENZ E 350 Sedan Yes \n",
"19232 8467 0 MERCEDES-BENZ CLK 200 Coupe Yes \n",
"19233 15681 831 HYUNDAI Sonata Sedan Yes \n",
"19234 26108 836 HYUNDAI Tucson Jeep Yes \n",
"19235 5331 1288 CHEVROLET Captiva Jeep Yes \n",
"\n",
" Fuel type Engine volume Mileage Cylinders Gear box type Drive wheels \\\n",
"0 Hybrid 3.5 186005 6 Automatic 4x4 \n",
"1 Petrol 3.0 192000 6 Tiptronic 4x4 \n",
"2 Petrol 1.3 200000 4 Variator Front \n",
"3 Hybrid 2.5 168966 4 Automatic 4x4 \n",
"4 Petrol 1.3 91901 4 Automatic Front \n",
"... ... ... ... ... ... ... \n",
"19231 Diesel 3.5 107800 6 Automatic Rear \n",
"19232 CNG 2.0 300000 4 Manual Rear \n",
"19233 Petrol 2.4 161600 4 Tiptronic Front \n",
"19234 Diesel 2.0 116365 4 Automatic Front \n",
"19235 Diesel 2.0 51258 4 Automatic Front \n",
"\n",
" Doors Wheel Color Airbags Age \n",
"0 Четырехдверный Left wheel Silver 12 10 \n",
"1 Четырехдверный Left wheel Black 8 9 \n",
"2 Четырехдверный Right-hand drive Black 2 14 \n",
"3 Четырехдверный Left wheel White 0 9 \n",
"4 Четырехдверный Left wheel Silver 4 6 \n",
"... ... ... ... ... ... \n",
"19231 Четырехдверный Left wheel Grey 12 7 \n",
"19232 Двухдверный Left wheel Silver 5 21 \n",
"19233 Четырехдверный Left wheel Red 8 9 \n",
"19234 Четырехдверный Left wheel Grey 4 10 \n",
"19235 Четырехдверный Left wheel Black 4 13 \n",
"\n",
"[17574 rows x 17 columns]"
]
},
"execution_count": 984,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Очистка дубликатов и пропущенных значений"
]
},
{
"cell_type": "code",
"execution_count": 985,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"np.int64(2773)"
]
},
"execution_count": 985,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.duplicated().sum()"
]
},
{
"cell_type": "code",
"execution_count": 986,
"metadata": {},
"outputs": [],
"source": [
"df.drop_duplicates(inplace=True)"
]
},
{
"cell_type": "code",
"execution_count": 987,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Price 0\n",
"Levy 0\n",
"Manufacturer 0\n",
"Model 0\n",
"Category 0\n",
"Leather interior 0\n",
"Fuel type 0\n",
"Engine volume 0\n",
"Mileage 0\n",
"Cylinders 0\n",
"Gear box type 0\n",
"Drive wheels 0\n",
"Doors 0\n",
"Wheel 0\n",
"Color 0\n",
"Airbags 0\n",
"Age 0\n",
"dtype: int64"
]
},
"execution_count": 987,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.isna().sum()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Очистка выбросов"
]
},
{
"cell_type": "code",
"execution_count": 988,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Price int64\n",
"Levy int64\n",
"Manufacturer object\n",
"Model object\n",
"Category object\n",
"Leather interior object\n",
"Fuel type object\n",
"Engine volume float64\n",
"Mileage int64\n",
"Cylinders int64\n",
"Gear box type object\n",
"Drive wheels object\n",
"Doors object\n",
"Wheel object\n",
"Color object\n",
"Airbags int64\n",
"Age int64\n",
"dtype: object"
]
},
"execution_count": 988,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.dtypes"
]
},
{
"cell_type": "code",
"execution_count": 989,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 400x3000 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 400x3000 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 400x3000 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 400x3000 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"numeric_features_with_outliers = [\n",
" \"Price\",\n",
" \"Levy\",\n",
" \"Mileage\",\n",
" \"Age\",\n",
"]\n",
"\n",
"i = 1\n",
"for col in numeric_features_with_outliers:\n",
" plt.figure(figsize=(4, 30))\n",
" plt.subplot(6, 1, i)\n",
" df.boxplot(column=col)\n",
" i += 1"
]
},
{
"cell_type": "code",
"execution_count": 990,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Количество строк до удаления выбросов: 14801\n",
"Количество строк после удаления выбросов: 12597\n"
]
}
],
"source": [
"def remove_outliers(df, column):\n",
" Q1 = df[column].quantile(0.25)\n",
" Q3 = df[column].quantile(0.75)\n",
" IQR = Q3 - Q1\n",
" lower_bound = Q1 - 1.5 * IQR\n",
" upper_bound = Q3 + 1.5 * IQR\n",
" return df[(df[column] >= lower_bound) & (df[column] <= upper_bound)]\n",
"\n",
"print(f\"Количество строк до удаления выбросов: {len(df)}\")\n",
"\n",
"for column in numeric_features_with_outliers:\n",
" df = remove_outliers(df, column)\n",
"\n",
"print(f\"Количество строк после удаления выбросов: {len(df)}\")"
]
},
{
"cell_type": "code",
"execution_count": 991,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 400x3000 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 400x3000 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 400x3000 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 400x3000 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"i = 1\n",
"for col in numeric_features_with_outliers:\n",
" plt.figure(figsize=(4, 30))\n",
" plt.subplot(6, 1, i)\n",
" df.boxplot(column=col)\n",
" i += 1"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Разбиение на выборки"
]
},
{
"cell_type": "code",
"execution_count": 992,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Размеры выборок:\n",
"Обучающая выборка: 10077 записей\n",
"Тестовая выборка: 2520 записей\n"
]
}
],
"source": [
"train_df, test_df = train_test_split(df, test_size=0.2, random_state=42)\n",
"\n",
"print(\"Размеры выборок:\")\n",
"print(f\"Обучающая выборка: {train_df.shape[0]} записей\")\n",
"print(f\"Тестовая выборка: {test_df.shape[0]} записей\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Дискретизация числовых признаков"
]
},
{
"cell_type": "code",
"execution_count": 993,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Price int64\n",
"Levy int64\n",
"Manufacturer object\n",
"Model object\n",
"Category object\n",
"Leather interior object\n",
"Fuel type object\n",
"Engine volume float64\n",
"Mileage int64\n",
"Cylinders int64\n",
"Gear box type object\n",
"Drive wheels object\n",
"Doors object\n",
"Wheel object\n",
"Color object\n",
"Airbags int64\n",
"Age int64\n",
"dtype: object"
]
},
"execution_count": 993,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"train_df.dtypes"
]
},
{
"cell_type": "code",
"execution_count": 994,
"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>Price</th>\n",
" <th>Levy</th>\n",
" <th>Manufacturer</th>\n",
" <th>Model</th>\n",
" <th>Category</th>\n",
" <th>Leather interior</th>\n",
" <th>Fuel type</th>\n",
" <th>Engine volume</th>\n",
" <th>Mileage</th>\n",
" <th>Cylinders</th>\n",
" <th>Gear box type</th>\n",
" <th>Drive wheels</th>\n",
" <th>Doors</th>\n",
" <th>Wheel</th>\n",
" <th>Color</th>\n",
" <th>Airbags</th>\n",
" <th>Age</th>\n",
" <th>Age_bin</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>14829</th>\n",
" <td>6743</td>\n",
" <td>966</td>\n",
" <td>DAEWOO</td>\n",
" <td>Lacetti</td>\n",
" <td>Sedan</td>\n",
" <td>Yes</td>\n",
" <td>Diesel</td>\n",
" <td>2.0</td>\n",
" <td>62227</td>\n",
" <td>4</td>\n",
" <td>Automatic</td>\n",
" <td>Front</td>\n",
" <td>Четырехдверный</td>\n",
" <td>Left wheel</td>\n",
" <td>White</td>\n",
" <td>4</td>\n",
" <td>11</td>\n",
" <td>Старый</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3632</th>\n",
" <td>20005</td>\n",
" <td>583</td>\n",
" <td>HYUNDAI</td>\n",
" <td>Elantra</td>\n",
" <td>Sedan</td>\n",
" <td>Yes</td>\n",
" <td>Petrol</td>\n",
" <td>1.6</td>\n",
" <td>94479</td>\n",
" <td>4</td>\n",
" <td>Automatic</td>\n",
" <td>Front</td>\n",
" <td>Четырехдверный</td>\n",
" <td>Left wheel</td>\n",
" <td>Red</td>\n",
" <td>4</td>\n",
" <td>9</td>\n",
" <td>Средний</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4982</th>\n",
" <td>13172</td>\n",
" <td>836</td>\n",
" <td>DODGE</td>\n",
" <td>Caliber</td>\n",
" <td>Hatchback</td>\n",
" <td>No</td>\n",
" <td>Petrol</td>\n",
" <td>2.0</td>\n",
" <td>114000</td>\n",
" <td>4</td>\n",
" <td>Variator</td>\n",
" <td>Front</td>\n",
" <td>Четырехдверный</td>\n",
" <td>Left wheel</td>\n",
" <td>Silver</td>\n",
" <td>8</td>\n",
" <td>10</td>\n",
" <td>Средний</td>\n",
" </tr>\n",
" <tr>\n",
" <th>16758</th>\n",
" <td>8781</td>\n",
" <td>584</td>\n",
" <td>HYUNDAI</td>\n",
" <td>Elantra</td>\n",
" <td>Sedan</td>\n",
" <td>Yes</td>\n",
" <td>Petrol</td>\n",
" <td>1.8</td>\n",
" <td>60000</td>\n",
" <td>4</td>\n",
" <td>Tiptronic</td>\n",
" <td>Front</td>\n",
" <td>Четырехдверный</td>\n",
" <td>Left wheel</td>\n",
" <td>Grey</td>\n",
" <td>10</td>\n",
" <td>6</td>\n",
" <td>Средний</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6875</th>\n",
" <td>25086</td>\n",
" <td>0</td>\n",
" <td>TOYOTA</td>\n",
" <td>Prius</td>\n",
" <td>Hatchback</td>\n",
" <td>No</td>\n",
" <td>Hybrid</td>\n",
" <td>1.8</td>\n",
" <td>0</td>\n",
" <td>4</td>\n",
" <td>Automatic</td>\n",
" <td>Front</td>\n",
" <td>Четырехдверный</td>\n",
" <td>Left wheel</td>\n",
" <td>Silver</td>\n",
" <td>12</td>\n",
" <td>5</td>\n",
" <td>Новый</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",
" </tr>\n",
" <tr>\n",
" <th>18201</th>\n",
" <td>10349</td>\n",
" <td>0</td>\n",
" <td>AUDI</td>\n",
" <td>A4</td>\n",
" <td>Sedan</td>\n",
" <td>Yes</td>\n",
" <td>Petrol</td>\n",
" <td>2.4</td>\n",
" <td>150000</td>\n",
" <td>6</td>\n",
" <td>Manual</td>\n",
" <td>4x4</td>\n",
" <td>Четырехдверный</td>\n",
" <td>Left wheel</td>\n",
" <td>Grey</td>\n",
" <td>4</td>\n",
" <td>13</td>\n",
" <td>Старый</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7436</th>\n",
" <td>2038</td>\n",
" <td>765</td>\n",
" <td>KIA</td>\n",
" <td>Avella</td>\n",
" <td>Sedan</td>\n",
" <td>Yes</td>\n",
" <td>Petrol</td>\n",
" <td>2.0</td>\n",
" <td>125621</td>\n",
" <td>4</td>\n",
" <td>Automatic</td>\n",
" <td>Front</td>\n",
" <td>Четырехдверный</td>\n",
" <td>Left wheel</td>\n",
" <td>Silver</td>\n",
" <td>12</td>\n",
" <td>5</td>\n",
" <td>Новый</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7728</th>\n",
" <td>13485</td>\n",
" <td>843</td>\n",
" <td>TOYOTA</td>\n",
" <td>Prius</td>\n",
" <td>Hatchback</td>\n",
" <td>No</td>\n",
" <td>Hybrid</td>\n",
" <td>1.5</td>\n",
" <td>212000</td>\n",
" <td>4</td>\n",
" <td>Variator</td>\n",
" <td>Front</td>\n",
" <td>Четырехдверный</td>\n",
" <td>Left wheel</td>\n",
" <td>Silver</td>\n",
" <td>8</td>\n",
" <td>12</td>\n",
" <td>Старый</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1136</th>\n",
" <td>15677</td>\n",
" <td>0</td>\n",
" <td>FORD</td>\n",
" <td>Fiesta</td>\n",
" <td>Sedan</td>\n",
" <td>No</td>\n",
" <td>Petrol</td>\n",
" <td>1.6</td>\n",
" <td>74800</td>\n",
" <td>4</td>\n",
" <td>Automatic</td>\n",
" <td>Front</td>\n",
" <td>Четырехдверный</td>\n",
" <td>Left wheel</td>\n",
" <td>Silver</td>\n",
" <td>8</td>\n",
" <td>4</td>\n",
" <td>Новый</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10640</th>\n",
" <td>16308</td>\n",
" <td>751</td>\n",
" <td>KIA</td>\n",
" <td>Optima EX</td>\n",
" <td>Sedan</td>\n",
" <td>Yes</td>\n",
" <td>Petrol</td>\n",
" <td>2.4</td>\n",
" <td>92000</td>\n",
" <td>12</td>\n",
" <td>Tiptronic</td>\n",
" <td>Front</td>\n",
" <td>Четырехдверный</td>\n",
" <td>Left wheel</td>\n",
" <td>Silver</td>\n",
" <td>8</td>\n",
" <td>7</td>\n",
" <td>Средний</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>10077 rows × 18 columns</p>\n",
"</div>"
],
"text/plain": [
" Price Levy Manufacturer Model Category Leather interior \\\n",
"14829 6743 966 DAEWOO Lacetti Sedan Yes \n",
"3632 20005 583 HYUNDAI Elantra Sedan Yes \n",
"4982 13172 836 DODGE Caliber Hatchback No \n",
"16758 8781 584 HYUNDAI Elantra Sedan Yes \n",
"6875 25086 0 TOYOTA Prius Hatchback No \n",
"... ... ... ... ... ... ... \n",
"18201 10349 0 AUDI A4 Sedan Yes \n",
"7436 2038 765 KIA Avella Sedan Yes \n",
"7728 13485 843 TOYOTA Prius Hatchback No \n",
"1136 15677 0 FORD Fiesta Sedan No \n",
"10640 16308 751 KIA Optima EX Sedan Yes \n",
"\n",
" Fuel type Engine volume Mileage Cylinders Gear box type Drive wheels \\\n",
"14829 Diesel 2.0 62227 4 Automatic Front \n",
"3632 Petrol 1.6 94479 4 Automatic Front \n",
"4982 Petrol 2.0 114000 4 Variator Front \n",
"16758 Petrol 1.8 60000 4 Tiptronic Front \n",
"6875 Hybrid 1.8 0 4 Automatic Front \n",
"... ... ... ... ... ... ... \n",
"18201 Petrol 2.4 150000 6 Manual 4x4 \n",
"7436 Petrol 2.0 125621 4 Automatic Front \n",
"7728 Hybrid 1.5 212000 4 Variator Front \n",
"1136 Petrol 1.6 74800 4 Automatic Front \n",
"10640 Petrol 2.4 92000 12 Tiptronic Front \n",
"\n",
" Doors Wheel Color Airbags Age Age_bin \n",
"14829 Четырехдверный Left wheel White 4 11 Старый \n",
"3632 Четырехдверный Left wheel Red 4 9 Средний \n",
"4982 Четырехдверный Left wheel Silver 8 10 Средний \n",
"16758 Четырехдверный Left wheel Grey 10 6 Средний \n",
"6875 Четырехдверный Left wheel Silver 12 5 Новый \n",
"... ... ... ... ... ... ... \n",
"18201 Четырехдверный Left wheel Grey 4 13 Старый \n",
"7436 Четырехдверный Left wheel Silver 12 5 Новый \n",
"7728 Четырехдверный Left wheel Silver 8 12 Старый \n",
"1136 Четырехдверный Left wheel Silver 8 4 Новый \n",
"10640 Четырехдверный Left wheel Silver 8 7 Средний \n",
"\n",
"[10077 rows x 18 columns]"
]
},
"execution_count": 994,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"numeric_features_for_discritization = [\"Age\"]\n",
"\n",
"def discretize_features(df, features, bins=4, labels=[\"Новый\", \"Средний\", \"Старый\", \"Очень старый\"]):\n",
" for feature in features:\n",
" try:\n",
" df[f\"{feature}_bin\"] = pd.cut(df[feature], bins=bins, labels=labels) # type: ignore\n",
" except Exception as e:\n",
" print(f\"Ошибка при дискретизации признака {feature}: {e}\")\n",
" return df\n",
"\n",
"\n",
"train_df = discretize_features(train_df, numeric_features_for_discritization)\n",
"test_df = discretize_features(test_df, numeric_features_for_discritization)\n",
"\n",
"train_df"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Унитарное кодирование категориальных признаков"
]
},
{
"cell_type": "code",
"execution_count": 995,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Price int64\n",
"Levy int64\n",
"Manufacturer object\n",
"Model object\n",
"Category object\n",
"Leather interior object\n",
"Fuel type object\n",
"Engine volume float64\n",
"Mileage int64\n",
"Cylinders int64\n",
"Gear box type object\n",
"Drive wheels object\n",
"Doors object\n",
"Wheel object\n",
"Color object\n",
"Airbags int64\n",
"Age int64\n",
"Age_bin category\n",
"dtype: object"
]
},
"execution_count": 995,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"train_df.dtypes"
]
},
{
"cell_type": "code",
"execution_count": 996,
"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>Price</th>\n",
" <th>Levy</th>\n",
" <th>Manufacturer</th>\n",
" <th>Model</th>\n",
" <th>Engine volume</th>\n",
" <th>Mileage</th>\n",
" <th>Cylinders</th>\n",
" <th>Color</th>\n",
" <th>Airbags</th>\n",
" <th>Age</th>\n",
" <th>...</th>\n",
" <th>Drive wheels_Rear</th>\n",
" <th>Doors_Двухдверный</th>\n",
" <th>Doors_Многодверный</th>\n",
" <th>Doors_Четырехдверный</th>\n",
" <th>Wheel_Left wheel</th>\n",
" <th>Wheel_Right-hand drive</th>\n",
" <th>Age_bin_Новый</th>\n",
" <th>Age_bin_Средний</th>\n",
" <th>Age_bin_Старый</th>\n",
" <th>Age_bin_Очень старый</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>14829</th>\n",
" <td>6743</td>\n",
" <td>966</td>\n",
" <td>DAEWOO</td>\n",
" <td>Lacetti</td>\n",
" <td>2.0</td>\n",
" <td>62227</td>\n",
" <td>4</td>\n",
" <td>White</td>\n",
" <td>4</td>\n",
" <td>11</td>\n",
" <td>...</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>True</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3632</th>\n",
" <td>20005</td>\n",
" <td>583</td>\n",
" <td>HYUNDAI</td>\n",
" <td>Elantra</td>\n",
" <td>1.6</td>\n",
" <td>94479</td>\n",
" <td>4</td>\n",
" <td>Red</td>\n",
" <td>4</td>\n",
" <td>9</td>\n",
" <td>...</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>True</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4982</th>\n",
" <td>13172</td>\n",
" <td>836</td>\n",
" <td>DODGE</td>\n",
" <td>Caliber</td>\n",
" <td>2.0</td>\n",
" <td>114000</td>\n",
" <td>4</td>\n",
" <td>Silver</td>\n",
" <td>8</td>\n",
" <td>10</td>\n",
" <td>...</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>True</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" </tr>\n",
" <tr>\n",
" <th>16758</th>\n",
" <td>8781</td>\n",
" <td>584</td>\n",
" <td>HYUNDAI</td>\n",
" <td>Elantra</td>\n",
" <td>1.8</td>\n",
" <td>60000</td>\n",
" <td>4</td>\n",
" <td>Grey</td>\n",
" <td>10</td>\n",
" <td>6</td>\n",
" <td>...</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>True</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6875</th>\n",
" <td>25086</td>\n",
" <td>0</td>\n",
" <td>TOYOTA</td>\n",
" <td>Prius</td>\n",
" <td>1.8</td>\n",
" <td>0</td>\n",
" <td>4</td>\n",
" <td>Silver</td>\n",
" <td>12</td>\n",
" <td>5</td>\n",
" <td>...</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>True</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</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>18201</th>\n",
" <td>10349</td>\n",
" <td>0</td>\n",
" <td>AUDI</td>\n",
" <td>A4</td>\n",
" <td>2.4</td>\n",
" <td>150000</td>\n",
" <td>6</td>\n",
" <td>Grey</td>\n",
" <td>4</td>\n",
" <td>13</td>\n",
" <td>...</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>True</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7436</th>\n",
" <td>2038</td>\n",
" <td>765</td>\n",
" <td>KIA</td>\n",
" <td>Avella</td>\n",
" <td>2.0</td>\n",
" <td>125621</td>\n",
" <td>4</td>\n",
" <td>Silver</td>\n",
" <td>12</td>\n",
" <td>5</td>\n",
" <td>...</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>True</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7728</th>\n",
" <td>13485</td>\n",
" <td>843</td>\n",
" <td>TOYOTA</td>\n",
" <td>Prius</td>\n",
" <td>1.5</td>\n",
" <td>212000</td>\n",
" <td>4</td>\n",
" <td>Silver</td>\n",
" <td>8</td>\n",
" <td>12</td>\n",
" <td>...</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>True</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1136</th>\n",
" <td>15677</td>\n",
" <td>0</td>\n",
" <td>FORD</td>\n",
" <td>Fiesta</td>\n",
" <td>1.6</td>\n",
" <td>74800</td>\n",
" <td>4</td>\n",
" <td>Silver</td>\n",
" <td>8</td>\n",
" <td>4</td>\n",
" <td>...</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>True</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10640</th>\n",
" <td>16308</td>\n",
" <td>751</td>\n",
" <td>KIA</td>\n",
" <td>Optima EX</td>\n",
" <td>2.4</td>\n",
" <td>92000</td>\n",
" <td>12</td>\n",
" <td>Silver</td>\n",
" <td>8</td>\n",
" <td>7</td>\n",
" <td>...</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>True</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>10077 rows × 46 columns</p>\n",
"</div>"
],
"text/plain": [
" Price Levy Manufacturer Model Engine volume Mileage Cylinders \\\n",
"14829 6743 966 DAEWOO Lacetti 2.0 62227 4 \n",
"3632 20005 583 HYUNDAI Elantra 1.6 94479 4 \n",
"4982 13172 836 DODGE Caliber 2.0 114000 4 \n",
"16758 8781 584 HYUNDAI Elantra 1.8 60000 4 \n",
"6875 25086 0 TOYOTA Prius 1.8 0 4 \n",
"... ... ... ... ... ... ... ... \n",
"18201 10349 0 AUDI A4 2.4 150000 6 \n",
"7436 2038 765 KIA Avella 2.0 125621 4 \n",
"7728 13485 843 TOYOTA Prius 1.5 212000 4 \n",
"1136 15677 0 FORD Fiesta 1.6 74800 4 \n",
"10640 16308 751 KIA Optima EX 2.4 92000 12 \n",
"\n",
" Color Airbags Age ... Drive wheels_Rear Doors_Двухдверный \\\n",
"14829 White 4 11 ... False False \n",
"3632 Red 4 9 ... False False \n",
"4982 Silver 8 10 ... False False \n",
"16758 Grey 10 6 ... False False \n",
"6875 Silver 12 5 ... False False \n",
"... ... ... ... ... ... ... \n",
"18201 Grey 4 13 ... False False \n",
"7436 Silver 12 5 ... False False \n",
"7728 Silver 8 12 ... False False \n",
"1136 Silver 8 4 ... False False \n",
"10640 Silver 8 7 ... False False \n",
"\n",
" Doors_Многодверный Doors_Четырехдверный Wheel_Left wheel \\\n",
"14829 False True True \n",
"3632 False True True \n",
"4982 False True True \n",
"16758 False True True \n",
"6875 False True True \n",
"... ... ... ... \n",
"18201 False True True \n",
"7436 False True True \n",
"7728 False True True \n",
"1136 False True True \n",
"10640 False True True \n",
"\n",
" Wheel_Right-hand drive Age_bin_Новый Age_bin_Средний Age_bin_Старый \\\n",
"14829 False False False True \n",
"3632 False False True False \n",
"4982 False False True False \n",
"16758 False False True False \n",
"6875 False True False False \n",
"... ... ... ... ... \n",
"18201 False False False True \n",
"7436 False True False False \n",
"7728 False False False True \n",
"1136 False True False False \n",
"10640 False False True False \n",
"\n",
" Age_bin_Очень старый \n",
"14829 False \n",
"3632 False \n",
"4982 False \n",
"16758 False \n",
"6875 False \n",
"... ... \n",
"18201 False \n",
"7436 False \n",
"7728 False \n",
"1136 False \n",
"10640 False \n",
"\n",
"[10077 rows x 46 columns]"
]
},
"execution_count": 996,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"categorical_features_for_encoding = [\n",
" \"Leather interior\",\n",
" \"Category\",\n",
" \"Fuel type\",\n",
" \"Gear box type\",\n",
" \"Drive wheels\",\n",
" \"Doors\",\n",
" \"Wheel\",\n",
" \"Age_bin\",\n",
"]\n",
"\n",
"train_df = pd.get_dummies(train_df, columns=categorical_features_for_encoding)\n",
"test_df = pd.get_dummies(test_df, columns=categorical_features_for_encoding)\n",
"\n",
"train_df"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Масштабирование признаков"
]
},
{
"cell_type": "code",
"execution_count": 997,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Price int64\n",
"Levy int64\n",
"Manufacturer object\n",
"Model object\n",
"Engine volume float64\n",
"Mileage int64\n",
"Cylinders int64\n",
"Color object\n",
"Airbags int64\n",
"Age int64\n",
"Leather interior_No bool\n",
"Leather interior_Yes bool\n",
"Category_Cabriolet bool\n",
"Category_Coupe bool\n",
"Category_Goods wagon bool\n",
"Category_Hatchback bool\n",
"Category_Jeep bool\n",
"Category_Limousine bool\n",
"Category_Microbus bool\n",
"Category_Minivan bool\n",
"Category_Pickup bool\n",
"Category_Sedan bool\n",
"Category_Universal bool\n",
"Fuel type_CNG bool\n",
"Fuel type_Diesel bool\n",
"Fuel type_Hybrid bool\n",
"Fuel type_Hydrogen bool\n",
"Fuel type_LPG bool\n",
"Fuel type_Petrol bool\n",
"Fuel type_Plug-in Hybrid bool\n",
"Gear box type_Automatic bool\n",
"Gear box type_Manual bool\n",
"Gear box type_Tiptronic bool\n",
"Gear box type_Variator bool\n",
"Drive wheels_4x4 bool\n",
"Drive wheels_Front bool\n",
"Drive wheels_Rear bool\n",
"Doors_Двухдверный bool\n",
"Doors_Многодверный bool\n",
"Doors_Четырехдверный bool\n",
"Wheel_Left wheel bool\n",
"Wheel_Right-hand drive bool\n",
"Age_bin_Новый bool\n",
"Age_bin_Средний bool\n",
"Age_bin_Старый bool\n",
"Age_bin_Очень старый bool\n",
"dtype: object"
]
},
"execution_count": 997,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"train_df.dtypes"
]
},
{
"cell_type": "code",
"execution_count": 998,
"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>Price</th>\n",
" <th>Levy</th>\n",
" <th>Manufacturer</th>\n",
" <th>Model</th>\n",
" <th>Engine volume</th>\n",
" <th>Mileage</th>\n",
" <th>Cylinders</th>\n",
" <th>Color</th>\n",
" <th>Airbags</th>\n",
" <th>Age</th>\n",
" <th>...</th>\n",
" <th>Drive wheels_Rear</th>\n",
" <th>Doors_Двухдверный</th>\n",
" <th>Doors_Многодверный</th>\n",
" <th>Doors_Четырехдверный</th>\n",
" <th>Wheel_Left wheel</th>\n",
" <th>Wheel_Right-hand drive</th>\n",
" <th>Age_bin_Новый</th>\n",
" <th>Age_bin_Средний</th>\n",
" <th>Age_bin_Старый</th>\n",
" <th>Age_bin_Очень старый</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>14829</th>\n",
" <td>-0.936428</td>\n",
" <td>0.909873</td>\n",
" <td>DAEWOO</td>\n",
" <td>Lacetti</td>\n",
" <td>-0.212078</td>\n",
" <td>-0.855905</td>\n",
" <td>-0.399820</td>\n",
" <td>White</td>\n",
" <td>-0.681491</td>\n",
" <td>0.446831</td>\n",
" <td>...</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>True</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3632</th>\n",
" <td>0.288147</td>\n",
" <td>0.076376</td>\n",
" <td>HYUNDAI</td>\n",
" <td>Elantra</td>\n",
" <td>-0.757467</td>\n",
" <td>-0.422001</td>\n",
" <td>-0.399820</td>\n",
" <td>Red</td>\n",
" <td>-0.681491</td>\n",
" <td>0.013523</td>\n",
" <td>...</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>True</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4982</th>\n",
" <td>-0.342793</td>\n",
" <td>0.626963</td>\n",
" <td>DODGE</td>\n",
" <td>Caliber</td>\n",
" <td>-0.212078</td>\n",
" <td>-0.159374</td>\n",
" <td>-0.399820</td>\n",
" <td>Silver</td>\n",
" <td>0.330763</td>\n",
" <td>0.230177</td>\n",
" <td>...</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>True</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" </tr>\n",
" <tr>\n",
" <th>16758</th>\n",
" <td>-0.748245</td>\n",
" <td>0.078552</td>\n",
" <td>HYUNDAI</td>\n",
" <td>Elantra</td>\n",
" <td>-0.484772</td>\n",
" <td>-0.885866</td>\n",
" <td>-0.399820</td>\n",
" <td>Grey</td>\n",
" <td>0.836890</td>\n",
" <td>-0.636438</td>\n",
" <td>...</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>True</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6875</th>\n",
" <td>0.757313</td>\n",
" <td>-1.192368</td>\n",
" <td>TOYOTA</td>\n",
" <td>Prius</td>\n",
" <td>-0.484772</td>\n",
" <td>-1.693079</td>\n",
" <td>-0.399820</td>\n",
" <td>Silver</td>\n",
" <td>1.343017</td>\n",
" <td>-0.853091</td>\n",
" <td>...</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>True</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</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>18201</th>\n",
" <td>-0.603461</td>\n",
" <td>-1.192368</td>\n",
" <td>AUDI</td>\n",
" <td>A4</td>\n",
" <td>0.333312</td>\n",
" <td>0.324954</td>\n",
" <td>1.520116</td>\n",
" <td>Grey</td>\n",
" <td>-0.681491</td>\n",
" <td>0.880138</td>\n",
" <td>...</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>True</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7436</th>\n",
" <td>-1.370875</td>\n",
" <td>0.472450</td>\n",
" <td>KIA</td>\n",
" <td>Avella</td>\n",
" <td>-0.212078</td>\n",
" <td>-0.003030</td>\n",
" <td>-0.399820</td>\n",
" <td>Silver</td>\n",
" <td>1.343017</td>\n",
" <td>-0.853091</td>\n",
" <td>...</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>True</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7728</th>\n",
" <td>-0.313891</td>\n",
" <td>0.642196</td>\n",
" <td>TOYOTA</td>\n",
" <td>Prius</td>\n",
" <td>-0.893814</td>\n",
" <td>1.159074</td>\n",
" <td>-0.399820</td>\n",
" <td>Silver</td>\n",
" <td>0.330763</td>\n",
" <td>0.663484</td>\n",
" <td>...</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>True</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1136</th>\n",
" <td>-0.111488</td>\n",
" <td>-1.192368</td>\n",
" <td>FORD</td>\n",
" <td>Fiesta</td>\n",
" <td>-0.757467</td>\n",
" <td>-0.686753</td>\n",
" <td>-0.399820</td>\n",
" <td>Silver</td>\n",
" <td>0.330763</td>\n",
" <td>-1.069745</td>\n",
" <td>...</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>True</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10640</th>\n",
" <td>-0.053223</td>\n",
" <td>0.441983</td>\n",
" <td>KIA</td>\n",
" <td>Optima EX</td>\n",
" <td>0.333312</td>\n",
" <td>-0.455352</td>\n",
" <td>7.279922</td>\n",
" <td>Silver</td>\n",
" <td>0.330763</td>\n",
" <td>-0.419784</td>\n",
" <td>...</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>True</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" <td>True</td>\n",
" <td>False</td>\n",
" <td>False</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>10077 rows × 46 columns</p>\n",
"</div>"
],
"text/plain": [
" Price Levy Manufacturer Model Engine volume Mileage \\\n",
"14829 -0.936428 0.909873 DAEWOO Lacetti -0.212078 -0.855905 \n",
"3632 0.288147 0.076376 HYUNDAI Elantra -0.757467 -0.422001 \n",
"4982 -0.342793 0.626963 DODGE Caliber -0.212078 -0.159374 \n",
"16758 -0.748245 0.078552 HYUNDAI Elantra -0.484772 -0.885866 \n",
"6875 0.757313 -1.192368 TOYOTA Prius -0.484772 -1.693079 \n",
"... ... ... ... ... ... ... \n",
"18201 -0.603461 -1.192368 AUDI A4 0.333312 0.324954 \n",
"7436 -1.370875 0.472450 KIA Avella -0.212078 -0.003030 \n",
"7728 -0.313891 0.642196 TOYOTA Prius -0.893814 1.159074 \n",
"1136 -0.111488 -1.192368 FORD Fiesta -0.757467 -0.686753 \n",
"10640 -0.053223 0.441983 KIA Optima EX 0.333312 -0.455352 \n",
"\n",
" Cylinders Color Airbags Age ... Drive wheels_Rear \\\n",
"14829 -0.399820 White -0.681491 0.446831 ... False \n",
"3632 -0.399820 Red -0.681491 0.013523 ... False \n",
"4982 -0.399820 Silver 0.330763 0.230177 ... False \n",
"16758 -0.399820 Grey 0.836890 -0.636438 ... False \n",
"6875 -0.399820 Silver 1.343017 -0.853091 ... False \n",
"... ... ... ... ... ... ... \n",
"18201 1.520116 Grey -0.681491 0.880138 ... False \n",
"7436 -0.399820 Silver 1.343017 -0.853091 ... False \n",
"7728 -0.399820 Silver 0.330763 0.663484 ... False \n",
"1136 -0.399820 Silver 0.330763 -1.069745 ... False \n",
"10640 7.279922 Silver 0.330763 -0.419784 ... False \n",
"\n",
" Doors_Двухдверный Doors_Многодверный Doors_Четырехдверный \\\n",
"14829 False False True \n",
"3632 False False True \n",
"4982 False False True \n",
"16758 False False True \n",
"6875 False False True \n",
"... ... ... ... \n",
"18201 False False True \n",
"7436 False False True \n",
"7728 False False True \n",
"1136 False False True \n",
"10640 False False True \n",
"\n",
" Wheel_Left wheel Wheel_Right-hand drive Age_bin_Новый \\\n",
"14829 True False False \n",
"3632 True False False \n",
"4982 True False False \n",
"16758 True False False \n",
"6875 True False True \n",
"... ... ... ... \n",
"18201 True False False \n",
"7436 True False True \n",
"7728 True False False \n",
"1136 True False True \n",
"10640 True False False \n",
"\n",
" Age_bin_Средний Age_bin_Старый Age_bin_Очень старый \n",
"14829 False True False \n",
"3632 True False False \n",
"4982 True False False \n",
"16758 True False False \n",
"6875 False False False \n",
"... ... ... ... \n",
"18201 False True False \n",
"7436 False False False \n",
"7728 False True False \n",
"1136 False False False \n",
"10640 True False False \n",
"\n",
"[10077 rows x 46 columns]"
]
},
"execution_count": 998,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"scaler = StandardScaler()\n",
"\n",
"numeric_features_for_stardartization = [\n",
" \"Price\",\n",
" \"Levy\",\n",
" \"Engine volume\",\n",
" \"Mileage\",\n",
" \"Cylinders\",\n",
" \"Airbags\",\n",
" \"Age\",\n",
"]\n",
"\n",
"train_df[numeric_features_for_stardartization] = scaler.fit_transform(\n",
" train_df[numeric_features_for_stardartization]\n",
")\n",
"test_df[numeric_features_for_stardartization] = scaler.transform(\n",
" test_df[numeric_features_for_stardartization]\n",
")\n",
"\n",
"train_df"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Конструирование признаков с помощью Featuretools"
]
},
{
"cell_type": "code",
"execution_count": 999,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"c:\\Users\\user\\source\\repos\\mai_pi-33_zakharov\\.venv\\Lib\\site-packages\\featuretools\\entityset\\entityset.py:1717: UserWarning: Using first column as index. To change this, specify the index parameter\n",
" warnings.warn(\n",
"c:\\Users\\user\\source\\repos\\mai_pi-33_zakharov\\.venv\\Lib\\site-packages\\featuretools\\entityset\\entityset.py:1379: SyntaxWarning: invalid escape sequence '\\l'\n",
" columns_string = \"\\l\".join(column_typing_info) # noqa: W605\n",
"c:\\Users\\user\\source\\repos\\mai_pi-33_zakharov\\.venv\\Lib\\site-packages\\featuretools\\entityset\\entityset.py:1381: SyntaxWarning: invalid escape sequence '\\l'\n",
" label = \"{%s (%d row%s)|%s\\l}\" % ( # noqa: W605\n"
]
},
{
"ename": "IndexError",
"evalue": "Index column must be unique",
"output_type": "error",
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[1;31mIndexError\u001b[0m Traceback (most recent call last)",
"Cell \u001b[1;32mIn[999], line 2\u001b[0m\n\u001b[0;32m 1\u001b[0m es \u001b[38;5;241m=\u001b[39m ft\u001b[38;5;241m.\u001b[39mEntitySet(\u001b[38;5;28mid\u001b[39m\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mcar_data\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[1;32m----> 2\u001b[0m es \u001b[38;5;241m=\u001b[39m \u001b[43mes\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43madd_dataframe\u001b[49m\u001b[43m(\u001b[49m\u001b[43mdataframe_name\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mtrain\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdataframe\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtrain_df\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 3\u001b[0m feature_matrix, feature_defs \u001b[38;5;241m=\u001b[39m ft\u001b[38;5;241m.\u001b[39mdfs(\n\u001b[0;32m 4\u001b[0m entityset\u001b[38;5;241m=\u001b[39mes,\n\u001b[0;32m 5\u001b[0m target_dataframe_name\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mtrain\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[0;32m 6\u001b[0m max_depth\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m1\u001b[39m,\n\u001b[0;32m 7\u001b[0m )\n\u001b[0;32m 9\u001b[0m feature_defs\n",
"File \u001b[1;32mc:\\Users\\user\\source\\repos\\mai_pi-33_zakharov\\.venv\\Lib\\site-packages\\featuretools\\entityset\\entityset.py:687\u001b[0m, in \u001b[0;36mEntitySet.add_dataframe\u001b[1;34m(self, dataframe, dataframe_name, index, logical_types, semantic_tags, make_index, time_index, secondary_time_index, already_sorted)\u001b[0m\n\u001b[0;32m 676\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\n\u001b[0;32m 677\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mCannot add dataframe to EntitySet without a name. \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m 678\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mPlease provide a value for the dataframe_name parameter.\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[0;32m 679\u001b[0m )\n\u001b[0;32m 681\u001b[0m index_was_created, index, dataframe \u001b[38;5;241m=\u001b[39m _get_or_create_index(\n\u001b[0;32m 682\u001b[0m index,\n\u001b[0;32m 683\u001b[0m make_index,\n\u001b[0;32m 684\u001b[0m dataframe,\n\u001b[0;32m 685\u001b[0m )\n\u001b[1;32m--> 687\u001b[0m \u001b[43mdataframe\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mww\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43minit\u001b[49m\u001b[43m(\u001b[49m\n\u001b[0;32m 688\u001b[0m \u001b[43m \u001b[49m\u001b[43mname\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mdataframe_name\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 689\u001b[0m \u001b[43m \u001b[49m\u001b[43mindex\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mindex\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 690\u001b[0m \u001b[43m \u001b[49m\u001b[43mtime_index\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtime_index\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 691\u001b[0m \u001b[43m \u001b[49m\u001b[43mlogical_types\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mlogical_types\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 692\u001b[0m \u001b[43m \u001b[49m\u001b[43msemantic_tags\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43msemantic_tags\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 693\u001b[0m \u001b[43m \u001b[49m\u001b[43malready_sorted\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43malready_sorted\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 694\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 695\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m index_was_created:\n\u001b[0;32m 696\u001b[0m dataframe\u001b[38;5;241m.\u001b[39mww\u001b[38;5;241m.\u001b[39mmetadata[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mcreated_index\u001b[39m\u001b[38;5;124m\"\u001b[39m] \u001b[38;5;241m=\u001b[39m index\n",
"File \u001b[1;32mc:\\Users\\user\\source\\repos\\mai_pi-33_zakharov\\.venv\\Lib\\site-packages\\woodwork\\table_accessor.py:96\u001b[0m, in \u001b[0;36mWoodworkTableAccessor.init\u001b[1;34m(self, **kwargs)\u001b[0m\n\u001b[0;32m 44\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21minit\u001b[39m(\u001b[38;5;28mself\u001b[39m, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[0;32m 45\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"Initializes Woodwork typing information for a DataFrame with a partial schema.\u001b[39;00m\n\u001b[0;32m 46\u001b[0m \n\u001b[0;32m 47\u001b[0m \u001b[38;5;124;03m Logical type priority:\u001b[39;00m\n\u001b[1;32m (...)\u001b[0m\n\u001b[0;32m 94\u001b[0m \u001b[38;5;124;03m Any errors resulting from skipping validation with invalid inputs may not be easily understood.\u001b[39;00m\n\u001b[0;32m 95\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[1;32m---> 96\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43minit_with_partial_schema\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n",
"File \u001b[1;32mc:\\Users\\user\\source\\repos\\mai_pi-33_zakharov\\.venv\\Lib\\site-packages\\woodwork\\table_accessor.py:199\u001b[0m, in \u001b[0;36mWoodworkTableAccessor.init_with_partial_schema\u001b[1;34m(self, schema, index, time_index, logical_types, ignore_columns, already_sorted, name, semantic_tags, table_metadata, column_metadata, use_standard_tags, column_descriptions, column_origins, null_invalid_values, validate, **kwargs)\u001b[0m\n\u001b[0;32m 147\u001b[0m \u001b[38;5;250m\u001b[39m\u001b[38;5;124;03m\"\"\"Initializes Woodwork typing information for a DataFrame with a partial schema.\u001b[39;00m\n\u001b[0;32m 148\u001b[0m \n\u001b[0;32m 149\u001b[0m \u001b[38;5;124;03mLogical type priority:\u001b[39;00m\n\u001b[1;32m (...)\u001b[0m\n\u001b[0;32m 196\u001b[0m \u001b[38;5;124;03m Any errors resulting from skipping validation with invalid inputs may not be easily understood.\u001b[39;00m\n\u001b[0;32m 197\u001b[0m \u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[0;32m 198\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m validate:\n\u001b[1;32m--> 199\u001b[0m \u001b[43m_validate_accessor_params\u001b[49m\u001b[43m(\u001b[49m\n\u001b[0;32m 200\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_dataframe\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 201\u001b[0m \u001b[43m \u001b[49m\u001b[43mindex\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 202\u001b[0m \u001b[43m \u001b[49m\u001b[43mtime_index\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 203\u001b[0m \u001b[43m \u001b[49m\u001b[43mlogical_types\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 204\u001b[0m \u001b[43m \u001b[49m\u001b[43mignore_columns\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 205\u001b[0m \u001b[43m \u001b[49m\u001b[43mschema\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 206\u001b[0m \u001b[43m \u001b[49m\u001b[43muse_standard_tags\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 207\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 209\u001b[0m existing_logical_types \u001b[38;5;241m=\u001b[39m {}\n\u001b[0;32m 210\u001b[0m existing_col_descriptions \u001b[38;5;241m=\u001b[39m {}\n",
"File \u001b[1;32mc:\\Users\\user\\source\\repos\\mai_pi-33_zakharov\\.venv\\Lib\\site-packages\\woodwork\\table_accessor.py:1683\u001b[0m, in \u001b[0;36m_validate_accessor_params\u001b[1;34m(dataframe, index, time_index, logical_types, ignore_columns, schema, use_standard_tags)\u001b[0m\n\u001b[0;32m 1681\u001b[0m index \u001b[38;5;241m=\u001b[39m schema\u001b[38;5;241m.\u001b[39mindex\n\u001b[0;32m 1682\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m index \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m-> 1683\u001b[0m \u001b[43m_check_index\u001b[49m\u001b[43m(\u001b[49m\u001b[43mdataframe\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mindex\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 1684\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m logical_types:\n\u001b[0;32m 1685\u001b[0m _check_logical_types(dataframe\u001b[38;5;241m.\u001b[39mcolumns, logical_types)\n",
"File \u001b[1;32mc:\\Users\\user\\source\\repos\\mai_pi-33_zakharov\\.venv\\Lib\\site-packages\\woodwork\\table_accessor.py:1718\u001b[0m, in \u001b[0;36m_check_index\u001b[1;34m(dataframe, index)\u001b[0m\n\u001b[0;32m 1715\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m index \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m 1716\u001b[0m \u001b[38;5;66;03m# User specifies a dataframe index that is not unique or contains null values\u001b[39;00m\n\u001b[0;32m 1717\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m dataframe[index]\u001b[38;5;241m.\u001b[39mis_unique:\n\u001b[1;32m-> 1718\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mIndexError\u001b[39;00m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mIndex column must be unique\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m 1720\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m dataframe[index]\u001b[38;5;241m.\u001b[39misnull()\u001b[38;5;241m.\u001b[39many():\n\u001b[0;32m 1721\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mIndexError\u001b[39;00m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mIndex contains null values\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n",
"\u001b[1;31mIndexError\u001b[0m: Index column must be unique"
]
}
],
"source": [
"es = ft.EntitySet(id=\"car_data\")\n",
"es = es.add_dataframe(dataframe_name=\"train\", dataframe=train_df)\n",
"feature_matrix, feature_defs = ft.dfs(\n",
" entityset=es,\n",
" target_dataframe_name=\"train\",\n",
" max_depth=1,\n",
")\n",
"\n",
"feature_defs"
]
}
],
"metadata": {
"kernelspec": {
"display_name": ".venv",
"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.12.8"
}
},
"nbformat": 4,
"nbformat_minor": 2
}