When evaluating pass catchers in football, one of the things that can go under the radar is how different the situation is from catch to catch.
Not every reception asks the same thing from a pass catcher. A five yard catch on third and long with a defender already closing in is completely different from a quick screen pass with blockers out in front and open space to run. The defense matters too, along with the personnel and formation on both sides of the ball.
For this assignment, I wanted to look at yards after catch in a more contextual way instead of only treating every reception the same. I built a model to estimate how many yards after the catch a pass catcher should have been expected to gain based on the situation of the play, then compared that expectation to what actually happened after the catch.
I used the term pass catcher throughout the analysis because the dataset includes wide receivers, tight ends, and running backs who recorded receptions.
YAC Above Expected = Actual YAC minus Expected YAC
A positive number means the pass catcher created more yards after the catch than the model expected based on the situation of the play. A negative number means the play finished below expectation.
I used NFL play by play data from the 2021 through 2025 seasons and filtered the dataset to completed passes since yards after catch only exists once a reception is made.
The idea behind the model was to isolate the situation of the play as much as possible before the receiver actually started running after the catch. Because of that, I only included information that was already known at the time of the throw.
The model included down, distance, field position, air yards, score differential, time remaining, pass location, pass depth, offensive personnel, defensive personnel, offensive formation, and both the offensive and defensive teams.
I also added a defensive context variable that tracked how much YAC each defense had allowed up to that point in the season. Some defenses consistently limit yards after the catch while others give up more space underneath, so adding that context helps the model better understand the type of defense the receiver was facing on each play.
I used an XGBoost regression model to predict expected yards after catch for each play.
I thought this made the most sense for this assignment because YAC is not a simple linear stat. Different variables interact with each other constantly depending on the situation of the play. A short pass on 3rd and 2 is very different from a short pass on 3rd and 15. Air yards can matter differently depending on where the pass is thrown and what personnel is on the field.
Offensive formations and personnel packages can also completely change the spacing of a play and how much room a player has after the catch. Because of that, I wanted a model that could handle more complex relationships between variables instead of assuming every variable affects YAC in a straight line.
XGBoost works well for this because it can pick up on nonlinear relationships and interactions between variables much better than a standard linear regression model.
Before looking at which pass catchers performed best, I first wanted to see how well the model handled unseen data.
The goal here is not to perfectly predict every single play because football is too random for that. One missed tackle, a strong block downfield, or a blown coverage can completely change what happens after the catch.
Instead, the goal is to create a realistic expectation for what should happen based on the context of the play. Once that baseline is established, the difference between expected YAC and actual YAC can help show which pass catchers consistently create more after the catch than the situation would normally suggest.
| Model Evaluation | ||
| XGBoost performance on unseen test data | ||
| Metric | Estimator | Value |
|---|---|---|
| rmse | standard | 6.100 |
| rsq | standard | 0.081 |
| mae | standard | 3.732 |
This scatterplot compares the model’s expected yards after catch to the actual yards after catch on each completed pass.
Each point represents a single play. The dashed line represents a perfect prediction where the expected YAC exactly matches the actual result.
The points are naturally spread around the line because there is still a lot of randomness in football. One broken tackle, a missed assignment, or strong blocking downfield can completely change how a play finishes after the catch.
The goal of the model is not to perfectly predict every outcome. The goal is to create a realistic expectation for each situation so the gap between expected and actual YAC can help identify which pass-catchers consistently create more after the catch than the situation would normally suggest.
After training the model, I generated an expected YAC value for every completed pass in the dataset and compared it to what actually happened on the play.
From there, I grouped the results by pass catcher and season to see which players consistently finished above or below expectation after the catch.
I also added a minimum threshold of 50 receptions in a season to help reduce small sample noise. Without a minimum cutoff, a pass catcher with only a small number of targets could rank near the top or bottom because of just a few unusual plays instead of showing a consistent pattern across a full season.
This table shows the strongest pass catcher seasons based on average yards after catch above expected per reception.
The per reception number helps measure efficiency after the catch, while the total YAC above expected helps show which players created the most overall value across a larger workload.
I also kept the minimum reception threshold in place because YAC above expected can get noisy in smaller samples. A pass catcher with only a limited number of receptions could look extremely good or bad because of just a few broken tackles or unusual plays rather than a consistent pattern over the course of a season.
Single season results can be useful, but they can also be affected by smaller sample sizes, injuries, offensive scheme changes, or a few unusually explosive plays.
Looking at the full 2021 through 2025 sample gives a better picture of which pass catchers consistently created yards after the catch above expectation across multiple seasons, quarterbacks, and offensive systems.
For the multi year leaderboard, I used a minimum threshold of 200 receptions across the full sample to focus on pass catchers with a larger and more reliable workload.
| Multi-Year NFL Pass Catcher YAC Above Expected Leaders | ||||||
| 2021 through 2025 with a minimum of 200 receptions | ||||||
| Player | Team | Receptions | Actual YAC | Expected YAC | YAC OE Per Reception | Total YAC OE |
|---|---|---|---|---|---|---|
| D.Samuel | SF, WAS | 219 | 6.89 | 5.31 | 1.58 | 1.60 |
| J.Chase | CIN | 451 | 5.20 | 4.31 | 0.89 | 0.90 |
| D.Njoku | CLE | 230 | 4.90 | 4.04 | 0.86 | 0.90 |
| C.Otton | TB | 204 | 4.76 | 4.07 | 0.69 | 0.70 |
| G.Kittle | SF | 310 | 5.57 | 4.89 | 0.69 | 0.70 |
| C.McCaffrey | CAR, SF | 233 | 5.44 | 4.76 | 0.67 | 0.70 |
| P.Nacua | LA | 301 | 5.11 | 4.57 | 0.54 | 0.50 |
| C.Kupp | LA, SEA | 386 | 4.70 | 4.18 | 0.53 | 0.50 |
| A.Brown | PHI, TB, TEN | 447 | 4.53 | 4.04 | 0.49 | 0.50 |
| N.Collins | HOU | 270 | 4.59 | 4.14 | 0.45 | 0.40 |
| J.Jefferson | DET, MIN | 431 | 4.11 | 3.67 | 0.44 | 0.40 |
| D.Metcalf | PIT, SEA | 336 | 4.24 | 3.84 | 0.40 | 0.40 |
| P.Freiermuth | PIT | 242 | 4.33 | 3.95 | 0.39 | 0.40 |
| T.Kelce | KC | 478 | 4.83 | 4.46 | 0.36 | 0.40 |
| D.Goedert | PHI | 262 | 4.94 | 4.58 | 0.36 | 0.40 |
| J.Williams | DAL, DEN, DET, NO, WAS | 221 | 5.42 | 5.06 | 0.36 | 0.40 |
| J.Waddle | MIA | 325 | 4.28 | 3.95 | 0.33 | 0.30 |
| C.Godwin | TB | 296 | 4.43 | 4.12 | 0.32 | 0.30 |
| N.Fant | CIN, DEN, SEA | 210 | 4.61 | 4.32 | 0.30 | 0.30 |
| J.Jeudy | CLE, DEN | 259 | 4.20 | 3.91 | 0.29 | 0.30 |
| D.Johnson | BAL, CLE, HOU, JAX, MIA, NO, PIT | 266 | 4.00 | 3.75 | 0.25 | 0.30 |
| C.Lamb | DAL | 442 | 4.33 | 4.08 | 0.25 | 0.20 |
| G.Pickens | DAL, PIT | 267 | 4.28 | 4.08 | 0.20 | 0.20 |
| D.Moore | CAR, CHI, TB | 279 | 4.12 | 3.94 | 0.18 | 0.20 |
| E.Engram | DEN, JAX, NYG | 278 | 4.19 | 4.02 | 0.17 | 0.20 |
This assignment was an attempt to look at yards after catch in a more contextual way instead of only relying on raw receiving numbers.
Rather than just looking at total YAC, this approach tries to measure how much a pass catcher created relative to what the situation of the play suggested should have happened.
That matters because not every opportunity is the same. Some pass catchers get the ball in open space with blockers in front, while others are catching passes in tighter windows with defenders already in position to make a tackle.
The model is not perfect, and football will always have randomness that statistics cannot fully explain. Still, this creates a stronger framework for separating scheme driven production from the pass catchers who consistently create extra value on their own after the catch.