Spaces:
Running
Running
File size: 5,169 Bytes
1bab85c a2ef5e8 1bab85c | 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 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 |
import streamlit as st
import requests
# Page Configuration
st.set_page_config(
page_title="SuperKart Sales Predictor",
page_icon=":shopping_cart:",
layout="centered"
)
# App Title and User Guidance
st.title("Ramakanth's SuperKart Sales Predictor")
st.markdown("""
Welcome to the **SuperKart Sales Forecasting Tool**\!
This application predicts the **total product-store sales revenue** for a given
product and store combination using a trained **XGBoost model** deployed on
Hugging Face Spaces.
**How to use:**
1. Fill in the **Product Details** and **Store Details** below.
2. All fields are required. Hover over each label to see valid values and ranges.
3. Click **Predict Sales** to get an instant forecast.
""")
st.divider()
# Input Form -- Product Details
st.subheader("Product Details")
col1, col2 = st.columns(2)
with col1:
Product_Weight = st.number_input(
"Product Weight (kg)",
min_value=4.0, max_value=22.0, value=12.66, step=0.01,
help="Weight of the product in kilograms. Valid range: 4.0 to 22.0 kg."
)
Product_Allocated_Area = st.number_input(
"Product Allocated Area (ratio)",
min_value=0.004, max_value=0.298, value=0.068, step=0.001,
format="%.3f",
help="Ratio of display area for this product to total store display. Range: 0.004 to 0.298."
)
Product_MRP = st.number_input(
"Product MRP (INR)",
min_value=31.0, max_value=266.0, value=147.0, step=0.5,
help="Maximum Retail Price of the product in Indian Rupees. Range: 31 to 266."
)
with col2:
Product_Sugar_Content = st.selectbox(
"Sugar Content",
["Low Sugar", "Regular", "No Sugar"],
help="Sugar content classification: Low Sugar / Regular / No Sugar."
)
Product_Id_char = st.selectbox(
"Product ID Prefix",
["FD", "DR", "NC"],
help="Two-letter prefix of the Product ID: FD=Food, DR=Drinks, NC=Non-Consumable."
)
Product_Type_Category = st.selectbox(
"Product Type Category",
["Perishables", "Non Perishables"],
help="Perishables: dairy, meat, fruits. Non-Perishables: canned, household, health."
)
# Input Form -- Store Details
st.subheader("Store Details")
col3, col4 = st.columns(2)
with col3:
Store_Size = st.selectbox(
"Store Size",
["High", "Medium", "Low"],
index=1,
help="Physical size: High=large supermarket, Medium=standard, Low=small food mart."
)
Store_Location_City_Type = st.selectbox(
"City Type",
["Tier 1", "Tier 2", "Tier 3"],
index=1,
help="Tier 1=metro cities, Tier 2=mid-size cities, Tier 3=smaller towns."
)
with col4:
Store_Type = st.selectbox(
"Store Type",
["Departmental Store", "Supermarket Type1", "Supermarket Type2", "Food Mart"],
index=2,
help="Store format based on product range offered."
)
Store_Age_Years = st.number_input(
"Store Age (Years)",
min_value=0, max_value=100, value=26, step=1,
help="Number of years since the store was established."
)
st.divider()
# Prediction Button
if st.button("Predict Sales", type="primary", use_container_width=True):
payload = {
"Product_Weight": Product_Weight,
"Product_Sugar_Content": Product_Sugar_Content,
"Product_Allocated_Area": Product_Allocated_Area,
"Product_MRP": Product_MRP,
"Store_Size": Store_Size,
"Store_Location_City_Type": Store_Location_City_Type,
"Store_Type": Store_Type,
"Product_Id_char": Product_Id_char,
"Store_Age_Years": Store_Age_Years,
"Product_Type_Category": Product_Type_Category
}
with st.spinner("Contacting prediction API -- please wait..."):
try:
response = requests.post(
"https://ramzai9-superkartprediction.hf.space/v1/predict",
json=payload,
timeout=60
)
if response.status_code == 200:
predicted_sales = response.json()["Sales"]
st.success(f"Predicted Product Store Sales Total: INR {predicted_sales:,.2f}")
st.balloons()
elif response.status_code == 400:
st.error(f"Validation Error: {response.json().get('error', 'Bad request')}")
else:
st.error(f"API Error (HTTP {response.status_code}): {response.text}")
except requests.exceptions.Timeout:
st.warning(
"Request timed out. The backend space may be waking up -- "
"please wait 30 seconds and try again."
)
except requests.exceptions.ConnectionError:
st.error(
"Could not reach the prediction backend. "
"Please verify the backend Hugging Face Space is running."
)
except Exception as e:
st.error(f"Unexpected error: {str(e)}")
st.caption("SuperKart Sales Predictor | Powered by XGBoost & Streamlit | Deployed on Hugging Face Spaces")
|