Who Will Play?
A forecast for next Sunday can use the injury report: who's out, who's questionable, and who's probably fine. A game three weeks away has no report yet, and most of the players who'll miss it haven't been hurt yet.
Held Out's injury predictor fills that gap. For every player it tracks, it estimates his chance of playing each of his team's remaining games, through the Super Bowl. Every forecast past this week uses the lineup it expects: later games on the matchups page, the Playoff Predictor, and each team's playoff strength. Those forecasts don't freeze today's injuries in place, and they don't assume everyone is healthy.
Why Model This, Instead of ___?
1. Freezing Today's Injuries Is Wrong in Both Directions
Carrying today's report forward charges a team for a hamstring that'll heal in two weeks. It also gives a healthy team credit for staying healthy all year, which almost no team does. Assuming everyone is healthy errs the other way. Every team faces about the same months of injury risk before January, and a forecast that ignores the risk is too sharp.
The cost of ignoring it shows up in RICE. Price a team's next three games with the lineup and quarterback from its next game held fixed, and RICE's log loss gets worse by 0.007 on 2000-19 and 0.015 on 2020-25. Over the next eight games, it gets worse by 0.015 and 0.025. On RICE's scale, those are big numbers.
2. It Learns From the League's History
How long does a hamstring strain keep a running back out? The predictor fits the answer from every hamstring strain at running back in its history, refitted each season on the seasons before it. Its inputs are the injury report, the inactive list, the player's snap share, and his spot on the depth chart. It also reads the designation on his report, how many games in a row he's missed, the kind of injury, his injury history, his position, and his age.
It counts the lead in calendar weeks, not games, so a bye is a week to heal. A playoff game is its own case. So is the last week of the regular season, when a team that has locked in its seed often rests its starters.
The Data Behind It
Most of the work here went into getting the inputs right, and some of the bugs were memorable.
- Who dressed comes from the league's own gamebooks, read for every game back to 1999. Super Bowl LIV's official PDF turned out to be the Pro Bowl's, so it listed Patrick Mahomes and George Kittle as inactive for the Super Bowl. That record is fixed.
- A team-week with no injury report filed is unknown. Early versions treated "no report" as "nobody hurt," which was quietly wrong.
- The weekly roster's status before 2016 is one value per player-season: where the player ended the year. So every player who finished a season on injured reserve shows as on injured reserve from week 1. Reading that status, even a week late, told a September game who'd be hurt in December. The leak inflated early results by about 0.004 to 0.005 a game, and it's gone.
- The 2012, 2014, 2015, and 2018 Super Bowls have their snap counts under the wrong teams in the public data. The predictor swaps them back.
How Well It Does
Playing Time
The simplest test is how much each player plays. On 2012-19, the predictor's snap shares explain 78 percent of the variance (an R² of 0.78), against 0.66 for repeating each player's share from his last game. Touch share (the share of a team's rushes and targets) comes in at 0.81, against 0.76.
The predictor also projects the starting quarterback. When a team changes starters, the projection picks the new one 70.9 percent of the time, against 63.3 percent for the depth chart alone.
Playing at All
The naive rule carries each player's last reported status forward. Against that rule, the predictor is better by 0.016 in log loss a week out on 2000-19 (0.008 to 0.026), and by 0.018 on 2020-25. Counting the lead in calendar weeks instead of games helped most far out. For games 10 to 17 weeks away, it gained 0.006 on 2000-19 and 0.003 on 2020-25.
In the Forecasts That Use It
The test that matters is RICE. The baseline holds the next game's lineup fixed for every later game. Pricing each later game with the predictor's lineups instead improves the next three games by 0.0009 (0.0005 to 0.0013) on 2000-19 and 0.0013 on 2020-25. It improves the next eight games by 0.0014 (0.0007 to 0.0021) and 0.0020. Those games get their own combiner, trained on exactly these projected rows, which added a little more on 2000-19.
What I'm Not Sure About
The predictor reads injury history for healthy players too, because a player who's been hurt before is more likely to be hurt again. On 2000-19 I couldn't detect a difference, and the interval includes a small loss. On 2020-25 the gain was clear: 0.003 (0.002 to 0.005). I kept it on the strength of the 2020-25 result, and I'm not entirely comfortable with that choice, so I'm flagging it.
What Didn't Work
- A separate forecasting model. The first version was its own model, projecting each week from the one before. It scored worse than feeding the predictor's lineups into RICE, and I deleted it.
- One model for every distance, or a model that knows how far away each game is. Both lost to the version on the site.
- A learned chance of missing a game in place of the designation rates. It was neutral in the regular season and worse in the playoffs, so the plain rates (how often a "questionable" player sits) stayed.
Notes
- Snap counts before 2012 aren't in the public data. The predictor estimates them from each player's role in the gamebooks, fitted on 2012-16, where the estimate explains 87 percent of the held-out variance. It uses them as history only.
- The predictor feeds RICE's later games and the Playoff Predictor. This week's games use the real injury report and, when it's out, the inactive list.