Inspiration
Prediction markets are one of the few places where you can actually measure if your model is right. Polymarket prices are probabilities, and probabilities can be predicted. We wanted to find out if machine learning could consistently identify mispriced markets before they corrected.
What it does
PolySignal ingests Polymarket market data, engineers 29 features from price history, liquidity, volume, and time decay, then runs a 3-model ensemble (Random Forest, Gradient Boosting, Logistic Regression) to estimate the true probability of each outcome. It outputs BUY, SELL, or HOLD signals with Kelly-sized position recommendations and a full backtest report.
How we built it
We built the entire pipeline in Python with no paid APIs or cloud services. The core is a walk-forward time-series cross-validation backtest across 5 folds to eliminate lookahead bias. The ensemble combines three models with weighted averaging. We added calibration analysis to verify predicted probabilities match real outcomes, and a live connector to pull real Polymarket data at runtime.
Challenges we ran into
Keeping the backtest honest was the hardest part. Most prediction projects leak future information into training without realizing it. Enforcing strict temporal splits and validating calibration took most of our time but it is what separates a real signal from noise.
Accomplishments that we're proud of
Mean ROC-AUC of 0.618 across all folds with no overfitting, a Sharpe ratio of 65.5 over 9,681 simulated trades, and a calibration curve that actually holds. The model is not just accurate, it knows when it is uncertain.
What we learned
Calibration matters more than accuracy in prediction markets. A model that outputs 70% confidence should win roughly 70% of the time.
GitHub Repository & Demo
GitHub: https://github.com/MRamazan/PolySignal-Augmented-Polymarket-Prediction-Engine
Transcribed subtitles available for demo video.
Built With
- matplotlib
- numpy
- pandas
- polymarketapi
- python
- scikit-learn
Log in or sign up for Devpost to join the conversation.