2025-02-08 02:04:31 +04:00

303 KiB
Raw Blame History

импортируем либы

In [221]:
import pandas as pd
import re
import numpy as np
import skfuzzy as fuzz
import skfuzzy.control as ctrl
import matplotlib.pyplot as plt

загржаем данные

In [222]:
df = pd.read_csv("..//static//csv//car_price_prediction.csv", sep=",")
df.head()
Out[222]:
ID Price Levy Manufacturer Model Prod. year Category Leather interior Fuel type Engine volume Mileage Cylinders Gear box type Drive wheels Doors Wheel Color Airbags
0 45654403 13328 1399 LEXUS RX 450 2010 Jeep Yes Hybrid 3.5 186005 km 6.0 Automatic 4x4 04-May Left wheel Silver 12
1 44731507 16621 1018 CHEVROLET Equinox 2011 Jeep No Petrol 3 192000 km 6.0 Tiptronic 4x4 04-May Left wheel Black 8
2 45774419 8467 - HONDA FIT 2006 Hatchback No Petrol 1.3 200000 km 4.0 Variator Front 04-May Right-hand drive Black 2
3 45769185 3607 862 FORD Escape 2011 Jeep Yes Hybrid 2.5 168966 km 4.0 Automatic 4x4 04-May Left wheel White 0
4 45809263 11726 446 HONDA FIT 2014 Hatchback Yes Petrol 1.3 91901 km 4.0 Automatic Front 04-May Left wheel Silver 4

небольшая обработка данных

In [223]:
df['Mileage'] = df['Mileage'].str.replace(' km', '').str.replace(',', '')
df['Mileage'] = df['Mileage'].astype(int)
df['Engine volume'] = df['Engine volume'].apply(lambda x: float(re.match(r'\d+(\.\d+)?', x).group()) if isinstance(x, str) else x)
df.head()
Out[223]:
ID Price Levy Manufacturer Model Prod. year Category Leather interior Fuel type Engine volume Mileage Cylinders Gear box type Drive wheels Doors Wheel Color Airbags
0 45654403 13328 1399 LEXUS RX 450 2010 Jeep Yes Hybrid 3.5 186005 6.0 Automatic 4x4 04-May Left wheel Silver 12
1 44731507 16621 1018 CHEVROLET Equinox 2011 Jeep No Petrol 3.0 192000 6.0 Tiptronic 4x4 04-May Left wheel Black 8
2 45774419 8467 - HONDA FIT 2006 Hatchback No Petrol 1.3 200000 4.0 Variator Front 04-May Right-hand drive Black 2
3 45769185 3607 862 FORD Escape 2011 Jeep Yes Hybrid 2.5 168966 4.0 Automatic 4x4 04-May Left wheel White 0
4 45809263 11726 446 HONDA FIT 2014 Hatchback Yes Petrol 1.3 91901 4.0 Automatic Front 04-May Left wheel Silver 4

Выбор входных и выходных переменных

Перед тем как строить нечеткую систему, нужно определить, какие переменные будут входными, а какие выходными.

Входные переменные (fuzzy inputs):

  • Prod. year (год выпуска) влияет на цену машины.
  • Mileage (пробег) чем выше пробег, тем дешевле машина.

Выходная переменная (fuzzy output):

  • Price (цена) оцениваемая стоимость автомобиля.

Настройка лингвистических переменных

Определяем, какие термы будут у каждой переменной, их тип (например, треугольные или гауссовые функции принадлежности) и параметры.

Продолжительность эксплуатации (Prod. year)

  • Старый (Old)
  • Средний (Medium)
  • Новый (New)

Пробег (Mileage)

  • Маленький (Low)
  • Средний (Medium)
  • Большой (High)

Цена (Price)

  • Дешевая (Cheap)
  • Средняя (Medium)
  • Дорогая (Expensive)
In [224]:
pryMin, pryMax = df['Prod. year'].quantile(0.01), df['Prod. year'].quantile(0.97)
milMin, milMax = df['Mileage'].quantile(0.01), df['Mileage'].quantile(0.80)
priMin, priMax = df['Price'].quantile(0.01), df['Price'].quantile(0.97)

# Определяем диапазоны переменных
prod_year = np.arange(pryMin, pryMax, 1)  # Годы выпуска
mileage = np.arange(milMin, milMax, 1)  # Пробег
price = np.arange(priMin, priMax, 1) # Цена

# Определение переменных
prod_year_ctrl = ctrl.Antecedent(prod_year, 'prod_year')
mileage_ctrl = ctrl.Antecedent(mileage, 'mileage')
price_ctrl = ctrl.Consequent(price, 'price')

Настраиваем функции принадлежности

In [225]:
# Функции принадлежности
pryMid = (pryMin+pryMax)/2
prod_year_ctrl['old'] = fuzz.trimf(prod_year, [pryMin, pryMin, pryMax])
prod_year_ctrl['medium'] = fuzz.trimf(prod_year, [pryMin, pryMid, pryMax])
prod_year_ctrl['new'] = fuzz.trimf(prod_year, [pryMin, pryMax, pryMax])

milMid = (milMin+milMax)/2
mileage_ctrl['low'] = fuzz.trimf(mileage, [milMin, milMin, milMax])
mileage_ctrl['medium']  = fuzz.trimf(mileage, [milMin, milMid, milMax])
mileage_ctrl['high'] = fuzz.trimf(mileage, [milMin, milMax, milMax])

priMid = (priMin+priMax)/2
price_ctrl['cheap'] = fuzz.trimf(price, [priMin, priMin, priMax])
price_ctrl['medium'] = fuzz.trimf(price, [priMin, priMid, priMax])
price_ctrl['expensive'] = fuzz.trimf(price, [priMin, priMax, priMax])

# визуализируем
prod_year_ctrl.view()
mileage_ctrl.view()
price_ctrl.view()
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
  fig.show()
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image

Формирование базы нечетких правил

Создаем логические зависимости между входными и выходными переменными.

правила:

  1. Если машина старая и пробег высокий, то цена дешевая.
  2. Если машина средняя по возрасту и пробег средний, то цена средняя.
  3. Если машина новая и пробег маленький, то цена дорогая.
In [226]:
# Определение правил
rule1 = ctrl.Rule(prod_year_ctrl['old'] & mileage_ctrl['high'], price_ctrl['cheap'])
rule2 = ctrl.Rule(prod_year_ctrl['medium'] & mileage_ctrl['medium'], price_ctrl['medium'])
rule3 = ctrl.Rule(prod_year_ctrl['new'] & mileage_ctrl['low'], price_ctrl['expensive'])

# Создаем систему
price_control = ctrl.ControlSystem([rule1, rule2, rule3])
price_simulation = ctrl.ControlSystemSimulation(price_control)
In [227]:
price_control.view()
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
  fig.show()
No description has been provided for this image

Оценка качества нечеткой системы

Чтобы проверить работу модели, можно подать тестовые данные и посмотреть, как система определяет цену.

In [228]:
# Выбираем случайные 10 записей для тестирования
sample_df = df[['Prod. year', 'Mileage', 'Price']].sample(10, random_state=42)
sample_df = sample_df.reset_index(drop=True)

predicted_prices = []

for i in range(len(sample_df)):
    price_simulation.input['prod_year'] = sample_df.loc[i, 'Prod. year']
    price_simulation.input['mileage'] = sample_df.loc[i, 'Mileage']
    price_simulation.compute()
    a = price_simulation.print_state()
    predicted_prices.append(price_simulation.output['price'])

sample_df['Predicted Price'] = predicted_prices
sample_df_sorted = sample_df.sort_values(by='Price')


# Вывод результатов
print(sample_df_sorted[['Prod. year', 'Mileage', 'Price', 'Predicted Price']])

# Визуализация
plt.figure(figsize=(10, 5))
plt.plot(sample_df.index, sample_df_sorted['Price'], marker='o', label='Real Price', color='blue')
plt.plot(sample_df.index, sample_df_sorted['Predicted Price'], marker='s', label='Predicted Price', color='red')
plt.xlabel("Sample Index")
plt.ylabel("Price")
plt.legend()
plt.title("Сравнение реальных и предсказанных цен")
plt.show()
=============
 Antecedents 
=============
Antecedent: prod_year               = 2014
  - old                             : 0.17391304347826086
  - medium                          : 0.34782608695652173
  - new                             : 0.8260869565217391
Antecedent: mileage                 = 65000
  - low                             : 0.6826171875
  - medium                          : 0.634765625
  - high                            : 0.3173828125

=======
 Rules 
=======
RULE #0:
  IF prod_year[old] AND mileage[high] THEN price[cheap]
	AND aggregation function : fmin
	OR aggregation function  : fmax

  Aggregation (IF-clause):
  - prod_year[old]                                         : 0.17391304347826086
  - mileage[high]                                          : 0.3173828125
                          prod_year[old] AND mileage[high] = 0.17391304347826086
  Activation (THEN-clause):
                                              price[cheap] : 0.17391304347826086

RULE #1:
  IF prod_year[medium] AND mileage[medium] THEN price[medium]
	AND aggregation function : fmin
	OR aggregation function  : fmax

  Aggregation (IF-clause):
  - prod_year[medium]                                      : 0.34782608695652173
  - mileage[medium]                                        : 0.634765625
                     prod_year[medium] AND mileage[medium] = 0.34782608695652173
  Activation (THEN-clause):
                                             price[medium] : 0.34782608695652173

RULE #2:
  IF prod_year[new] AND mileage[low] THEN price[expensive]
	AND aggregation function : fmin
	OR aggregation function  : fmax

  Aggregation (IF-clause):
  - prod_year[new]                                         : 0.8260869565217391
  - mileage[low]                                           : 0.6826171875
                           prod_year[new] AND mileage[low] = 0.6826171875
  Activation (THEN-clause):
                                          price[expensive] : 0.6826171875


==============================
 Intermediaries and Conquests 
==============================
Consequent: price                    = 34672.486956500354
  cheap:
    Accumulate using accumulation_max : 0.17391304347826086
  medium:
    Accumulate using accumulation_max : 0.34782608695652173
  expensive:
    Accumulate using accumulation_max : 0.6826171875

=============
 Antecedents 
=============
Antecedent: prod_year               = 1997
  - old                             : 0.9130434782608695
  - medium                          : 0.17391304347826086
  - new                             : 0.08695652173913043
Antecedent: mileage                 = 3333
  - low                             : 0.9837255859375
  - medium                          : 0.032548828125
  - high                            : 0.0162744140625

=======
 Rules 
=======
RULE #0:
  IF prod_year[old] AND mileage[high] THEN price[cheap]
	AND aggregation function : fmin
	OR aggregation function  : fmax

  Aggregation (IF-clause):
  - prod_year[old]                                         : 0.9130434782608695
  - mileage[high]                                          : 0.0162744140625
                          prod_year[old] AND mileage[high] = 0.0162744140625
  Activation (THEN-clause):
                                              price[cheap] : 0.0162744140625

RULE #1:
  IF prod_year[medium] AND mileage[medium] THEN price[medium]
	AND aggregation function : fmin
	OR aggregation function  : fmax

  Aggregation (IF-clause):
  - prod_year[medium]                                      : 0.17391304347826086
  - mileage[medium]                                        : 0.032548828125
                     prod_year[medium] AND mileage[medium] = 0.032548828125
  Activation (THEN-clause):
                                             price[medium] : 0.032548828125

RULE #2:
  IF prod_year[new] AND mileage[low] THEN price[expensive]
	AND aggregation function : fmin
	OR aggregation function  : fmax

  Aggregation (IF-clause):
  - prod_year[new]                                         : 0.08695652173913043
  - mileage[low]                                           : 0.9837255859375
                           prod_year[new] AND mileage[low] = 0.08695652173913043
  Activation (THEN-clause):
                                          price[expensive] : 0.08695652173913043


==============================
 Intermediaries and Conquests 
==============================
Consequent: price                    = 29886.929593320383
  cheap:
    Accumulate using accumulation_max : 0.0162744140625
  medium:
    Accumulate using accumulation_max : 0.032548828125
  expensive:
    Accumulate using accumulation_max : 0.08695652173913043

=============
 Antecedents 
=============
Antecedent: prod_year               = 1996
  - old                             : 0.9565217391304348
  - medium                          : 0.08695652173913043
  - new                             : 0.043478260869565216
Antecedent: mileage                 = 204799.0
  - low                             : 4.8828125e-06
  - medium                          : 9.765625e-06
  - high                            : 0.9999951171875

=======
 Rules 
=======
RULE #0:
  IF prod_year[old] AND mileage[high] THEN price[cheap]
	AND aggregation function : fmin
	OR aggregation function  : fmax

  Aggregation (IF-clause):
  - prod_year[old]                                         : 0.9565217391304348
  - mileage[high]                                          : 0.9999951171875
                          prod_year[old] AND mileage[high] = 0.9565217391304348
  Activation (THEN-clause):
                                              price[cheap] : 0.9565217391304348

RULE #1:
  IF prod_year[medium] AND mileage[medium] THEN price[medium]
	AND aggregation function : fmin
	OR aggregation function  : fmax

  Aggregation (IF-clause):
  - prod_year[medium]                                      : 0.08695652173913043
  - mileage[medium]                                        : 9.765625e-06
                     prod_year[medium] AND mileage[medium] = 9.765625e-06
  Activation (THEN-clause):
                                             price[medium] : 9.765625e-06

RULE #2:
  IF prod_year[new] AND mileage[low] THEN price[expensive]
	AND aggregation function : fmin
	OR aggregation function  : fmax

  Aggregation (IF-clause):
  - prod_year[new]                                         : 0.043478260869565216
  - mileage[low]                                           : 4.8828125e-06
                           prod_year[new] AND mileage[low] = 4.8828125e-06
  Activation (THEN-clause):
                                          price[expensive] : 4.8828125e-06


==============================
 Intermediaries and Conquests 
==============================
Consequent: price                    = 19231.588786899956
  cheap:
    Accumulate using accumulation_max : 0.9565217391304348
  medium:
    Accumulate using accumulation_max : 9.765625e-06
  expensive:
    Accumulate using accumulation_max : 4.8828125e-06

=============
 Antecedents 
=============
Antecedent: prod_year               = 2014
  - old                             : 0.17391304347826086
  - medium                          : 0.34782608695652173
  - new                             : 0.8260869565217391
Antecedent: mileage                 = 132756
  - low                             : 0.35177734375
  - medium                          : 0.7035546875
  - high                            : 0.64822265625

=======
 Rules 
=======
RULE #0:
  IF prod_year[old] AND mileage[high] THEN price[cheap]
	AND aggregation function : fmin
	OR aggregation function  : fmax

  Aggregation (IF-clause):
  - prod_year[old]                                         : 0.17391304347826086
  - mileage[high]                                          : 0.64822265625
                          prod_year[old] AND mileage[high] = 0.17391304347826086
  Activation (THEN-clause):
                                              price[cheap] : 0.17391304347826086

RULE #1:
  IF prod_year[medium] AND mileage[medium] THEN price[medium]
	AND aggregation function : fmin
	OR aggregation function  : fmax

  Aggregation (IF-clause):
  - prod_year[medium]                                      : 0.34782608695652173
  - mileage[medium]                                        : 0.7035546875
                     prod_year[medium] AND mileage[medium] = 0.34782608695652173
  Activation (THEN-clause):
                                             price[medium] : 0.34782608695652173

RULE #2:
  IF prod_year[new] AND mileage[low] THEN price[expensive]
	AND aggregation function : fmin
	OR aggregation function  : fmax

  Aggregation (IF-clause):
  - prod_year[new]                                         : 0.8260869565217391
  - mileage[low]                                           : 0.35177734375
                           prod_year[new] AND mileage[low] = 0.35177734375
  Activation (THEN-clause):
                                          price[expensive] : 0.35177734375


==============================
 Intermediaries and Conquests 
==============================
Consequent: price                    = 30570.849313951137
  cheap:
    Accumulate using accumulation_max : 0.17391304347826086
  medium:
    Accumulate using accumulation_max : 0.34782608695652173
  expensive:
    Accumulate using accumulation_max : 0.35177734375

=============
 Antecedents 
=============
Antecedent: prod_year               = 2017
  - old                             : 0.043478260869565216
  - medium                          : 0.08695652173913043
  - new                             : 0.9565217391304348
Antecedent: mileage                 = 50750
  - low                             : 0.752197265625
  - medium                          : 0.49560546875
  - high                            : 0.247802734375

=======
 Rules 
=======
RULE #0:
  IF prod_year[old] AND mileage[high] THEN price[cheap]
	AND aggregation function : fmin
	OR aggregation function  : fmax

  Aggregation (IF-clause):
  - prod_year[old]                                         : 0.043478260869565216
  - mileage[high]                                          : 0.247802734375
                          prod_year[old] AND mileage[high] = 0.043478260869565216
  Activation (THEN-clause):
                                              price[cheap] : 0.043478260869565216

RULE #1:
  IF prod_year[medium] AND mileage[medium] THEN price[medium]
	AND aggregation function : fmin
	OR aggregation function  : fmax

  Aggregation (IF-clause):
  - prod_year[medium]                                      : 0.08695652173913043
  - mileage[medium]                                        : 0.49560546875
                     prod_year[medium] AND mileage[medium] = 0.08695652173913043
  Activation (THEN-clause):
                                             price[medium] : 0.08695652173913043

RULE #2:
  IF prod_year[new] AND mileage[low] THEN price[expensive]
	AND aggregation function : fmin
	OR aggregation function  : fmax

  Aggregation (IF-clause):
  - prod_year[new]                                         : 0.9565217391304348
  - mileage[low]                                           : 0.752197265625
                           prod_year[new] AND mileage[low] = 0.752197265625
  Activation (THEN-clause):
                                          price[expensive] : 0.752197265625


==============================
 Intermediaries and Conquests 
==============================
Consequent: price                    = 37229.16578375575
  cheap:
    Accumulate using accumulation_max : 0.043478260869565216
  medium:
    Accumulate using accumulation_max : 0.08695652173913043
  expensive:
    Accumulate using accumulation_max : 0.752197265625

=============
 Antecedents 
=============
Antecedent: prod_year               = 2016
  - old                             : 0.08695652173913043
  - medium                          : 0.17391304347826086
  - new                             : 0.9130434782608695
Antecedent: mileage                 = 57793
  - low                             : 0.7178076171875
  - medium                          : 0.564384765625
  - high                            : 0.2821923828125

=======
 Rules 
=======
RULE #0:
  IF prod_year[old] AND mileage[high] THEN price[cheap]
	AND aggregation function : fmin
	OR aggregation function  : fmax

  Aggregation (IF-clause):
  - prod_year[old]                                         : 0.08695652173913043
  - mileage[high]                                          : 0.2821923828125
                          prod_year[old] AND mileage[high] = 0.08695652173913043
  Activation (THEN-clause):
                                              price[cheap] : 0.08695652173913043

RULE #1:
  IF prod_year[medium] AND mileage[medium] THEN price[medium]
	AND aggregation function : fmin
	OR aggregation function  : fmax

  Aggregation (IF-clause):
  - prod_year[medium]                                      : 0.17391304347826086
  - mileage[medium]                                        : 0.564384765625
                     prod_year[medium] AND mileage[medium] = 0.17391304347826086
  Activation (THEN-clause):
                                             price[medium] : 0.17391304347826086

RULE #2:
  IF prod_year[new] AND mileage[low] THEN price[expensive]
	AND aggregation function : fmin
	OR aggregation function  : fmax

  Aggregation (IF-clause):
  - prod_year[new]                                         : 0.9130434782608695
  - mileage[low]                                           : 0.7178076171875
                           prod_year[new] AND mileage[low] = 0.7178076171875
  Activation (THEN-clause):
                                          price[expensive] : 0.7178076171875


==============================
 Intermediaries and Conquests 
==============================
Consequent: price                    = 36495.78569319686
  cheap:
    Accumulate using accumulation_max : 0.08695652173913043
  medium:
    Accumulate using accumulation_max : 0.17391304347826086
  expensive:
    Accumulate using accumulation_max : 0.7178076171875

=============
 Antecedents 
=============
Antecedent: prod_year               = 2012
  - old                             : 0.2608695652173913
  - medium                          : 0.5217391304347826
  - new                             : 0.7391304347826086
Antecedent: mileage                 = 127000
  - low                             : 0.3798828125
  - medium                          : 0.759765625
  - high                            : 0.6201171875

=======
 Rules 
=======
RULE #0:
  IF prod_year[old] AND mileage[high] THEN price[cheap]
	AND aggregation function : fmin
	OR aggregation function  : fmax

  Aggregation (IF-clause):
  - prod_year[old]                                         : 0.2608695652173913
  - mileage[high]                                          : 0.6201171875
                          prod_year[old] AND mileage[high] = 0.2608695652173913
  Activation (THEN-clause):
                                              price[cheap] : 0.2608695652173913

RULE #1:
  IF prod_year[medium] AND mileage[medium] THEN price[medium]
	AND aggregation function : fmin
	OR aggregation function  : fmax

  Aggregation (IF-clause):
  - prod_year[medium]                                      : 0.5217391304347826
  - mileage[medium]                                        : 0.759765625
                     prod_year[medium] AND mileage[medium] = 0.5217391304347826
  Activation (THEN-clause):
                                             price[medium] : 0.5217391304347826

RULE #2:
  IF prod_year[new] AND mileage[low] THEN price[expensive]
	AND aggregation function : fmin
	OR aggregation function  : fmax

  Aggregation (IF-clause):
  - prod_year[new]                                         : 0.7391304347826086
  - mileage[low]                                           : 0.3798828125
                           prod_year[new] AND mileage[low] = 0.3798828125
  Activation (THEN-clause):
                                          price[expensive] : 0.3798828125


==============================
 Intermediaries and Conquests 
==============================
Consequent: price                    = 29818.63714214192
  cheap:
    Accumulate using accumulation_max : 0.2608695652173913
  medium:
    Accumulate using accumulation_max : 0.5217391304347826
  expensive:
    Accumulate using accumulation_max : 0.3798828125

=============
 Antecedents 
=============
Antecedent: prod_year               = 2011
  - old                             : 0.30434782608695654
  - medium                          : 0.6086956521739131
  - new                             : 0.6956521739130435
Antecedent: mileage                 = 110000
  - low                             : 0.462890625
  - medium                          : 0.92578125
  - high                            : 0.537109375

=======
 Rules 
=======
RULE #0:
  IF prod_year[old] AND mileage[high] THEN price[cheap]
	AND aggregation function : fmin
	OR aggregation function  : fmax

  Aggregation (IF-clause):
  - prod_year[old]                                         : 0.30434782608695654
  - mileage[high]                                          : 0.537109375
                          prod_year[old] AND mileage[high] = 0.30434782608695654
  Activation (THEN-clause):
                                              price[cheap] : 0.30434782608695654

RULE #1:
  IF prod_year[medium] AND mileage[medium] THEN price[medium]
	AND aggregation function : fmin
	OR aggregation function  : fmax

  Aggregation (IF-clause):
  - prod_year[medium]                                      : 0.6086956521739131
  - mileage[medium]                                        : 0.92578125
                     prod_year[medium] AND mileage[medium] = 0.6086956521739131
  Activation (THEN-clause):
                                             price[medium] : 0.6086956521739131

RULE #2:
  IF prod_year[new] AND mileage[low] THEN price[expensive]
	AND aggregation function : fmin
	OR aggregation function  : fmax

  Aggregation (IF-clause):
  - prod_year[new]                                         : 0.6956521739130435
  - mileage[low]                                           : 0.462890625
                           prod_year[new] AND mileage[low] = 0.462890625
  Activation (THEN-clause):
                                          price[expensive] : 0.462890625


==============================
 Intermediaries and Conquests 
==============================
Consequent: price                    = 30179.402125805926
  cheap:
    Accumulate using accumulation_max : 0.30434782608695654
  medium:
    Accumulate using accumulation_max : 0.6086956521739131
  expensive:
    Accumulate using accumulation_max : 0.462890625

=============
 Antecedents 
=============
Antecedent: prod_year               = 2001
  - old                             : 0.7391304347826086
  - medium                          : 0.5217391304347826
  - new                             : 0.2608695652173913
Antecedent: mileage                 = 91000
  - low                             : 0.5556640625
  - medium                          : 0.888671875
  - high                            : 0.4443359375

=======
 Rules 
=======
RULE #0:
  IF prod_year[old] AND mileage[high] THEN price[cheap]
	AND aggregation function : fmin
	OR aggregation function  : fmax

  Aggregation (IF-clause):
  - prod_year[old]                                         : 0.7391304347826086
  - mileage[high]                                          : 0.4443359375
                          prod_year[old] AND mileage[high] = 0.4443359375
  Activation (THEN-clause):
                                              price[cheap] : 0.4443359375

RULE #1:
  IF prod_year[medium] AND mileage[medium] THEN price[medium]
	AND aggregation function : fmin
	OR aggregation function  : fmax

  Aggregation (IF-clause):
  - prod_year[medium]                                      : 0.5217391304347826
  - mileage[medium]                                        : 0.888671875
                     prod_year[medium] AND mileage[medium] = 0.5217391304347826
  Activation (THEN-clause):
                                             price[medium] : 0.5217391304347826

RULE #2:
  IF prod_year[new] AND mileage[low] THEN price[expensive]
	AND aggregation function : fmin
	OR aggregation function  : fmax

  Aggregation (IF-clause):
  - prod_year[new]                                         : 0.2608695652173913
  - mileage[low]                                           : 0.5556640625
                           prod_year[new] AND mileage[low] = 0.2608695652173913
  Activation (THEN-clause):
                                          price[expensive] : 0.2608695652173913


==============================
 Intermediaries and Conquests 
==============================
Consequent: price                    = 27087.484832983348
  cheap:
    Accumulate using accumulation_max : 0.4443359375
  medium:
    Accumulate using accumulation_max : 0.5217391304347826
  expensive:
    Accumulate using accumulation_max : 0.2608695652173913

=============
 Antecedents 
=============
Antecedent: prod_year               = 2010
  - old                             : 0.34782608695652173
  - medium                          : 0.6956521739130435
  - new                             : 0.6521739130434783
Antecedent: mileage                 = 160000
  - low                             : 0.21875
  - medium                          : 0.4375
  - high                            : 0.78125

=======
 Rules 
=======
RULE #0:
  IF prod_year[old] AND mileage[high] THEN price[cheap]
	AND aggregation function : fmin
	OR aggregation function  : fmax

  Aggregation (IF-clause):
  - prod_year[old]                                         : 0.34782608695652173
  - mileage[high]                                          : 0.78125
                          prod_year[old] AND mileage[high] = 0.34782608695652173
  Activation (THEN-clause):
                                              price[cheap] : 0.34782608695652173

RULE #1:
  IF prod_year[medium] AND mileage[medium] THEN price[medium]
	AND aggregation function : fmin
	OR aggregation function  : fmax

  Aggregation (IF-clause):
  - prod_year[medium]                                      : 0.6956521739130435
  - mileage[medium]                                        : 0.4375
                     prod_year[medium] AND mileage[medium] = 0.4375
  Activation (THEN-clause):
                                             price[medium] : 0.4375

RULE #2:
  IF prod_year[new] AND mileage[low] THEN price[expensive]
	AND aggregation function : fmin
	OR aggregation function  : fmax

  Aggregation (IF-clause):
  - prod_year[new]                                         : 0.6521739130434783
  - mileage[low]                                           : 0.21875
                           prod_year[new] AND mileage[low] = 0.21875
  Activation (THEN-clause):
                                          price[expensive] : 0.21875


==============================
 Intermediaries and Conquests 
==============================
Consequent: price                    = 27601.96605738856
  cheap:
    Accumulate using accumulation_max : 0.34782608695652173
  medium:
    Accumulate using accumulation_max : 0.4375
  expensive:
    Accumulate using accumulation_max : 0.21875

   Prod. year  Mileage  Price  Predicted Price
1        1997     3333  10349     29886.929593
8        2001    91000  10820     27087.484833
7        2011   110000  12858     30179.402126
9        2010   160000  15367     27601.966057
6        2012   127000  18817     29818.637142
0        2014    65000  27284     34672.486957
3        2014   132756  38737     30570.849314
2        1996   212485  40769     19231.588787
4        2017    50750  42102     37229.165784
5        2016    57793  42400     36495.785693
No description has been provided for this image

Система ужасно предсказывает цену, не может предсказать ни большую цену ни маленькую, потому что она хорошо предсказывает категорию, но цену по категории не может