M Atlas
Quant Edition

The GES Methodology

GeoExposure Score (GES) introduces a new lens on diversification - measuring portfolio exposure across macro regimes, not only sectors and geographies.

OM Atlas combines regime state, portfolio exposure, and user-defined constraints to produce a sized, auditable model action, with the historical evidence behind that action shown alongside it.

Below, we trace the framework from signal detection to exposure measurement, decision logic, and holding-level model action - engine by engine, with one worked example carried through the full process.

The workflow

Four engines, one continuous question: what should this portfolio do right now?

Each engine answers one question and hands a specific, typed output to the next. Each downstream engine requires a defined upstream output; where a required input is unavailable or fails a data-quality check, the framework follows predefined fallback rules (see Step 1 of the Exposure Engine) rather than an unsupported discretionary judgment.

EngineCore questionPrimary output
Forecast EngineWhich macro-event regime is forming?Event probability, severity, regime status, trigger date
Exposure EngineHow exposed is this portfolio to that regime?Company GES, Sector GES, Portfolio GES, direction label
Decision EngineWhich model action and sizing level does the framework indicate under the selected mandate?Model action and action intensity
Action EngineHow is the model action translated into holding-level adjustments?Holding-level adjustment set: trim, replace, rotate, or stand-down

Running example across the four engines below: the Geopolitical regime as of 29 May 2026, evaluated against the real S&P 500 cap-weighted universe (503 names, point-in-time weights as of 30 Apr 2026) - the same universe the product runs against today, not a synthetic reference book.


Engine 1

Forecast Engine - is a regime actually building?

Nine regime types are tracked independently - Geopolitical, Monetary, Inflation, Supply, Demand, Earnings, Liquidity, Structural, Behavioral - each drawing on its own subset of ~20 daily market/macro signals.

Step 1 - signal firing

Each signal is a standardized z-score. A signal "fires" when |z| ≥ 1.2, a threshold calibrated against eleven years of real signal history rather than assumed.

Step 2 - blend into an event probability

Five components, computed daily and blended by weight:

ComponentWhat it measuresWeight
IntensityAverage |z| of the signals that fired25%
BreadthShare of the regime's mapped signals that fired25%
Persistence30-day rolling share of days with a firing signal20%
Cross-category spreadDistinct signal families firing together15%
Historical similarityCosine similarity to the regime's historical average15%

Each component is bucketed against its own empirical probability map, then combined by weight. Worked example: breadth 50%, persistence 100% (every day of the trailing month had a firing signal), cross-category spread 100% - blending to a probability of 56.5%.

Each fired event is separately scored for severity - Low, Medium, High, or Critical, from the magnitude of the underlying move against eleven years of historical norms for that regime. Severity doesn't gate the status ladder below; it travels downstream into the evidence-tier framing and the client factsheet.

Step 3 - regime status, with memory

Probability alone doesn't set status - each regime has its own thresholds and its own breadth/persistence confirmation, and status has memory rather than resetting daily:

RuleWhat it means
Own thresholds per regimeMonetary and Geopolitical don't sit on the same probability scale, so each gets its own Emerging/Active/Confirmed/Severe-Critical cutoffs (the full status ladder also includes Watch below Emerging, and Fading/Resolved after de-escalation).
Active needs breadthProbability crossing the Active threshold is not enough on its own - a meaningful share of the regime's own signals must be firing, not just one loud one.
Emerging needs breadth or persistenceStops a single spiking signal from reading as a building regime.
Escalation is immediateThe day a threshold is crossed, status moves up that same day.
De-escalation needs 3 daysStatus only drops after three straight days below the threshold that earned it - a regime running hot for three weeks is a different risk than one that spiked once.

Worked example: the regime escalated to Active on 30 Apr 2026 and, evaluated a month later, hasn't faded since - the memory rule is what keeps status Active through a full month of daily readings rather than resetting each day.

Passes forwardGeopolitical · Active (since 30 Apr 2026) · probability 56.5% as of 29 May 2026


Engine 2

Exposure Engine - does this specific portfolio feel it?

A regime being Active says nothing about whether this book is exposed. This engine answers that, bottom-up from real holdings.

Step 1 - company-level score

Company GES = 100 × avg over 4 dimensions of (Exposure × Beta × Confidence × e⁻λ·age)

Each dimension comes from company fundamentals, real-filing-anchored to a named 10-K rather than a synthetic proxy; Beta sets how sensitive that dimension is to the live regime, confidence reflects data quality, and decay ages out stale filing data (λ=0.0067/day - a figure from a 45-day-old filing still carries ~74% weight, ~30% at 180 days). Four dimensions currently have filing-derived company-level data coverage; the remaining dimensions (cost, regulatory, financial, strategic) are withheld from company-level scoring until the required source data and extraction methodology are implemented, rather than filled with a synthetic placeholder:

DimensionWhat it captures
RevenueShare of revenue from countries/markets sensitive to this regime - the primary carrier of country risk.
Supply chainSourcing and logistics exposure to affected countries or trade routes - the second carrier of country risk.
ManufacturingPhysical operating footprint and its regime sensitivity.
CustomerCustomer-base concentration and sensitivity.

Country risk isn't a separate dimension - it's carried inside Revenue and Supply Chain, which is where geographic concentration actually shows up in a company's numbers. In the worked example, NVDA scores 25.9 (Very High tier), anchored to a named 10-K across all four dimensions; AFL scores 16.77 (Very Low tier) on the same beta table, but falls back to a universe-average proxy rather than a named filing - the fallback chain in practice, not just described in the abstract.

Step 2 - sector aggregation and relevance

Company scores roll up to a sector median first. Sector vulnerability is then a separate, empirical measurement layered on top: for every past instance of this regime, we look at how each sector's price actually moved relative to the broader market, and bucket that historical relative impact into ±1 (clearly vulnerable/beneficiary), ±0.5 (moderately so), or 0 (no consistent relationship) - refreshed quarterly as more history accumulates. This is what turns "Technology has a high company GES" into "Technology has historically sold off under this regime, so that GES should count against the portfolio, not for it." Here: Financials, Industrials, Health Care, and Energy score vulnerable; Information Technology - the single largest sector at 31.5% of the book - scores beneficiary; Consumer Staples, Real Estate, Utilities, Consumer Discretionary, and Communication Services score neutral.

Step 3 - portfolio aggregation and direction

Portfolio GES = Σ (holding weight × company GES)

Vulnerable- and beneficiary-sector weight are summed directly; a 5% materiality floor on either side sets the direction label - Vulnerable, Beneficiary, Mixed, or Neutral. A single concentrated name can also trip it on its own: a top holding contributing ≥2.0 points to Portfolio GES counts as material even in a sector that's under 5% of the book, so a large, singularly exposed position can't hide inside an otherwise-diversified sector weight. Worked example: GES 24.28, vulnerable 29.0%, beneficiary 31.5% → Mixed.

Passes forwardPortfolio GES 24.28 · Mixed (vulnerable 29.0% / beneficiary 31.5%)


Engine 3

Decision Engine - what should be done, and how hard, for this client?

Step 1 - GES band and base action

Portfolio GES is bucketed into five empirically-set bands (Very Low through Very High), calibrated separately per regime and per weighting scheme (cap- and equal-weighted portfolios have genuinely different achievable GES ranges, so they don't share one cutoff table). The full regime status ladder has seven values - Watch, Emerging, Active, Confirmed, Severe/Critical, Fading, Resolved; Fading and Resolved unwind whatever action was in place rather than opening a new one. Regime Status × GES Band looks up one of 7 × 5 = 35 pre-defined base actions internally.

That internal 35-cell matrix collapses to four client-facing actions, since that's what actually differs mechanically: Monitor (no trade), Reduce (bidirectional sector tilt), Hedge (the same tilt plus a hedge-ratio blend), and Rotate (full beneficiary rotation, tightly gated - see Step 2). Watch is always Monitor; Active + Very High is a Reduce.

Step 2 - action intensity

Intensity = Base Intensity(status) × (Portfolio GES / 100) × Client mandate multiplier

Base intensity is fixed per status (Active = 48%, Confirmed = 95%, Severe/Critical = 175% of the affected sleeve), then scaled by the portfolio's own GES. Recalibrated up from a far more conservative starting point after backtesting showed the earlier values under-executed so badly the system barely traded until a crisis had already been priced in.

Client mandate - the multiplier and the overlay

The same regime, portfolio, and base action produce four different outcomes depending on mandate:

MandateMultiplierOverlay behavior
Balanced1.00×Base action passes through unchanged.
Defensive1.25×Escalates to a full defensive stance at Confirmed/Severe + High/Very High band.
Low Turnover0.60×Held to a higher bar - stands down to Monitor rather than take a token trim.
Regime Rotation Allowed1.00× / 1.10×1.00× for a Reduce or Hedge action, same as Balanced; 1.10× specifically when the action is a Rotate, subject to the gate below.

Rotate's real gate is deliberately narrow: constraint = Regime Rotation Allowed, direction must be Beneficiary specifically(a Mixed book with some vulnerable exposure alongside doesn't qualify), status ≥ Active, and the historical evidence tier for that exact regime/action pairing must not be Weak or Insufficient. All three overlay rules were added after backtest evidence: the earlier Low Turnover reduce paid transaction cost for a 23% historical win rate; Rotation used to fire even at Very Low band (52% win rate there vs. 60–75% at every other band) and regardless of whether that regime/action combination had ever been seen enough times to trust - so the mandate with the most latitude doesn't also get the least discipline.

Step 3 - multi-regime overlay

Regimes rarely run alone. Every live regime is ranked and votes sector-by-sector on direction alongside the others:

RuleWhat it means
Priority rankingEvery live regime is ranked by a priority score; only regimes above a threshold get a vote.
Sector-by-sector voteEach qualifying regime votes vulnerable/beneficiary/neutral, sector by sector.
AgreementSectors where regimes agree keep full intensity (1.00×).
ConflictSectors where regimes disagree get discounted, down to 0.60×.

Worked example: base intensity at Active status is 48% of the affected sleeve; against this portfolio's GES of 24.28 and the Balanced multiplier (1.00×), that's 48% × 0.2428 × 1.00 = 11.65% before the overlay. Six regimes are live; Earnings leads the priority ranking (45.17 vs. Geopolitical's own 42.98) even though Geopolitical is the one being evaluated here, but every live regime agrees on direction sector-by-sector (alignment 1.00, multiplier 1.00×) - so the overlay changes nothing this time, and intensity stays at 11.65%. The discount only bites when regimes actually disagree on a sector.

Passes forwardReduce · intensity 11.65% (Balanced, after overlay)


Engine 4

Action Engine - which holdings, exactly?

Step 1 - trim candidate scoring

Trim Score = Position weight % × Company GES × Vulnerability mult. × Liquidity mult.

Every holding in a vulnerable sector is scored, not just the largest name; the adjustment budget is split pro-rata by score share - a diversified trim, not a single stock call.

Step 2 - replacement scoring

Replacement Score = .35×GES benefit + .20×Sector fit + .10×Liquidity + .10×Confidence
Reserved, not yet active: Factor Similarity · Valuation

Candidates are drawn from the client's own uploaded universe, or the S&P 500 universe when none is supplied, excluding current holdings; ranked and pooled across every trimmed name. Factor similarity and a valuation penalty are reserved extensions in the methodology - no factor model or valuation-multiple pipeline exists yet, so they don't contribute to the score shown above until they do.

Step 3 - execution style by mandate

The same sizing executes differently by style: replace (sell + buy) for Balanced/Defensive, rotate (sell vulnerable, buy existing beneficiary holdings) for Regime Rotation, or a stand-down to Monitor below conviction.

Passes forwardNamed, sized holdings → client factsheet and counterfactual backtest


See it on your own book

Apply the same methodology to your own portfolio and inspect every step, from regime detection through holding-level model output.

OM Atlas provides research, analytics and model-generated portfolio decision support. Outputs are based on defined methodology rules and should not be construed as a guarantee of future investment outcomes. Historical analyses may include hypothetical or backtested results and are subject to assumptions, limitations and transaction-cost estimates described above. Historical or simulated results are not indicative of future results.

Methodology & Disclosures · Historical Simulation Assumptions