❓ How This Works
The short version: we built a computer model, feed it real results every day, and check our own homework in public. Here's what that actually means.
🧮 Where the predictions come from
Every team gets a single "strength" number that goes up when they win and down when they lose — more so against strong opponents, less so against weak ones, and more so for a blowout than a nail-biter. That's it, that's the whole idea (it's a well-known system called Elo, the same style of rating chess players and FiveThirtyEight's sports models use). When two teams play, we compare their numbers — plus a small boost for whoever's playing at home — to get a win probability. No mystery ingredient, no black box: just real past results, replayed.
A few sports get a real, specific nudge on top of team strength when we have honest evidence it should move the number:
- MLB: the day's actual starting pitchers, and (when a real key hitter is confirmed out) how much that specifically hurts a lineup.
- College Football: an independent outside team rating, sourced from a second real dataset — not just our own numbers agreeing with themselves.
- NBA and WNBA: whether a team's real best player is actually playing tonight. A star being out moves this; a bench player being out doesn't.
Nothing is invented or guessed — if we don't have a real signal for something, we leave it out rather than fake it. More on what we deliberately don't do below.
🎰 Where the player prop suggestions come from
Separate from the win prediction above: for MLB home-run and total-bases prop lines specifically, we also factor in the ballpark's known scoring tendencies, tonight's temperature, the opposing starter's real home-run rate allowed, and two real reads on the batter's own quality this season — how often they barrel the ball up (not just how many home runs happened to land) and their overall expected offensive output once park and luck are stripped out. These are all real, well-documented effects on exactly those two stats — but they only touch the prop suggestions, not who we predict to win the game. A hitter-friendly park doesn't favor either team, so it has no business changing a win probability, only how likely a specific player is to go deep tonight.
For NBA and WNBA scoring lines, we scale by how many points tonight's opponent actually gives up per game, measured from real completed games rather than a reputation. That's the only prop adjustment we make in basketball, and it's on purpose: points allowed is a direct measure of what a scoring line predicts, but a poor stand-in for rebounds — more opponent misses arguably means more rebounds available, which would push the wrong way. So rebound, assist and three-point lines are shown as the plain season average, with the opponent's defensive rank displayed next to them but not priced in.
On basketball picks we also show the player's last ten games and how many of them cleared tonight's number. That's history, shown so you can judge it — it is deliberately not folded into the projected number. The hit rate is counted against the very line it would then be compared to, so building it in would be circular reasoning, and ten games is a small enough sample that a hot streak proves less than it looks like it does.
🏷️ What the confidence labels mean
We show a plain-language label instead of a bare percentage, because "62.4%" doesn't mean much at a glance to most people. Here's exactly what each one means:
| Label | Win probability |
| Strong Favorite | 80%+ |
| Favored | 65–80% |
| Slight Edge | 55–65% |
| Toss-up | 45–55% |
| Slight Underdog | 35–45% |
| Underdog | 20–35% |
| Long Shot | under 20% |
👀 What the "betting value" badge means (and doesn't)
Sometimes you'll see a card flag "betting value" for a team that isn't the one we predict to win — that's not a mistake. It means the actual sportsbook odds look softer than our model thinks they should, for whichever team, regardless of who we think will win outright. Our predicted winner and the win percentages are the actual pick; the value badge is a separate, narrower observation about the odds themselves. We keep them visually separate on purpose — they answer different questions.
📈 How we grade ourselves
Every prediction gets written down before the game happens, then checked against what actually happened once it's final — a real, dated record, not something we can quietly rewrite after the fact. We also replay the whole season game-by-game, only ever using information the model would have actually had at that point in time (no peeking at a team's end-of-season record to judge how good our March prediction was). All of it, good or bad, is public on the Accuracy page for every sport — including the times the model does only slightly better than just guessing.
🙅 What this deliberately isn't
- Not betting advice. This is a hobby project built from public data, not a licensed prediction service — treat it as a fun second opinion, never as financial guidance.
- No insider information. Everything here comes from the same public scores, stats, and sportsbook odds anyone can look up — nothing from locker rooms, beat writers, or private sources.
- Some sports are just harder to call than others. MLB and NHL are historically the hardest major sports to predict game-by-game, even for professional models — the Accuracy page shows exactly how much (or how little) edge we actually have in each sport, sport by sport, rather than one blanket confidence claim.
- We don't guess when we don't have real data. If a signal isn't reliably available (like which goalie is starting in a given NHL game), we leave it out rather than fabricate a placeholder.
Show the technical details
Rating update: new_rating = rating + K × multiplier × (actual_result − expected_result). K controls how much a single game can move a team's rating, and is tuned per sport (baseball's 162-game season uses a much smaller K than a 16-game NFL season, so one game doesn't overreact). multiplier scales up for a bigger margin of victory and down for two closely-matched teams, the same style of adjustment FiveThirtyEight's own models use. Every league's exact parameters, plus whether we've found real statistical evidence (not just a hunch) to tune them away from their defaults, are shown on that sport's Accuracy page.