febbrri commited on
Commit
40fa23d
·
verified ·
1 Parent(s): 9dc2165

Upload 3 files

Browse files
Files changed (2) hide show
  1. app.py +44 -55
  2. requirements.txt +3 -3
app.py CHANGED
@@ -1,60 +1,49 @@
1
  import pandas as pd
2
- import numpy as np
3
- import gradio as gr
4
- from sklearn.ensemble import RandomForestRegressor
5
- from sklearn.compose import ColumnTransformer
6
- from sklearn.pipeline import Pipeline
7
- from sklearn.preprocessing import OneHotEncoder, StandardScaler
8
  import joblib
 
9
 
10
- # Load dataset
11
- # NOTE: Saat deploy, pastikan file CSV ini disertakan dalam repo Hugging Face
12
- DATA_PATH = "supply_chain_data.csv"
13
- df = pd.read_csv(DATA_PATH)
14
-
15
- target = "Number of products sold"
16
- X = df.drop(columns=["Number of products sold", "Revenue generated", "SKU"])
17
- y = df[target]
18
-
19
- categorical_cols = X.select_dtypes(include=["object"]).columns.tolist()
20
- numerical_cols = X.select_dtypes(include=["int64", "float64"]).columns.tolist()
21
-
22
- preprocessor = ColumnTransformer(transformers=[
23
- ("num", StandardScaler(), numerical_cols),
24
- ("cat", OneHotEncoder(handle_unknown="ignore"), categorical_cols)
25
- ])
26
-
27
- model = Pipeline(steps=[
28
- ("preprocessor", preprocessor),
29
- ("regressor", RandomForestRegressor(random_state=42))
30
- ])
31
-
32
- # Train model
33
- model.fit(X, y)
34
-
35
- # Fungsi prediksi tunggal
36
- def predict_single(**inputs):
37
- input_df = pd.DataFrame([inputs])
38
- prediction = model.predict(input_df)[0]
39
- return f"Prediksi jumlah produk terjual: {prediction:.0f} unit"
40
-
41
- # Buat input gradio otomatis dari fitur
42
- inputs = []
43
- for col in X.columns:
44
- if col in categorical_cols:
45
- values = df[col].unique().tolist()
46
- inputs.append(gr.Dropdown(choices=values, label=col))
47
- else:
48
- inputs.append(gr.Number(label=col))
49
-
50
- # Gradio app
51
- with gr.Blocks() as demo:
52
- gr.Markdown("# Prediksi Permintaan Produk (Supply Chain Forecasting)")
53
- gr.Markdown("Masukkan detail produk dan faktor supply chain untuk memprediksi jumlah produk yang akan terjual.")
54
-
55
- input_row = gr.Row(inputs)
56
- output = gr.Textbox(label="Hasil Prediksi")
57
- submit = gr.Button("Prediksi")
58
- submit.click(fn=predict_single, inputs=inputs, outputs=output)
59
 
60
  demo.launch()
 
1
  import pandas as pd
 
 
 
 
 
 
2
  import joblib
3
+ import gradio as gr
4
 
5
+ # Load model dan data contoh
6
+ model = joblib.load("demand_forecasting_model.pkl")
7
+ data = pd.read_csv("supply_chain_data.csv")
8
+
9
+ # Kolom input yang digunakan model
10
+ input_cols = ['product_category', 'price', 'stock', 'location', 'lead_time']
11
+
12
+ # Fungsi prediksi satuan (input manual)
13
+ def predict_demand(product_category, price, stock, location, lead_time):
14
+ df = pd.DataFrame([[product_category, price, stock, location, lead_time]], columns=input_cols)
15
+ prediction = model.predict(df)[0]
16
+ return round(prediction, 2)
17
+
18
+ # Fungsi prediksi batch dari CSV
19
+ def predict_from_csv(file):
20
+ df = pd.read_csv(file.name)
21
+ if not set(input_cols).issubset(df.columns):
22
+ return "❌ CSV harus mengandung kolom: " + ", ".join(input_cols)
23
+ preds = model.predict(df[input_cols])
24
+ df['predicted_demand'] = preds
25
+ return df
26
+
27
+ # UI Gradio
28
+ with gr.Blocks(title="SmartDemand") as demo:
29
+ gr.Markdown("# 📦 SmartDemand - Supply Chain Demand Forecasting")
30
+ gr.Markdown("Masukkan informasi produk untuk memprediksi permintaan, atau upload file CSV.")
31
+
32
+ with gr.Tab("Prediksi Manual"):
33
+ with gr.Row():
34
+ product_category = gr.Dropdown(choices=data['product_category'].unique().tolist(), label="Product Category")
35
+ price = gr.Number(label="Price")
36
+ stock = gr.Number(label="Stock")
37
+ with gr.Row():
38
+ location = gr.Dropdown(choices=data['location'].unique().tolist(), label="Location")
39
+ lead_time = gr.Number(label="Lead Time (days)")
40
+ output_manual = gr.Number(label="Predicted Demand")
41
+ btn_manual = gr.Button("Predict")
42
+ btn_manual.click(fn=predict_demand, inputs=[product_category, price, stock, location, lead_time], outputs=output_manual)
43
+
44
+ with gr.Tab("Prediksi dari File CSV"):
45
+ csv_input = gr.File(label="Upload CSV", file_types=[".csv"])
46
+ output_csv = gr.Dataframe(label="Hasil Prediksi")
47
+ csv_input.change(fn=predict_from_csv, inputs=csv_input, outputs=output_csv)
 
 
 
 
 
 
48
 
49
  demo.launch()
requirements.txt CHANGED
@@ -1,4 +1,4 @@
1
- gradio
2
- scikit-learn
3
  pandas
4
- numpy
 
 
 
 
 
1
  pandas
2
+ scikit-learn
3
+ gradio==4.16.0
4
+ joblib