Spaces:
Sleeping
Sleeping
| import streamlit as st | |
| import pandas as pd | |
| import shap | |
| from catboost import CatBoostRegressor | |
| import matplotlib.pyplot as plt | |
| # Загрузка данных и модели | |
| 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() |