Blitzcast — AI/ML Football Matchup Predictor

Blitzcast — AI/ML Football Matchup Predictor

Blitzcast — AI/ML Football Matchup Predictor

Sole developer, July 2026 to Present

PythonXGBoostScikit-LearnSHAPFastAPINext.jsPostgreSQL

Problem

Closing lines are about the best public estimate of win probability you can get. They already account for injuries, weather, and where the money went. I wanted to see how close I could get to that using only public data, and I wanted to be able to explain any individual prediction afterward.

Approach

  • Built a pipeline that pulls nflverse, odds, weather, and injury data into PostgreSQL on a schedule, covering both NFL and college football.
  • Engineered 20 leakage-safe features across Elo ratings, rolling EPA, rest days, injuries, weather, and market odds.
  • Trained an XGBoost classifier and calibrated it with Platt scaling, so a 70% prediction actually means about 70%.
  • Backtested walk-forward, season by season, training only on data that existed at prediction time so the comparison against closing lines holds up.
  • Added SHAP so I can see which features drove any given prediction.
  • Wired in Claude to narrate the predictions in a broadcast style, with guardrails that keep it from touching the numbers.
  • Shipped the FastAPI backend and Next.js frontend with Alembic migrations, Docker, and CI running a 39-test suite.

Outcome

The model gets close to closing-line accuracy on public data alone. Calibration and walk-forward validation were the parts that mattered most, since both are easy to skip and both are what make the benchmark mean anything. Live now at blitzcast.app, with the model and UI both still being actively improved.

← All projects