Yeah, those QBs beat the field. No, the engine shouldn't pay extra for it.
The cliffhanger I left
Last month I went after the touchdown-regression crowd. The finding held: elite passing-touchdown-rate QBs do see the rate fall about two points a game off the spike, but at equal passing volume they still beat the field by +1.9 ppg the next year. The rate regresses, the quarterback doesn't. Don't fade him.
Then I was honest about the part a blog table cannot answer. A high touchdown rate already meant a high Y0 points-per-game, and the engine already carries that forward. So some of that +1.9 is not new information, it is the same production counted twice. I wrote, in that post, that whether any of it is a real edge the engine misses "is a question for the residual harness, not a blog table." This is that harness.
What I actually built
The engine's forward projection for a returning player is, at its core, last year's points-per-game run through the position age curve: ppg0 x (curve[age_next] / curve[age_now]). That projection already contains the elite cohort's inflated touchdown season, because their ppg0 was inflated by it. So the only honest test is the residual: take each QB's actual next-year ppg, subtract what the engine already projected, and ask whether the elite-touchdown-rate guys beat their OWN projection, not just the field.
scripts/validate_qb_td_rate_lift.py, rebuilt for this, scores every QB year-to-year pair from 2015 to 2024 (half-PPR, real starters), splits the residual into the elite-rate cohort versus the field, and puts a 95 percent confidence interval on the gap by resampling quarterbacks, not seasons, so a QB who shows up eight times counts as one voice and not eight. Then it sweeps an upward lift and asks the binding question: does paying the cohort extra actually reduce the engine's error? 177 cohort pairs across 63 quarterbacks. 2026 is a locked holdout and never touches the math.
What the data said
The screen is brutal and it points the opposite way from the lift idea.
| group | residual vs own projection | 95% CI |
|---|---|---|
| elite-TD-rate cohort | -1.91 ppg | [-2.41, -1.46] |
| the field | +0.46 ppg | [+0.18, +0.72] |
| cohort minus field | -2.36 ppg | [-2.93, -1.84] |
Read the top row. The elite-rate QBs come in 1.9 points a game UNDER what the engine already projected for them. Not over. Under. The confidence interval clears zero with room to spare. The field, meanwhile, lands a touch above its projection. The gap between them is -2.36 and it is not noise.
Then the lift sweep, which is the part that would have to win for a credit to ship. Every single positive lift, from +2 percent to +20 percent, makes the cohort prediction WORSE, with the whole confidence interval on the wrong side of zero:
| lift | cohort MAE change | 95% CI | verdict |
|---|---|---|---|
| +0.02 | +0.19 | [+0.15, +0.23] | DEFEND |
| +0.10 | +1.13 | [+0.98, +1.31] | DEFEND |
| +0.20 | +2.55 | [+2.27, +2.86] | DEFEND |
Ten for ten, DEFEND. There is no version of "credit the hot touchdown rate" that helps. Paying it makes the most expensive position on the board less accurate.
Why it goes the other way
The +1.9 the field sees is real, and it is already in the engine, twice would be the bug. A quarterback who threw for a pile of touchdowns scored a pile of fantasy points, that points total is his ppg0, and ppg0 is the spine of the projection. The engine already credits him. Add a lift on top and you are paying for the same season a second time.
The under-projection is the more interesting half. Against their own carried-forward production these QBs land short, because the touchdown rate regresses harder than the age curve alone assumes. The 2024 cohort is the tell: Mayfield, Goff, Burrow, Love, Allen, Jackson, Darnold. Sky-high touchdown rates, and the model that just rides their points forward expects more next year than they deliver. The engine's existing touchdown-regression layer is running back only by design, we tried it on passers before and it did not move the backtest. So the engine is not actively fading these QBs, it just is not crediting them either, and the data says that restraint is correct.
What it means for your roster
Nothing changes from last month, and that is the point. When the group chat tells you to sell Mayfield because the touchdowns cannot repeat, still let them, and still buy the discount. The player out-scores his replacement at the same volume. What changed is the engine-side fantasy: there is no hidden +1.9 to bolt on. The board already has the production, and if anything the hot-rate names are priced a hair rich against their own projection, not cheap.
The honest caveat
That -2.36 is a loud number, and a tidier mind than mine will want to flip it into a touchdown-rate DISCOUNT for quarterbacks, the mirror of the running-back regression layer. Maybe. But this whole test runs against a proxy projection, last year's points times the age curve, not the full engine with its quarterback bias correction and its scarcity and ceiling modifiers stacked on top. Three separate times a quarterback change has cleared a proxy like this and then fallen apart against the real pipeline. So the discount idea goes in the notebook as a lead, not a ship. It earns a real verdict only after a full-engine run, on a future-season cohort, under the same binding-confidence-interval bar that just killed the lift. Today the staged signal stays at weight zero, the flag stays off, and nothing in your rankings moves.
The touchdown-rate edge is real. It was also already in the price.
Receipts
- The harness:
scripts/validate_qb_td_rate_lift.py - The design:
docs/SPEC_h48_qb_td_rate_residual_2026-06-18.md - The verdict path:
scripts/eval_lib.py(cluster bootstrap by player, binding confidence interval) - The original take: Yeah, his touchdown rate regresses. No, you shouldn't fade the QB.