|
|
import streamlit as st |
|
|
import pandas as pd |
|
|
import joblib |
|
|
|
|
|
|
|
|
@st.cache_resource |
|
|
def load_model_and_data(): |
|
|
model = joblib.load("deployment_files/Quarterly_Sales_Revenue_model_v1_0.joblib") |
|
|
|
|
|
|
|
|
data = pd.read_csv("deployment_files/SuperKart_local.csv") |
|
|
|
|
|
return model, data |
|
|
|
|
|
|
|
|
def predict_quarterly_sales_by_store_and_product(store_ids, df, model): |
|
|
store_results = [] |
|
|
product_results = [] |
|
|
total_sales = 0.0 |
|
|
|
|
|
feature_cols = [ |
|
|
'Product_Id', 'Store_Id', 'Product_Type', 'Product_Sugar_Content', |
|
|
'Store_Type', 'Store_Location_City_Type', 'Store_Size', |
|
|
'Product_Weight', 'Product_Allocated_Area', 'Product_MRP', |
|
|
'Store_Establishment_Year', 'Total_Historical_Sales', |
|
|
'Num_Past_Transactions', 'Average_Historical_Sales' |
|
|
] |
|
|
|
|
|
for store_id in store_ids: |
|
|
store_df = df[df['Store_Id'] == store_id].copy() |
|
|
|
|
|
if store_df.empty: |
|
|
store_results.append((store_id, 0.0)) |
|
|
continue |
|
|
|
|
|
X_input = store_df[feature_cols] |
|
|
y_pred = model.predict(X_input) |
|
|
|
|
|
store_total_sales = sum(y_pred) |
|
|
store_results.append((store_id, round(store_total_sales, 2))) |
|
|
total_sales += store_total_sales |
|
|
|
|
|
for product_id, sales in zip(store_df['Product_Id'], y_pred): |
|
|
product_results.append((store_id, product_id, round(sales, 2))) |
|
|
|
|
|
return store_results, product_results, round(total_sales, 2) |
|
|
|
|
|
|
|
|
model, df = load_model_and_data() |
|
|
|
|
|
|
|
|
st.title("π Predict Quarterly Sales by Store and Product") |
|
|
|
|
|
|
|
|
store_ids = st.multiselect("π¬ Select Store ID(s)", sorted(df["Store_Id"].unique())) |
|
|
product_ids = st.multiselect("π¦ Select Product ID(s) (optional)", sorted(df["Product_Id"].unique())) |
|
|
|
|
|
|
|
|
if st.button("Predict Quarterly Sales"): |
|
|
if not store_ids: |
|
|
st.warning("Please select at least one Store ID.") |
|
|
else: |
|
|
store_results, product_results, total_sales = predict_quarterly_sales_by_store_and_product(store_ids, df, model) |
|
|
|
|
|
|
|
|
st.subheader("πͺ Store-wise Total Quarterly Sales") |
|
|
for store, sales in store_results: |
|
|
st.write(f"π Store {store}: βΉ{sales:,.2f}") |
|
|
|
|
|
|
|
|
st.subheader("π¦ Product-wise Sales (Filtered by Selected Stores)") |
|
|
filtered_products = product_results |
|
|
if product_ids: |
|
|
filtered_products = [r for r in product_results if r[1] in product_ids] |
|
|
|
|
|
if filtered_products: |
|
|
product_df = pd.DataFrame(filtered_products, columns=["Store_Id", "Product_Id", "Predicted_Sales"]) |
|
|
st.dataframe(product_df) |
|
|
else: |
|
|
st.info("No product sales to display for selected filters.") |
|
|
|
|
|
|
|
|
st.subheader("π Total Quarterly Sales Across All Selected Stores") |
|
|
st.success(f"βΉ{total_sales:,.2f}") |
|
|
|