Matchup edges · tested on 2024–25 · 64 tests
Do Matchups Beat the Projection? We Tested 21 Angles
Blitz-heavy defenses, man coverage, two-high shells, stacked boxes: these are real, stable habits of a defense. The fantasy question is different: does knowing them tell you a player will score more than a good projection already says? We tested 21 matchup angles, written down before testing, on every QB, RB, WR and TE game of 2024 and 2025. None passed. The biggest effects are a few tenths of a point per game, and none survives a correction for testing 64 ideas at once.
Track record: every call, wins and losses
Each angle makes a call when it fires: boost (he beats his projection) or fade (he falls short). A boost wins when his PPR points beat our projection mean; a fade wins when they fall below it. Within 0.5 points is a push; not playing, or playing under 25% of his usual snaps, is a void. Edge angles fire at 0.25+ expected points; weather, rest, travel and injury flags fire whenever the flag is on.
The baseline is not 50%. Projections are averages of lopsided outcomes, so most players finish below their projection: across every projected player-week in 2024–25, a “boost” on a WR would have won 36.3% of the time and a “fade” 63.7% (QB 49.6% / 50.4%). Each angle is compared with the baseline for its own mix of positions and directions. All angles together: 5181–5247–973, 49.7% vs a 49.7% baseline.
No angle is featured. None beats its baseline with a 95% interval that excludes it in both 2024 and 2025.
| Angle | Grade | 2024 backtest | 2025 backtest | 2026 live | Win rate vs baseline (2024–25) | Lift | Avg margin |
|---|---|---|---|---|---|---|---|
| Explosive plays | C | 2–1–166.7% | 17–14–154.8% | – | +7.6 pp | 1.65 | |
| Wind 15+ mph | C | 134–87–2160.6% | 206–90–2469.6% | – | +4.6 pp | 0.75 | |
| Red-zone defense | C | – | 57–47–554.8% | – | +3.9 pp | 0.46 | |
| Pressure | C | 12–14–346.2% | 38–33–353.5% | – | +1.6 pp | 0.07 | |
| Starters out on defense | C | 716–1049–20440.6% | 681–991–18540.7% | – | +1.6 pp | 0.14 | |
| Pre-snap motion | C | 84–83–950.3% | 550–530–6850.9% | – | +0.3 pp | 0.03 | |
| Dome team outdoors | C | 375–246–6860.4% | 380–236–6561.7% | – | −0.4 pp | 0.06 | |
| Short week | myth | 241–151–4161.5% | 225–151–3959.8% | – | −0.7 pp | -0.14 | |
| Play action | C | 64–72–947.1% | – | – | −1.1 pp | 0.36 | |
| Freezing | C | 111–72–2660.7% | 134–91–3059.6% | – | −1.1 pp | 0.01 | |
| Middle of the field | myth | 238–254–3648.4% | 35–31–153.0% | – | −1.7 pp | 0.08 | |
| Missed tackles | C | 461–500–6748.0% | 345–372–5048.1% | – | −2.4 pp | -0.43 | |
| Man coverage | myth | 20–30–340.0% | 28–32–746.7% | – | −5.8 pp | -0.88 | |
| Blitz-heavy defense | C | 3–350.0% | 1–2–133.3% | – | −7.8 pp | 0.90 | |
| Light boxes | myth | 12–13–248.0% | 7–24–322.6% | – | −15.2 pp | -1.81 | |
| Screens | C | 2–722.2% | – | – | −18.2 pp | -2.07 | |
| Stacked boxes | myth | 1–712.5% | 1–9–110.0% | – | −31.0 pp | -2.78 | |
| Two-high shells | C | 0–50.0% | – | – | −50.1 pp | -7.68 |
Backtest vs live. 2024 and 2025 are rolling-origin backtests: each call uses only data from before that week, including the projection as it would have been made, timestamped 90 minutes before kickoff. 2026 weeks 1–4 were computed after the fact and are labelled that way, never as live. Live calls start in Week 5 2026: they are written before kickoff with a timestamp, can never be edited afterwards (the database rejects it), and are graded once box scores land. We show every loss. Click an angle for its full call log.
Cumulative win rate by week, 2025
Explosive plays
54.8% vs 49.4% · n 31
Wind 15+ mph
69.6% vs 61.1% · n 296
Red-zone defense
54.8% vs 50.9% · n 104
Pressure
53.5% vs 50.0% · n 71
Starters out on defense
40.7% vs 39.1% · n 1672
Pre-snap motion
50.9% vs 50.8% · n 1080
Dome team outdoors
61.7% vs 61.4% · n 616
Short week
59.8% vs 61.4% · n 376
Freezing
59.6% vs 61.2% · n 225
Middle of the field
53.0% vs 44.5% · n 66
Missed tackles
48.1% vs 50.1% · n 717
Man coverage
46.7% vs 49.7% · n 60
Light boxes
22.6% vs 47.3% · n 31
Solid: cumulative win rate through each week of 2025. Dashed: the baseline for the same mix of positions and directions. Scale 20–80%, gridline at 50%. Angles with at least 30 decided calls.
vs Vegas props: the real benchmark
Beating our own projection is one test; beating the betting market is the hard one. We graded our model and every angle against closing consensus player-prop lines (median across US books, about an hour before kickoff) for 2023–2025, rolling origin: each call uses only what was known before that game. Break-even at −110 is 52.4%. Our model, when it disagreed with the market by 5+ points of probability: 10780–9975 (51.9%, ROI -2.7%). Nothing clears the featured bar. Promising (above 52.4% in every season, n ≥ 100 each): Wind 15+ mph · Pass yds, Our model · Rush yds, Dome team outdoors · Rec yds.
How often the over hits, 2023–25 graded lines: Rec yds 47.9% · Rec 46.8% · Rush yds 46.5% · Long rec 47.5% · Pass TDs 48.6% · Pass yds 50.1% · Rush att 46.0% · Pass att 45.7% · Cmp 47.7%. Prop lines are shaded toward overs, so blindly betting overs loses.
Our model vs the market
| Angle | Market | Info timing | 2023 | 2024 | 2025 | 2026 wk 1–4 | 2026 live | Win rate vs 52.4% | ROI | Verdict |
|---|---|---|---|---|---|---|---|---|---|---|
| Our model | all markets | pregame | 2707–2647 50.6% | 2926–2711 51.9% | 5147–4617 52.7% | 721–666 52.0% | – | −2.7% | failed | |
| Our model | Any TD | pregame | 58–232 20.0% | 68–303 18.3% | 104–495 17.4% | 34–181 15.8% | · | −15.9% | failed | |
| Our model | Pass att | pregame | – | – | 136–126 51.9% | – | · | −2.3% | failed | |
| Our model | Cmp | pregame | – | – | 120–141 46.0% | – | · | −13.2% | failed | |
| Our model | Pass TDs | pregame | 151–115 56.8% | 93–100 48.2% | 80–94 46.0% | 11–14 44.0% | · | −2.9% | failed | |
| Our model | Pass yds | pregame | 143–146 49.5% | 138–122 53.1% | 131–107 55.0% | 27–29 48.2% | · | −1.8% | failed | |
| Our model | Long rec | pregame | – | – | 1127–1036 52.1% | – | · | −2.4% | failed | |
| Our model | Rec yds | pregame | 965–975 49.7% | 1050–992 51.4% | 1201–1035 53.7% | 258–246 51.2% | · | −2.9% | failed | |
| Our model | Rec | pregame | 952–965 49.7% | 1064–991 51.8% | 1198–1087 52.4% | 280–256 52.2% | · | −4.2% | failed | |
| Our model | Rush att | pregame | – | – | 537–460 53.9% | – | · | +1.5% | failed | |
| Our model | Rush+rec yds | pregame | – | – | 1–1 50.0% | – | · | −8.3% | thin | |
| Our model | Rush yds | pregame | 496–446 52.6% | 581–506 53.4% | 616–530 53.8% | 145–121 54.5% | · | −0.2% | promising |
Matchup angles (pregame information only)
| Angle | Market | Info timing | 2023 | 2024 | 2025 | 2026 wk 1–4 | 2026 live | Win rate vs 52.4% | ROI | Verdict |
|---|---|---|---|---|---|---|---|---|---|---|
| Blitz-heavy defense | Rec | pregame | 6–4 60.0% | 2–0 100.0% | 0–1 0.0% | 1–1 50.0% | · | +9.9% | thin | |
| Big favourite (6.5+) | Pass att | pregame | – | – | 53–37 58.9% | – | · | +10.3% | failed | |
| Blitz-heavy defense | all markets | pregame | 8–7 53.3% | 5–1 83.3% | 0–2 0.0% | 2–4 33.3% | – | +3.0% | thin | |
| Blitz-heavy defense | Pass yds | pregame | 2–2 50.0% | 3–1 75.0% | 0–1 0.0% | 0–1 0.0% | · | +4.5% | thin | |
| Explosive plays | Long rec | pregame | – | – | 15–12 55.6% | – | · | +3.8% | thin | |
| Short week | Rec yds | pregame | 84–85 49.7% | 107–90 54.3% | 119–80 59.8% | 13–19 40.6% | · | +3.2% | failed | |
| Man coverage | Pass yds | pregame | – | 23–19 54.8% | 34–28 54.8% | 6–11 35.3% | · | +2.8% | failed | |
| Dome team outdoors | Rush yds | pregame | 61–35 63.5% | 46–51 47.4% | 58–54 51.8% | 9–7 56.3% | · | +1.7% | failed | |
| Man coverage | all markets | pregame | – | 31–26 54.4% | 35–30 53.8% | 6–11 35.3% | – | +1.6% | failed | |
| Dome team outdoors | all markets | pregame | 243–195 55.5% | 226–218 50.9% | 253–221 53.4% | 30–33 47.6% | – | +0.0% | failed | |
| Dome team outdoors | Rec yds | pregame | 147–132 52.7% | 150–136 52.4% | 163–136 54.5% | 17–21 44.7% | · | +0.1% | promising | |
| Explosive plays | Rush yds | pregame | 21–22 48.8% | – | 4–0 100.0% | 0–2 0.0% | · | −0.7% | failed | |
| Low total (40.5 or less) | Pass att | pregame | – | – | 42–37 53.2% | – | · | −0.5% | failed | |
| Short week | all markets | pregame | 125–140 47.2% | 168–142 54.2% | 175–133 56.8% | 21–30 41.2% | – | −0.3% | failed | |
| Play action | Rec yds | pregame | 17–18 48.6% | 44–37 54.3% | – | – | · | −1.7% | failed | |
| Big underdog (6.5+) | Rush att | pregame | – | – | 74–67 52.5% | – | · | −0.8% | failed | |
| Short week | Rush yds | pregame | 30–32 48.4% | 39–36 52.0% | 40–32 55.6% | 7–6 53.8% | · | −1.6% | failed | |
| Dome team outdoors | Pass yds | pregame | 35–28 55.6% | 30–31 49.2% | 32–31 50.8% | 4–5 44.4% | · | −3.0% | failed | |
| Explosive plays | all markets | pregame | 163–153 51.6% | 3–1 75.0% | 30–28 51.7% | 7–5 58.3% | – | −2.9% | failed | |
| Missed tackles | Rec yds | pregame | 78–62 55.7% | 158–155 50.5% | 98–95 50.8% | 12–14 46.2% | · | −2.9% | failed | |
| Starters out on defense | Pass yds | pregame | 56–66 45.9% | 58–45 56.3% | 56–48 53.8% | 4–4 50.0% | · | −3.1% | failed | |
| Explosive plays | Rec yds | pregame | 142–131 52.0% | 3–1 75.0% | 11–16 40.7% | 7–3 70.0% | · | −3.9% | failed | |
| High total (48.5+) | Pass yds | pregame | 24–30 44.4% | 40–50 44.4% | 72–52 58.1% | 16–12 57.1% | · | −5.0% | failed | |
| High total (48.5+) | all markets | pregame | 24–30 44.4% | 40–50 44.4% | 133–115 53.6% | 16–12 57.1% | – | −5.8% | failed | |
| Pressure | Pass yds | pregame | 51–56 47.7% | 16–15 51.6% | 40–35 53.3% | 8–4 66.7% | · | −5.9% | failed | |
| Starters out on defense | Rush yds | pregame | 63–58 52.1% | 70–75 48.3% | 86–84 50.6% | 8–4 66.7% | · | −6.1% | failed | |
| Pre-snap motion | Rec yds | pregame | 172–215 44.4% | 52–53 49.5% | 378–331 53.3% | 28–26 51.8% | · | −5.9% | failed | |
| Low total (40.5 or less) | all markets | pregame | 78–75 51.0% | 40–48 45.5% | 82–77 51.6% | 9–13 40.9% | – | −6.4% | failed | |
| Man coverage | Rec yds | pregame | – | 8–7 53.3% | 1–2 33.3% | – | · | −5.8% | thin | |
| Stacked boxes | Rush att | pregame | – | – | 5–5 50.0% | – | · | −5.9% | thin | |
| Middle of the field | Rec yds | pregame | 81–68 54.4% | 232–261 47.1% | 40–25 61.5% | 34–17 66.7% | – | −6.5% | failed | |
| Starters out on defense | all markets | pregame | 293–299 49.5% | 289–297 49.3% | 337–326 50.8% | 23–23 50.0% | – | −6.5% | failed | |
| Pressure | all markets | pregame | 51–56 47.7% | 16–15 51.6% | 76–74 50.7% | 8–4 66.7% | – | −7.1% | failed | |
| Starters out on defense | Rec yds | pregame | 174–175 49.9% | 161–177 47.6% | 195–194 50.1% | 11–15 42.3% | · | −7.7% | failed | |
| Low total (40.5 or less) | Pass yds | pregame | 78–75 51.0% | 40–48 45.5% | 40–40 50.0% | 9–13 40.9% | · | −7.9% | failed | |
| High total (48.5+) | Pass att | pregame | – | – | 61–63 49.2% | – | · | −7.5% | failed | |
| Pre-snap motion | all markets | pregame | 286–333 46.2% | 86–92 48.3% | 532–515 50.8% | 46–47 49.5% | – | −8.1% | failed | |
| Big favourite (6.5+) | all markets | pregame | – | – | 120–125 49.0% | – | – | −7.9% | failed | |
| Missed tackles | all markets | pregame | 288–289 49.9% | 439–433 50.3% | 305–356 46.1% | 70–69 50.4% | – | −8.3% | failed | |
| Play action | all markets | pregame | 26–33 44.1% | 70–69 50.4% | – | 1–0 100.0% | – | −9.4% | failed | |
| Stacked boxes | all markets | pregame | 3–3 50.0% | 4–3 57.1% | 9–11 45.0% | 1–0 100.0% | – | −9.7% | failed | |
| Pressure | Cmp | pregame | – | – | 36–39 48.0% | – | · | −10.3% | failed | |
| Light boxes | Rush att | pregame | – | – | 12–13 48.0% | – | · | −8.2% | thin | |
| Stacked boxes | Rush yds | pregame | 3–3 50.0% | 4–3 57.1% | 4–6 40.0% | 1–0 100.0% | · | −11.3% | thin | |
| Missed tackles | Rush yds | pregame | 210–227 48.0% | 281–278 50.3% | 207–261 44.2% | 58–55 51.3% | · | −10.7% | failed | |
| Pre-snap motion | Rush yds | pregame | 114–118 49.1% | 34–39 46.6% | 154–184 45.6% | 18–21 46.2% | · | −12.0% | failed | |
| Short week | Pass yds | pregame | 11–23 32.4% | 22–16 57.9% | 16–21 43.2% | 1–5 16.7% | · | −15.5% | failed | |
| Screens | Rec | pregame | – | 4–5 44.4% | – | – | – | −7.4% | thin | |
| Big underdog (6.5+) | all markets | pregame | – | – | 139–174 44.4% | – | – | −16.7% | failed | |
| Light boxes | all markets | pregame | 3–2 60.0% | 6–12 33.3% | 24–29 45.3% | 0–1 0.0% | – | −18.2% | failed | |
| Big favourite (6.5+) | Rush att | pregame | – | – | 67–88 43.2% | – | · | −18.5% | failed | |
| Play action | Pass yds | pregame | 9–15 37.5% | 26–32 44.8% | – | 1–0 100.0% | · | −20.3% | failed | |
| Red-zone defense | Any TD | pregame | 23–34 40.4% | – | 23–29 44.2% | 1–0 100.0% | – | −15.3% | failed | |
| Light boxes | Rush yds | pregame | 3–2 60.0% | 6–12 33.3% | 12–16 42.9% | 0–1 0.0% | · | −23.0% | failed | |
| Two-high shells | Pass yds | pregame | – | 2–3 40.0% | – | – | – | −25.2% | thin | |
| Big underdog (6.5+) | Cmp | pregame | – | – | 33–53 38.4% | – | · | −28.8% | failed | |
| Big underdog (6.5+) | Pass att | pregame | – | – | 32–54 37.2% | – | · | −30.6% | failed | |
| Contested catches | Rec yds | pregame | 6–11 35.3% | – | – | – | – | −34.1% | thin | |
| Blitz-heavy defense | Rec yds | pregame | 0–1 0.0% | – | – | 1–2 33.3% | · | −100.0% | thin |
Weather angles (observed at the game: optimistic)
These backtests use the wind and temperature recorded at the game, which nobody knows exactly beforehand. Live calls need a pregame forecast, so treat these records as an upper bound.
| Angle | Market | Info timing | 2023 | 2024 | 2025 | 2026 wk 1–4 | 2026 live | Win rate vs 52.4% | ROI | Verdict |
|---|---|---|---|---|---|---|---|---|---|---|
| Wind 15+ mph | Pass yds | observed at game | 13–11 54.2% | 18–10 64.3% | 28–10 73.7% | – | · | +22.7% | promising | |
| Wind 15+ mph | all markets | observed at game | 65–60 52.0% | 97–67 59.2% | 146–75 66.1% | – | – | +13.4% | failed | |
| Wind 15+ mph | Rec yds | observed at game | 52–49 51.5% | 79–57 58.1% | 118–65 64.5% | – | · | +11.4% | failed | |
| Freezing | Rec yds | observed at game | 19–23 45.2% | 53–52 50.5% | 85–69 55.2% | – | · | −2.1% | failed | |
| Freezing | all markets | observed at game | 23–27 46.0% | 63–65 49.2% | 102–81 55.7% | – | – | −2.3% | failed | |
| Freezing | Pass yds | observed at game | 4–4 50.0% | 10–13 43.5% | 17–12 58.6% | – | · | −3.5% | failed |
Cumulative win rate, 2023 → 2026
Solid: cumulative win rate by week. Dashed: 52.4% break-even. Scale 40–60%.
Our model
49.8% · n 23,617
Wind 15+ mph
60.4% · n 510
Dome team outdoors
53.0% · n 1,419
Missed tackles
49.0% · n 2,249
Pre-snap motion
49.0% · n 1,937
Starters out on defense
49.9% · n 1,887
Latest model calls
| Week | Player | Call | Actual | Result | Source |
|---|---|---|---|---|---|
| 2026 W4 | Aaron Rodgers | Over 1.5 rush yds | 0 | ❌ | backtest (after the fact) |
| 2026 W4 | Matthew Stafford | Under 250.5 pass yds | 317 | ❌ | backtest (after the fact) |
| 2026 W4 | Matthew Stafford | Over 0.5 rush yds | 10 | ✅ | backtest (after the fact) |
| 2026 W4 | Kirk Cousins | Under 223.5 pass yds | 365 | ❌ | backtest (after the fact) |
| 2026 W4 | Kirk Cousins | Over 0.5 rush yds | 0 | ❌ | backtest (after the fact) |
| 2026 W4 | Kyle Juszczyk | Anytime TD: yes | 0 | ❌ | backtest (after the fact) |
| 2026 W4 | Kyle Juszczyk | Under 8.5 rec yds | 28 | ❌ | backtest (after the fact) |
| 2026 W4 | Kyle Juszczyk | Under 1.5 receptions | 2 | ❌ | backtest (after the fact) |
| 2026 W4 | Zach Ertz | Over 21.5 rec yds | 13 | ❌ | backtest (after the fact) |
| 2026 W4 | Zach Ertz | Over 2.5 receptions | 2 | ❌ | backtest (after the fact) |
| 2026 W4 | Travis Kelce | Under 4.5 receptions | 2 | ✅ | backtest (after the fact) |
| 2026 W4 | Geno Smith | Under 227.5 pass yds | 119 | ✅ | backtest (after the fact) |
| 2026 W4 | Davante Adams | Over 65.5 rec yds | 32 | ❌ | backtest (after the fact) |
| 2026 W4 | Davante Adams | Over 4.5 receptions | 4 | ❌ | backtest (after the fact) |
| 2026 W4 | Jameis Winston | Under 207.5 pass yds | 250 | ❌ | backtest (after the fact) |
| 2026 W4 | Jameis Winston | Over 5.5 rush yds | 0 | ❌ | backtest (after the fact) |
| 2026 W4 | Stefon Diggs | Under 5.5 receptions | 5 | ✅ | backtest (after the fact) |
| 2026 W4 | Darren Waller | Under 37.5 rec yds | 36 | ✅ | backtest (after the fact) |
| 2026 W4 | Darren Waller | Under 3.5 receptions | 3 | ✅ | backtest (after the fact) |
| 2026 W4 | Marcus Mariota | Over 203.5 pass yds | 46 | ❌ | backtest (after the fact) |
| 2026 W4 | Marcus Mariota | Under 26.5 rush yds | 35 | ❌ | backtest (after the fact) |
| 2026 W4 | Austin Hooper | Over 0.5 receptions | 1 | ✅ | backtest (after the fact) |
| 2026 W4 | Chris Moore | Anytime TD: yes | – | void | backtest (after the fact) |
| 2026 W4 | Kalif Raymond | Over 31.5 rec yds | 6 | ❌ | backtest (after the fact) |
| 2026 W4 | Kalif Raymond | Over 3.5 receptions | 2 | ❌ | backtest (after the fact) |
| 2026 W4 | Derrick Henry | Over 99.5 rush yds | 73 | ❌ | backtest (after the fact) |
| 2026 W4 | Laquon Treadwell | Under 27.5 rec yds | 42 | ❌ | backtest (after the fact) |
| 2026 W4 | Laquon Treadwell | Under 1.5 receptions | 5 | ❌ | backtest (after the fact) |
| 2026 W4 | Dak Prescott | Under 1.5 pass TDs | 1 | ✅ | backtest (after the fact) |
| 2026 W4 | Dak Prescott | Under 268.5 pass yds | 335 | ❌ | backtest (after the fact) |
| 2026 W4 | Jared Goff | Over 259.5 pass yds | 412 | ✅ | backtest (after the fact) |
| 2026 W4 | Jared Goff | Over 1.5 rush yds | 0 | ❌ | backtest (after the fact) |
| 2026 W4 | Tyler Higbee | Under 31.5 rec yds | 67 | ❌ | backtest (after the fact) |
| 2026 W4 | Tyler Higbee | Under 3.5 receptions | 5 | ❌ | backtest (after the fact) |
| 2026 W4 | Jacoby Brissett | Over 7.5 rush yds | 18 | ✅ | backtest (after the fact) |
| 2026 W4 | Christian McCaffrey | Under 41.5 rec yds | 18 | ✅ | backtest (after the fact) |
| 2026 W4 | Christian McCaffrey | Under 4.5 receptions | 3 | ✅ | backtest (after the fact) |
| 2026 W4 | George Kittle | Under 64.5 rec yds | 70 | ❌ | backtest (after the fact) |
| 2026 W4 | Aaron Jones | Under 3.5 receptions | 4 | ❌ | backtest (after the fact) |
| 2026 W4 | Aaron Jones | Over 66.5 rush yds | 94 | ✅ | backtest (after the fact) |
This week's lines next to our projections: player props. Live calls from Week 5 2026 are written before kickoff, can never be edited (the database rejects it) and are graded from the box score.
For information and entertainment only; not betting advice. Lines are a pregame consensus of US sportsbooks via The Odds API and change quickly. 21+. Gambling problem? Call 1-800-GAMBLER.
Why scheme stats don’t become player edges
A matchup edge needs two things to be real: the defense’s habit, and the player’s reaction to it. Every angle we tested has one stable half and one noisy half.
- The defense half is stable for scheme. Odd-vs-even-week reliability of a defense’s blitz rate is 0.85, man rate 0.93, two-high rate 0.80.
- The player half is noise for scheme. How much better a player does when blitzed has a reliability of -0.02; against man 0.33; against two-high 0.21. “He feasts on man coverage” mostly doesn’t repeat.
- It flips for play types. How many of a player’s points come over the middle, on screens or after the catch is very stable (reliability 0.70–0.95), but what a defense allows on those plays is not (screens -0.30, explosive plays 0.18, red zone 0.06).
- Even with perfect coverage data it fails. Using each defense’s actual in-season man and two-high rates (which nobody has during the season), the best effect was 0.16 points per game per SD. Adding every angle together: QB −0.03, RB −0.21, WR −0.08, TE +0.16.
The harness can find real signals: the same test on a strong external projection (as a check) finds effects of 0.8–1.6 points per game per SD and 2–4% lower error. The matchup angles are 0.0–0.3 points and under 0.3%.
Every angle, with its uncertainty
Fantasy points per game beyond our projection when the matchup is one standard deviation in the angle’s favour. Zero means the projection already has it.
Closest calls (still context only)
Significant on their own (p ≤ 0.05) but not after correcting for 64 tests, and too small to move a start/sit decision.
- CWind 15+ mph · QB +0.48 PPR per game per SD, q 0.37. Outdoor games with wind of 15 mph or more cost passers and receivers points.
- CBlitz-heavy defense · RB +0.31 PPR per game per SD, q 0.16. Players who score more per dropback when the defense blitzes (hot routes, quick throws, check-downs) gain against blitz-heavy defenses.
- CTwo-high shells · WR +0.23 PPR per game per SD, q 0.16. Players who produce against two-deep safeties (underneath and middle routes) gain against two-high-heavy defenses; deep threats gain against single-high.
- CWind 15+ mph · WR +0.18 PPR per game per SD, q 0.16. Outdoor games with wind of 15 mph or more cost passers and receivers points.
- CMissed tackles · TE +0.16 PPR per game per SD, q 0.48. Defenses that miss more tackles boost players who earn many yards after the catch or on the ground.
- CPlay action · TE +0.11 PPR per game per SD, q 0.48. Defenses that give up more per play-action dropback boost players who earn many of their points on play action.
Myth-busted
Wrong sign, or no effect at all, beyond our projection.
- mythTwo-high shells · QB (+0.14)
- mythExplosive plays · RB (+0.06)
- mythBlitz-heavy defense · TE (+0.05)
- mythShort week · RB (+0.05)
- mythDome team outdoors · QB (+0.05)
- mythWind 15+ mph · TE (+0.03)
- mythRed-zone defense · WR (+0.03)
- mythBlitz-heavy defense · WR (+0.01)
- mythMiddle of the field · TE (+0.01)
- mythPlay action · WR (+0.00)
- mythDome team outdoors · WR (−0.00)
- mythShort week · WR (−0.01)
- mythMan coverage · TE (−0.01)
- mythStarters out on defense · TE (−0.01)
- mythMan coverage · RB (−0.02)
- mythPre-snap motion · WR (−0.02)
- mythMan coverage · WR (−0.03)
- mythImplied total · TE (−0.03)
- mythExplosive plays · WR (−0.03)
- mythPre-snap motion · RB (−0.04)
- mythTwo-high shells · TE (−0.06)
- mythFreezing · TE (−0.06)
- mythMiddle of the field · RB (−0.06)
- mythMan coverage · QB (−0.06)
- mythPace matchup · RB (−0.07)
- mythDome team outdoors · TE (−0.08)
- mythPace matchup · WR (−0.08)
- mythPlay action · QB (−0.11)
- mythMiddle of the field · WR (−0.11)
- mythImplied total · RB (−0.12)
- mythBlitz-heavy defense · QB (−0.12)
- mythMissed tackles · WR (−0.15)
- mythShort week · TE (−0.17)
- mythStarters out on defense · QB (−0.17)
- mythStacked boxes · RB (−0.18)
- mythLight boxes · RB (−0.20)
- mythImplied total · QB (−0.24)
- mythShort week · QB (−0.27)
- mythMissed tackles · RB (−0.28)
- mythImplied total · WR (−0.28)
Full results
| Angle | Pos | Player-games | Effect / SD | Both seasons | q | 2025 holdout | Grade |
|---|---|---|---|---|---|---|---|
| Wind 15+ mph | QB | 1,038 | +0.48 | yes | 0.37 | −0.24% | C |
| Pace matchup | QB | 1,038 | +0.36 | no | 0.71 | +0.16% | C |
| Blitz-heavy defense | RB | 3,059 | +0.31 | yes | 0.16 | −0.04% | C |
| Two-high shells | WR | 3,982 | +0.23 | yes | 0.16 | −0.08% | C |
| Red-zone defense | RB | 2,959 | +0.19 | yes | 0.80 | +9.94% | C |
| Wind 15+ mph | WR | 5,165 | +0.18 | yes | 0.16 | −0.07% | C |
| Explosive plays | TE | 2,766 | +0.17 | yes | 0.55 | −0.09% | C |
| Missed tackles | TE | 2,766 | +0.16 | yes | 0.48 | −0.06% | C |
| Contested catches | TE | 2,367 | +0.13 | yes | 0.71 | +0.30% | C |
| Screens | WR | 4,701 | +0.12 | yes | 0.71 | −0.01% | C |
| Pre-snap motion | TE | 2,766 | +0.12 | yes | 0.71 | −0.01% | C |
| Play action | TE | 2,766 | +0.11 | no | 0.48 | +0.00% | C |
| Starters out on defense | RB | 2,835 | +0.11 | yes | 0.71 | −0.02% | C |
| Freezing | QB | 1,038 | +0.11 | yes | 0.87 | −0.01% | C |
| Pace matchup | TE | 3,222 | +0.09 | yes | 0.71 | −0.01% | C |
| Dome team outdoors | RB | 3,173 | +0.09 | yes | 0.71 | −0.01% | C |
| Starters out on defense | WR | 4,598 | +0.09 | yes | 0.71 | −0.01% | C |
| Screens | RB | 2,959 | +0.09 | yes | 0.82 | −0.00% | C |
| Pressure | QB | 1,031 | +0.07 | yes | 0.87 | −0.00% | C |
| Screens | TE | 2,766 | +0.06 | yes | 0.85 | −0.00% | C |
| Freezing | WR | 5,165 | +0.05 | yes | 0.80 | −0.01% | C |
| Red-zone defense | TE | 2,766 | +0.04 | yes | 0.87 | +34.90% | C |
| Two-high shells | RB | 2,535 | +0.03 | yes | 0.87 | +0.00% | C |
| Contested catches | WR | 4,273 | +0.01 | yes | 0.87 | +0.00% | C |
| Two-high shells | QB | 882 | +0.14 | no | 0.87 | +0.19% | myth |
| Explosive plays | RB | 2,959 | +0.06 | no | 0.87 | +0.04% | myth |
| Blitz-heavy defense | TE | 2,969 | +0.05 | no | 0.87 | +0.07% | myth |
| Short week | RB | 3,173 | +0.05 | no | 0.87 | +0.00% | myth |
| Dome team outdoors | QB | 1,038 | +0.05 | no | 0.87 | +0.03% | myth |
| Wind 15+ mph | TE | 3,222 | +0.03 | no | 0.87 | +0.15% | myth |
| Red-zone defense | WR | 4,701 | +0.03 | no | 0.87 | +4.96% | myth |
| Blitz-heavy defense | WR | 4,882 | +0.01 | no | 0.87 | +0.03% | myth |
| Middle of the field | TE | 2,766 | +0.01 | no | 0.87 | +0.02% | myth |
| Play action | WR | 4,701 | +0.00 | no | 0.87 | −0.00% | myth |
| Dome team outdoors | WR | 5,165 | −0.00 | no | 0.87 | +0.00% | myth |
| Short week | WR | 5,165 | −0.01 | no | 0.87 | +0.04% | myth |
| Man coverage | TE | 2,621 | −0.01 | no | 0.87 | −0.00% | myth |
| Starters out on defense | TE | 2,880 | −0.01 | no | 0.87 | +0.01% | myth |
| Man coverage | RB | 2,535 | −0.02 | no | 0.87 | +0.03% | myth |
| Pre-snap motion | WR | 4,701 | −0.02 | no | 0.87 | +0.04% | myth |
| Man coverage | WR | 3,995 | −0.03 | no | 0.87 | +0.15% | myth |
| Implied total | TE | 3,222 | −0.03 | no | 0.90 | +0.04% | myth |
| Explosive plays | WR | 4,701 | −0.03 | no | 0.87 | +0.12% | myth |
| Pre-snap motion | RB | 2,959 | −0.04 | no | 0.87 | +0.09% | myth |
| Two-high shells | TE | 2,621 | −0.06 | no | 0.94 | +0.11% | myth |
| Freezing | TE | 3,222 | −0.06 | no | 0.94 | −0.01% | myth |
| Middle of the field | RB | 2,959 | −0.06 | no | 0.94 | +0.01% | myth |
| Man coverage | QB | 882 | −0.06 | no | 0.87 | +0.27% | myth |
| Pace matchup | RB | 3,173 | −0.07 | no | 0.94 | +0.05% | myth |
| Dome team outdoors | TE | 3,222 | −0.08 | no | 0.96 | +0.03% | myth |
| Pace matchup | WR | 5,165 | −0.08 | no | 0.96 | +0.05% | myth |
| Play action | QB | 1,023 | −0.11 | no | 0.90 | −0.00% | myth |
| Middle of the field | WR | 4,701 | −0.11 | no | 0.96 | −0.01% | myth |
| Implied total | RB | 3,173 | −0.12 | no | 0.96 | +0.13% | myth |
| Blitz-heavy defense | QB | 1,031 | −0.12 | no | 0.90 | +0.04% | myth |
| Missed tackles | WR | 4,701 | −0.15 | no | 0.96 | −0.03% | myth |
| Short week | TE | 3,222 | −0.17 | no | 0.99 | −0.07% | myth |
| Starters out on defense | QB | 928 | −0.17 | no | 0.94 | −0.01% | myth |
| Stacked boxes | RB | 3,111 | −0.18 | no | 0.99 | −0.05% | myth |
| Light boxes | RB | 3,065 | −0.20 | no | 0.99 | −0.06% | myth |
| Implied total | QB | 1,038 | −0.24 | no | 0.96 | +0.16% | myth |
| Short week | QB | 1,038 | −0.27 | no | 0.96 | −0.07% | myth |
| Missed tackles | RB | 2,959 | −0.28 | no | 0.99 | −0.10% | myth |
| Implied total | WR | 5,165 | −0.28 | no | 1.00 | −0.16% | myth |
How this works
For every QB, RB, WR and TE game in 2024 and 2025 we take our projection’s miss (actual PPR minus projected, from the rolling-origin backtest that only uses earlier data) and ask whether the matchup angle, also computed only from earlier games, predicts it. Scheme angles (blitz, man, two-high, boxes, pressure, contested catches) multiply the player’s shrunk split (his points per team play in that situation minus outside it, shrunk toward his position) by how far the opponent’s shrunk rate is from league average. Play-type angles (play action, middle, screens, motion, explosive plays, red zone, missed tackles) multiply his points per game on those plays by how much more or less than average the opponent allows on them. Rest, travel, weather, pace and defensive injuries are tested as single numbers.
Grades were fixed before the first run: B needs a Benjamini–Hochberg q ≤ 0.05 (one-sided, in the hypothesised direction), the right sign in both seasons and a lower 2025 error when the 2024-fitted edge is added to our projection; A adds q ≤ 0.01 and at least 0.25 points per game per SD. Only A and B appear as matchup edges on player pages, projections and start/sit reasons; nothing here changes our projections (model unchanged). Man and two-high use last season’s rates in-season, because coverage charting is published after the season. Defense scheme reliability: Insights Lab.
Charting data: FTN Data via nflverse, licensed CC BY-SA 4.0; our derived charting figures are shared under the same licence. Coverage allowed by defender: Pro Football Reference via nflverse. Coverage type (man/zone, shells): nflverse participation data. Play-by-play: nflverse.
Sources: nflverse play-by-play, participation, snap counts and schedules, FTN Data via nflverse, Pro Football Reference via nflverseUpdated 2026-10-07
Frequently asked questions
Should I start a receiver because he faces a man-heavy defense?
Not on that alone. Defenses do play man at stable rates, but a receiver’s “man vs zone” split barely repeats, and in our 2024–25 tests the matchup did not predict points beyond our projection.
Does a blitz-heavy defense help or hurt?
For receivers and QBs we found nothing beyond the projection. Running backs scored slightly less than projected against blitz-heavy defenses (about 0.3 points per game per SD), but that did not survive our multiple-testing correction.
Does weather matter?
Wind of 15+ mph cost QBs about 2 points and WRs about 0.8 points versus projection in 2024–25, the most consistent context effect we found, but it fell short of our bar after correcting for the number of tests. Cold alone did not.
Why publish angles that failed?
Because most matchup takes are noise and we publish our accuracy. A failed test is useful: it tells you to spend your start/sit attention on role, volume and availability instead.