import pandas as pd import matplotlib.pyplot as plt from statsmodels.tsa.arima.model import ARIMA def forecast_tool(file_path: str, date_col: str | None = None) -> str: """ Forecast the next 3 periods of the 'Sales' column. • If date_col is provided, use it. • Otherwise auto‑detect the first column that can be parsed as dates. Returns human‑readable summary and saves 'forecast_plot.png'. """ df = pd.read_csv(file_path) # Auto‑detect date column if not specified if date_col is None: for col in df.columns: try: pd.to_datetime(df[col]) date_col = col break except Exception: continue if date_col is None: return "❌ No parseable date column found." # Parse the date column try: df[date_col] = pd.to_datetime(df[date_col]) except Exception: return f"❌ Column '{date_col}' cannot be parsed as dates." if "Sales" not in df.columns: return "❌ CSV must contain a 'Sales' column." df.set_index(date_col, inplace=True) model = ARIMA(df["Sales"], order=(1, 1, 1)) model_fit = model.fit() forecast = model_fit.forecast(steps=3) forecast_df = pd.DataFrame(forecast, columns=["Forecast"]) forecast_df.plot(title="Sales Forecast", figsize=(10, 6)) plt.savefig("forecast_plot.png") return forecast_df.to_string()