About the numbers
Methodology
Sad Sports Graphs tracks the NFL, MLB and NBA with a particular interest in the bad nights: blowouts, collapses, and seasons that got away. This page explains where the data comes from and how each ranking and metric on the site is calculated.
Data & updates
- Game & season stats
- Raw stats sourced from multiple stat aggregators and refreshed throughout the day. NFL Verse for NFL, Statcast for MLB, and stats.NBA for NBA. The footer shows the latest completed game date loaded for each league.
- Live scores
- From ESPN's public scoreboard, cached for five minutes. Live scores are shown as-is and aren't part of the nightly data until the next refresh.
- Advanced NFL stats
- Play-charting stats such as yards after catch and yards after contact are finalized a few days after each game, so the most recent week can shift slightly once they land.
Game Value & Season Value
Game Value estimates a player's net contribution to their team in a single game. Heavily influenced by game position, more in a close game, less in a blowout. Positive values mean the player helped, negative values mean they hurt. Season Value is the same idea across a whole season. It's a Sad Sports Graphs metric, calculated in our own data pipeline rather than taken from a public source.
Reading it on the site
- Percentiles
- Each game is also placed against two baselines: every game that season (“vs 2026 season”) and every game in that league's history (“vs NFL since-2000”). “Bottom 0.05%” means almost no recorded game was worse.
- Plays that hurt
- How many of the player's recorded actions that game (plays, plate appearances, possessions) counted against their team, out of all of them.
- Availability
- NFL single-game values are kept for the most recent couple of weeks, so older NFL matchups show box-score stats without a Game Value.
NFL metrics
ANOY — Adjusted Net Offensive Yards
Representation of total offensive yard impact provided by specific player.
Weights are also added to increase/decrease value of yards created by player, i.e. QBs not being rewarded for YAC as much
ANOY = passing yds + rushing yds + receiving yds
− sack yds taken
− interception return yds
− / + dropped air yds (depending on passing/receiving position)
− penalty ydsImpact Index
Rewards drive-extending and scoring plays and penalizes drive-killers, with touchdowns and turnovers counted double.
Impact = 2 × (passing + rushing + receiving TDs)
+ (passing + rushing + receiving first downs)
− sacks taken − fumbles
− 2 × (interceptions + lost fumbles)Who qualifies
Season-long positional charts only include players with at least 2 games and meaningful volume, so a single garbage-time snap can't top (or bottom) a leaderboard:
- Quarterbacks
- 50+ pass attempts, or 5+ per game
- Running backs
- 25+ carries, or 2.5+ per game
- Receivers & tight ends
- 15+ targets, or 1.5+ per game
Home page rankings
- Biggest blowouts
- Games from the past 14 days, ranked by how far the final margin sits above that league's typical margin over the same window (in standard deviations). A 10-run MLB game and a 30-point NBA game can then compete fairly.
- Largest blown leads
- Games where the losing team led by more than 4 and by more than half of the winner's final score (one-fifth in the NBA, where scores run much higher), ranked by the size of the lead.
- The Sad Story
- The single saddest result from the last three days of data. Blowouts are scored by their final margin and blown leads by their full swing (largest lead plus the final losing margin), both measured against the league's typical margin, and the highest score wins. Every line of the headline and summary is generated from the game's data.
- Tankathon
- The five teams with the lowest win percentage in each league's current season. Bars show each team's season scoring differential (points or runs scored minus allowed).
- Worst & best of all time
- Every team-season in the data, ordered by our overall all-time ranking.
League pages
Expected record
A team's scoring line predicts its record surprisingly well. We use the standard “Pythagorean” formula, with each sport's usual exponent: 2.37 for the NFL, 1.83 for MLB and 13.91 for the NBA.
expected win % = scored^k / (scored^k + allowed^k) expected wins = expected win % × games played
Storylines
Each storyline is scored by how unusual it is for the number of games played, so the page leads with the most surprising one, and each team appears at most once.
- Unlucky / Living dangerously
- Wins at least one standard deviation below (or 1.2 above) the expected record.
- Collapse / Turnaround
- Win percentage down at least .200 (or up .250) from last season.
- Skid
- A current losing streak of three or more.
- Last place / Winless
- The league's worst record.
- Outscored
- A per-game scoring differential at least 1.5 standard deviations below the league, for a team in the bottom quarter of the standings.
Standings cover regular-season games only. MLB and NBA games still in progress aren't counted until they finish.
Spot something that looks off? The numbers are only as good as the data behind them, and early-season samples are small. Back to the home page →