← Back
2026·shipped

Time-Series Forecast Copilot

Drop in your data, get a forecast and an explanation — no SARIMA degree required.

Role
Sole engineer — personal project
Stack
LangGraphMulti-AgentRAGLLMsTime SeriesPythonStreamlit
Problem

Time-series forecasting has a usability gap: the methods that produce accurate results (SARIMA, Prophet, ensemble approaches) require understanding seasonality, stationarity, and model selection trade-offs. Analysts who need forecasts — demand planning, capacity projections, financial reporting — shouldn't need to know what differencing is. The goal was a forecasting assistant that picks the right model for the data and explains its predictions in terms of business impact, not statistical output.

Approach
  1. Ingest pipeline handles arbitrary CSV or database query output — auto-detects frequency (daily, weekly, monthly), fills gaps, and identifies seasonality patterns before model selection.
  2. Multi-agent model selection: a planning agent profiles the series (trend, seasonality, stationarity) and routes to the appropriate forecasting agent — SARIMA for stationary series, Prophet for trend + holiday effects, ensemble for ambiguous cases.
  3. LLM layer translates model output into natural-language explanations: 'sales are projected to dip 12% in Q4, consistent with the seasonal pattern from the past 3 years, with the main uncertainty being the November holiday window.'
  4. RAG-backed reasoning: the explanation agent retrieves domain context (e.g., known seasonal patterns for retail) from ChromaDB to ground explanations in business terms rather than statistical ones.
Architecture
Key decisions

Model routing over a single model

A single model (e.g., Prophet) is easy to ship but wrong for many series — Prophet assumes additive seasonality, which fails for series with multiplicative patterns or no seasonality at all. A lightweight profiling agent that routes to the right model costs one extra step but produces forecasts that are actually reliable.

Natural language as the primary output

The chart and the numbers are secondary. Analysts share forecasts with stakeholders who won't read the confidence intervals — they need a sentence they can paste into a slide. Building the NL explanation as a first-class output, not an afterthought, changed how users interacted with the results.

Result

Production-deployed on Streamlit Community Cloud. Handles daily, weekly, and monthly series out of the box. Used by analysts who have described it as 'the first forecasting tool I didn't need to Google while using it.'

What I'd change

The profiling agent misclassifies some series with irregular spikes (promotional events, one-time shocks) as non-stationary and routes them to SARIMA, which handles them poorly. Adding an anomaly-detection pre-pass that flags and optionally removes shock events before profiling would fix the most common failure mode.

← All projects