The pass-catching RB "floor" is mostly noise. The three-down bell-cow edge is +3 a game.
What the consensus says
The receiving-back drum has been the loudest one in the RB room all month. FantasyPros ran a whole "RB3s with RB1 Potential" piece built on the idea that pass-catching work is the floor that turns a depth back into a starter, and their dynasty sleeper and trade-target lists keep flagging "receiving ability" as the tell. RotoBaller's RB sleeper column leans the same way. PFF's rookie-RB fits piece sells Jeremiyah Love largely on a 79.2 receiving grade and a "safe floor as a receiver." Footballguys' value-risers list and Justin Boone's Yahoo dynasty update both treat catches as ballast. Five-plus independent voices, one claim: receiving work is what gives a running back a durable fantasy floor.
Falsifiable. So I tested it.
The claim, in plain English
def predicate(row) -> bool:
"""In-cohort = receiving role: >=25% of touch opportunity is targets."""
return row["rec_share"] >= 0.25 # targets / (carries + targets)
A back is "in cohort" if at least a quarter of his touch opportunity comes through the air. That 25% line is not arbitrary: it's the exact cutoff the engine already uses to call a guy a receiving back. The trick is the control. A pass-catcher scores more in half-PPR by definition, so a naked comparison is rigged. The honest question is whether the receiving role still pays at the same total workload. Total touches is the whole game here.
How I beat on it
scripts/h43_rb_pass_catch_efficiency.py builds Y to Y+1 pairs from
player_stats_season.csv (REG only, RB, 2015-2024 Y0, Y+1 reaches 2025, at
least 6 games and 80 total touches). I band every pair by Y0 total touches
(carries plus targets), then inside each band compare next-year ppg for the
receiving-role backs against the ground-bound ones. Scored under half-PPR. Full framework:
Session 97 two-gate spec.
n = 438 pairs, a third of them receiving-role.
What the data actually said
First swing, straight up: receiving-role backs averaged 0.22 ppg less in Y+1 than everyone else. Negative. The exact opposite of the floor story.
Because aggregates lie. Pass-catching backs pile up at the bottom of the workload chart, the third-down specialists and committee change-of-pace guys who never sniff 200 touches. Lump them together and their low-volume roles drag the average down. Split by total workload and the picture flips hard:
| Y0 total touches | n_in | in ppg | n_out | out ppg | delta |
|---|---|---|---|---|---|
| 300+ workhorse | 13 | 15.44 | 63 | 13.85 | +1.59 |
| 250-300 | 12 | 14.69 | 56 | 11.55 | +3.13 |
| 200-250 | 28 | 10.76 | 71 | 10.46 | +0.30 |
| 150-200 | 33 | 10.36 | 49 | 9.15 | +1.22 |
| 100-150 | 40 | 9.02 | 37 | 8.29 | +0.73 |
| 80-100 | 20 | 8.12 | 16 | 8.32 | -0.20 |
Positive in five of six bands, and the two that clear the bar are the two that matter most: the bell-cow tiers. At 250 to 300 touches, the back who catches passes beats the pure grinder by 3.13 ppg the following year. At 300-plus, 1.59. Same workload, very different next season. The pure early-down hammer at the top of your backfield is the one who regresses. The three-down back at the same load holds his line. The receiving floor is not a floor at all. It is a ceiling that only shows up once the volume is already big.
What the engine already figured out
Half-right, and in a specific way. SignalTuned already knows what a receiving
back is. It uses the identical 25% cutoff to stamp the receiving_back
archetype, and it rewards it with a post_peak_modifier of 1.15, meaning those
backs decline more gently once they're past their peak. Route-running ages
better than burst. The engine has believed that for a while.
What the engine does NOT have is a forward bonus for the peak years. The 1.15 modifier only bends the decline slope after the peak window closes. A 24-year-old bell-cow catching 60 balls gets no Y0-to-Y+1 lift from his receiving role in the ranking math, even though the cohort says that's exactly where the edge lives. That gap is the "adds information" verdict: a real forward-projection signal, inside the high-volume bands, that the engine isn't currently using as an input.
What to do about it
At the top of a backfield, prize the three-down back over the early-down thumper even when their total touch counts match. The catches are not a consolation floor for low-volume backs. They are a regression hedge for high-volume ones. A 250-touch back who also catches is the safer bet than a 250-touch back who only runs, by about 3 points a week.
Engine-side, this stages an experimental_features.rb_pass_catch_forward_lift
block at weight 0 with warm-loop watch, so the A/B harness can sample it without
touching live rankings. It is NOT auto-merged: a weight-0 staging makes no
ranking change, so it can't earn the clean-SHIP walk-forward verdict our
auto-merge gate demands. This one goes to Ryan with the diff in
docs/agent_proposals/. No live ranking change today.
Receipts
- FantasyPros, RB3s with RB1 Potential
- FantasyPros, 11 dynasty sleepers and trade targets
- RotoBaller, 5 RB sleepers and undervalued targets
- PFF, dynasty fits for rookie running backs
- Footballguys, 18 dynasty value risers at RB
- Yahoo, Justin Boone May RB dynasty rankings