Skip to main content

Local-first observability, evaluation, and UI for production forecasts.

Project description

ForecastOps

ForecastOps is a local-first observability and evaluation layer for production forecasts. It works with the forecasting code you already have.

Add one line after .predict(), then run fops ui.

import forecastops as fops

forecast = model.predict(future)

run = fops.capture(
    forecast,
    project="site-traffic",
    series_id="homepage",
    cutoff=train_df["ds"].max(),
    actuals=actuals_df,
)
fops ui

ForecastOps stores forecast artifacts locally as Parquet, writes run metadata to DuckDB, computes horizon-aware metrics, generates static HTML reports, and serves a read-only local UI. It does not train forecasting models, require a cloud account, or upload raw forecast data.

Install

pip install forecastops

From source:

git clone https://github.com/Parisi-Labs/forecastops.git
cd forecastops
pip install -e .

Quickstart

python -m venv .venv
source .venv/bin/activate
pip install -e .
python examples/generic_dataframe.py
fops report --latest
fops ui

Open http://127.0.0.1:4784 after starting the UI.

Local UI

fops ui serves a read-only explorer for the local store:

  • Runs — every captured run with horizon, points, MAE, WAPE, bias, coverage, skill, and validation status; filterable and sortable.
  • Run detail — headline metrics, a forecast inspector with one chart per series (forecast vs. actual vs. benchmark with interval bands), metrics, validation events, residuals, artifacts, and the capture trace timeline.
  • Projects — runs grouped by project with error trends across captures.
  • Compare — metric deltas and regressions between any two runs, backed by fops diff.

Core Concepts

  • capture: normalize forecasts from existing workflows.
  • ForecastSchema: map arbitrary dataframe columns to canonical semantics.
  • validate: catch schema, timestamp, duplicate, interval, and leakage issues.
  • evaluate: compute MAE, RMSE, WAPE, bias, coverage, interval width, and count.
  • compare: calculate benchmark metrics and skill.
  • diff: compare two captured runs.
  • local store: .forecastops/forecastops.duckdb plus Parquet artifacts.
  • UI: local read-only browser explorer for runs, metrics, residuals, validation, artifacts, and run differences.

Privacy Defaults

ForecastOps is local-first by default:

  • binds the UI to 127.0.0.1 and refuses other hosts unless you pass --allow-remote
  • makes no outbound network calls
  • stores raw forecast points in the configured local store
  • emits OpenTelemetry only when explicitly enabled
  • avoids raw forecast points in telemetry

Development

pip install -e ".[dev]"
pytest
ruff check .
mypy forecastops

License

Apache-2.0. See LICENSE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

forecastops-0.1.0.tar.gz (63.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

forecastops-0.1.0-py3-none-any.whl (68.4 kB view details)

Uploaded Python 3

File details

Details for the file forecastops-0.1.0.tar.gz.

File metadata

  • Download URL: forecastops-0.1.0.tar.gz
  • Upload date:
  • Size: 63.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for forecastops-0.1.0.tar.gz
Algorithm Hash digest
SHA256 0cb88e3733b20f2b88dedb16d3e6c4e818c8d5af284a4cad55f480354d364349
MD5 fedc00b4adb349a0bf57dbabf6afe32a
BLAKE2b-256 a4dbbbeffae6b46e9e4f9d8547bb23093db911aed94f04cc02ac9ecaa63e0165

See more details on using hashes here.

File details

Details for the file forecastops-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: forecastops-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 68.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for forecastops-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 c7fc2222d205048c5091fec4a84bd54c35294d0ad269515f08bd3a3a4f02954e
MD5 c454272d7c8c30212872c8f24526d4ce
BLAKE2b-256 c7943019438045ae2fe379f027817773daa26bb83df16dc5098ee940745bd0e6

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page