import streamlit as st import pandas as pd import numpy as np from sklearn.model_selection import train_test_split from sklearn.linear_model import LinearRegression from sklearn.metrics import mean_squared_error, r2_score import matplotlib.pyplot as plt # Page Configuration st.set_page_config(page_title="Sales Forecasting App", layout="wide") # App Header st.markdown("

📈 Sales Forecasting App

", unsafe_allow_html=True) # Centered Navigation st.markdown("
", unsafe_allow_html=True) tabs = ["📊 Data Visualization", "📈 Model Performance", "🔮 Prediction"] selected_tab = st.radio("Navigation", tabs, horizontal=True, key="navigation") st.markdown("
", unsafe_allow_html=True) # Example Dataset (Replace with actual data) data = { "Time": range(1, 13), # e.g., months 1 to 12 "Sales": [150, 200, 250, 300, 350, 400, 450, 500, 550, 600, 650, 700], "OnlineAds": [10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120], "SocialMedia": [5, 15, 25, 35, 45, 55, 65, 75, 85, 95, 105, 115] } df = pd.DataFrame(data) if selected_tab == "📊 Data Visualization": st.markdown("### Preview of Dataset") st.dataframe(df) st.markdown("### Data Visualization") fig, axes = plt.subplots(1, 3, figsize=(15, 5)) axes[0].scatter(df["Time"], df["Sales"], color='blue', alpha=0.7) axes[0].set_title("Time vs Sales") axes[0].set_xlabel("Time") axes[0].set_ylabel("Sales") axes[1].scatter(df["OnlineAds"], df["Sales"], color='green', alpha=0.7) axes[1].set_title("Online Ads vs Sales") axes[1].set_xlabel("Online Ads") axes[1].set_ylabel("Sales") axes[2].scatter(df["SocialMedia"], df["Sales"], color='red', alpha=0.7) axes[2].set_title("Social Media vs Sales") axes[2].set_xlabel("Social Media") axes[2].set_ylabel("Sales") st.pyplot(fig) elif selected_tab == "📈 Model Performance": st.markdown("### Train Linear Regression Model") # Features and target X = df[["Time", "OnlineAds", "SocialMedia"]] # Independent variables y = df["Sales"] # Dependent variable # Split data into training and testing sets X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # Create and train the linear regression model model = LinearRegression() model.fit(X_train, y_train) # Predict on test set y_pred = model.predict(X_test) # Model evaluation mse = mean_squared_error(y_test, y_pred) r2 = r2_score(y_test, y_pred) st.write("Mean Squared Error (MSE):", mse) st.write("R-squared (R2):", r2) st.write("### Coefficients and Intercept") st.write("Coefficients:", model.coef_) st.write("Intercept:", model.intercept_) st.markdown("### Scatter Plot of Predictions vs Actual Values") fig, ax = plt.subplots(figsize=(8, 6)) ax.scatter(y_test, y_pred, alpha=0.7, color='purple') ax.set_title("Predicted vs Actual Sales") ax.set_xlabel("Actual Sales") ax.set_ylabel("Predicted Sales") st.pyplot(fig) elif selected_tab == "🔮 Prediction": st.markdown("### Predict Future Sales") # Input for prediction time_input = st.number_input("Time (e.g., month number):", min_value=1, max_value=100, step=1) online_ads_input = st.number_input("Online Ads Spend:", min_value=0.0, step=10.0) social_media_input = st.number_input("Social Media Spend:", min_value=0.0, step=10.0) if st.button("Predict Sales"): future_data = pd.DataFrame({ "Time": [time_input], "OnlineAds": [online_ads_input], "SocialMedia": [social_media_input] }) future_sales = model.predict(future_data) st.write("Predicted Sales:", future_sales[0])