Line card: what goes into our line (v1.4)

One row per factor group of the line we use: how much it factors into a team's points, the margin and the total; how we know; how confident we are. The starting point and this season's scoring-level update come first (together, the season-adjusted base). Click a group for its columns and what was tried and left out. Every item that moves a number has its own row; the shadow line (v2.3) appears only as small grey figures where it differs, and its own groups as grey rows.
10.163 / 10.830v1.4 margin / total miss, 2013-2022 (2,591 games) shadow v2.3 10.166 / 10.772
9.997 / 10.624the closing line, same games
240 + 90 + 50factors screened (run 1) + Tests rows + Ruled Out rows
27model input columns in v1.4 (each blend once; plus the starting point and update) shadow 43
Closed exam 2023-2025 (look 3, Nov 2): v1.3 margin 10.080, total 10.300 vs the close 9.744 / 10.121 (816 games) (v1.4 = v1.3 without matchups was adopted afterwards on the open window by run 22; the exam is closed, so v1.4 itself was not examined) shadow v2.3 10.108 / 10.403.
Learning window: each season 2013-2022 predicted by a fit on 2010 through the season before (walk-forward); the live line refits on 2010-2025. Rebuilt 2026-11-02 11:01.
5th-95th percentile of the contribution, one scale ±3 points (> / < beyond); red tick = its average; number = its SD (a steady effect, like home field on the margin, shows as a narrow bar away from 0) the same for the total (no side)Share = the group's part of the line's spread of predictions (covariance share; the shares add to 100%)A B C W confidence by the rule in the footnotegrey = the shadow line (v2.3), shown only where it differs
Factor group (click for its columns)GradeTeam pointsShareMargin (home - away)ShareTotalRemoving it costs (2013-22 / 2019-22 on 2018+; plus = it helps)AdoptedSeasons improvedv2.3 (shadow), where it differsRead more
starting point (level 22.67 a team)C
0.13
-0%
0
0.25
— / —Run 1 (baseline)—
starting point (v1.4): the league's average points per team over the training seasons: every team starts here. How we know: no test possible: the line's intercept. Grade C: kept as structure; no test possible. Review: [project record]. Agenda: A1 (season scoring baseline).
ColumnWhat it isPoints per SD (2022 step) [95%]Team pointsMargin SDTotal SDAdoption test: change in margin / total miss when added (minus = better), seasons improved, beyond-line rTested inRead more
(starting point)
Starting point
the training seasons' average points per team—
0.13
0 (equal for both)0.25—Run 1

Tested and removed

  • Season scoring baseline (last season or last 3 seasons blended in) (Run 3): no gain; coefficient came out negative (10.847 vs 10.846 totals)
  • League scoring level / recent-bias tracker as a feature or offset (Run 7): no pooled gain (points MAE 7.508-7.526 vs 7.512)
scoring-level updateB
0.67
4%
0
1.35
+0.013 / +0.061Run 15 -> Line v1.3—
scoring-level update (v1.4): this season's scoring so far: the totals shift by the season's mean miss, shrunk n/(n+64). How we know: Run 15 adoption (total): v1.3 10.840 vs v1.2 10.853 (2013-22), 10.935 vs 10.996 (2019-22 trained 2018+). Grade B: costs in both variants; no coefficient (a fixed rule). Review: [project record]. Agenda: D8 (rule changes and scoring level).
ColumnWhat it isPoints per SD (2022 step) [95%]Team pointsMargin SDTotal SDAdoption test: change in margin / total miss when added (minus = better), seasons improved, beyond-line rTested inRead more
(scoring-level update)
Scoring-level update
the season's mean team-points miss to date x n/(n+64), the same for both teams—
0.67
0 (equal for both)1.35—Run 15

Tested and removed

  • Start-of-season shift (k = 1) (Run 15): not chosen
  • Recent-bias tracker as an offset (last 3 weeks) (Run 7): pooled accuracy unchanged
quarterbackA
1.46
26%
<>
2.05
30%
<>
2.06
+0.087 / +0.158Run 2 (Line v1); backup/return flags Run 119 of 10
quarterback (v1.4): the starter's career quality, and whether he is a backup or returning. How we know: run 14 leave-one-out (margin): without it 10.257 vs 10.170 (2013-22), 10.261 vs 10.103 (2019-22 trained 2018+). Grade A: costs accuracy to remove in both variants; key interval clear of zero (key column qb_epa_career, 95% interval +0.96 to +1.65 points per SD). Review: [project record]. Agenda: A17 (QB status) and A13 (backup-relative value).
ColumnWhat it isPoints per SD (2022 step) [95%]Team pointsMargin SDTotal SDAdoption test: change in margin / total miss when added (minus = better), seasons improved, beyond-line rTested inRead more
qb_epa_career
Starting quarterback's career quality
unit: EPA per dropback, shrunk+1.30 [+0.96, +1.65]
1.09
1.541.53-0.124 / -0.079 / 9 / +0.045Run 1 register; Run 2 (Line v1)
qb_backup
Backup quarterback starting
1 when the starter is not the established starter and has fewer career dropbacks (Run 11 addendum)-0.78 [-1.04, -0.52]
0.72
1.021.02-0.011 / -0.003 / 7 / -0.046Run 11
qb_return
Established starter returning
1 when the established starter is back after someone else started the previous game-0.08 [-0.33, +0.16]
0.14
0.200.20+0.008 / +0.004 / 6 / -0.005Run 11
qb_rookie
Rookie starting quarterback
unit: 1 = yes+0.01 [-0.25, +0.27]
0.11
0.150.16-0.014 / -0.009 / 9 / -0.024Run 1 register; Run 2 (Line v1)

Tested and removed

  • Quarterback change flag (Run 11 (Q1)): replaced by the backup and return flags (-0.006 / -0.039 margin)
  • Backup-relative QB value with a draft-round prior (Run 11): worse than v1 (+0.04); career EPA already carries it
  • Rookie passers shrunk to the draft-round mean (Run 15): margin worse in both variants
  • QB by coverage family; QB indoor/outdoor; QB-defense pairings (Runs 13 and 16): nothing (no persistence, no line gain)
offense (own)A
1.43
26%
<>
1.98
29%
<>
2.05
+0.076 / +0.109Run 1 (baseline); recent-form terms Run 2 (Line v1)7 of 10SD 1.25, share 21%, grade A
offense (own) (v1.4): how well the team's own offense plays per snap (EPA per play and success rate), this season and recently. How we know: run 14 leave-one-out (margin): without it 10.246 vs 10.170 (2013-22), 10.212 vs 10.103 (2019-22 trained 2018+); run 14 removed the whole old "efficiency" group (own offense and defense faced together); the blend columns count once here, so this covers the prior-season part too. Grade A: costs accuracy to remove in both variants; key interval clear of zero (key column off_epa_play_blend:current part, 95% interval +0.42 to +1.19 points per SD). Review: [project record]. Agenda: A14 (sharps' input practices).
ColumnWhat it isPoints per SD (2022 step) [95%]Team pointsMargin SDTotal SDAdoption test: change in margin / total miss when added (minus = better), seasons improved, beyond-line rTested inRead more
off_epa_play_blend:current part
Own offense efficiency, this season
EPA per play, opponent-adjusted, this season's part of the blend+0.81 [+0.42, +1.19] (one input, split by the blend weight)
0.67
0.930.96—Run 1 baseline
off_epa_play_exp8
Own offense efficiency, last 8 games weighted
unit: EPA per play+0.31 [-0.14, +0.77]
0.66
0.920.95+0.007 / -0.013 / 5 / -0.007Run 1 register; Run 2 (Line v1)
off_success_rate_exp4
Own success rate, last 4 weighted
unit: share of plays+0.46 [+0.05, +0.87]
0.34
0.470.50-0.027 / +0.002 / 7 / +0.001Run 1 register; Run 2 (Line v1)

Tested and removed

  • Luck-filtered EPA (garbage time out / fumbles out / turnovers out) (Run 13): all three worse than v1 (10.198-10.204 vs 10.170)
  • Offense-over-defense weighting; single-EMA inputs (Run 13): nothing beats v1 (10.177 vs 10.170)
  • Pass and rush split of the efficiency inputs (Run 8): gain within noise (10.162-10.174 vs 10.176)
  • Last 4 games only as the team measure (Run 1): worst recency window (10.566 vs 10.428)
  • Volume stats (yards per game, pass and rush yards) (Run 1): nothing beyond efficiency
  • Rushing efficiency (rush EPA, yards per carry) (Run 1): weak, 4 of 10 seasons
  • Turnovers, raw and regressed (Run 1): mostly luck
  • Third-down, red-zone, explosive-play, sack and penalty rates (Run 1): inside EPA already
  • Early-season shrinkage (k 2-12) and prior-season-as-target shrinkage (Run 7): gains within noise (best 10.155 vs 10.176)
  • Elo rating as the line, or blended with ours (Run 7): worse by 0.1; the blend adds nothing
home fieldA
1.20
10%
0.37
1%
0.29
+0.093 / +0.037Run 1 (baseline)—SD 1.01, share 8%, grade A
home field (v1.4): playing at home (and the neutral-site flag). How we know: run 14 leave-one-out (margin): without it 10.263 vs 10.170 (2013-22), 10.140 vs 10.103 (2019-22 trained 2018+). Grade A: costs accuracy to remove in both variants; key interval clear of zero (key column is_home, 95% interval +0.76 to +1.24 points per SD). Review: [project record]. Agenda: A7 (home field).
ColumnWhat it isPoints per SD (2022 step) [95%]Team pointsMargin SDTotal SDAdoption test: change in margin / total miss when added (minus = better), seasons improved, beyond-line rTested inRead more
is_home
Home field
unit: 1 = home+1.00 [+0.76, +1.24]
1.20
0.370.29—Run 1 baseline
is_neutral
Neutral site
unit: 1 = neutral+0.09 [-0.16, +0.33]
0.24
0 (equal for both)0.47—Run 1 baseline

Tested and removed

  • League home-field trend as a feature or interaction; 2020 no-crowd flag (Run 8): no gain (10.175-10.179 vs 10.176)
  • Team-specific slopes on home field (Run 14): overfits at every penalty
defense faced (opponent's)A
1.06
9%
1.48
12%
1.51
+0.076 / +0.109Run 1 (baseline); recent-form terms Run 2 (Line v1)7 of 10SD 0.92, share 7%, grade A
defense faced (opponent's) (v1.4): how well the opponent's defense plays per snap (EPA and success rate it allows), this season and recently. How we know: run 14 leave-one-out (margin): without it 10.246 vs 10.170 (2013-22), 10.212 vs 10.103 (2019-22 trained 2018+); run 14 removed the whole old "efficiency" group (own offense and defense faced together); the blend columns count once here, so this covers the prior-season part too. Grade A: costs accuracy to remove in both variants; key interval clear of zero (key column opp_def_epa_play_exp8, 95% interval +0.25 to +1.05 points per SD). Review: [project record]. Agenda: A14 (sharps' input practices).
ColumnWhat it isPoints per SD (2022 step) [95%]Team pointsMargin SDTotal SDAdoption test: change in margin / total miss when added (minus = better), seasons improved, beyond-line rTested inRead more
opp_def_epa_play_exp8
Opponent's defense efficiency, last 8 games weighted
unit: EPA allowed per play+0.65 [+0.25, +1.05]
0.75
1.041.06+0.007 / -0.013 / 5 / -0.007Run 1 register; Run 2 (Line v1)
opp_def_epa_play_blend:current part
Opponent's defense efficiency, this season
EPA allowed per play, adjusted, this season's part+1.03 [+0.73, +1.33] (one input, split by the blend weight)
0.68
0.930.99—Run 1 baseline
opp_def_success_rate_exp4
Opponent's defense success rate allowed, last 4
unit: share of plays-0.38 [-0.75, -0.02]
0.43
0.590.63-0.027 / +0.002 / 7 / +0.001Run 1 register; Run 2 (Line v1)

Tested and removed

  • Offense-over-defense weighting (defense weighted less) (Run 13): nothing beats v1 (10.177 vs 10.170)
prior-season carryoverB
0.94
10%
1.35
12%
1.32
+0.132 / —Run 1 (carryover chosen); w0 = 1.0, G = 12 in Run 29 of 10SD 0.84, share 9%, grade B
prior-season carryover (v1.4): last season's efficiency, blended in early and faded out by game 12. How we know: Run 1: the baseline without carryover 10.527 vs 10.395 with it (margin, 2013-22; the 2018+ variant was not run); run 14 counts the blends inside efficiency. Grade B: costs at least 0.02 in one variant (the other not run) (key column off_epa_play_blend:prior-season part, 95% interval +0.42 to +1.19 points per SD). Review: [project record]. Agenda: A16 (drop what no one uses).
ColumnWhat it isPoints per SD (2022 step) [95%]Team pointsMargin SDTotal SDAdoption test: change in margin / total miss when added (minus = better), seasons improved, beyond-line rTested inRead more
off_epa_play_blend:prior-season part
Own offense efficiency, last season's part
last season's EPA per play, weight 1 at game 0 fading to 0 by game 12+0.81 [+0.42, +1.19] (one input, split by the blend weight)
0.69
0.950.99-0.035 / -0.037 / 9 / +0.007Run 1; Run 2
opp_def_epa_play_blend:prior-season part
Opponent's defense, last season's part
the opponent's last-season EPA allowed, same fade+1.03 [+0.73, +1.33] (one input, split by the blend weight)
0.65
0.920.93-0.035 / -0.037 / 9 / +0.007Run 1; Run 2

Tested and removed

  • The three prior-year rate columns (success rates, TD-drive rate) (Run 14 (R14.6a) -> Line v1.2): cost nothing on 2013-22; 2019-22 trained 2018+ improves
  • Carryover scaled down under a new coordinator (Run 15): worse at every level (10.170-10.190 vs 10.167)
  • No carryover at all (Run 1): clearly worst (10.527 vs 10.395)
weatherA
0.72
4%
0
1.44
+0.087 / +0.157Run 2 (Line v1)6 of 10
weather (v1.4): wind speed (0 indoors), indoor game, rain or snow. How we know: run 14 leave-one-out (total): without it 10.952 vs 10.865 (2013-22), 11.379 vs 11.222 (2019-22 trained 2018+). Grade A: costs accuracy to remove in both variants; key interval clear of zero (key column wind_mph_0indoor, 95% interval -0.99 to -0.38 points per SD). Review: [project record]. Agenda: A15 (piecewise wind), D6 (forecast).
ColumnWhat it isPoints per SD (2022 step) [95%]Team pointsMargin SDTotal SDAdoption test: change in margin / total miss when added (minus = better), seasons improved, beyond-line rTested inRead more
wind_mph_0indoor
Wind (0 indoors)
unit: mph-0.69 [-0.99, -0.38]
0.59
0 (equal for both)1.17+0.000 / -0.062 / 6 / +0.005Run 1 register; Run 2 (Line v1)
indoor
Indoor game
unit: 1 = yes+0.12 [-0.19, +0.42]
0.19
0 (equal for both)0.38+0.000 / -0.035 / 4 / -0.015Run 1 register; Run 2 (Line v1)
precip
Rain or snow recorded
unit: 1 = yes-0.18 [-0.42, +0.06]
0.14
0 (equal for both)0.29+0.000 / -0.006 / 6 / +0.005Run 1 register; Run 2 (Line v1)

Tested and removed

  • Piecewise wind (excess over 10 mph) (Run 13): no gain (10.169 vs 10.170); linear stays
  • Temperature on its own; cold flag (Run 1): nothing once wind is in
  • Wind x pass-heavy offense, x pass or rush efficiency (Run 2): no effect
  • Dome team outdoors in bad weather (Run 2): no effect
standingsA
0.56
5%
0.73
6%
0.86
+0.016 / +0.022Run 2 (Line v1)8 of 10
standings (v1.4): games back in the division, division leader, clinched and eliminated. How we know: run 14 leave-one-out (margin): without it 10.186 vs 10.170 (2013-22), 10.125 vs 10.103 (2019-22 trained 2018+). Grade A: costs accuracy to remove in both variants; key interval clear of zero (key column games_back, 95% interval -1.00 to -0.22 points per SD). Review: [project record]. Agenda: A16 (standings detail kept).
ColumnWhat it isPoints per SD (2022 step) [95%]Team pointsMargin SDTotal SDAdoption test: change in margin / total miss when added (minus = better), seasons improved, beyond-line rTested inRead more
games_back
Games back in the division
unit: games-0.61 [-1.00, -0.22]
0.55
0.670.87-0.077 / -0.066 / 8 / -0.027Run 1 register; Run 2 (Line v1)
div_leader
Division leader
unit: 1 = yes-0.21 [-0.56, +0.13]
0.40
0.530.60-0.025 / -0.026 / 8 / +0.018Run 1 register; Run 2 (Line v1)
pp_eliminated
Eliminated from playoffs (wins only)
unit: 1 = yes+0.11 [-0.18, +0.40]
0.24
0.270.39—Run 2
pp_clinched
Clinched a playoff spot (wins only)
unit: 1 = yes+0.04 [-0.20, +0.29]
0.17
0.230.26—Run 2

Tested and removed

  • Playoff position flags on their own (Run 1): nothing beyond games back
  • Standings held at 0 for the first games (Run 10 (A6d)): same miss; kept only inside the v2 early-season holds
divisionC
0.49
2%
0
0.98
+0.015 / -0.003Run 2 (Line v1)9 of 10
division (v1.4): the two teams play in the same division. How we know: run 14 leave-one-out (total): without it 10.880 vs 10.865 (2013-22), 11.219 vs 11.222 (2019-22 trained 2018+). Grade C: small or mixed: removing it gains in one variant (key column div_game, 95% interval -0.62 to -0.13 points per SD). Review: [project record]. Agenda: Run 1 register.
ColumnWhat it isPoints per SD (2022 step) [95%]Team pointsMargin SDTotal SDAdoption test: change in margin / total miss when added (minus = better), seasons improved, beyond-line rTested inRead more
div_game
Division game
unit: 1 = yes-0.37 [-0.62, -0.13]
0.49
0 (equal for both)0.98-0.001 / -0.009 / 9 / -0.024Run 1 register; Run 2 (Line v1)

Tested and removed

  • Division game x late season; clinched x week 17+ (Run 2): no effect
special teams faced (opponent's)A
0.43
1%
0.60
5%
0.60
+0.034 / +0.076Run 2 (Line v1)9 of 10SD 0.41, share 1%, grade B
special teams faced (opponent's) (v1.4): the opponent's special-teams EPA and the drive start its defense allows, last 8 games. How we know: run 14 leave-one-out (margin): without it 10.204 vs 10.170 (2013-22), 10.179 vs 10.103 (2019-22 trained 2018+); run 14 removed the whole old "special teams" group (own and faced together). Grade A: costs accuracy to remove in both variants; key interval clear of zero (key column opp_def_start_field_pos_exp8, 95% interval +0.06 to +0.58 points per SD). Review: [project record]. Agenda: Run 1 register.
ColumnWhat it isPoints per SD (2022 step) [95%]Team pointsMargin SDTotal SDAdoption test: change in margin / total miss when added (minus = better), seasons improved, beyond-line rTested inRead more
opp_def_start_field_pos_exp8
Opponent's defense: drive start allowed, last 8
unit: yards from own goal+0.32 [+0.06, +0.58]
0.37
0.520.53-0.028 / +0.001 / 7 / +0.041Run 1 register; Run 2 (Line v1)
opp_st_epa_exp8
Opponent's special teams, last 8 games
unit: EPA per game-0.14 [-0.40, +0.12]
0.12
0.170.16-0.032 / +0.001 / 9 / +0.063Run 1 register; Run 2 (Line v1)

Tested and removed

nothing tested and removed in this group
special teams (own)A
0.42
2%
0.60
4%
0.58
+0.034 / +0.076Run 2 (Line v1)9 of 10
special teams (own) (v1.4): the team's own special-teams EPA and average drive start, last 8 games. How we know: run 14 leave-one-out (margin): without it 10.204 vs 10.170 (2013-22), 10.179 vs 10.103 (2019-22 trained 2018+); run 14 removed the whole old "special teams" group (own and faced together). Grade A: costs accuracy to remove in both variants; key interval clear of zero (key column off_st_epa_exp8, 95% interval +0.12 to +0.64 points per SD). Review: [project record]. Agenda: Run 1 register.
ColumnWhat it isPoints per SD (2022 step) [95%]Team pointsMargin SDTotal SDAdoption test: change in margin / total miss when added (minus = better), seasons improved, beyond-line rTested inRead more
off_st_epa_exp8
Own special teams, last 8 games
unit: EPA per game+0.38 [+0.12, +0.64]
0.30
0.430.42-0.032 / +0.001 / 9 / +0.063Run 1 register; Run 2 (Line v1)
off_start_field_pos_exp8
Own average drive start, last 8
unit: yards from own goal+0.30 [+0.03, +0.57]
0.21
0.300.30-0.028 / +0.001 / 7 / +0.041Run 1 register; Run 2 (Line v1)

Tested and removed

nothing tested and removed in this group
injuriesC
0.36
1%
0.47
1%
0.54
+0.006 / -0.001Run 2 (Line v1)8 of 10
injuries (v1.4): share of the team's offensive starters out, and of the opponent's defensive starters. How we know: run 14 leave-one-out (margin): without it 10.176 vs 10.170 (2013-22), 10.102 vs 10.103 (2019-22 trained 2018+). Grade C: small or mixed: removing it gains in one variant (key column opp_inj_out_snapshare_def, 95% interval +0.11 to +0.59 points per SD). Review: [project record]. Agenda: D1 (practice status), A21 (value-weighted injuries).
ColumnWhat it isPoints per SD (2022 step) [95%]Team pointsMargin SDTotal SDAdoption test: change in margin / total miss when added (minus = better), seasons improved, beyond-line rTested inRead more
opp_inj_out_snapshare_def
Opponent's defensive starters out (snap share)
unit: starter-shares+0.35 [+0.11, +0.59]
0.30
0.410.43-0.013 / -0.005 / 8 / -0.005Run 1 register; Run 2 (Line v1)
inj_out_snapshare_off
Own offensive starters out (snap share)
unit: starter-shares-0.10 [-0.34, +0.15]
0.15
0.200.21-0.013 / -0.005 / 8 / -0.005Run 1 register; Run 2 (Line v1)
inj_out_snapshare_missing
Injury snap data missing flag (pre-2013)
unit: 1 = missing+0.02 [-0.22, +0.26]
0.14
0 (equal for both)0.27—Run 2

Tested and removed

  • Practice participation for Questionable players (Run 3): no gain (10.186 vs 10.176)
  • Game-day inactives in place of the injury report (ceiling) (Run 3): nothing beyond the injury report
  • Value-weighted injuries (Run 13): inconsistent (-0.022 full, +0.064 worse on 2018+)
  • Top receiver out; top running back out (Run 1): no effect / small
  • Offensive-line changes (depth chart) (Run 1): no effect
pace (v2.3 only)W
0.81
5%
0.90
4%
1.34
-0.019 / -0.041Run 3 (A2), candidate4 of 10moves only the shadow line
pace (v2.3): plays per game and seconds per play in neutral situations, own and faced; no-huddle rate. How we know: Run 10 adding it to v1 (margin): +0.019 (2013-2022 all training), +0.041 (2019-22 trained 2018+); totals -0.107 / -0.146. Grade W: candidate in v2.3 only, awaiting live (key column opp_def_plays_allowed_exp8, 95% interval +0.44 to +0.95 points per SD). Review: [project record]. Agenda: A2 (pace), A12 (v2 set).
ColumnWhat it isPoints per SD (2022 step) [95%]Team pointsMargin SDTotal SDAdoption test: change in margin / total miss when added (minus = better), seasons improved, beyond-line rTested inRead more
opp_def_plays_allowed_exp8
Plays the opponent's defense allows
plays allowed per game, last 8 weighted+0.70 [+0.44, +0.95]
0.57
0.810.80+0.002 / -0.072 / 4 / +0.030Run 3
off_no_huddle_rate_exp8
Own no-huddle rate
share of plays run without a huddle, last 8 weighted+0.09 [-0.18, +0.36]
0.41
0.570.60+0.025 / -0.015 / 2 / -0.003Run 3
off_neutral_sec_per_play_exp8
Own seconds per play (neutral)
seconds between plays when the score is close, last 8 weighted-0.36 [-0.64, -0.08]
0.31
0.430.46+0.004 / -0.046 / 6 / +0.012Run 3
off_plays_exp8
Own plays per game
offensive plays per game, last 8 games weighted-0.08 [-0.35, +0.19]
0.28
0.390.41+0.010 / +0.008 / 6 / -0.002Run 3
opp_def_neutral_sec_per_play_exp8
Opponent's seconds per play faced
seconds per play the opponent's defense faces in neutral situations+0.04 [-0.21, +0.29]
0.07
0.090.10+0.010 / -0.010 / 2 / +0.018Run 3

Tested and removed

  • No-huddle rate; own plays per game, on their own (Run 3): not kept on their own (the value is plays allowed and seconds per play)
team home field (vs the league home field) (v2.3 only)W
0.42
3%
0.84
7%
0.00
+0.000 / -0.018Run 8 (A7b), candidate—moves only the shadow line
team home field (vs the league home field) (v2.3): the stadium's own home edge from past games, shrunk toward the league's. How we know: Run 10 adding it to v1 (margin): -0.000 (2013-2022 all training), +0.018 (2019-22 trained 2018+); totals -0.012 / +0.015. Grade W: candidate in v2.3 only, awaiting live (key column team_home_field, 95% interval +0.07 to +0.57 points per SD). Review: [project record]. Agenda: A7b (team home field), A12.
ColumnWhat it isPoints per SD (2022 step) [95%]Team pointsMargin SDTotal SDAdoption test: change in margin / total miss when added (minus = better), seasons improved, beyond-line rTested inRead more
team_home_field
Team home field
the stadium's own past home edge over the league's, shrunk with k = 24 (home row +, away row -)+0.32 [+0.07, +0.57]
0.42
0.840.00-0.000 / -0.012 / — / —Run 8

Tested and removed

  • Team and coach past-residual intercepts (Run 14): team nothing (+0.004); coach -0.009, not adopted
surface mismatch (v2.3 only)W
0.35
2%
0.44
1%
0.39
+0.011 / +0.000Run 13 (A21), candidate9 of 10moves only the shadow line
surface mismatch (v2.3): the visitor's home surface differs from the venue's. How we know: Run 13 adding it to v1 (margin): -0.011 (2013-22), -0.000 (2019-22 trained 2018+). Grade W: candidate in v2.3 only, awaiting live (key column surface_mismatch, 95% interval -0.67 to +0.01 points per SD). Review: [project record]. Agenda: A21 (surface, value-weighted injuries).
ColumnWhat it isPoints per SD (2022 step) [95%]Team pointsMargin SDTotal SDAdoption test: change in margin / total miss when added (minus = better), seasons improved, beyond-line rTested inRead more
surface_mismatch
Surface mismatch
1 on the visitor's row when its home surface differs from the venue's-0.33 [-0.67, +0.01]
0.30
0.440.07-0.011 / +0.008 / 9 / -0.041Run 13
surface_mismatch_missing
Surface data missing
flag: stadium surface unknown-0.12 [-0.36, +0.12]
0.19
0 (equal for both)0.38—Run 13

Tested and removed

  • Grass vs turf, surface change (generic) (Run 1): no effect beyond the line
  • Pacific team at 1 p.m. ET; Eastern team late (Run 13): nothing
matchups (v2.3 only)C
0.34
2%
0.48
3%
0.47
-0.010 / -0.013Run 2 (Line v1)—moves only the shadow line
matchups (v2.3): own pass and rush offense against the opponent's pass and rush defense. How we know: run 14 leave-one-out (margin): without it 10.160 vs 10.170 (2013-22), 10.090 vs 10.103 (2019-22 trained 2018+). Grade C: small or mixed: removing it gains in one variant (key column match_rush, 95% interval -0.16 to +0.42 points per SD). Review: [project record]. Agenda: D3 (coverage matchups), A18-A20 (QB matchups).
ColumnWhat it isPoints per SD (2022 step) [95%]Team pointsMargin SDTotal SDAdoption test: change in margin / total miss when added (minus = better), seasons improved, beyond-line rTested inRead more
match_rush
Rush matchup
unit: EPA+0.13 [-0.16, +0.42]
0.26
0.350.37—Run 2
match_pass
Pass matchup (own pass offense + opp pass defense allowed, centered)
unit: EPA-0.15 [-0.61, +0.31]
0.20
0.300.25—Run 2

Tested and removed

  • Man/zone and box-count matchup interactions (Run 9): no gain (0 to +0.07)
  • Opponent two-high rate (Run 9): no gain
  • QB x coverage, QB x venue, pairings, tree challenger (Runs 13 and 16): all nothing
  • General screen of 306 factor pairs (Run 2): 1 flag of 306, 1.7 expected by chance
offensive-line experience (v2.3 only)W
0.27
1%
0.37
1%
0.39
+0.006 / +0.018Run 9 (G3), candidate3 of 10moves only the shadow line
offensive-line experience (v2.3): mean years of experience of the five depth-chart line starters. How we know: Run 10 adding it to v1 (margin): -0.006 (2013-2022 all training), -0.018 (2019-22 trained 2018+); totals +0.008 / -0.026. Grade W: candidate in v2.3 only, awaiting live (key column ol_mean_exp, 95% interval +0.10 to +0.59 points per SD). Review: [project record]. Agenda: G3 (offensive line), A12.
ColumnWhat it isPoints per SD (2022 step) [95%]Team pointsMargin SDTotal SDAdoption test: change in margin / total miss when added (minus = better), seasons improved, beyond-line rTested inRead more
ol_mean_exp
Offensive-line experience
mean years of experience of the five depth-chart line starters+0.34 [+0.10, +0.59]
0.27
0.370.39-0.022 / -0.024 / 3 / +0.027Run 9
ol_mean_exp_missing
Line experience missing
flag: no depth-chart line data for the game+0.15 [-0.08, +0.39]
0.00
0 (equal for both)0.00—Run 9

Tested and removed

  • New line starters; pressure allowed and created (Run 9): no gain beyond line experience
receivers' YAC over expected (v2.3 only)W
0.25
1%
0.27
1%
0.42
+0.007 / +0.021Run 9 (D4), candidate4 of 10moves only the shadow line
receivers' YAC over expected (v2.3): yards after catch over expected of the top three targets, last 8 games. How we know: Run 10 adding it to v1 (margin): -0.007 (2013-2022 all training), -0.021 (2019-22 trained 2018+); totals -0.002 / +0.027. Grade W: candidate in v2.3 only, awaiting live (key column off_top3_yac_oe_exp8, 95% interval -0.07 to +0.43 points per SD). Review: [project record]. Agenda: D4 (receivers), A12.
ColumnWhat it isPoints per SD (2022 step) [95%]Team pointsMargin SDTotal SDAdoption test: change in margin / total miss when added (minus = better), seasons improved, beyond-line rTested inRead more
off_top3_yac_oe_exp8
Top-three receivers' YAC over expected
yards after catch over expected of the top three targets, last 8 weighted+0.18 [-0.07, +0.43]
0.20
0.270.29-0.011 / -0.003 / 4 / +0.021Run 9
off_top3_yac_oe_exp8_missing
Receiver data missing
flag: no tracking data (before 2016)-0.05 [-0.41, +0.30]
0.19
0.030.37—Run 9

Tested and removed

  • Top-three separation; weighted top-receiver-out (Run 9): add nothing
pressure (decomposed sack rate) (v2.3 only)W
0.14
0%
0.14
1%
0.25
+0.005 / +0.005Run 9 (G4), candidate—moves only the shadow line
pressure (decomposed sack rate) (v2.3): pressure allowed times the quarterback's career sacks per pressure. How we know: Run 10 adding it to v1 (margin): -0.005 (2013-2022 all training), -0.005 (2019-22 trained 2018+); totals +0.004 / +0.007. Grade W: candidate in v2.3 only, awaiting live (key column sack_rate_decomposed, 95% interval -0.31 to +0.19 points per SD). Review: [project record]. Agenda: G4 (QB share of line play), A12.
ColumnWhat it isPoints per SD (2022 step) [95%]Team pointsMargin SDTotal SDAdoption test: change in margin / total miss when added (minus = better), seasons improved, beyond-line rTested inRead more
sack_rate_decomposed
Pressure x sacks per pressure
pressure allowed times the quarterback's career sacks per pressure-0.06 [-0.31, +0.19]
0.10
0.140.14-0.005 / +0.004 / — / —Run 9; Run 10
sack_rate_decomposed_missing
Pressure data missing
flag: no pressure data (before 2018)+0.04 [-0.31, +0.40]
0.10
0 (equal for both)0.20—Run 9

Tested and removed

  • Pressure allowed / created as plain factors (Run 9): no gain (margin -0.005 to +0.025)
In testing (each term added to v1.4 alone, ledger rows "testing:<term>": its contribution to each team's points, the margin and the total, over the ledger's games that carry it)
pace
0.63
0.63
1.06
—in testing—15 games
team home field (vs the league home field)
0.32
0.64
0.10
—in testing—15 games
offensive-line experience
0.28
0.37
0.44
—in testing—15 games
receivers' YAC over expected
0.17
0.21
0.28
—in testing—15 games
pressure (decomposed sack rate)
0.15
0.23
0.15
—in testing—15 games
surface mismatch
0.17
0.34
0.06
—in testing—15 games

What moves the total but not the spread

Equal for both teams, so the margin is untouched; each still moves both teams' points and the total.
LineItemKindTotal
v1.4starting pointgroup
0.25
v1.4scoring-level updategroup
1.35
v1.4home field: is_neutralcolumn
0.47
v1.4weathergroup
1.44
v1.4divisiongroup
0.98
v1.4injuries: inj_out_snapshare_missingcolumn
0.27
v2.3surface mismatch: surface_mismatch_missing (v2.3 only)column
0.38
v2.3offensive-line experience: ol_mean_exp_missing (v2.3 only)column
0.00
v2.3pressure (decomposed sack rate): sack_rate_decomposed_missing (v2.3 only)column
0.20

Whole groups tested and removed

Grades. A = adopted, and removing the group costs accuracy in both training variants (at least 0.005 points each: margin for groups that move the spread, total for groups equal for both teams) with the key column's 95% interval clear of zero. B = adopted, but one of those fails: one variant under 0.005 or not run, or the interval touching zero (or no coefficient, as for a fixed rule). C = kept as structure with small or mixed evidence: the larger cost under 0.02 and the other variant gaining from removal, both costs under 0.005, or no test possible. W = watch / candidate only (v2.3 extras). Costs are run 14's leave-one-group-out on v1-Q1 (2013-2022 all training seasons; 2019-2022 trained on 2018+), or the group's own adoption test where run 14 has no row.
Numbers. Contributions: the prediction ledger's 2013-2022 walk-forward rows (v1.4, adopted Nov 2 and not backfilled, refitted here the same way) (each team-game's points from each group = coefficient x (value - training mean), blends split by their weight; the starting point is drawn as its variation around its level). Coefficients per SD and intervals: the 2022 step (trained 2010-2021) refitted and checked against the ledger. Adoption-test four numbers: the Factor Register (run 1, own and opponent together) or the run named; hover a cell for its source. [project record] holds every number, both lines. Each row is the group's marginal contribution from one joint fit of all the groups, so correlated groups (the quarterback and the team's offense; the team's own offense and the opponent's defense) share information without any point being counted twice. Nothing here is a bet.