sudhirpgcmma02 commited on
Commit
29a55f7
·
verified ·
1 Parent(s): 40eaa7b

Upload folder using huggingface_hub

Browse files
Docker ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ # Base image
3
+ FROM python:3.9-slim
4
+
5
+ # Set working directory
6
+ WORKDIR /app
7
+
8
+ # Copy everything
9
+ COPY . .
10
+
11
+ # Install dependencies
12
+ RUN pip install --no-cache-dir -r requirements.txt
13
+
14
+ # Expose ports for Flask (5000) and Streamlit (8501)
15
+ EXPOSE 7860
16
+ EXPOSE 7860
17
+
18
+ # Run both Flask and Streamlit together
19
+ CMD ["bash", "-c", "python model/backend/app.py & streamlit run model/frontend/frontend_app.py --server.port=7860 --server.address=0.0.0.0"]
backend/app.py ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ from flask import Flask, request, jsonify
3
+ import joblib
4
+ import numpy as np
5
+ import pandas as pd
6
+
7
+ app = Flask(__name__)
8
+
9
+ # Load model
10
+ model = joblib.load("best_dealer_forecast_model.joblib")
11
+
12
+ @app.route("/predict", methods=["POST"])
13
+ def predict():
14
+ data = request.json
15
+ df = pd.DataFrame([data])
16
+ prediction = model.predict(df)
17
+ return jsonify({"prediction": prediction.tolist()})
best_dealer_forecast_model.joblib ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:a550fe178e06a6473672095d604aee83a1491679836db3c40be51ec8c2c782ec
3
+ size 120528977
frontend/Frontend_app.py ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ import streamlit as st
3
+ import requests
4
+
5
+ st.title("🚗 Dealer Sales Forecast")
6
+
7
+ dealer_id = st.text_input("Dealer ID")
8
+ variant = st.text_input("Model Variant")
9
+ lag1 = st.number_input("Sales Lag 1", value=0)
10
+ lag2 = st.number_input("Sales Lag 2", value=0)
11
+ lag3 = st.number_input("Sales Lag 3", value=0)
12
+ lag6 = st.number_input("Sales Lag 6", value=0)
13
+
14
+ if st.button("Predict"):
15
+ payload = {
16
+ "dealer_id": dealer_id,
17
+ "model_variant": variant,
18
+ "sale_volume_lag_1": lag1,
19
+ "sale_volume_lag_2": lag2,
20
+ "sale_volume_lag_3": lag3,
21
+ "sale_volume_lag_6": lag6
22
+ }
23
+ res = requests.post("http://127.0.0.1:7860/predict", json=payload)
24
+ st.success(f"Prediction: {res.json()['prediction']}")
frontend/app.py ADDED
@@ -0,0 +1,66 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ import streamlit as st
3
+ import pandas as pd
4
+ import joblib
5
+ import matplotlib.pyplot as plt
6
+
7
+ # Load model
8
+ @st.cache_resource
9
+ def load_model():
10
+ return joblib.load("model/best_dealer_forecast_model.joblib")
11
+
12
+ model = load_model()
13
+
14
+ # Load history
15
+ history = pd.read_csv("dealer_sales_history.csv", parse_dates=["date"])
16
+
17
+ st.title("🚗 Dealer Variant Sales Forecast")
18
+
19
+ dealer_id = st.number_input("Enter Dealer ID", min_value=1, step=1)
20
+ variant = st.text_input("Enter Model Variant (e.g., S(O))")
21
+ months = st.slider("Forecast Horizon (months)", 1, 12, 5)
22
+
23
+ if st.button("Predict"):
24
+ df = history[
25
+ (history["dealer_id"] == dealer_id) &
26
+ (history["model_variant"] == variant)
27
+ ].copy().sort_values("date").reset_index(drop=True)
28
+
29
+ if df.empty:
30
+ st.error("No history available for this Dealer + Variant")
31
+ else:
32
+ preds = []
33
+ for i in range(months):
34
+ df["sale_volume_lag_1"] = df["sale_volume"].shift(1)
35
+ df["sale_volume_lag_2"] = df["sale_volume"].shift(2)
36
+ df["sale_volume_lag_3"] = df["sale_volume"].shift(3)
37
+ df["sale_volume_lag_6"] = df["sale_volume"].shift(6)
38
+ df["sales_roll_mean_3"] = df["sale_volume"].rolling(3).mean()
39
+ df["sales_roll_std_3"] = df["sale_volume"].rolling(3).std()
40
+
41
+ latest = df.iloc[-1].copy()
42
+ features = latest[[
43
+ "dealer_id", "model_variant",
44
+ "sale_volume_lag_1","sale_volume_lag_2",
45
+ "sale_volume_lag_3","sale_volume_lag_6",
46
+ "sales_roll_mean_3","sales_roll_std_3"
47
+ ]]
48
+ pred = model.predict(pd.DataFrame([features]))[0]
49
+ next_date = df["date"].max() + pd.DateOffset(months=1)
50
+ preds.append({"date": next_date, "predicted_sales": pred})
51
+
52
+ df = pd.concat([df, pd.DataFrame({
53
+ "date": [next_date],
54
+ "dealer_id": [dealer_id],
55
+ "model_variant": [variant],
56
+ "sale_volume": [pred]
57
+ })], ignore_index=True)
58
+
59
+ forecast = pd.DataFrame(preds)
60
+ st.write("### Forecast Results", forecast)
61
+
62
+ fig, ax = plt.subplots()
63
+ ax.plot(forecast["date"], forecast["predicted_sales"], marker="o", label="Forecast")
64
+ ax.set_xlabel("Date")
65
+ ax.set_ylabel("Predicted Sales")
66
+ st.pyplot(fig)