Stochastic state-space engine · within-fight SDE · prediction markets

Bayesian fair odds forevery boxing market.

spartanboxing maintains a posterior over each fighter's latent skill, power, durability, stamina, cut, wear, and style — and propagates uncertainty through within-fight stochastic dynamics into joint distributions over (winner, method, round).

14

State dim per fighter

4

Estimation passes

1s

Within-fight resolution

7+

Markets covered

The mispricing

Books quote points. Fights are distributions.

The edge in boxing isn't in picking winners. It's in owning the joint distribution over how a fight ends.

Sparse careers, noisy fights

Boxers fight 2–3 times a year. Glicko-style ratings drift on weak signal and never represent uncertainty — every prediction is a point estimate with no honest error bar.

No within-fight structure

Conventional models predict winners but not methods or rounds. A fight is a stochastic process; a winner-only prediction throws away most of the joint distribution and most of the edge.

Wear is a free variable

Career mileage drives durability decline, but conventional models leave it as a tunable hyperparameter. spartanboxing makes wear a state coordinate whose drift rate equals the within-fight damage rate — same physical quantity, two timescales.

What the engine does

Built around uncertainty, not around point estimates.

Every component is a stochastic process with a posterior. Every prediction is a distribution. Every bet is sized to the model's self-assessed edge AND its self-assessed confidence.

Latent state per fighter

14-dim posterior: skill, power, durability, stamina, cut susceptibility, cumulative wear, and an 8-dim style embedding.

Two-level stochasticity

Realizations × process parameters. Both layers carry posteriors — predictive prices integrate over both, never collapsing one.

Within-fight SDE

Damage diffusion + Hawkes jumps for power-shot clustering, modeled at 1-second resolution. KO threshold is itself stochastic.

Schedule-conditioned percentiles

Pass 4 normalizes posteriors against synthetic fighters with comparable schedules — the only honest way to compare across opposition.

Population HMC

Monthly NUTS fit over the entire fighter corpus. Reparameterized splines, surrogate within-fight likelihood for tractability.

Joint output by Monte Carlo

10k forward simulations per fight produce empirical joints over (winner, method, round). Every market price marginalizes from the same simulation.

Edge with uncertainty haircut

Fractional Kelly sizing scaled by posterior credible-interval width — bets shrink when the model is uncertain, not the other way around.

Causal snapshot discipline

Every feature respects seen_at-not-event_at. Backtests can never accidentally peek at data that hadn't been entered yet.

Wear as a bridge coordinate

Within-fight damage rate IS the between-fight wear drift — same physical quantity, structurally tied. No identification ambiguity.

The four-pass loop

One canonical fit and scoring sequence.

Population baseline → per-fighter posterior → optional fighter-specific deviation → schedule-normalized comparable score. Predictions never fit anything ad hoc at request time.

  1. Pass 1

    Population HMC

    Fit Θ_pop from the entire fighter corpus. NUTS, 4 chains × 1000 samples. Cadence: monthly.

    Monthly · GPU hours

  2. Pass 2

    Per-fighter filter

    EKF for Gaussian state coordinates, particles for jump components. Pre/post snapshots written per event.

    Per fight · seconds

  3. Pass 3

    Idiosyncratic perturbation

    GP perturbation per long-career fighter (≥25 fights), shrunk hierarchically. Captures what the population can't.

    Quarterly · minutes

  4. Pass 4

    Schedule-conditioned percentiles

    Simulate synthetic fighters with the target's schedule under Θ_pop. Report each fighter as a percentile in that distribution.

    Per scheduled card · minutes

Predictive output

Joint distribution over (winner, method, round) by Monte Carlo

Each of 10k simulations samples Θ_pop from Pass 1, applies any Pass 3 perturbation, draws (x_i, x_j) from Pass 2 posteriors with Pass 4 percentiles as auxiliary inputs, and runs the within-fight SDE forward to a stoppage or decision. Every market price marginalizes from the empirical joint — they all come from one simulation, never from independent submodels.

Every market from one simulation

Marginalize, never submodel.

A 10k-path Monte Carlo against the empirical joint over (winner, method, round) is enough to price every market the book offers. No separate models for moneyline vs round-group vs go-the-distance — one source of truth, one set of credible intervals.

  • Posterior intervals on every market price
  • Edge calculation includes venue fee adjustment
  • Fractional Kelly sized by ci_width(fair_p)
  • Refused if ci_width > 25% — model knows what it doesn't know
  • CLV measured against Pinnacle closing benchmark
Open the portal
markets/{fight_id} · marginalized from one simulation
MoneylineP(winner = A)
Method: KO/TKO/RTDP(winner = A ∧ method ∈ stoppages)
Method: decisionP(winner = A ∧ method ∈ {UD, MD, SD})
Round group 1–3P(stoppage ∧ round ∈ {1,2,3})
Total rounds over 9.5P(stoppage_round > 9.5 ∨ decision)
Goes the distanceP(no stoppage)
Knockdown occurs1 − P(zero KDs either fighter)

How it works

Three steps. One engine.

01

Open your portal

Email + password. Instant access. The portal is the surface for every model output and pipeline state.

02

See the engine end-to-end

An interactive flowmap visualizes every component — ingestion, four passes, simulator, edge layer — with live status badges.

03

Trade with edge bands

Every market price comes with a posterior credible interval. Sizing scales by how confident the model actually is.

Every fighter attribute that matters is a latent stochastic process. Fights are noisy observations. The model maintains a posterior over each process and propagates uncertainty into market prices.

— design philosophy

FAQ

Common questions.

Stage 1 of 8 — scaffold live, engine landing in subsequent stages

Stop pricing winners.Start pricing distributions.

Open the portal to see the engine end-to-end — every spec component, every status badge, every chart placeholder reserved for the model.