Spaces:
Sleeping
Sleeping
File size: 3,076 Bytes
4ae07ef d96eae1 4ae07ef f73a5f3 9197906 f73a5f3 4ae07ef f73a5f3 4ae07ef 30a5ef1 4ae07ef 5eb1934 4ae07ef 30a5ef1 4ae07ef 30a5ef1 5d62a07 4ae07ef b44b271 4ae07ef 27eaf67 7064dcf ab382c0 7064dcf ab382c0 27eaf67 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
import streamlit as st
import pandas as pd
import shap
from catboost import CatBoostRegressor
import matplotlib.pyplot as plt
# Загрузка данных и модели
@st.cache_data()
def load_data_and_model():
df = pd.read_csv('Dataset/car_data.txt', sep=',')
final_model = CatBoostRegressor()
final_model.load_model('Model/best_model.cbm')
return df, final_model
df, final_model = load_data_and_model()
# Заголовок приложения
st.title("Прогнозирование цены автомобиля")
# Создаем окошки для ввода параметров
inputs = {}
# Выбор бренда
unique_brands = df['brand'].unique()
selected_brand = st.selectbox("Выберите бренд авто", unique_brands)
# Выбор модели в зависимости от бренда
selected_model_options = df[df['brand'] == selected_brand]['model'].unique()
selected_model = st.selectbox("Выберите модель авто", selected_model_options)
inputs['brand'] = selected_brand
inputs['model'] = selected_model
# Получаем числовые и категориальные столбцы из вашего DataFrame
categorical_columns = ['brand', 'model', 'поколение', 'тип продавца', 'состояние',
'модификация', 'тип двигателя', 'коробка передач', 'привод',
'комплектация', 'тип кузова', 'цвет', 'авито оценка']
numerical_columns = ['год выпуска', 'пробег', 'объем двигателя']
# Остальные окошки для ввода параметров
for column in df.columns:
if column not in ['brand', 'model']:
if column in numerical_columns:
inputs[column] = st.number_input(f"Введите значение для {column}")
elif column in categorical_columns:
inputs[column] = st.text_input(f"Введите значение для {column}")
# Кнопка для запуска предсказания
if st.button("Предсказать цену"):
# Создаем DataFrame из введенных данных
input_data = pd.DataFrame(inputs, index=[0])
# Получение предсказания
predicted_price = final_model.predict(input_data)[0]
# Вывод результатов
st.write(f"Прогнозируемая цена авто: {round(predicted_price, 2)} руб.")
# Отключение предупреждения PyplotGlobalUseWarning
st.set_option('deprecation.showPyplotGlobalUse', False)
# Расчет важности фичей с использованием SHAP
explainer = shap.TreeExplainer(final_model)
shap_values = explainer.shap_values(input_data)
# Отображение SHAP force plot
st.write("SHAP Force Plot:")
shap.force_plot(explainer.expected_value, shap_values[0], input_data, matplotlib=True, show=False)
st.pyplot() |