AjaykumarPilla commited on
Commit
8bca724
·
verified ·
1 Parent(s): 96c45a3

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +15 -14
app.py CHANGED
@@ -1,11 +1,11 @@
 
1
  import streamlit as st
2
  import pandas as pd
3
  from prophet import Prophet
4
  from datetime import datetime, timedelta
5
- import numpy as np
6
 
7
  # Prepare data for Prophet
8
- def prepare_prophet_data(usage_series):
9
  end_date = datetime.now()
10
  start_date = end_date - timedelta(days=len(usage_series) - 1)
11
  dates = [start_date + timedelta(days=i) for i in range(len(usage_series))]
@@ -13,28 +13,28 @@ def prepare_prophet_data(usage_series):
13
  'ds': dates,
14
  'y': usage_series
15
  })
16
- prophet_df['cap'] = 60 # Max observed usage
17
  prophet_df['floor'] = 0
18
  return prophet_df
19
 
20
- # Train or update Prophet model with user-provided usage series
21
- def train_model_with_usage(usage_series):
22
- print("Training with changepoint_prior_scale=0.002, usage:", usage_series) # Debug
23
- prophet_df = prepare_prophet_data(usage_series)
24
  model = Prophet(
25
  yearly_seasonality=False,
26
  weekly_seasonality=True,
27
  daily_seasonality=True,
28
- changepoint_prior_scale=0.002,
29
  growth='logistic'
30
  )
31
- model.fit(prophet_df)
32
  return model
33
 
34
  # Function to make forecasts
35
  def make_forecast(model, periods):
36
  future = model.make_future_dataframe(periods=periods)
37
- future['cap'] = 60
38
  future['floor'] = 0
39
  forecast = model.predict(future)
40
  daily_forecasts = forecast['yhat'].tail(periods).tolist()
@@ -42,7 +42,7 @@ def make_forecast(model, periods):
42
  return round(sum(max(0, y) for y in daily_forecasts)) # Clip negative values
43
 
44
  # Function to validate input
45
- def validate_usage_series(usage_str):
46
  try:
47
  usage_list = [float(x) for x in usage_str.split(',')]
48
  if len(usage_list) != 60:
@@ -66,14 +66,14 @@ def main():
66
  current_stock = st.number_input("Current Stock", min_value=0, value=0)
67
 
68
  if st.button("Generate Forecast"):
69
- usage_list, error = validate_usage_series(usage_series)
70
  if error:
71
  st.error(error)
72
  return
73
  st.write("Debug: Input usage series:", usage_list) # Debug
74
 
75
  try:
76
- model = train_model_with_usage(usage_list)
77
  except Exception as e:
78
  st.error(f"Error training model: {str(e)}")
79
  return
@@ -111,4 +111,5 @@ def main():
111
  st.write(f"**For 30 Days**: Order {order_30} additional units.")
112
 
113
  if __name__ == "__main__":
114
- main()
 
 
1
+ ```python
2
  import streamlit as st
3
  import pandas as pd
4
  from prophet import Prophet
5
  from datetime import datetime, timedelta
 
6
 
7
  # Prepare data for Prophet
8
+ def prepare_data(usage_series):
9
  end_date = datetime.now()
10
  start_date = end_date - timedelta(days=len(usage_series) - 1)
11
  dates = [start_date + timedelta(days=i) for i in range(len(usage_series))]
 
13
  'ds': dates,
14
  'y': usage_series
15
  })
16
+ prophet_df['cap'] = 30 # Lowered from 60 to 30
17
  prophet_df['floor'] = 0
18
  return prophet_df
19
 
20
+ # Train or update Prophet model
21
+ def train_model(usage_series):
22
+ print("Training with changepoint=0.001, usage:", usage_series) # Debug
23
+ prophet_data = prepare_data(usage_series)
24
  model = Prophet(
25
  yearly_seasonality=False,
26
  weekly_seasonality=True,
27
  daily_seasonality=True,
28
+ changepoint_prior_scale=0.001, # Lowered from 0.002
29
  growth='logistic'
30
  )
31
+ model.fit(prophet_data)
32
  return model
33
 
34
  # Function to make forecasts
35
  def make_forecast(model, periods):
36
  future = model.make_future_dataframe(periods=periods)
37
+ future['cap'] = 30
38
  future['floor'] = 0
39
  forecast = model.predict(future)
40
  daily_forecasts = forecast['yhat'].tail(periods).tolist()
 
42
  return round(sum(max(0, y) for y in daily_forecasts)) # Clip negative values
43
 
44
  # Function to validate input
45
+ def validate_usage(usage_str):
46
  try:
47
  usage_list = [float(x) for x in usage_str.split(',')]
48
  if len(usage_list) != 60:
 
66
  current_stock = st.number_input("Current Stock", min_value=0, value=0)
67
 
68
  if st.button("Generate Forecast"):
69
+ usage_list, error = validate_usage(usage_series)
70
  if error:
71
  st.error(error)
72
  return
73
  st.write("Debug: Input usage series:", usage_list) # Debug
74
 
75
  try:
76
+ model = train_model(usage_list)
77
  except Exception as e:
78
  st.error(f"Error training model: {str(e)}")
79
  return
 
111
  st.write(f"**For 30 Days**: Order {order_30} additional units.")
112
 
113
  if __name__ == "__main__":
114
+ main()
115
+ ```