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.
| Engine | Core question | Primary output |
|---|---|---|
| Forecast Engine | Which macro-event regime is forming? | Event probability, severity, regime status, trigger date |
| Exposure Engine | How exposed is this portfolio to that regime? | Company GES, Sector GES, Portfolio GES, direction label |
| Decision Engine | Which model action and sizing level does the framework indicate under the selected mandate? | Model action and action intensity |
| Action Engine | How 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.
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:
| Component | What it measures | Weight |
|---|---|---|
| Intensity | Average |z| of the signals that fired | 25% |
| Breadth | Share of the regime's mapped signals that fired | 25% |
| Persistence | 30-day rolling share of days with a firing signal | 20% |
| Cross-category spread | Distinct signal families firing together | 15% |
| Historical similarity | Cosine similarity to the regime's historical average | 15% |
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:
| Rule | What it means |
|---|---|
| Own thresholds per regime | Monetary 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 breadth | Probability 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 persistence | Stops a single spiking signal from reading as a building regime. |
| Escalation is immediate | The day a threshold is crossed, status moves up that same day. |
| De-escalation needs 3 days | Status 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
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:
| Dimension | What it captures |
|---|---|
| Revenue | Share of revenue from countries/markets sensitive to this regime - the primary carrier of country risk. |
| Supply chain | Sourcing and logistics exposure to affected countries or trade routes - the second carrier of country risk. |
| Manufacturing | Physical operating footprint and its regime sensitivity. |
| Customer | Customer-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%)
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:
| Mandate | Multiplier | Overlay behavior |
|---|---|---|
| Balanced | 1.00× | Base action passes through unchanged. |
| Defensive | 1.25× | Escalates to a full defensive stance at Confirmed/Severe + High/Very High band. |
| Low Turnover | 0.60× | Held to a higher bar - stands down to Monitor rather than take a token trim. |
| Regime Rotation Allowed | 1.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:
| Rule | What it means |
|---|---|
| Priority ranking | Every live regime is ranked by a priority score; only regimes above a threshold get a vote. |
| Sector-by-sector vote | Each qualifying regime votes vulnerable/beneficiary/neutral, sector by sector. |
| Agreement | Sectors where regimes agree keep full intensity (1.00×). |
| Conflict | Sectors 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)
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