bayesRatings is a free sports ratings and forecast site. It gives a clear, probability-based estimate of how each game might go, starting with MLB, NBA, NFL and NHL.
How the ratings work
Every team gets a strength rating. Zero is an average team. Higher is better.
The ratings come from a Bayesian logit model, a Bradley-Terry model fit in Stan. It learns from game results: who won, who was at home, and how strong the opponent was. The gap between two teams’ ratings, plus a home edge, becomes a win chance. Each league is fit on its own games.
Because the model is Bayesian, a rating is more than one number. Each team also gets a likely range: a 90% band for where its true strength probably sits. Less evidence means a wider range. Ratings are pulled toward average until the results back them up, so a short streak doesn’t swing a team too far. Early in a season, the model leans on last season’s ratings.
Ratings and forecasts rebuild every morning for each league in season, using every game finished by then.
What’s on the site
- League pages (MLB, NBA, NFL, NHL): every team’s rating, likely range, record and change since the last update, plus the day’s games.
- Team pages: rating, likely range, record, points for and against, a season rating chart and recent results.
- Game pages: win chance for each side, expected margin, expected total and fair odds. The Kalshi market price is shown alongside for comparison. It is not used in the model.
- Methodology: the approach in plain English.
- Scorecard: how the forecasts are graded.
- Snapshot archive: each morning’s ratings and forecasts, saved unchanged.
The NBA is in its off-season. Its page shows last season’s final standings until games begin.
Every forecast gets graded
When a game ends, its forecast is scored. The scorecard tracks:
- Favorite won: how often the team given the better chance actually won.
- Log loss: a standard score for probability forecasts. Lower is better. A coin flip scores 0.693.
- Calibration: whether games called at 70% are won about 70% of the time.
Published forecasts are graded exactly as they were posted that morning. Results appear once the first ones are graded. A separate rebuilt history replays past seasons one day at a time, using only games played before each date. It was not published at the time, and it is kept apart from the live record.
What’s next
The four leagues are the start. The plan is to add more leagues and improve each model with more information about the game. The groundwork is in place: the full box score is saved for every game, not just the final score.
The goal stays the same: a clear estimate of how each game might go.
— bayesRatings