SignalTuned SignalTuned

Rankings tuned to the signal, not the noise.

Need help?Sign in
RB2026-07-13
VerdictRecency lag isn't the bug. Something else is.

James Cook didn't have a career year. He's been having one for four years running.

Consensus on trialtested 26held 4busted 10no edge 12

Don't sell James Cook on workhorse-year regression fear. His climb, 5.9 ppg in 2022 to 12.4 to 15.7 to 16.8 last year, is a trend, not an outlier, and my own engine's spike-regression tool only earns its keep on real one-year outliers, not backs improving on schedule. On Jaxon Smith-Njigba, trust his 2025 box score (17.7 ppg) over the board's more cautious blended number. Hold both. If either price actually drops on "regression" fear, buy it.

What the consensus says

Two live threads collided this week. On Cook: Dynasty League Football's sell-high piece argues his career-high value is the window to move him before a second-contract cliff, while RotoBaller counters that a stable offense and 20.1 touches a game make him a safe hold. PlayerProfiler's 2026 buy-high/sell-low primer generalizes the mechanism across the league: "there is bound to be some regression," it says, name-checking Trey McBride's touchdown spike in the same breath. On JSN, Forbes is unambiguous after his 21.2 ppg, 119-catch season: buy, even at a first-round dynasty price. Two different players, one shared assumption: the market believes it can tell a real level-up from a fluke, and it's pricing accordingly.

The claim, in plain English

My own engine builds a "board rate" for every player from a recency-weighted average of their last several seasons, then, for running backs, runs a second pass that pulls any big year-over-year jump back toward the player's career mean. So: does the recency-weighted average itself lag a real breakout, or is something else in the pipe doing the damage?

def predicate(row):
    return row["receipt_ppg_2025"] >= row["prior_career_best_ppg"] + 3.0

That's the breakout label: is this year at least 3 points a game better than the best year on record. The control that matters here isn't a stat band, it's WHICH mechanism produces the gap between the receipt and the board. Get that wrong and you fix the wrong knob.

How I beat on it

Two passes. First, a full scan of every WR/TE 2025 season against player_stats_season.csv, isolating just the recency-weight math (no age curve, no shrinkage) against the live position_recency_weights in engine_config.json. Second, a historical replay of the running back regression trigger, 2003 through 2025, split by whether the player's run-up was a clean ascending trend or a genuine spike. Half-PPR Dynasdeez scoring throughout, 2026 stats never touched.

What the data actually said

First swing: the recency-weight math alone lags 2025 breakouts by 1.23 ppg on average, across 14 players (JSN +2.13, Trey McBride +2.03, Puka Nacua +1.48, down to Rashee Rice at +0.14). That's real and it's always positive, a board built from multiple seasons will always trail a monster single year by construction. But it's under the 1.5 ppg bar I use everywhere else to call an effect actionable. Because a small aggregate number can still hide the real story, I went looking for the mechanism doing the actual damage in the named cases. For JSN: a fix built for exactly his shape of player already exists in the config (wr_sophomore_upside), and it already failed its own test, making projections worse across 110 historical ascending-WR seasons because Chase and Jefferson hit while Aiyuk, Sammy Watkins, and DK Metcalf didn't. For Cook: the recency math alone only lags him by 0.89 ppg, but the running back regression layer pulls an extra 2.3 points off on top of that, because his 2025 jump trips the same trigger built for a true one-year outlier like Javonte Williams. I replayed that exact trigger across 154 historical cases: on real spikes it earns its keep, cutting error by 0.84 ppg with a clean confidence interval. On the 11 cases that look like Cook, a clean multi-year climb, it goes the other way, adding 0.46 ppg of error, though 11 cases isn't enough to prove that's not noise.

What the engine already figured out

SignalTuned already leans hard on the most recent season, 61 to 81 percent of the total weight depending on position. The recency math isn't the bug here, it's already about as aggressive as the data supports. What's actually happening is two other layers doing their jobs imperfectly: one that correctly stays off because it can't tell Ja'Marr Chase from Sammy Watkins in advance, and one that correctly regresses true spikes but can't yet tell a Javonte Williams outlier from a James Cook trend.

What to do about it

No config change ships from this. The honest verdict is that the recency weighting isn't lagging breakouts in any way worth fixing, and the two receipt-check failures that looked like the same bug are actually two different, smaller problems. JSN's under-rating is real but the fix for his whole class of player makes the board worse on net, so trust his tape over the board rate. Cook's board number is getting pulled down by a tool built for outliers, applied to a player who isn't one, and that's worth a dedicated follow-up before I touch the regression trigger. Until then: hold Cook through the "sell high" noise, and don't wait for the algorithm to fully credit JSN before you believe your own eyes.


Back to all posts