Spaces:
Runtime error
Runtime error
| import streamlit as st | |
| import pandas as pd | |
| import joblib | |
| import numpy as np | |
| # --- Streamlit Page Configuration --- | |
| st.set_page_config( | |
| page_title="SuperKart Sales Forecaster", | |
| page_icon="π", | |
| layout="wide" | |
| ) | |
| # Load the trained model pipeline | |
| # The @st.cache_resource decorator ensures the model is loaded only once | |
| def load_model(): | |
| """Loads the serialized model pipeline from disk.""" | |
| # CORRECTED LINE: Changed the filename to match your model | |
| return joblib.load("superkart_prediction_model_v1_0.joblib") | |
| # Load the model | |
| model = load_model() | |
| # --- App Title and Description --- | |
| st.title("π SuperKart Sales Forecaster") | |
| st.markdown("This application predicts the total sales revenue for a product in a specific store based on its characteristics.") | |
| # --- Helper lists for dropdown menus --- | |
| PRODUCT_TYPES = sorted(['Snack Foods', 'Meat', 'Fruits and Vegetables', 'Household', 'Baking Goods', 'Frozen Foods', 'Dairy', 'Canned', 'Health and Hygiene', 'Soft Drinks', 'Breads', 'Hard Drinks', 'Others', 'Starchy Foods', 'Breakfast', 'Seafood']) | |
| STORE_TYPES = sorted(['Supermarket Type1', 'Supermarket Type2', 'Departmental Store', 'Food Mart']) | |
| STORE_LOCATIONS = sorted(['Tier 1', 'Tier 2', 'Tier 3']) | |
| SUGAR_CONTENT_OPTIONS = ['Low Sugar', 'Regular'] | |
| STORE_SIZE_OPTIONS = ['Small', 'Medium', 'High'] | |
| # --- Main Prediction Form --- | |
| with st.form("prediction_form"): | |
| st.header("Enter Product and Store Details") | |
| # Create columns for a cleaner layout | |
| col1, col2, col3 = st.columns(3) | |
| with col1: | |
| st.subheader("Product Details") | |
| product_type = st.selectbox("Product Type", options=PRODUCT_TYPES) | |
| product_weight = st.slider("Product Weight", min_value=4.0, max_value=22.0, value=12.5, step=0.1) | |
| product_sugar_content = st.selectbox("Product Sugar Content", options=SUGAR_CONTENT_OPTIONS) | |
| with col2: | |
| st.subheader("Pricing and Display") | |
| product_mrp = st.slider("Product MRP ($)", min_value=30.0, max_value=270.0, value=140.0, step=0.5) | |
| product_allocated_area = st.slider("Product Allocated Area (Ratio)", min_value=0.0, max_value=0.30, value=0.07, step=0.001, format="%.3f") | |
| with col3: | |
| st.subheader("Store Details") | |
| store_type = st.selectbox("Store Type", options=STORE_TYPES) | |
| store_size = st.selectbox("Store Size", options=STORE_SIZE_OPTIONS) | |
| store_location_city_type = st.selectbox("Store Location City Type", options=STORE_LOCATIONS) | |
| # Corrected the key in the input_data dictionary to match the model's feature name | |
| store_age = st.slider("Store Age (in years)", min_value=16, max_value=38, value=22, step=1) | |
| # Submit button for the form | |
| submitted = st.form_submit_button("Predict Sales Revenue") | |
| # --- Prediction Logic --- | |
| if submitted: | |
| # Create a DataFrame from the user inputs | |
| # The column names must match exactly what the model was trained on | |
| input_data = pd.DataFrame([{ | |
| 'Product_Weight': product_weight, | |
| 'Product_Sugar_Content': product_sugar_content, | |
| 'Product_Allocated_Area': product_allocated_area, | |
| 'Product_Type': product_type, | |
| 'Product_MRP': product_mrp, | |
| 'Store_Size': store_size, | |
| 'Store_Location_City_Type': store_location_city_type, | |
| 'Store_Type': store_type, | |
| # The key here was 'Store_Age' in your previous code, but your feature list shows 'store_age'. | |
| # Python is case-sensitive, so it's safer to match the feature list exactly. | |
| 'store_age': store_age | |
| }]) | |
| try: | |
| # Use the loaded pipeline to make a prediction | |
| with st.spinner("Forecasting..."): | |
| prediction = model.predict(input_data) | |
| # Display the prediction | |
| st.success(f"**Predicted Sales Revenue: ${prediction[0]:,.2f}**") | |
| except Exception as e: | |
| st.error(f"An error occurred during prediction: {e}") | |