SuperKartTest / app.py
vikas0615's picture
Update app.py
c625c1a verified
import streamlit as st
import pandas as pd
import joblib
# Load the trained model
def load_model():
return joblib.load("superkart_sales_prediction_model_v1_0.joblib")
model = load_model()
# Streamlit UI for SuperKart Sales Prediction
st.title("SuperKart Sales Prediction App")
st.write("The Sales Prediction App is an internal tool to predicts sales based on past sales, product types, store.")
st.write("Kindly enter the details to predict sales forecast.")
# Collect user input
Product_Weight = st.number_input("Product_Weight", min_value=0.0, max_value=100.0, step=0.1, value=90.0),
Product_Sugar_Content = st.selectbox("Product_Sugar_Content", ["No Sugar", "Low Sugar", "Regular" ]),
Product_Allocated_Area = st.number_input("Product_Allocated_Area", min_value=0.0, max_value=3.0, step=0.01, value=1.0),
Product_Type = st.selectbox("Product_Type", ["Baking Goods", "Breads", "Breakfast", "Canned", "Dairy", "Frozen Food", "Fruits and Vegetables", "Hard Drinks", "Health and Hygiene", "Household", "Meat", "Others", "Seafood", "Snack Foods", "Soft Drinks", "Startchy Foods"]),
Product_MRP = st.number_input("Product_MRP", min_value=1.0, max_value=50.0, step=0.1, value=40.0),
Store_Id = st.selectbox("Store_Id", ["OUT001", "OUT002", "OUT003", "OUT004" ]),
Store_Size = st.selectbox("Store_Size", ["Small", "Medium", "High"]),
Store_Location_City_Type = st.selectbox("Store_Location_City_Type", ["Tier 1", "Tier 2", "Tier 3"]),
Store_Type = st.selectbox("Store_Type", ["Supermarket Type2", "Departmental Store", "Supermarket Type1", "Food Mart"]),
Product_Store_Sales_Total = st.number_input("Product_Store_Sales_Total", min_value=1.0, max_value=10000.00, step=0.01, value=90.0),
# Convert user input into a DataFrame
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_Id' : Store_Id,
'Store_Size' : Store_Size,
'Store_Location_City_Type' : Store_Location_City_Type,
'Store_Type' : Store_Type,
'Product_Store_Sales_Total' : Product_Store_Sales_Total
}])
# Make prediction when the "Predict" button is clicked
if st.button("Predict"):
response = requests.post("https://<username>-<repo_id>.hf.space/v1/rental", json=input_data.to_dict(orient='records')[0]) # Send data to Flask API
if response.status_code == 200:
prediction = response.json()['Predicted Price (in dollars)']
st.success(f"Predicted Rental Price (in dollars): {prediction}")
else:
st.error("Error making prediction.")
# Section for batch prediction
st.subheader("Batch Prediction")
# Allow users to upload a CSV file for batch prediction
uploaded_file = st.file_uploader("Upload CSV file for batch prediction", type=["csv"])
# Make batch prediction when the "Predict Batch" button is clicked
if uploaded_file is not None:
if st.button("Predict Batch"):
response = requests.post("https://vikas0615-vikas0615/SuperkartSalesPrediction_updated.hf.space/v1/forecastbatch", files={"file": uploaded_file})
if response.status_code == 200:
predictions = response.json()
st.success("Batch predictions completed!")
st.write(predictions) # Display the predictions
else:
st.error("Error making batch prediction.")
# Set the classification threshold
classification_threshold = 0.45
# Predict button
if st.button("Predict"):
prediction_proba = model.predict_proba(input_data)[0, 1]
prediction = (prediction_proba >= classification_threshold).astype(int)
result = "forecast sales" if prediction == 1 else "No forecast"
st.write(f"Based on the information provided, the sales forecast is likely to be {result}.")