New to these reports? Start here
- Dotted-underlined words have a plain-English definition — hover or tap them. Every term is also on the glossary page.
- "Null" means we found nothing, not that something broke. Most reports here are negative results, on purpose — knowing an idea doesn't work is the point.
- Two questions get asked separately. First, is the effect real? Second, is it already priced into the betting odds? An effect can be completely real and still useless to bet on.
- A "calibration" row is a self-check. It runs the same method on something already known to be true. If that fails, the whole report is unreliable — so it's reported alongside the findings.
- If a confidence interval includes zero, the real effect might be nothing at all, so no claim gets made.
Depth-chart multiplier damp — re-measured after the input fix (2026-09-12)
Verdict: keep 0.4. Mean error is flat across the damp; what moves is biasbiasWhether the misses lean consistently one way. A projection can have a good average error size but still be biased if it is almost always too high. Bias is often the more fixable problem..
The projection engine scales a player's volume stats by
1 + damp × (rank_multiplier − 1), with rank 2 → 0.75 and rank 3+ → 0.5.
The 0.4 was chosen while the engine was silently reading the 2024 depth
chart for every 2025+ game (see the 2026-09-11 schema-break fix). Once the
input was correct, the damp was worth re-checking.
Method
- Dev season 2024, weeks 5–18,
evaluate_fantasy_mae.py --variant current. 2024 is the split reserved for tuning, and its depth charts were never broken. 2025 is already spent as a holdoutholdoutData deliberately set aside and never looked at while developing an idea, then used once at the end as a fair test. Peeking at it first would defeat the purpose.. - Only
depth_chart_dampvaries. Every other config key was verified identical, and the default run's config hash (faa3c6a50689) matches the pre-change engine. - The damp is read with
config.get('depth_chart_damp', 0.4)and deliberately kept out ofDEFAULT_ENGINE_CONFIG, so shipping the knob does not re-stamp graded rows as a new engine.
Result (MAE, bias in brackets)
| stat | 0.0 | 0.2 | 0.4 | 0.7 |
|---|---|---|---|---|
| rushing_attempts | 3.413 [−0.12] | 3.402 [−0.25] | 3.403 [−0.39] | 3.423 [−0.60] |
| receptions | 1.490 [−0.13] | 1.486 [−0.17] | 1.485 [−0.21] | 1.487 [−0.26] |
| targets | 1.891 [−0.17] | 1.886 [−0.23] | 1.884 [−0.28] | 1.888 [−0.36] |
| receiving_yards | 19.504 | 19.504 | 19.504 | 19.505 |
Passing and TD stats are identical at every damp.
- MAEmean absolute errorAverage size of the miss, ignoring direction. If a projection is off by 3 one week and -5 the next, the MAE is 4. Lower is better. is flat. The spread is at most 0.02 on any stat; 0.2–0.4 is the basin, and 0.0 and 0.7 are marginally worse. The harness reports aggregates only, so there are no intervals, and differences this size are not evidence either way.
- Bias is mechanical. More damp means more downward shading of volume: rushing attempts −0.12 → −0.60 from 0.0 to 0.7.
Decision
0.4 stays: it has the lowest or tied MAE on the volume stats, and nothing here justifies a change. 0.2 is the defensible alternative. It halves the volume bias at the same MAE, and would be the choice if systematically under-projecting backups' volume matters more than the last thousandth of MAE. It is not adopted on dev evidence alone; the first clean read is 2026 forward.