Pure Elo. Four sports. Calibrated. Open.

no ensembles. no XGBoost. no nonsense. just Elo — tuned per sport, calibrated per game.

ELOEdge is an Elo-only prediction engine that fits 22+ adjusters per sport (rest, travel, altitude, goalie starts, starting pitchers, weather, division) and squashes raw rating gaps through a Platt-scaled logistic to produce honest win probabilities. Walk-forward backtested. Block-bootstrapped p-values. MIT.

--
NBA teams rated
--
NFL teams rated
--
MLB teams rated
--
NHL teams rated

Four sports. Four tunings. One engine.

NBA

82-game grind, star-driven, back-to-backs.

  • Rest-day deltas + B2B penalties
  • Altitude bonus for Denver
  • Pace mismatch + injury weighting
  • Cross-year season handling (Oct--Jun)
View NBA module →

NFL

17 games, weather rules, division grudges.

  • Wind/temp/precipitation impacts
  • Bye-week recovery factor
  • Heavy K-factor (small sample)
  • QB-out injury penalty
View NFL module →

MLB

162 games, starter swings, park factors.

  • Starting pitcher Elo sub-rating
  • Pythagorean expectation blend
  • Park factor + altitude (Coors)
  • Lowest K (long sample, low noise)
View MLB module →

NHL

Goalie is everything. 82 games, brutal travel.

  • Per-goalie Elo sub-rating (K=6)
  • 50% season regression (vs 33% teams)
  • B2B + travel-distance penalties
  • Win-streak heat factor
View NHL module →

Live Power Ratings

Snapshot from the last full backtest. Higher = stronger. League average = 1500.

#TeamElovs 1500

How it actually works

Step 01

Base Elo

Classic Arpad Elo with margin-of-victory scaling and home-court adjustment. Initial K-factor and home advantage are tuned per sport via differential evolution.

Step 02

22+ Adjusters

Layered on top: rest days, back-to-backs, travel distance, altitude, division rivalry, season phase, win streaks, scoring consistency, mean reversion, plus sport-specific (goalie / starter / weather).

Step 03

Walk-Forward Backtest

Train on 2015--2022, hold out 2023--2024. Fit Platt scaler on residuals. ISO-week-within-season block bootstrap for honest p-values on every adjuster.

Step 04

§7 Gate

An adjuster KEEPS its spot only if it improves log-loss by Δ ≤ -0.003 with p < 0.05. No "felt right" features. No vibes. Receipts or it gets cut.

Run it on your machine

1 / clone
git clone https://github.com/JerkyJesse/ELOEdge.git
cd ELOEdge/NBA  # or NFL / MLB / NHL
2 / install
pip install -r requirements.txt
3 / run
python main.py
> refresh        # pull two years of games + injuries
> backtest       # walk-forward + Platt fit
> today          # generate today's predictions HTML
4 / optimize
python run_optimize.py    # refit all 22 adjusters