1341 lines
303 KiB
Plaintext
Raw Normal View History

2025-02-08 02:04:31 +04:00
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# импортируем либы"
]
},
{
"cell_type": "code",
"execution_count": 221,
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"import re\n",
"import numpy as np\n",
"import skfuzzy as fuzz\n",
"import skfuzzy.control as ctrl\n",
"import matplotlib.pyplot as plt"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# загржаем данные"
]
},
{
"cell_type": "code",
"execution_count": 222,
"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>ID</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>45654403</td>\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>44731507</td>\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>45774419</td>\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>45769185</td>\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>45809263</td>\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",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" ID Price Levy Manufacturer Model Prod. year Category \\\n",
"0 45654403 13328 1399 LEXUS RX 450 2010 Jeep \n",
"1 44731507 16621 1018 CHEVROLET Equinox 2011 Jeep \n",
"2 45774419 8467 - HONDA FIT 2006 Hatchback \n",
"3 45769185 3607 862 FORD Escape 2011 Jeep \n",
"4 45809263 11726 446 HONDA FIT 2014 Hatchback \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",
" 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 "
]
},
"execution_count": 222,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df = pd.read_csv(\"..//static//csv//car_price_prediction.csv\", sep=\",\")\n",
"df.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# небольшая обработка данных"
]
},
{
"cell_type": "code",
"execution_count": 223,
"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>ID</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>45654403</td>\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</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>44731507</td>\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.0</td>\n",
" <td>192000</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>45774419</td>\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</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>45769185</td>\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</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>45809263</td>\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</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",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" ID Price Levy Manufacturer Model Prod. year Category \\\n",
"0 45654403 13328 1399 LEXUS RX 450 2010 Jeep \n",
"1 44731507 16621 1018 CHEVROLET Equinox 2011 Jeep \n",
"2 45774419 8467 - HONDA FIT 2006 Hatchback \n",
"3 45769185 3607 862 FORD Escape 2011 Jeep \n",
"4 45809263 11726 446 HONDA FIT 2014 Hatchback \n",
"\n",
" Leather interior Fuel type Engine volume Mileage Cylinders Gear box type \\\n",
"0 Yes Hybrid 3.5 186005 6.0 Automatic \n",
"1 No Petrol 3.0 192000 6.0 Tiptronic \n",
"2 No Petrol 1.3 200000 4.0 Variator \n",
"3 Yes Hybrid 2.5 168966 4.0 Automatic \n",
"4 Yes Petrol 1.3 91901 4.0 Automatic \n",
"\n",
" Drive wheels Doors Wheel Color Airbags \n",
"0 4x4 04-May Left wheel Silver 12 \n",
"1 4x4 04-May Left wheel Black 8 \n",
"2 Front 04-May Right-hand drive Black 2 \n",
"3 4x4 04-May Left wheel White 0 \n",
"4 Front 04-May Left wheel Silver 4 "
]
},
"execution_count": 223,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df['Mileage'] = df['Mileage'].str.replace(' km', '').str.replace(',', '')\n",
"df['Mileage'] = df['Mileage'].astype(int)\n",
"df['Engine volume'] = df['Engine volume'].apply(lambda x: float(re.match(r'\\d+(\\.\\d+)?', x).group()) if isinstance(x, str) else x)\n",
"df.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Выбор входных и выходных переменных\n",
"Перед тем как строить нечеткую систему, нужно определить, какие переменные будут входными, а какие выходными. \n",
" \n",
"### Входные переменные (fuzzy inputs):\n",
"- Prod. year (год выпуска) влияет на цену машины.\n",
"- Mileage (пробег) чем выше пробег, тем дешевле машина.\n",
" \n",
"### Выходная переменная (fuzzy output):\n",
"- Price (цена) оцениваемая стоимость автомобиля."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Настройка лингвистических переменных \n",
"Определяем, какие термы будут у каждой переменной, их тип (например, треугольные или гауссовые функции принадлежности) и параметры. \n",
" \n",
"### Продолжительность эксплуатации (Prod. year)\n",
"- Старый (Old)\n",
"- Средний (Medium)\n",
"- Новый (New)\n",
" \n",
"### Пробег (Mileage)\n",
"- Маленький (Low)\n",
"- Средний (Medium)\n",
"- Большой (High)\n",
" \n",
"### Цена (Price)\n",
"- Дешевая (Cheap)\n",
"- Средняя (Medium)\n",
"- Дорогая (Expensive)"
]
},
{
"cell_type": "code",
"execution_count": 224,
"metadata": {},
"outputs": [],
"source": [
"pryMin, pryMax = df['Prod. year'].quantile(0.01), df['Prod. year'].quantile(0.97)\n",
"milMin, milMax = df['Mileage'].quantile(0.01), df['Mileage'].quantile(0.80)\n",
"priMin, priMax = df['Price'].quantile(0.01), df['Price'].quantile(0.97)\n",
"\n",
"# Определяем диапазоны переменных\n",
"prod_year = np.arange(pryMin, pryMax, 1) # Годы выпуска\n",
"mileage = np.arange(milMin, milMax, 1) # Пробег\n",
"price = np.arange(priMin, priMax, 1) # Цена\n",
"\n",
"# Определение переменных\n",
"prod_year_ctrl = ctrl.Antecedent(prod_year, 'prod_year')\n",
"mileage_ctrl = ctrl.Antecedent(mileage, 'mileage')\n",
"price_ctrl = ctrl.Consequent(price, 'price')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Настраиваем функции принадлежности"
]
},
{
"cell_type": "code",
"execution_count": 225,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"d:\\МИИ\\AIM-PIbd-31-Kouvshinoff-T-A\\laba\\Lib\\site-packages\\skfuzzy\\control\\fuzzyvariable.py:125: UserWarning: FigureCanvasAgg is non-interactive, and thus cannot be shown\n",
" fig.show()\n"
]
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Функции принадлежности\n",
"pryMid = (pryMin+pryMax)/2\n",
"prod_year_ctrl['old'] = fuzz.trimf(prod_year, [pryMin, pryMin, pryMax])\n",
"prod_year_ctrl['medium'] = fuzz.trimf(prod_year, [pryMin, pryMid, pryMax])\n",
"prod_year_ctrl['new'] = fuzz.trimf(prod_year, [pryMin, pryMax, pryMax])\n",
"\n",
"milMid = (milMin+milMax)/2\n",
"mileage_ctrl['low'] = fuzz.trimf(mileage, [milMin, milMin, milMax])\n",
"mileage_ctrl['medium'] = fuzz.trimf(mileage, [milMin, milMid, milMax])\n",
"mileage_ctrl['high'] = fuzz.trimf(mileage, [milMin, milMax, milMax])\n",
"\n",
"priMid = (priMin+priMax)/2\n",
"price_ctrl['cheap'] = fuzz.trimf(price, [priMin, priMin, priMax])\n",
"price_ctrl['medium'] = fuzz.trimf(price, [priMin, priMid, priMax])\n",
"price_ctrl['expensive'] = fuzz.trimf(price, [priMin, priMax, priMax])\n",
"\n",
"# визуализируем\n",
"prod_year_ctrl.view()\n",
"mileage_ctrl.view()\n",
"price_ctrl.view()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Формирование базы нечетких правил\n",
"Создаем логические зависимости между входными и выходными переменными. \n",
" \n",
"### правила: \n",
"1. Если машина старая и пробег высокий, то цена дешевая.\n",
"2. Если машина средняя по возрасту и пробег средний, то цена средняя.\n",
"3. Если машина новая и пробег маленький, то цена дорогая."
]
},
{
"cell_type": "code",
"execution_count": 226,
"metadata": {},
"outputs": [],
"source": [
"# Определение правил\n",
"rule1 = ctrl.Rule(prod_year_ctrl['old'] & mileage_ctrl['high'], price_ctrl['cheap'])\n",
"rule2 = ctrl.Rule(prod_year_ctrl['medium'] & mileage_ctrl['medium'], price_ctrl['medium'])\n",
"rule3 = ctrl.Rule(prod_year_ctrl['new'] & mileage_ctrl['low'], price_ctrl['expensive'])\n",
"\n",
"# Создаем систему\n",
"price_control = ctrl.ControlSystem([rule1, rule2, rule3])\n",
"price_simulation = ctrl.ControlSystemSimulation(price_control)"
]
},
{
"cell_type": "code",
"execution_count": 227,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"d:\\МИИ\\AIM-PIbd-31-Kouvshinoff-T-A\\laba\\Lib\\site-packages\\skfuzzy\\control\\controlsystem.py:135: UserWarning: FigureCanvasAgg is non-interactive, and thus cannot be shown\n",
" fig.show()\n"
]
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"price_control.view()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Оценка качества нечеткой системы\n",
"Чтобы проверить работу модели, можно подать тестовые данные и посмотреть, как система определяет цену. \n"
]
},
{
"cell_type": "code",
"execution_count": 228,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"=============\n",
" Antecedents \n",
"=============\n",
"Antecedent: prod_year = 2014\n",
" - old : 0.17391304347826086\n",
" - medium : 0.34782608695652173\n",
" - new : 0.8260869565217391\n",
"Antecedent: mileage = 65000\n",
" - low : 0.6826171875\n",
" - medium : 0.634765625\n",
" - high : 0.3173828125\n",
"\n",
"=======\n",
" Rules \n",
"=======\n",
"RULE #0:\n",
" IF prod_year[old] AND mileage[high] THEN price[cheap]\n",
"\tAND aggregation function : fmin\n",
"\tOR aggregation function : fmax\n",
"\n",
" Aggregation (IF-clause):\n",
" - prod_year[old] : 0.17391304347826086\n",
" - mileage[high] : 0.3173828125\n",
" prod_year[old] AND mileage[high] = 0.17391304347826086\n",
" Activation (THEN-clause):\n",
" price[cheap] : 0.17391304347826086\n",
"\n",
"RULE #1:\n",
" IF prod_year[medium] AND mileage[medium] THEN price[medium]\n",
"\tAND aggregation function : fmin\n",
"\tOR aggregation function : fmax\n",
"\n",
" Aggregation (IF-clause):\n",
" - prod_year[medium] : 0.34782608695652173\n",
" - mileage[medium] : 0.634765625\n",
" prod_year[medium] AND mileage[medium] = 0.34782608695652173\n",
" Activation (THEN-clause):\n",
" price[medium] : 0.34782608695652173\n",
"\n",
"RULE #2:\n",
" IF prod_year[new] AND mileage[low] THEN price[expensive]\n",
"\tAND aggregation function : fmin\n",
"\tOR aggregation function : fmax\n",
"\n",
" Aggregation (IF-clause):\n",
" - prod_year[new] : 0.8260869565217391\n",
" - mileage[low] : 0.6826171875\n",
" prod_year[new] AND mileage[low] = 0.6826171875\n",
" Activation (THEN-clause):\n",
" price[expensive] : 0.6826171875\n",
"\n",
"\n",
"==============================\n",
" Intermediaries and Conquests \n",
"==============================\n",
"Consequent: price = 34672.486956500354\n",
" cheap:\n",
" Accumulate using accumulation_max : 0.17391304347826086\n",
" medium:\n",
" Accumulate using accumulation_max : 0.34782608695652173\n",
" expensive:\n",
" Accumulate using accumulation_max : 0.6826171875\n",
"\n",
"=============\n",
" Antecedents \n",
"=============\n",
"Antecedent: prod_year = 1997\n",
" - old : 0.9130434782608695\n",
" - medium : 0.17391304347826086\n",
" - new : 0.08695652173913043\n",
"Antecedent: mileage = 3333\n",
" - low : 0.9837255859375\n",
" - medium : 0.032548828125\n",
" - high : 0.0162744140625\n",
"\n",
"=======\n",
" Rules \n",
"=======\n",
"RULE #0:\n",
" IF prod_year[old] AND mileage[high] THEN price[cheap]\n",
"\tAND aggregation function : fmin\n",
"\tOR aggregation function : fmax\n",
"\n",
" Aggregation (IF-clause):\n",
" - prod_year[old] : 0.9130434782608695\n",
" - mileage[high] : 0.0162744140625\n",
" prod_year[old] AND mileage[high] = 0.0162744140625\n",
" Activation (THEN-clause):\n",
" price[cheap] : 0.0162744140625\n",
"\n",
"RULE #1:\n",
" IF prod_year[medium] AND mileage[medium] THEN price[medium]\n",
"\tAND aggregation function : fmin\n",
"\tOR aggregation function : fmax\n",
"\n",
" Aggregation (IF-clause):\n",
" - prod_year[medium] : 0.17391304347826086\n",
" - mileage[medium] : 0.032548828125\n",
" prod_year[medium] AND mileage[medium] = 0.032548828125\n",
" Activation (THEN-clause):\n",
" price[medium] : 0.032548828125\n",
"\n",
"RULE #2:\n",
" IF prod_year[new] AND mileage[low] THEN price[expensive]\n",
"\tAND aggregation function : fmin\n",
"\tOR aggregation function : fmax\n",
"\n",
" Aggregation (IF-clause):\n",
" - prod_year[new] : 0.08695652173913043\n",
" - mileage[low] : 0.9837255859375\n",
" prod_year[new] AND mileage[low] = 0.08695652173913043\n",
" Activation (THEN-clause):\n",
" price[expensive] : 0.08695652173913043\n",
"\n",
"\n",
"==============================\n",
" Intermediaries and Conquests \n",
"==============================\n",
"Consequent: price = 29886.929593320383\n",
" cheap:\n",
" Accumulate using accumulation_max : 0.0162744140625\n",
" medium:\n",
" Accumulate using accumulation_max : 0.032548828125\n",
" expensive:\n",
" Accumulate using accumulation_max : 0.08695652173913043\n",
"\n",
"=============\n",
" Antecedents \n",
"=============\n",
"Antecedent: prod_year = 1996\n",
" - old : 0.9565217391304348\n",
" - medium : 0.08695652173913043\n",
" - new : 0.043478260869565216\n",
"Antecedent: mileage = 204799.0\n",
" - low : 4.8828125e-06\n",
" - medium : 9.765625e-06\n",
" - high : 0.9999951171875\n",
"\n",
"=======\n",
" Rules \n",
"=======\n",
"RULE #0:\n",
" IF prod_year[old] AND mileage[high] THEN price[cheap]\n",
"\tAND aggregation function : fmin\n",
"\tOR aggregation function : fmax\n",
"\n",
" Aggregation (IF-clause):\n",
" - prod_year[old] : 0.9565217391304348\n",
" - mileage[high] : 0.9999951171875\n",
" prod_year[old] AND mileage[high] = 0.9565217391304348\n",
" Activation (THEN-clause):\n",
" price[cheap] : 0.9565217391304348\n",
"\n",
"RULE #1:\n",
" IF prod_year[medium] AND mileage[medium] THEN price[medium]\n",
"\tAND aggregation function : fmin\n",
"\tOR aggregation function : fmax\n",
"\n",
" Aggregation (IF-clause):\n",
" - prod_year[medium] : 0.08695652173913043\n",
" - mileage[medium] : 9.765625e-06\n",
" prod_year[medium] AND mileage[medium] = 9.765625e-06\n",
" Activation (THEN-clause):\n",
" price[medium] : 9.765625e-06\n",
"\n",
"RULE #2:\n",
" IF prod_year[new] AND mileage[low] THEN price[expensive]\n",
"\tAND aggregation function : fmin\n",
"\tOR aggregation function : fmax\n",
"\n",
" Aggregation (IF-clause):\n",
" - prod_year[new] : 0.043478260869565216\n",
" - mileage[low] : 4.8828125e-06\n",
" prod_year[new] AND mileage[low] = 4.8828125e-06\n",
" Activation (THEN-clause):\n",
" price[expensive] : 4.8828125e-06\n",
"\n",
"\n",
"==============================\n",
" Intermediaries and Conquests \n",
"==============================\n",
"Consequent: price = 19231.588786899956\n",
" cheap:\n",
" Accumulate using accumulation_max : 0.9565217391304348\n",
" medium:\n",
" Accumulate using accumulation_max : 9.765625e-06\n",
" expensive:\n",
" Accumulate using accumulation_max : 4.8828125e-06\n",
"\n",
"=============\n",
" Antecedents \n",
"=============\n",
"Antecedent: prod_year = 2014\n",
" - old : 0.17391304347826086\n",
" - medium : 0.34782608695652173\n",
" - new : 0.8260869565217391\n",
"Antecedent: mileage = 132756\n",
" - low : 0.35177734375\n",
" - medium : 0.7035546875\n",
" - high : 0.64822265625\n",
"\n",
"=======\n",
" Rules \n",
"=======\n",
"RULE #0:\n",
" IF prod_year[old] AND mileage[high] THEN price[cheap]\n",
"\tAND aggregation function : fmin\n",
"\tOR aggregation function : fmax\n",
"\n",
" Aggregation (IF-clause):\n",
" - prod_year[old] : 0.17391304347826086\n",
" - mileage[high] : 0.64822265625\n",
" prod_year[old] AND mileage[high] = 0.17391304347826086\n",
" Activation (THEN-clause):\n",
" price[cheap] : 0.17391304347826086\n",
"\n",
"RULE #1:\n",
" IF prod_year[medium] AND mileage[medium] THEN price[medium]\n",
"\tAND aggregation function : fmin\n",
"\tOR aggregation function : fmax\n",
"\n",
" Aggregation (IF-clause):\n",
" - prod_year[medium] : 0.34782608695652173\n",
" - mileage[medium] : 0.7035546875\n",
" prod_year[medium] AND mileage[medium] = 0.34782608695652173\n",
" Activation (THEN-clause):\n",
" price[medium] : 0.34782608695652173\n",
"\n",
"RULE #2:\n",
" IF prod_year[new] AND mileage[low] THEN price[expensive]\n",
"\tAND aggregation function : fmin\n",
"\tOR aggregation function : fmax\n",
"\n",
" Aggregation (IF-clause):\n",
" - prod_year[new] : 0.8260869565217391\n",
" - mileage[low] : 0.35177734375\n",
" prod_year[new] AND mileage[low] = 0.35177734375\n",
" Activation (THEN-clause):\n",
" price[expensive] : 0.35177734375\n",
"\n",
"\n",
"==============================\n",
" Intermediaries and Conquests \n",
"==============================\n",
"Consequent: price = 30570.849313951137\n",
" cheap:\n",
" Accumulate using accumulation_max : 0.17391304347826086\n",
" medium:\n",
" Accumulate using accumulation_max : 0.34782608695652173\n",
" expensive:\n",
" Accumulate using accumulation_max : 0.35177734375\n",
"\n",
"=============\n",
" Antecedents \n",
"=============\n",
"Antecedent: prod_year = 2017\n",
" - old : 0.043478260869565216\n",
" - medium : 0.08695652173913043\n",
" - new : 0.9565217391304348\n",
"Antecedent: mileage = 50750\n",
" - low : 0.752197265625\n",
" - medium : 0.49560546875\n",
" - high : 0.247802734375\n",
"\n",
"=======\n",
" Rules \n",
"=======\n",
"RULE #0:\n",
" IF prod_year[old] AND mileage[high] THEN price[cheap]\n",
"\tAND aggregation function : fmin\n",
"\tOR aggregation function : fmax\n",
"\n",
" Aggregation (IF-clause):\n",
" - prod_year[old] : 0.043478260869565216\n",
" - mileage[high] : 0.247802734375\n",
" prod_year[old] AND mileage[high] = 0.043478260869565216\n",
" Activation (THEN-clause):\n",
" price[cheap] : 0.043478260869565216\n",
"\n",
"RULE #1:\n",
" IF prod_year[medium] AND mileage[medium] THEN price[medium]\n",
"\tAND aggregation function : fmin\n",
"\tOR aggregation function : fmax\n",
"\n",
" Aggregation (IF-clause):\n",
" - prod_year[medium] : 0.08695652173913043\n",
" - mileage[medium] : 0.49560546875\n",
" prod_year[medium] AND mileage[medium] = 0.08695652173913043\n",
" Activation (THEN-clause):\n",
" price[medium] : 0.08695652173913043\n",
"\n",
"RULE #2:\n",
" IF prod_year[new] AND mileage[low] THEN price[expensive]\n",
"\tAND aggregation function : fmin\n",
"\tOR aggregation function : fmax\n",
"\n",
" Aggregation (IF-clause):\n",
" - prod_year[new] : 0.9565217391304348\n",
" - mileage[low] : 0.752197265625\n",
" prod_year[new] AND mileage[low] = 0.752197265625\n",
" Activation (THEN-clause):\n",
" price[expensive] : 0.752197265625\n",
"\n",
"\n",
"==============================\n",
" Intermediaries and Conquests \n",
"==============================\n",
"Consequent: price = 37229.16578375575\n",
" cheap:\n",
" Accumulate using accumulation_max : 0.043478260869565216\n",
" medium:\n",
" Accumulate using accumulation_max : 0.08695652173913043\n",
" expensive:\n",
" Accumulate using accumulation_max : 0.752197265625\n",
"\n",
"=============\n",
" Antecedents \n",
"=============\n",
"Antecedent: prod_year = 2016\n",
" - old : 0.08695652173913043\n",
" - medium : 0.17391304347826086\n",
" - new : 0.9130434782608695\n",
"Antecedent: mileage = 57793\n",
" - low : 0.7178076171875\n",
" - medium : 0.564384765625\n",
" - high : 0.2821923828125\n",
"\n",
"=======\n",
" Rules \n",
"=======\n",
"RULE #0:\n",
" IF prod_year[old] AND mileage[high] THEN price[cheap]\n",
"\tAND aggregation function : fmin\n",
"\tOR aggregation function : fmax\n",
"\n",
" Aggregation (IF-clause):\n",
" - prod_year[old] : 0.08695652173913043\n",
" - mileage[high] : 0.2821923828125\n",
" prod_year[old] AND mileage[high] = 0.08695652173913043\n",
" Activation (THEN-clause):\n",
" price[cheap] : 0.08695652173913043\n",
"\n",
"RULE #1:\n",
" IF prod_year[medium] AND mileage[medium] THEN price[medium]\n",
"\tAND aggregation function : fmin\n",
"\tOR aggregation function : fmax\n",
"\n",
" Aggregation (IF-clause):\n",
" - prod_year[medium] : 0.17391304347826086\n",
" - mileage[medium] : 0.564384765625\n",
" prod_year[medium] AND mileage[medium] = 0.17391304347826086\n",
" Activation (THEN-clause):\n",
" price[medium] : 0.17391304347826086\n",
"\n",
"RULE #2:\n",
" IF prod_year[new] AND mileage[low] THEN price[expensive]\n",
"\tAND aggregation function : fmin\n",
"\tOR aggregation function : fmax\n",
"\n",
" Aggregation (IF-clause):\n",
" - prod_year[new] : 0.9130434782608695\n",
" - mileage[low] : 0.7178076171875\n",
" prod_year[new] AND mileage[low] = 0.7178076171875\n",
" Activation (THEN-clause):\n",
" price[expensive] : 0.7178076171875\n",
"\n",
"\n",
"==============================\n",
" Intermediaries and Conquests \n",
"==============================\n",
"Consequent: price = 36495.78569319686\n",
" cheap:\n",
" Accumulate using accumulation_max : 0.08695652173913043\n",
" medium:\n",
" Accumulate using accumulation_max : 0.17391304347826086\n",
" expensive:\n",
" Accumulate using accumulation_max : 0.7178076171875\n",
"\n",
"=============\n",
" Antecedents \n",
"=============\n",
"Antecedent: prod_year = 2012\n",
" - old : 0.2608695652173913\n",
" - medium : 0.5217391304347826\n",
" - new : 0.7391304347826086\n",
"Antecedent: mileage = 127000\n",
" - low : 0.3798828125\n",
" - medium : 0.759765625\n",
" - high : 0.6201171875\n",
"\n",
"=======\n",
" Rules \n",
"=======\n",
"RULE #0:\n",
" IF prod_year[old] AND mileage[high] THEN price[cheap]\n",
"\tAND aggregation function : fmin\n",
"\tOR aggregation function : fmax\n",
"\n",
" Aggregation (IF-clause):\n",
" - prod_year[old] : 0.2608695652173913\n",
" - mileage[high] : 0.6201171875\n",
" prod_year[old] AND mileage[high] = 0.2608695652173913\n",
" Activation (THEN-clause):\n",
" price[cheap] : 0.2608695652173913\n",
"\n",
"RULE #1:\n",
" IF prod_year[medium] AND mileage[medium] THEN price[medium]\n",
"\tAND aggregation function : fmin\n",
"\tOR aggregation function : fmax\n",
"\n",
" Aggregation (IF-clause):\n",
" - prod_year[medium] : 0.5217391304347826\n",
" - mileage[medium] : 0.759765625\n",
" prod_year[medium] AND mileage[medium] = 0.5217391304347826\n",
" Activation (THEN-clause):\n",
" price[medium] : 0.5217391304347826\n",
"\n",
"RULE #2:\n",
" IF prod_year[new] AND mileage[low] THEN price[expensive]\n",
"\tAND aggregation function : fmin\n",
"\tOR aggregation function : fmax\n",
"\n",
" Aggregation (IF-clause):\n",
" - prod_year[new] : 0.7391304347826086\n",
" - mileage[low] : 0.3798828125\n",
" prod_year[new] AND mileage[low] = 0.3798828125\n",
" Activation (THEN-clause):\n",
" price[expensive] : 0.3798828125\n",
"\n",
"\n",
"==============================\n",
" Intermediaries and Conquests \n",
"==============================\n",
"Consequent: price = 29818.63714214192\n",
" cheap:\n",
" Accumulate using accumulation_max : 0.2608695652173913\n",
" medium:\n",
" Accumulate using accumulation_max : 0.5217391304347826\n",
" expensive:\n",
" Accumulate using accumulation_max : 0.3798828125\n",
"\n",
"=============\n",
" Antecedents \n",
"=============\n",
"Antecedent: prod_year = 2011\n",
" - old : 0.30434782608695654\n",
" - medium : 0.6086956521739131\n",
" - new : 0.6956521739130435\n",
"Antecedent: mileage = 110000\n",
" - low : 0.462890625\n",
" - medium : 0.92578125\n",
" - high : 0.537109375\n",
"\n",
"=======\n",
" Rules \n",
"=======\n",
"RULE #0:\n",
" IF prod_year[old] AND mileage[high] THEN price[cheap]\n",
"\tAND aggregation function : fmin\n",
"\tOR aggregation function : fmax\n",
"\n",
" Aggregation (IF-clause):\n",
" - prod_year[old] : 0.30434782608695654\n",
" - mileage[high] : 0.537109375\n",
" prod_year[old] AND mileage[high] = 0.30434782608695654\n",
" Activation (THEN-clause):\n",
" price[cheap] : 0.30434782608695654\n",
"\n",
"RULE #1:\n",
" IF prod_year[medium] AND mileage[medium] THEN price[medium]\n",
"\tAND aggregation function : fmin\n",
"\tOR aggregation function : fmax\n",
"\n",
" Aggregation (IF-clause):\n",
" - prod_year[medium] : 0.6086956521739131\n",
" - mileage[medium] : 0.92578125\n",
" prod_year[medium] AND mileage[medium] = 0.6086956521739131\n",
" Activation (THEN-clause):\n",
" price[medium] : 0.6086956521739131\n",
"\n",
"RULE #2:\n",
" IF prod_year[new] AND mileage[low] THEN price[expensive]\n",
"\tAND aggregation function : fmin\n",
"\tOR aggregation function : fmax\n",
"\n",
" Aggregation (IF-clause):\n",
" - prod_year[new] : 0.6956521739130435\n",
" - mileage[low] : 0.462890625\n",
" prod_year[new] AND mileage[low] = 0.462890625\n",
" Activation (THEN-clause):\n",
" price[expensive] : 0.462890625\n",
"\n",
"\n",
"==============================\n",
" Intermediaries and Conquests \n",
"==============================\n",
"Consequent: price = 30179.402125805926\n",
" cheap:\n",
" Accumulate using accumulation_max : 0.30434782608695654\n",
" medium:\n",
" Accumulate using accumulation_max : 0.6086956521739131\n",
" expensive:\n",
" Accumulate using accumulation_max : 0.462890625\n",
"\n",
"=============\n",
" Antecedents \n",
"=============\n",
"Antecedent: prod_year = 2001\n",
" - old : 0.7391304347826086\n",
" - medium : 0.5217391304347826\n",
" - new : 0.2608695652173913\n",
"Antecedent: mileage = 91000\n",
" - low : 0.5556640625\n",
" - medium : 0.888671875\n",
" - high : 0.4443359375\n",
"\n",
"=======\n",
" Rules \n",
"=======\n",
"RULE #0:\n",
" IF prod_year[old] AND mileage[high] THEN price[cheap]\n",
"\tAND aggregation function : fmin\n",
"\tOR aggregation function : fmax\n",
"\n",
" Aggregation (IF-clause):\n",
" - prod_year[old] : 0.7391304347826086\n",
" - mileage[high] : 0.4443359375\n",
" prod_year[old] AND mileage[high] = 0.4443359375\n",
" Activation (THEN-clause):\n",
" price[cheap] : 0.4443359375\n",
"\n",
"RULE #1:\n",
" IF prod_year[medium] AND mileage[medium] THEN price[medium]\n",
"\tAND aggregation function : fmin\n",
"\tOR aggregation function : fmax\n",
"\n",
" Aggregation (IF-clause):\n",
" - prod_year[medium] : 0.5217391304347826\n",
" - mileage[medium] : 0.888671875\n",
" prod_year[medium] AND mileage[medium] = 0.5217391304347826\n",
" Activation (THEN-clause):\n",
" price[medium] : 0.5217391304347826\n",
"\n",
"RULE #2:\n",
" IF prod_year[new] AND mileage[low] THEN price[expensive]\n",
"\tAND aggregation function : fmin\n",
"\tOR aggregation function : fmax\n",
"\n",
" Aggregation (IF-clause):\n",
" - prod_year[new] : 0.2608695652173913\n",
" - mileage[low] : 0.5556640625\n",
" prod_year[new] AND mileage[low] = 0.2608695652173913\n",
" Activation (THEN-clause):\n",
" price[expensive] : 0.2608695652173913\n",
"\n",
"\n",
"==============================\n",
" Intermediaries and Conquests \n",
"==============================\n",
"Consequent: price = 27087.484832983348\n",
" cheap:\n",
" Accumulate using accumulation_max : 0.4443359375\n",
" medium:\n",
" Accumulate using accumulation_max : 0.5217391304347826\n",
" expensive:\n",
" Accumulate using accumulation_max : 0.2608695652173913\n",
"\n",
"=============\n",
" Antecedents \n",
"=============\n",
"Antecedent: prod_year = 2010\n",
" - old : 0.34782608695652173\n",
" - medium : 0.6956521739130435\n",
" - new : 0.6521739130434783\n",
"Antecedent: mileage = 160000\n",
" - low : 0.21875\n",
" - medium : 0.4375\n",
" - high : 0.78125\n",
"\n",
"=======\n",
" Rules \n",
"=======\n",
"RULE #0:\n",
" IF prod_year[old] AND mileage[high] THEN price[cheap]\n",
"\tAND aggregation function : fmin\n",
"\tOR aggregation function : fmax\n",
"\n",
" Aggregation (IF-clause):\n",
" - prod_year[old] : 0.34782608695652173\n",
" - mileage[high] : 0.78125\n",
" prod_year[old] AND mileage[high] = 0.34782608695652173\n",
" Activation (THEN-clause):\n",
" price[cheap] : 0.34782608695652173\n",
"\n",
"RULE #1:\n",
" IF prod_year[medium] AND mileage[medium] THEN price[medium]\n",
"\tAND aggregation function : fmin\n",
"\tOR aggregation function : fmax\n",
"\n",
" Aggregation (IF-clause):\n",
" - prod_year[medium] : 0.6956521739130435\n",
" - mileage[medium] : 0.4375\n",
" prod_year[medium] AND mileage[medium] = 0.4375\n",
" Activation (THEN-clause):\n",
" price[medium] : 0.4375\n",
"\n",
"RULE #2:\n",
" IF prod_year[new] AND mileage[low] THEN price[expensive]\n",
"\tAND aggregation function : fmin\n",
"\tOR aggregation function : fmax\n",
"\n",
" Aggregation (IF-clause):\n",
" - prod_year[new] : 0.6521739130434783\n",
" - mileage[low] : 0.21875\n",
" prod_year[new] AND mileage[low] = 0.21875\n",
" Activation (THEN-clause):\n",
" price[expensive] : 0.21875\n",
"\n",
"\n",
"==============================\n",
" Intermediaries and Conquests \n",
"==============================\n",
"Consequent: price = 27601.96605738856\n",
" cheap:\n",
" Accumulate using accumulation_max : 0.34782608695652173\n",
" medium:\n",
" Accumulate using accumulation_max : 0.4375\n",
" expensive:\n",
" Accumulate using accumulation_max : 0.21875\n",
"\n",
" Prod. year Mileage Price Predicted Price\n",
"1 1997 3333 10349 29886.929593\n",
"8 2001 91000 10820 27087.484833\n",
"7 2011 110000 12858 30179.402126\n",
"9 2010 160000 15367 27601.966057\n",
"6 2012 127000 18817 29818.637142\n",
"0 2014 65000 27284 34672.486957\n",
"3 2014 132756 38737 30570.849314\n",
"2 1996 212485 40769 19231.588787\n",
"4 2017 50750 42102 37229.165784\n",
"5 2016 57793 42400 36495.785693\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA2QAAAHWCAYAAAAYdUqfAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAACh90lEQVR4nOzdd1hT1xsH8G9AphBQkaGAolgnap3FPVBUtO5qrRWcVdG6Z62rrTirVq1abcXWvap1F3FX6t57YHGAigMEZIX7++P8EghLQOAm8P08Tx5u7j25eRNCyJtzznsUkiRJICIiIiIionxnIHcAREREREREhRUTMiIiIiIiIpkwISMiIiIiIpIJEzIiIiIiIiKZMCEjIiIiIiKSCRMyIiIiIiIimTAhIyIiIiIikgkTMiIiIiIiIpkwISMiIiIiIpIJEzIiIiIiIiKZMCEjonxx//59fPXVVyhXrhxMTU2hVCrRsGFDLF68GO/evZM7PCIiIiJZFJE7ACIq+Pbu3Yvu3bvDxMQEffr0QbVq1RAfH4+TJ09i3LhxuH79On755Re5wyQiIiLKdwpJkiS5gyCigis4OBjVq1eHo6MjDh8+DAcHB63j9+7dw969ezFixAiZIiQiIiKSD4csElGemjt3LqKiovDrr7+mScYAwNXVVSsZUygUGDZsGNavX4+KFSvC1NQUtWvXxvHjx7Vu999//2Ho0KGoWLEizMzMUKJECXTv3h0PHz7Uaufv7w+FQqG5mJubw83NDatXr9Zq5+PjAwsLizTxbdu2DQqFAkePHtXaf/r0abRp0wZWVlYwNzdH06ZN8c8//2i1mT59OhQKBcLDw7X2nzt3DgqFAv7+/lr3X7ZsWa12jx49gpmZGRQKRZrHtX//fjRu3BhFixaFpaUlvLy8cP369TTxp6Z+Po4fP46vvvoKJUqUgFKpRJ8+ffD69es07bNyP1euXIGPj49mOKq9vT369euHly9fphtD2bJltX4n6kvK57hs2bJo3759po/l4cOHUCgUmD9/fppj1apVQ7NmzTTXjx49CoVCgW3btmV4vtS/g2nTpsHAwACBgYFa7QYNGgRjY2Ncvnw50/gUCgWmT5+utW/evHlQKBRasWV2+4wuKeNM+TwsXLgQZcqUgZmZGZo2bYpr166lOe+tW7fQrVs3FC9eHKampqhTpw7++uuvdGPw8fFJ9/59fHzStN2/fz+aNm0KS0tLKJVK1K1bFxs2bNAcb9asWZrH/cMPP8DAwECr3YkTJ9C9e3c4OzvDxMQETk5OGDVqVJqhzdOnT0eVKlVgYWEBpVKJTz75BDt37tRqk9VzZefvv1mzZqhWrVqatvPnz0/zt/q+17H6dak+/82bN2FmZoY+ffpotTt58iQMDQ0xYcKEDM+V3ccBAHFxcZg2bRpcXV01z8/48eMRFxen1U79vpxa+/bt07xvEVH2ccgiEeWp3bt3o1y5cmjQoEGWb3Ps2DFs3rwZX3/9NUxMTPDzzz+jTZs2OHPmjOaD0NmzZ3Hq1Cn07NkTjo6OePjwIZYvX45mzZrhxo0bMDc31zrnwoULYWNjg8jISPz2228YOHAgypYtCw8Pj2w/psOHD6Nt27aoXbu25kP7mjVr0KJFC5w4cQL16tXL9jnTM3XqVMTGxqbZ/8cff8Db2xuenp6YM2cOYmJisHz5cjRq1AgXL17M0gekYcOGwdraGtOnT8ft27exfPly/Pfff5oPiNm5n4CAADx48AB9+/aFvb29Zgjq9evX8e+//2rOl1Ljxo0xaNAgAOJD6KxZs3L+ROWRKVOmYPfu3ejfvz+uXr0KS0tLHDx4EKtWrcJ3332HGjVqZOt8b968gZ+fX7Zu06pVqzQfzhcsWJBu8vz777/j7du38PX1RWxsLBYvXowWLVrg6tWrsLOzAwBcv34dDRs2ROnSpTFx4kQULVoUW7ZsQadOnbB9+3Z07tw5zXlNTEy0vsAYMGBAmjb+/v7o168fqlatikmTJsHa2hoXL17EgQMH0KtXr3Qf25o1azBlyhQsWLBAq83WrVsRExODIUOGoESJEjhz5gyWLFmCx48fY+vWrZp20dHR6Ny5M8qWLYt3797B398fXbt2RVBQkOZvMKvn0hWVK1fGd999h3HjxqFbt2749NNPER0dDR8fH1SqVAkzZ87MtftKSkrCp59+ipMnT2LQoEGoXLkyrl69ioULF+LOnTtpklsiykMSEVEeiYiIkABIHTt2zPJtAEgApHPnzmn2/ffff5KpqanUuXNnzb6YmJg0tw0KCpIASL///rtm35o1ayQAUnBwsGbfnTt3JADS3LlzNfu8vb2lokWLpjnn1q1bJQDSkSNHJEmSpKSkJKlChQqSp6enlJSUpBWPi4uL1KpVK82+adOmSQCkFy9eaJ3z7NmzEgBpzZo1WvdfpkwZzfVr165JBgYGUtu2bbXif/v2rWRtbS0NHDhQ65xhYWGSlZVVmv2pqZ+P2rVrS/Hx8Zr9c+fOlQBIu3btyvb9pPe72LhxowRAOn78eJpjpUuXlvr27au5fuTIEa3nWJIkqUyZMpKXl1emjyU4OFgCIM2bNy/NsapVq0pNmzZNcx9bt27N8HypfweSJElXr16VjI2NpQEDBkivX7+WSpcuLdWpU0dKSEjINDZJEq/ladOmaa6PHz9esrW1lWrXrq0VW2a39/X1TbPfy8tLK07182BmZiY9fvxYs//06dMSAGnUqFGafS1btpTc3Nyk2NhYzb6kpCSpQYMGUoUKFdLcV69evSQLCwutfUWLFpW8vb0119+8eSNZWlpK9evXl969e6fVNuXfSNOmTTWPe+/evVKRIkWkMWPGpLnP9F5Pfn5+kkKhkP777780x9SeP38uAZDmz5+f7XNl9e9f/TiqVq2apu28efPSvNe873Wc3mtfpVJJjRo1kuzs7KTw8HDJ19dXKlKkiHT27NkMz5OTx/HHH39IBgYG0okTJ7TarlixQgIg/fPPP5p9WX0tElHOcMgiEeWZyMhIAIClpWW2bufu7o7atWtrrjs7O6Njx444ePAgVCoVAMDMzExzPCEhAS9fvoSrqyusra1x4cKFNOd8/fo1wsPD8eDBAyxcuBCGhoZo2rRpmnbh4eFal7dv32odv3TpEu7evYtevXrh5cuXmnbR0dFo2bIljh8/jqSkJK3bvHr1SuucERER730OJk2ahFq1aqF79+5a+wMCAvDmzRt8/vnnWuc0NDRE/fr1ceTIkfeeGxDD7oyMjDTXhwwZgiJFimDfvn3Zvp+Uv4vY2FiEh4fjk08+AYB0fxfx8fEwMTF5b4wJCQkIDw/Hy5cvkZiYmGG7mJiYNL839esktbdv3yI8PBxv3rx57/0DYujjjBkzsHr1anh6eiI8PBxr165FkSLZG2Dy5MkTLFmyBN9++226Q8pyQ6dOnVC6dGnN9Xr16qF+/fqa3+mrV69w+PBhfPbZZ5rnQf38enp64u7du3jy5InWOWNjY2Fqaprp/QYEBODt27eYOHFimrbp9Y6eOXMGn332Gbp27Yp58+alOZ7y9RQdHY3w8HA0aNAAkiTh4sWLWm3Vr5H79+9j9uzZMDAwQMOGDXN0LuD9f/9qKpUqTduYmJh022b1daxmYGAAf39/REVFoW3btvj5558xadIk1KlT5723zY6tW7eicuXKqFSpktbjaNGiBQCkeS9R/22nvCQkJORqTESFFYcsElGeUSqVAJDhh5qMVKhQIc2+jz76CDExMXjx4gXs7e3x7t07+Pn5Yc2aNXjy5AmkFPWJ0kt4atWqpdk2MTHB0qVL0wwtjI6ORsmSJTON7e7duwAAb2/vDNtERESgWLFimusVK1bM9JypnTx5Ert370ZgYCBCQkLSvX/1h6bU1M/5+6R+ji0sLODg4KCZ/5Kd+3n16hVmzJiBTZs24fnz51rt0vtdREREZCkp+fvvvzW/D0NDQ1SvXh2zZ89G69attdpNmzYN06ZNS3N79TC9lPr166fZtrCwQIcOHbBw4cJ026qNGzcOmzZtwpkzZzBr1ixUqVLlvbGnNm3aNJQqVQpfffVVpvPYPkRGfzd
"text/plain": [
"<Figure size 1000x500 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Выбираем случайные 10 записей для тестирования\n",
"sample_df = df[['Prod. year', 'Mileage', 'Price']].sample(10, random_state=42)\n",
"sample_df = sample_df.reset_index(drop=True)\n",
"\n",
"predicted_prices = []\n",
"\n",
"for i in range(len(sample_df)):\n",
" price_simulation.input['prod_year'] = sample_df.loc[i, 'Prod. year']\n",
" price_simulation.input['mileage'] = sample_df.loc[i, 'Mileage']\n",
" price_simulation.compute()\n",
" a = price_simulation.print_state()\n",
" predicted_prices.append(price_simulation.output['price'])\n",
"\n",
"sample_df['Predicted Price'] = predicted_prices\n",
"sample_df_sorted = sample_df.sort_values(by='Price')\n",
"\n",
"\n",
"# Вывод результатов\n",
"print(sample_df_sorted[['Prod. year', 'Mileage', 'Price', 'Predicted Price']])\n",
"\n",
"# Визуализация\n",
"plt.figure(figsize=(10, 5))\n",
"plt.plot(sample_df.index, sample_df_sorted['Price'], marker='o', label='Real Price', color='blue')\n",
"plt.plot(sample_df.index, sample_df_sorted['Predicted Price'], marker='s', label='Predicted Price', color='red')\n",
"plt.xlabel(\"Sample Index\")\n",
"plt.ylabel(\"Price\")\n",
"plt.legend()\n",
"plt.title(\"Сравнение реальных и предсказанных цен\")\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Система ужасно предсказывает цену, не может предсказать ни большую цену ни маленькую, потому что она хорошо предсказывает категорию, но цену по категории не может"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "laba",
"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.6"
}
},
"nbformat": 4,
"nbformat_minor": 2
}