Belief-Volatility Surface
Horizon’sBeliefVolSurface is a streaming estimator that processes tick-by-tick prediction market data and produces a calibrated belief-volatility estimate. It uses online Expectation-Maximization (EM) to separate price changes into:
- Diffusion: gradual belief shifts (estimated as “belief vol”)
- Jumps: sudden information shocks (estimated as jump probability)
Streaming EM
Online EM separates diffusion and jump components without batch processing. Updates in O(1) per tick.
Noise Filtering
Bid-ask spread is treated as microstructure noise, producing cleaner vol estimates.
Jump Detection
Automatically estimates the probability that each price move was a jump vs. diffusion.
Vol Surface
Interpolated volatility surface across time-to-resolution horizons.
API
BeliefVolSurface
surface.update
Process a new price observation. Returns the current belief vol estimate.- Converts price to logit space
- Estimates microstructure noise from bid-ask spread:
noise_var = (logit(ask) - logit(bid))^2 / 12 - Computes observed variance:
delta_x^2 - noise_var - Runs online EM to separate diffusion and jump components
- Returns
sqrt(diffusion_var)as belief vol
surface.current_vol
surface.jump_probability
surface.surface_point
Interpolated vol at a given time-to-resolution.surface.reset
Clear all state and return to initial values.Online EM Algorithm
The surface decomposes each price change into two regimes: E-step (per observation):belief_vol=sqrt(diff_var)- the smooth componentjump_var- the sudden componentjump_prob- estimated probability that any given move is a jump
Pipeline Integration
hz.belief_vol_tracker
Automatically maintains per-marketBeliefVolSurface instances and injects estimates into ctx.params.
ctx.params:
"belief_vol": Current belief volatility estimate"jump_prob": Estimated jump probability
"belief_vol" from params if present, so these two pipeline functions compose naturally.