project

PRISM

result122 tests, 85% coverage, documented API limits.

A prediction market signal framework for sports, built around validation, fees, and data limits rather than a clean story.

status: framework completetests: 122 passingcoverage: 85%confidence: high on engineering, documented data limits

Problem

Can you find and validate tradeable signals in prediction markets on sports, across Kalshi and Polymarket, without assuming a clean historical tape exists?

Approach

A production framework with Bayesian online filtering, Extended Kalman Filter with particle filter validation, regime aware Bradley Terry team strength, and an XGBoost inplay probability model trained strictly on in sample data to prevent lookahead.

Validation uses a walk forward design, train 2018 to 2022 and validate 2023, a deflated Sharpe accounting for many trials, block bootstrap confidence intervals clustered by game, and realistic Kalshi fee modeling. The repo has 122 unit tests and 85% coverage.

What I tried that failed

I could not run a meaningful historical backtest, and I documented exactly why.

Polymarket prunes historical tick data for settled contracts, and Kalshi did not offer sports markets historically and returns no data for old settled contracts. I tested both APIs directly and confirmed it rather than assuming it.

Finding

The framework is production ready for live signal generation; meaningful historical backtesting on free public endpoints is structurally impossible.

This is a data infrastructure finding, not a code limitation.

How to reproduce

The repository contains the framework and tests. No secrets are committed.