mnds18/agentic-ts-forecasting-system
0
1"""2data_scientist_agent.py3Data Scientist Agent to train and compare multiple forecasting models4"""5 6import pandas as pd7from prophet import Prophet8from sklearn.metrics import mean_absolute_error, mean_squared_error9import numpy as np10import os11 12from agents.orchestration_agent import agent_logger13 14import pandas as pd15from prophet import Prophet16from sklearn.metrics import mean_absolute_error, mean_squared_error17import numpy as np18 19@agent_logger("Data Scientist", "Model Training")20def run_model_training():21 os.makedirs("data", exist_ok=True)22 os.makedirs("outputs", exist_ok=True)23 24 # Load the data25 df = pd.read_csv("data/daily_sales.csv")26 27 # Fit the Prophet model28 model = Prophet()29 model.fit(df)30 31 # Make future dataframe32 future = model.make_future_dataframe(periods=30)33 forecast = model.predict(future)34 35 # Save forecast to CSV36 forecast[['ds', 'yhat']].to_csv("data/forecast.csv", index=False)37 38 # Ensure 'ds' is datetime in both DataFrames before merging39 df["ds"] = pd.to_datetime(df["ds"])40 forecast["ds"] = pd.to_datetime(forecast["ds"]) 41 42 # Calculate and save metrics only on the available data43 df_merged = df.merge(forecast[['ds', 'yhat']], on='ds', how='inner')44 mae = mean_absolute_error(df_merged['y'], df_merged['yhat'])45 rmse = np.sqrt(mean_squared_error(df_merged['y'], df_merged['yhat']))46 mape = np.mean(np.abs((df_merged['y'] - df_merged['yhat']) / df_merged['y'])) * 10047 48 metrics = pd.DataFrame({49 "Model": ["Prophet"],50 "MAE": [mae],51 "RMSE": [rmse],52 "MAPE": [mape]53 })54 55 metrics.to_csv("outputs/model_report.csv", index=False)56 return forecast[['ds', 'yhat']]