All Resources

Resource

Building a Geopolitical Risk Model

A short overview of an ML model I'm building to classify geopolitical events, predict company exposure, and estimate financial impact. What it does, what it doesn't, and what I'm learning.

·5 min read·
mlgeopoliticsriskai-assisted

A short overview of a project I'll be writing about in pieces over the coming weeks. If you've landed here from one of those, this page is the context. If you're here first, this is what the project is.

The model

Four models chained into a pipeline. Each does a narrow job.

Four-stage ML pipeline: Event Classifier, Exposure Scorer, Impact Estimator, Strategy RecommenderEventClassifierExposureScorerImpactEstimatorStrategyRecommenderEXAMPLEInput: "Russia invades Ukraine" + AppleArmed ConflictProcurement−0.6% to +0.1%Supplierdiversification

Event Classifier. Reads news text describing a geopolitical event and sorts it into one of 8 categories: armed conflict, sanctions, political transition, cyber, natural disaster or pandemic, regulatory shift, economic crisis, commodity shock.

Exposure Scorer. For a given company and event, predicts which of 10 business channels will be most exposed: revenue, procurement, logistics, innovation and IP, regulatory cost, financial and treasury, capital allocation, workforce, reputation, cybersecurity. Apple during Russia/Ukraine: procurement. FedEx during NotPetya: cybersecurity.

Impact Estimator. Puts a rough percentage range on the revenue move. Ranges are wide on purpose.

Strategy Recommender. Surfaces the playbook companies have used when a similar event hit a similar channel. Supplier diversification, hedging, capital reallocation.

The pipeline runs end to end. Give it news text and a company, get back an event classification, an exposed channel, an impact range, and a recommended set of strategies.

The taxonomy

The 8 event categories and 10 channels didn't come from the model. They came from me, with an Excel sheet, before any code was written. The 8×10 matrix is an attempt at a middle layer between abstract risk language ("elevated tail risk in the Middle East") and overconfident specifics ("this company will lose $400M"). Specific enough to be a starting point, abstract enough to generalize.

8 by 10 matrix mapping event categories to business channels with typical exposure intensitiesRevenueProcurementLogisticsInnovation/IPRegulatoryFinancialCapitalWorkforceReputationCybersecurityArmed conflictSanctionsPolitical transitionCyber attackDisaster/pandemicRegulatory shiftEconomic crisisCommodity shockTYPICAL EXPOSURELowMediumHigh

The cells aren't predictions — they're priors. The model uses these as a structural starting point and updates against company-specific data. A tech company in an armed conflict isn't automatically "high cybersecurity" because the matrix says so; it's high when the news text and the company's filings together push the prediction there.

Where it stands

The model works. The pipeline runs end to end. The output is sometimes correct in useful ways and sometimes wrong in instructive ways, and figuring out which is which has been most of the project.

A few honest numbers:

Accuracy comparison: 95 percent on event classification, 82 percent on channel prediction in distribution, 62 percent on novel pairsEvent classification (in-distribution)95%Channel prediction (in-distribution)82%Channel prediction (novel pairs)62%

The gap between the in-distribution and out-of-distribution numbers is the most important thing on this page. Geopolitics regularly produces events that don't rhyme with the past, and a model that confuses 95% with 62% is dangerous. So one of the things I'm working on isn't making the model more accurate. It's making the model tell the user when it's out of its depth.

How this is being built

The taxonomy, the framing, the choice of what the model should do, and the judgment calls about when to trust the output: all mine. Most of the code: written by Claude, working from specifications I provide and iterating against my corrections.

This is a meaningful shift in how analytical work gets done, and pretending otherwise would be dishonest in a way that matters. The skills required to build something like this are different from the skills required to write the code from scratch. I'll write a separate piece about what that workflow actually looks like: what I add, what gets in my own way, where the model and I disagree.

What's coming

Pieces I'll be writing on this project, in some order:

  • The week the model was convinced ransomware attacks were good for companies, and how I fixed it without retraining.
  • The 8×10 matrix: why this particular taxonomy of events and channels, and what I'd change if I started over.
  • Separating financial scale from operational severity, which sounds boring and turns out to be the thing the model gets most wrong.
  • What AI-assisted building actually looks like for someone who doesn't code for a living.
  • When the model is more polished: how to use it, and what it's appropriate for.

More writing on geopolitics, markets, policy, and AI-assisted analytical work is on this site. If you're working on something related, I'd genuinely like to hear about it.