Atlas Docs

Methodology

Atlas is intentionally conservative in how it frames every output. The core design choice: probability ranges, never point estimates.

Scenario engine

The scenario engine uses a stationary block bootstrap. For each simulated path:

  1. Pick a random starting day from historical data.
  2. Take the next 21 days of multi-asset returns from there.
  3. Pick another random starting day; take the next 21 days.
  4. Repeat until the desired horizon is filled.
  5. Apply the portfolio weights to get per-step portfolio returns.
  6. Cumulate to get the full path.

This preserves both serial dependence (within a 21-day block) and contemporaneous correlation (across assets, since blocks span all assets jointly).

Probability bands

We compute quantiles at every step across all 10,000 paths and render three nested bands: 50%, 80%, 95%. The median is the solid line. There is always at least a 5% chance the actual outcome lies outside the 95% band — historical data is the only oracle the bootstrap has, and that oracle has blind spots (regime change, structural breaks, unprecedented events).

Stress scenarios

Stress scenarios are deterministic shocks layered on top of the distribution. They are not part of the probability density and are not interpreted as "the probability of a stress event." They are strictly hypothetical: "if X happened, what would my portfolio do."

Historical engine

Regime classification

ML models

Every ML model returns a DistributionPrediction (samples + quantiles), never a point estimate.

Backtest

Every model is validated via expanding-window walk-forward (scikit-learn TimeSeriesSplit). The runner emits an "accuracy string" ("Our RandomForest's 1-month scenario had 67% directional accuracy over the past 3.4 years") that the UI displays verbatim alongside the model output. A model decay detector flags models whose recent out-of- sample hit rate falls more than 1 standard deviation below their trailing average — those models go into the next monthly retrain queue.