Philosophy

macroforecast is designed for research workflows where the difficult part is not calling a model function. The difficult part is choosing a valid forecasting path, keeping comparisons fair, and making every deviation auditable.

Defaults are explicit

Defaults are part of the research design. They must be visible, versioned, and written to artifacts. A simple run should remain short, but the resolved manifest must show what was actually used.

Layers own decisions

Each layer owns a different class of decisions:

  • L0: study setup and execution grammar.

  • L1: data source, target, predictor universe.

  • L2: cleaning and preprocessing.

  • L3: feature engineering and target construction (DAG).

  • L4: forecasting model fit, tuning, and ensembling (DAG).

  • L5: evaluation, benchmarking, ranking.

  • L6: statistical tests.

  • L7: interpretation and importance (DAG).

  • L8: export and provenance.

Layer boundaries matter because they prevent silent leakage, hidden preprocessing, and ambiguous model comparisons.

Contracts are enforced

Some choices are free. Some are derived. Some are disabled because another selection makes them invalid. The docs and Navigator should show the same constraint system.

Custom methods are first-class

Method researchers should be able to add a custom Layer 2 representation or Layer 3 generator and compare it against built-ins without editing package internals.

Artifacts are part of the API

Predictions, metrics, manifests, sidecar reports, and provenance files are not incidental outputs. They are how a run is audited, replicated, and compared.

Next