← AI features

Prescience (forecast) — model card

v1.4 · Tier 1-2Live Closed-form GBM forecast with 14-asset-class profile.

Purpose

Forward-looking forecast that answers "what's next" with probability + timing — not just "what is." Produces p10/p50/p90 cones, regime persistence estimates, lead indicators, and catalyst countdowns. Drives every forecast surface: /forecast, /security?ticker=X, /scenarios.

Core math

GBM horizon distribution

ln(S_h / S_0) ~ N((μ − σ²/2) × h, σ² × h)

Standard geometric Brownian motion. μ per-bar drift; σ² per-bar variance; h horizon in bars. probUp via Abramowitz-Stegun erf approximation. No Monte Carlo client-side — closed-form analytical only.

14-asset-class profile

Each class has a profile that adjusts the GBM parameters:

{
  'Stocks':         { volScale:0.78, lambdaWeeks:1.0, ceilDayPct:8,  marketDaysYr:252 },
  'Bonds':          { volScale:0.65, lambdaWeeks:0.5, ceilDayPct:2,  marketDaysYr:252 },
  'Crypto':         { volScale:0.92, lambdaWeeks:1.5, ceilDayPct:18, marketDaysYr:365 },
  'CryptoPerp':     { volScale:0.94, lambdaWeeks:1.5, ceilDayPct:22, marketDaysYr:365 },
  'Leveraged ETFs': { volScale:0.78, lambdaWeeks:1.0, ceilDayPct:24, marketDaysYr:252 },
  'Volatility':     { volScale:0.95, lambdaWeeks:0.4, ceilDayPct:30, marketDaysYr:252,
                      structuralDriftAnnual: -0.55 /* contango */ },
  'Income ETFs':    { volScale:0.65, lambdaWeeks:0.8, ceilDayPct:4,  marketDaysYr:252,
                      structuralDriftAnnual: 0.08 /* yield baseline */ },
  // … 7 more classes
}

Class-specific adjustments

AR(1) residual autocorrelation

Half-life from autocorrelation: τ = -ln(2) / ln|ρ|. Higher autocorr → mean-reversion is slower → longer half-life → wider cone.

Bar cadence detection

Median ts-delta classifies bars as 60s (intraday) or 86400s (daily). Cone width scales with the appropriate horizon.

Outputs

{
  // Forecast cone
  expectedMovePct:  +5.2,                  // p50 from now to horizon
  probUp:           0.62,                  // P(price > now at horizon)
  horizonBars:      30,                    // 30 days for daily bars
  halfLifeBars:     4.2,                   // mean-reversion half-life
  sigmaBpsBar:      48,                    // per-bar volatility
  confidence:       0.74,                  // sample-size + variance composite
  drift:            +0.0009,               // per-bar μ
  source:           'mixed',               // 'bars'|'factors'|'mixed'

  // p10/p50/p90 cone
  cone: [{ day:1, p10:-1.2, p50:0.2, p90:1.6 }, …],

  // Regime persistence
  regimePersistence: {
    state:        'risk-on',
    daysInState:  18,
    P_persist_5d: 0.83,
    halfLifeDays: 42
  },

  // Lead indicators (6 firing detectors)
  leadIndicators: [
    { name:'breadth-divergence', value:0.7, direction:'down', message:'…' },
    …
  ],

  // Catalyst countdowns
  catalysts: [
    { type:'earnings', daysOut:3,  severity:'caution', description:'…' },
    { type:'fda',      daysOut:14, severity:'positive', description:'…' }
  ],

  // Trajectory
  trajectory:        'improving',          // 'improving'|'declining'|'stable'
  trajectoryStrength: 0.6
}

Key invariants

Limitations

What this does NOT model:

Known failure modes

Bias considerations

Eval results

Tests
196/196
Classes covered
14/14
Brier hit-rate
awaiting
Cone width cal
awaiting

Forward calibration target (Bible §15.112): when prescience says "30% probability of -8% over 30 days," roughly 30% of those events should hit -8%. Tracked weekly via engine/calibrationLive.js; populates after 30 days of decision data. See live calibration metrics.

Confidence intervals (95% CI)

In addition to the point estimate expectedMovePct, the forecast engine computes 95% confidence bands via bootstrap resampling of historical returns. This accounts for estimation uncertainty in drift and volatility.

Bootstrap methodology

Wider CI bands indicate higher estimation uncertainty (sparse history, high volatility, or regime instability). Narrow bands indicate high confidence in the expected move.

Per-class calibration breakdown

Over time, calibration accuracy varies by asset class. The Calibration dashboard tracks per-class Brier scores (lower is better):

Asset classTypical BrierStatus
Stocks (liquid)< 0.20Excellent (tight historical σ)
Bonds / rates0.18–0.24Good (slow regime changes)
Crypto spot0.22–0.28Fair (high vol regime shifts)
Crypto perp0.24–0.32Fair–caution (funding-rate drift)
Commodities0.26–0.34Caution (event-driven jumps)

When a class Brier exceeds 0.30, prescience predictions for that class become less reliable — widen your position sizing or increase required conviction.

Versioning

VersionDateChange
v1.42026-04-2614-class profile + leverage drag + contango + funding
v1.32026-04-25Layer-conditional integration with v76
v1.22026-04-24scenarioCone + regimePersistence + catalystCountdown
v1.12026-04-24leadIndicators (6 firing detectors)
v1.02026-04-24Initial GBM forecast + half-life

Source

engine/prescience.js (~370 lines), engine/v110-prescience-ensemble-v2.js (scaffolded), tests/run.js (cone + class + cadence tests)

Reviewed: 2026-04-26 · Next: 2026-07-26 · Per Bible §15.61