Methodology

How we transform prediction market data into thematic intelligence.

01

What we measure

Safehouse aggregates active prediction markets into thematic indexes. Each index tracks a weighted basket of 15–75 binary prediction markets related to a theme — AI, crypto, geopolitics, US politics, monetary policy, climate/energy, and global economics.

Every price represents a probability backed by real money at risk. When someone buys a contract at 62¢, they're risking real capital on their belief that the probability is higher than 62%. This financial skin in the game filters out noise, punishes overconfidence, and forces participants to actually be right — not just loud.

When uncorrelated money-backed probabilities move together, it's a stronger signal than correlated ones.

Unlike a stock index where components share an economic driver, prediction markets in a theme are often uncorrelated. It takes a real thematic event to make them move together.

02

How markets are selected

We ingest every active market from Polymarket and Kalshi — typically 40,000–50,000 at any time. Roughly 95% are irrelevant. Our three-tier relevance system filters them:

Tier 1

Keyword Scan

Checks titles against theme-specific keyword sets

~80%filtered

Instant

Tier 2

Embedding Similarity

NLP compares ambiguous markets against theme anchors

~10%resolved

NLP

Tier 3

LLM Classification

Final call on the ~5% the first two tiers can't decide

~5%decided

Accurate

This produces 3,000–5,000 viable markets. Each is scored for quality (price informativeness, liquidity, trading activity, resolution horizon, description quality) and must pass eligibility gates to enter an index.

03

How indexes are computed

Each index is a weighted composite of its constituent markets' prices, scaled to 0–100. The weight formula considers liquidity, recency, relevance, and quality.

  • Liquidity — higher-volume markets carry more weight
  • Recency — markets resolving sooner are weighted higher (90-day half-life)
  • Relevance — markets with stronger thematic relevance score higher
  • Quality — markets with better data quality carry more weight

Weights are capped at 20% per individual market and 15% per market series to prevent any single question from dominating.

Weight formula

raw_weight = (
  sqrt(volume + open_interest) ×
  exp(-0.693 × days_to_res / 90) ×
  relevance_score ×
  max(quality_score, 0.1)
)

# Normalize, cap 20% per market,
# 15% per series, re-normalize

Composite value: sum(price_i × weight_i) × 100 → 0–100 scale.

04

Signals & metrics

Instead of just a number, we compute named signal states that tell you the character of current activity:

SignalWhat it means
Consensus ShiftMarkets across the theme are moving in the same direction
DivergenceMarkets disagree — some up, some down
TurbulenceLots of movement but no clear direction
Sharp MoveBig directional change in the index
QuietLow activity, stable prices
ActiveNormal market activity

Momentum

How much the index moved in the last 24h or 7d. The headline number.

+3.2 pts

Breadth

Fraction of constituent markets moving in the same direction.

0.82

Dispersion

How spread out market prices are. High = diverse opinions.

18.4

Volatility

How much the index fluctuates hour to hour.

2.1 pts/day

Narrative: For each signal state change, we identify the top constituent markets driving the move. “Markets are aligning. Ukraine ceasefire probability (+12%) and Iran sanctions extension (+8%) are pushing the index up.” No LLM hallucination — computed directly from price changes and weights.

05

Technical details

Five weighted components, each normalized to 0.0–1.0:

quality_score = (
  0.25 × price_info +      # 1 - |2p - 1|^1.5
  0.30 × liquidity +       # min(1, log10(volume + OI) / 7)
  0.20 × activity +        # exp(-0.058 × hours_since_trade)
  0.15 × horizon +         # <7d: 0.3, <30d: 0.7, <180d: 1.0, <365d: 0.7, else: 0.4
  0.10 × description       # <100ch: 0.3, <300ch: 0.6, <500ch: 0.8, else: 1.0
)
raw_weight = (
  sqrt(volume + open_interest) ×        # Liquidity
  exp(-0.693 × days_to_res / 90) ×      # Recency (90d halflife)
  relevance_score ×                     # Classification confidence
  max(quality_score, 0.1)               # Quality (floor 0.1)
)

# Normalize, cap 20% per market, 15% per series, re-normalize

Composite value: sum(price_i × weight_i) × 100 → 0–100 scale.

StateCondition
consensus_shiftbreadth ≥ 0.75 AND |momentum_24h| ≥ 3
divergencebreadth < 0.50 AND dispersion ≥ 20
turbulencevolatility ≥ 3 AND |momentum_24h| < 2
quietvolatility < 1 AND |momentum_24h| < 1.5 AND dispersion < 10
sharp_move|momentum_24h| ≥ 5
activedefault (none of above)
GateThreshold
Quality score≥ 0.35
Liquidityvolume + OI ≥ $500
Price range0.05 ≤ price ≤ 0.95
Last tradewithin 14 days
Dead flagFALSE
Hard cap75 constituents

We believe transparency builds trust. If you spot an issue with our methodology, let us know.

06

Data sources

All data comes from two platforms. We use both to ensure cross-platform coverage and enable deduplication.

Polymarket

The largest decentralized prediction market by volume. Blockchain-based, global participation, deep liquidity on political and macro markets.

polymarket.com →

Kalshi

The first CFTC-regulated US prediction market exchange. Event contracts on economics, politics, weather, and more with institutional-grade infrastructure.

kalshi.com →

When the same question exists on both platforms, we merge them using embedding similarity and structural verification.

07

Custom themes

Beyond the 7 curated themes, Pro and Enterprise users can create custom indexes on any topic. Self-serve creation uses keyword matching and embedding similarity to find relevant markets instantly. Enterprise white-glove creation uses an LLM to generate comprehensive theme configurations from natural language descriptions.

Custom themes receive the same treatment as curated: quality scoring, eligibility gates, diversity caps, signal states, narratives, and alerts.

Create your own →

See the methodology in action

7 curated indexes. Real-time signals. Full transparency. No credit card required.