? Situational Presets
League EPA Landscape
Loading...
Power Rankings
Loading...
Key Storylines
Quick Stats
Explore
Loading...
Loading...
Coverage by Down & Distance

How does this defense change coverage based on situation?

Loading...

How do QBs perform against a specific coverage scheme? Select a coverage type in the sidebar.

Loading...
Loading...
Coverage Mix Over Time

How has this team's coverage mix evolved week-to-week?

Loading...
Loading...
Loading...

How much heat does this defense generate — and does it need to send extra rushers to get it? QB performance under pressure lives on the Quarterbacks tab (Pressure × Time to Throw view).

Loading...
Loading...
Definitions: pressure = FTN-charted pressure on the dropback (pressures / opposing dropbacks) . “Blitz (5+ rushers)” counts total pass rushers (n_pass_rushers ≥ 5) ; “Blitzers (2nd-level) ≥ 1” counts FTN's n_blitzers, which tallies only second-level rushers — the two blitz definitions differ by construction and are shown side by side, never blended. “Pressure w/o Blitz” = pressures on ≤4-rusher dropbacks over ≤4-rusher dropbacks . QB-fault sacks per FTN charting .
Loading...
Loading...

How different is this defense's coverage identity from the league — and did it shift week to week? Distinctiveness measures how different this defense is from the league — it does not measure quality : across the 2022–25 defense-seasons in our data, distinctiveness is uncorrelated with EPA allowed (r ≈ 0.04). Style, not success.

Loading...
Weekly Identity Change
Loading...
Archetype Probabilities
Loading...
Similar Defenses
Loading...

Loading...
Loading...

Loading...
Player 1
Loading...
Player 2
Loading...
Head-to-Head Comparison

Advanced Play Caller

Play-calling analytics from public charting data: model predictions by target route family, field zone targeting, and read progression.

Game Situation
Model Predictions — EPA by Target Route Family
Loading...
Defensive Coverage Tendencies
Loading...
Who Should I Throw To? Historical results in similar situations (not model-ranked)
Loading...
What NFL Coaches Called in This Situation
Loading...
The Matchup Pick a quarterback and the coverage he's facing — get the route concepts to call.
Loading...
Route Detail Individual targeted routes behind the family ranks (min 3 targets)
Loading...
Zone Targeting Click a field zone to see EPA predictions + historical data

Loading field...


Zone Breakdown — Historical EPA by Target Area
Loading...
EPA by Read
Loading...
Read Distribution
Loading...
Read × Receiver Breakdown
Loading...

Can you out-coach an NFL coordinator? Call plays in real game situations.

Game Situation
Your Call
Result
What NFL Coaches Called

Fantasy Matchup Tool

WR/TE matchup grades powered by route-vs-coverage analytics.

Loading...
Route vs Coverage Breakdown
Loading...

Loading...

Be Your Own GM

Build your roster, manage the cap, and test your moves in the Play Caller.

Current Roster
Loading...

APY Commitments

Headroom (APY basis)

% of Cap (APY basis)

Players

APY-based estimate — not official cap space. Real cap hits differ from APY (signing-bonus proration, top-51 offseason accounting), so most cap-compliant teams show negative headroom on this basis.

APY Allocation by Position Group
Loading...
Position Group Breakdown
Cut a Player
Undo Moves
Sign a Free Agent

Trade
Modified Roster Download CSV
Loading...
Roster Changes for Play Caller

Your GM moves modify the roster that feeds into the Play Caller's model predictions. When you navigate to the Play Caller tab, it will use your modified roster to update receiver targets, personnel groupings, and EPA projections.


Roster Diff

Who's Overpaid? Who's a Bargain?

APY (x) vs EPA per play (y). Above the line = bargain, below = overpaid.

Loading...
Contract Roster View

Sortable, searchable roster with key contract details.

Loading...
Cap Allocation by Position
Loading...
Contract Database
Loading...

Loading...
Loading...

Run Direction vs Box Count
Loading...
Loading...
Loading...

WR/TE Route Tree
Loading...
Loading...

Route × Coverage Heatmap

Loading...

Underlying Table
Loading...

Usage and outcome association under the current filters — not play-calling causation.

Loading...
Denominators: Motion / No-Huddle / RPO / Shotgun rates are per scrimmage play; Play Action / Screen rates are per dropback.
Loading...
Loading...
Loading...
Loading...
Receiver Hands — league-wide
Loading...
About The Kneeldown

Thank you for visiting The Kneeldown. This project was originally created in 2022 when I was in high school. I used my experience as an R&D with PFF to create the site and build the original concept. Since then, life has gotten in the way and I haven't been able to maintain it as much until now where I've attempted to revive it, building it better than ever.

Currently, it runs off of open source data meaning that there is no asymmetric information that is offered. The goal is to offer the average consumer the ability to understand football through a data-driven lens. If you have any suggestions, feedback, or questions, please reach out to me at ryweis1@outlook.com or on Twitter/X at @ryanweisman12 .

I am funding the hosting of this website by myself and plan to keep it free for the average user. If you have found the site valuable and would like to contribute to its hosting, feel free to do so here: Buy Me a Coffee .

Data Sources
Source Data Provider
nflfastR Play-by-play, EPA, win probability nflverse
FTN Charting Ball quality, play action, blitz, interception worthy nflverse via FTN
Participation Coverage scheme, route, personnel, formation nflverse
Next Gen Stats Time to throw, separation, air yards, RYOE nflverse via NGS
OverTheCap Contracts, APY, guaranteed money, cap hits nflreadr
Data Status

Every dataset behind the site, with its source, coverage, and when it was last rebuilt. Manifest generated 2026-07-26 00:12:32 UTC.

Dataset Source Rows Seasons Updated Cadence
Play-by-play (nflfastR + participation + FTN)  ⓘ nflreadr::load_pbp / load_participation / load_ftn_charting 197,362 2022-2025 2026-07-26 00:12 UTC Manual refresh; nightly upstream in season
NGS passing (weekly)  ⓘ nflreadr::load_nextgen_stats 3,631 2020-2025 2026-07-26 00:12 UTC Nightly in season
NGS receiving (weekly)  ⓘ nflreadr::load_nextgen_stats 8,871 2020-2025 2026-07-26 00:12 UTC Nightly in season
NGS rushing (weekly)  ⓘ nflreadr::load_nextgen_stats 3,703 2020-2025 2026-07-26 00:12 UTC Nightly in season
Fantasy opportunity (ffopportunity) nflreadr::load_ff_opportunity 36,063 2020-2025 2026-07-26 00:12 UTC Weekly in season
Contracts (OverTheCap)  ⓘ nflreadr::load_contracts 51,734 2026-07-26 00:12 UTC Periodic
Schedules  ⓘ nflreadr::load_schedules 1,411 2022-2026 2026-07-26 00:12 UTC Refresh + schedule releases
Rosters  ⓘ nflreadr::load_rosters 15,507 2022-2026 2026-07-26 00:12 UTC Season rollover + offseason updates
Snap counts (PFR) nflreadr::load_snap_counts 106,148 2022-2025 2026-07-26 00:12 UTC Weekly in season
ESPN QBR (season)  ⓘ nflreadr::load_espn_qbr 321 2022-2025 2026-07-26 00:12 UTC Weekly/season
ESPN QBR (weekly)  ⓘ nflreadr::load_espn_qbr(summary_type='week') 2,273 2022-2025 2026-07-26 00:12 UTC Weekly in season
Defensive player stats nflreadr::load_player_stats(summary_level='week') 45,553 2022-2025 2026-07-26 00:12 UTC Weekly in season
Team colors & logos nflreadr::load_teams 32 2026-07-26 00:12 UTC Static
Player identity dimension  ⓘ nflreadr::load_players 25,035 2026-07-26 00:12 UTC Periodic

Charting-era caveat: 2022 coverage/route/pressure labels come from the NGS participation release (~84% of pass plays charted, different route vocabulary); 2023+ is FTN-charted (~100%). Cross-era rates are computed on different instruments — era-sensitive views say so in place.

Model Card — Play Caller EPA Model
  • What it does: predicts per-play EPA for a proposed pre-snap situation and target route family, scored under each coverage the selected defense actually plays (usage-weighted). It models the targeted receiver's route — not a full 5-man play concept.
  • Type: XGBoost regression (EPA), 45 features.
  • Trained: 2026-07-18 on 140,184 plays (2022 to latest season).
  • Random-split test RMSE: 1.3150 (correlation 0.334)
  • Out-of-time validation: trained only on past seasons, scored on a full future season it never saw. These fold RMSEs are not comparable to the random-split RMSE above: each fold scores a different season's plays, so the numbers describe different test populations (a lower fold RMSE does not mean better generalization). The random split also mixes same-game plays into training, so its RMSE overstates how well the model transfers to future games. The honest evidence is the model-vs-baseline margin WITHIN each fold: train 2022-2023 -> test 2024: model RMSE 1.310 vs situational baseline 1.385 (beats baseline); train 2022-2024 -> test 2025: model RMSE 1.305 vs situational baseline 1.380 (beats baseline) .
  • Top features by gain: is_pass, half_secs, ay_none, field_pos, distance
  • Limitations: trained on public charting only — no player tracking, no blocking assignments, no receiver identity; recommendations are historical-pattern estimates with real uncertainty, not guarantees. Coverage labels change provenance at the 2022/2023 charting-source boundary.
Model Card — Coverage-Mix Model
  • What it does: predicts which coverage a defense will show in a pre-snap situation, as a probability distribution. Those probabilities WEIGHT the Play Caller's per-coverage EPA predictions; the per-coverage EPA-allowed and box-count inputs stay empirical.
  • Type: XGBoost multiclass (multi:softprob), 45 features (pre-snap situation, offensive RB/TE counts, defense identity). Unit: one charted defensive pass play.
  • Classes: 10 charted coverage schemes (Cover 0–4, 6, 9, 2-Man, Combo, Prevent). BLOWN (busted coverage) is a data-quality bucket, never a class.
  • Trained: 2026-07-23 on 70,994 plays ( 2022–2025 ); validation mlogloss 1.6336 / top-1 37.5% at iteration 240 .
  • Out-of-time validation: trained only on past seasons, scored on a full future season it never saw. Promotion required beating the smoothed-empirical baseline on multiclass log-loss in BOTH expanding-window folds; it also wins top-1 accuracy in both:
  • Fold Test plays Log-loss (smoother) Log-loss (model) Top-1 (smoother) Top-1 (model)
    train 2022-2023 -> test 2024 19,829 1.8472 1.7506 31.2% 35.7%
    train 2022-2024 -> test 2025 19,602 1.8401 1.8297 27.5% 27.9%

    The 2025 fold's log-loss edge is thin (1.8297 vs 1.8401): on the most recent season the model is only marginally better than the smoother.

  • Limitations: pre-snap information only — no personnel packages beyond RB/TE counts, no motion, no injuries or roster context. Coverage labels change provenance at the 2022/2023 charting-source boundary (NGS participation vs FTN). Coverage calls are inherently noisy: even out-of-time, the best top-1 is ~36%.
  • Fallback: if the model bundle is missing or a defense/situation can't be encoded, the Play Caller logs one line and reverts to the hierarchically smoothed empirical mix (situation → defense → league, k = 15) — the previous production method, still fully tested.
Model Card — Defense Archetypes
  • What it does: clusters defensive coverage identities (10 smoothed coverage shares as isometric log-ratios + logit man rate + logit blitz rate, within-season centered so archetypes describe deviation from that season's league norm — the 2022 NGS vs 2023+ FTN vocabulary break is removed by construction). The Coverage Hub Identity tab shows posterior probabilities by PROJECTION onto this frozen fit — profiles are never re-clustered.
  • Type: Gaussian mixture (mclust 6.1.3 ), model VEE , k = 2 components, selected by ICL (entropy-penalized BIC — favors separated clusters, the right criterion for archetypes; k was never forced upward).
  • Fitted: 2026-07-25 on 128 defense-seasons ( 2022–2025 ).
  • Stability gate: B = 100 bootstrap resamples, mean Jaccard per cluster; ≥ 0.75 → named archetype, 0.60 – 0.75 → unnamed pattern, below → dissolved into “Mixed”:
  • Cluster n Mean Jaccard Gate result Shown as
    1 18 0.41 dissolved Mixed
    2 110 0.83 named Mainstream
  • Naming rationale: names are descriptive, centroid-derived, and explicitly unordered. On the frozen fit the league separates into one large stable cluster sitting essentially AT the season league norm (“Mainstream”, Jaccard 0.83) plus a small unstable fringe cluster (COMBO-avoidant, single-high/quarters tilt) that failed even the 0.60 pattern gate and dissolved into “Mixed” — the honest read at n = 128 is one mainstream identity plus fringe variation, not a menu of named schemes.
  • Limitations: 128 defense-seasons is a small pool — expect coarse clusters; archetype membership describes style, never quality (distinctiveness is not success); coverage labels change provenance at the 2022/2023 charting boundary (handled by within-season centering); the bundle is frozen and must be refit when a new season completes (new seasons project against the latest stored season center until then).
Model Card — Expected Interceptions (xINT)
Status: SHADOW-ONLY — not promoted. The model beat the league-rate, air-yards-bucket, and depth+situation baselines on log-loss in both out-of-time folds, but failed the cross-fit calibration gate in 1 of 4 assessment cells (2025 fold, fit even → assess odd weeks: slope 1.159 outside the pre-stated 0.85–1.15 band — the platt alternative fails the same cell (slope 1.168), so no calibrator family passes). The promotion rule was fixed before evaluation: every gate passes or nothing user-facing ships. Accordingly, no xINT or INTs-Over-Expected figure appears anywhere on the site — including the QB Decision Making view this model was built to extend. The evaluation artifact (models/xint_oot_eval.json) and the per-throw out-of-fold predictions (models/xint_oof_predictions.parquet) are kept so a recalibrated candidate can be judged against the exact same gates.
  • What it estimates: the probability that a single thrown ball is intercepted, from only what was true when it left the QB's hand — depth, location, coverage (busted coverages included as real context), man/zone, pressure, time to throw, contested-catch situation, down/distance/field/score/clock, box count, and rush count. It scores how dangerous the throw was: a ball thrown into danger that a defender drops is the same throw as one that gets picked. No QB or receiver identity — two QBs making the same throw into the same look get the same xINT.
  • Eligibility: charted pass attempts, 2022–25: pass play, ball actually thrown (no sacks — an un-thrown ball can't be intercepted), FTN-charted coverage, down 1–4; two-point tries excluded. 74,608 throws kept, 1,683 interceptions (2.26% league rate). Throwaways stay in: real thrown balls with near-zero INT risk (2,999 charted throwaways, 4 INTs 2022-25) — the model learns it.
  • Type: XGBoost binary classifier, no class reweighting (the true ~2.3% base rate is preserved so predicted probabilities can be read as probabilities), early stopping on the chronological tail of the training seasons — never on the test season.
  • Deliberately excluded — is_catchable_ball: P(INT | uncatchable) ≈ 0 near-definitionally, so the flag absorbs the target and quietly changes the question to "INT given catchable" — and it is charted with knowledge of how the play ended. An ablation WITH it scores better on paper ( 2024: log-loss 0.0813 vs 0.0966 primary; 2025: log-loss 0.0865 vs 0.1005 primary ) — exactly the signature of a feature leaking the outcome, not of a better model. It is reported here and used nowhere.
  • Never a feature — is_interception_worthy: FTN's INT-worthy flag IS a human expected-interception judgment — using it as an input would be pure leakage. It serves instead as an independent validation label (agreement below).
  • Kept with a caveat — is_contested_ball: charted at the catch point, so it is partly an outcome of the ball in flight rather than purely pre-outcome context.
  • Out-of-time validation (gate 1 — passed ): expanding-window season folds — train on past seasons only, score a full future season the model never saw. All three baselines are fit on the training rows only. The gate: beat every baseline on log-loss in BOTH folds.
  • Fold Test throws INTs LL league rate LL air-yards LL depth+situation LL model AUC Beats all 3
    train 2022-2023 -> test 2024 18,438 403 0.1052 0.0985 0.0989 0.0966 0.743 yes
    train 2022-2024 -> test 2025 18,218 405 0.1066 0.1028 0.1018 0.1005 0.707 yes
  • Cross-fit calibration (gate 2 — FAILED ): a beta calibrator is fit on one week-parity half of the test season and assessed on the other half — fit and assessment never share a block. Tolerances stated before evaluation: |Cox slope − 1| ≤ 0.15 and |mean predicted − observed rate| ≤ 0.005. Winning family: beta (mean assessed log-loss 0.0985 vs 0.0986 platt). All 4 cells must pass.
  • Test season Cross-fit direction Assessed throws Cox slope Intercept (prob) Assessed log-loss Gates
    2024 fit odd → assess even weeks 8,990 1.098 +0.0015 0.0931 pass
    2024 fit even → assess odd weeks 9,448 0.894 -0.0015 0.0996 pass
    2025 fit odd → assess even weeks 8,834 0.863 -0.0028 0.1055 pass
    2025 fit even → assess odd weeks 9,384 1.159 +0.0027 0.0959 FAIL
  • What the failed cell means: on the most-recent season, one assessment half needs its probabilities stretched by more than the tolerated amount (slope > 1 = the model's danger estimates run too flat there). Per-QB expected-INT totals are sums of these probabilities, so a breach this size would silently bias every total — which is why none are shown.
  • Agreement with human charting (out-of-fold): on test-season throws the scoring model never trained on, throws FTN charted as INT-worthy carry a mean xINT of 4.1% vs 2.1% on throws charted clean (n = 1,207 worthy / 35,449 not; AUC 0.727 predicting a label the model never saw). The model independently rates human-flagged throws about twice as dangerous.
  • Leaderboard discipline: per-QB "expected INTs" are only honest when every throw is scored by a model that never trained on it — the evaluation builds them strictly out-of-fold (2024 scored by the 2022–23 model, 2025 by the 2022–24 model, each half calibrated on the other half). Those predictions exist on disk, but publishing rankings from a model that failed its calibration gate would present biased sums as facts. This is a rebuild of previously published xINT research; the gates exist precisely because the original shipped random-split, in-sample, uncalibrated numbers.
  • Limitations: public charting only — no player tracking, no separation at the catch point; post-throw only (not a pre-snap risk model); coverage labels change provenance at the 2022/2023 charting boundary (2022 lacks COVER_9/COMBO/BLOWN — the season feature absorbs the break); contested-ball outcome-adjacency above; and the most-recent-season calibration drift that the failed gate caught.
Methodology — QB After Disruption
  • What it shows: how a QB's dropbacks after a disruption event (pressure, QB hit, sack, interception, strip-sack) compare to his own baseline, in four response windows: next dropback, rest of drive, next same-QB drive, rest of game.
  • The estimand — a within-QB difference-in-differences, never a raw split: the displayed delta is (situation-adjusted EPA residual on post-event dropbacks) minus (the SAME QB's residual on his non-post-event dropbacks, reweighted by situation bucket to the post-event situation mix). A pooled baseline would leave QB quality inside the delta; and because events select on transient bad process, post-event play regresses up by construction — so a matched placebo (“after a situation-matched bad play that wasn't the event”: non-event dropbacks below the QB's own median EPA, importance-weighted to the event's situation distribution) is displayed beside it. If event and placebo deltas match, the “response” is ordinary mean reversion, not something the event caused.
  • Sequencing guards: plays ordered by game_id + play_id (monotonicity asserted); nullified no-play snaps skipped, never counted as the response; kneels, spikes, and two-point tries excluded; “next drive” = the next drive with the same offense AND the same passer (never naively fixed_drive + 1, which is usually the opponent's drive); a turnover on the event play empties the rest-of-drive window; truncated windows are dropped from denominators, never scored 0; a benched QB's window resumes on his return without bridging the backup's plays.
  • Uncertainty: per-QB deltas are shrunk toward the league delta (empirical Bayes, k = 25 events) and carry 95% game-clustered bootstrap CIs (B = 500 — plays within a game are dependent, so games are resampled, not plays).
  • Reliability tiers (measured anchors, ≥300-dropback QB-seasons): median per QB-season is 148 pressures / 32 sacks / 10 INTs / 2 strip-sacks. So pressure, hit, and sack windows are per-QB viable with shrinkage; interception windows are pooled 2022–2025 (a narrower season pick auto-falls back, with a notification); strip-sack windows are league-level only, never per QB.
  • Reading discipline: observed situation-adjusted output after the event, relative to this QB's own baseline — reflects selection and mean reversion; descriptive, not a causal bounce-back, never toughness/psychology.
Methodology
  • Pizza Charts: Percentile rankings computed against the full position pool using ECDF.

Per-metric definitions (EPA/Play, Success Rate, CPOE, Matchup Grades, and every other displayed metric) moved to the Metric Dictionary card below — each entry states its exact denominator, sample gate, shrinkage policy, charting-era caveat, and data source.

Metric Dictionary

Every metric the site displays, from one shared registry (the same entries power the in-place ⓘ tooltips). Each entry states the plain-language definition, the exact denominator, the minimum sample shown, any shrinkage applied, whether the 2022 charting-source break affects it, and where the data comes from.

Expected Points Added per play — the change in expected points caused by a play, from nflfastR's expected-points model. The site's universal currency: positive = good for the offense.

Denominator
all plays in the selected sample (QB coverage/route views: the QB's pass plays vs the scheme; team views: scrimmage plays, rps %in% c('pass','run'), excluding kneels/spikes/special teams)
Min n shown
none (all n shown)
Shrinkage
none
Era caveat
No
Source
nflfastR
Registry id
epa_play

The same nflfastR EPA, averaged over a receiver's targets — every play on which he was the targeted receiver.

Denominator
the receiver's targets (plays with him as targeted receiver)
Min n shown
none (all n shown)
Shrinkage
none
Era caveat
No
Source
nflfastR
Registry id
epa_target

The same nflfastR EPA, averaged over ALL dropbacks — including sacks and throwaways, not just throws. Used by the Play Caller QB-vs-Coverage value box and the Pressure sub-tab's EPA/Dropback Allowed.

Denominator
all dropbacks (rps == 'pass'), sacks and throwaways included
Min n shown
none (all n shown)
Shrinkage
none
Era caveat
No
Source
nflfastR
Registry id
epa_dropback

Share of plays with EPA > 0.

Denominator
plays in the current sample with a non-missing EPA
Min n shown
none (all n shown)
Shrinkage
none
Era caveat
No
Source
nflfastR
Registry id
success_rate

Turnover margin: takeaways minus giveaways, counted over ALL plays (special teams included) in the selected seasons. A turnover is an interception or a lost fumble (fumble_lost). Attribution follows possession: the offense (posteam) commits, the defense forces — EXCEPT on punts, where posteam is the PUNTING team while nearly every punt fumble lost is a receiving-team muff (97 of 98 in 2022-25). A punt fumble_lost with positive posteam EPA is therefore credited as a giveaway BY the receiving (returning) team and a takeaway FOR the punting team; a punt fumble_lost with EPA <= 0 (botched snap, failed fake) stays a punting-team giveaway. Kickoffs need no flip: posteam there is already the receiving team.

Denominator
counting stat, not a rate: all plays in the selected seasons, special teams included
Min n shown
none (all n shown)
Shrinkage
none
Era caveat
No
Source
nflfastR
Registry id
to_margin

Empirical-Bayes stabilized EPA: eb_shrink(x, n, prior, k) = (n·x + k·prior) / (n + k) with prior weight k = 25 observations — small-sample means are shrunk toward a relevant prior so thin cells can't dominate rankings. Raw values and n always remain visible.

Denominator
the cell's own plays/targets (n), shrunk toward the view's stated prior: Route×Coverage heatmap — LEAGUE same-coverage mean computed from the full filtered pass frame (never the Team/QB-scoped frame); Play Caller QB-vs-Coverage concepts — league mean for that concept vs that coverage; receiver ranking — situation-pool mean; Read Progression — per-read league mean
Min n shown
none (all n shown)
Shrinkage
eb_shrink k=25 toward the view's stated prior
Era caveat
No
Source
derived
Registry id
stabilized_epa

Completion Percentage Over Expected — actual completion minus nflfastR's expected completion probability given play difficulty.

Denominator
pass plays with a non-missing cpoe value (~80% fill on pass plays)
Min n shown
none (all n shown)
Shrinkage
none
Era caveat
No
Source
nflfastR
Registry id
cpoe

Average Depth of Target — mean air yards on throws. The canonical instrument is pbp air_yards (coalesced with the 2022-only NGS ngs_air_yards); Weekly Stats shows NGS avg_intended_air_yards.

Denominator
throws with a charted air-yards value
Min n shown
none (all n shown)
Shrinkage
none
Era caveat
No
Source
nflfastR
Registry id
adot

Share of throws with air yards ≥ 20 (the deep_throw flag, derived from coalesce(air_yards, ngs_air_yards)).

Denominator
throws with charted air yards (~93% of pass plays each season); deep = air yards ≥ 20
Min n shown
none (all n shown)
Shrinkage
none
Era caveat
No
Source
nflfastR
Registry id
deep_throw_rate

Seconds from snap to release, from Next Gen Stats. QB-tab buckets: <2.3 / 2.3–2.8 / 2.8–3.3 / 3.3+ seconds.

Denominator
dropbacks with an NGS time_to_throw measurement
Min n shown
none (all n shown)
Shrinkage
none
Era caveat
No
Source
NGS weekly
Registry id
ttt

Share of opposing dropbacks with an FTN-charted pressure on the QB (was_pressure).

Denominator
charted pressures / opposing dropbacks (rps == 'pass')
Min n shown
100
Shrinkage
none
Era caveat
No
Source
FTN charting
Registry id
pressure_rate

Share of dropbacks with five or more total pass rushers (n_pass_rushers ≥ 5). One of two blitz definitions shown side by side, never blended.

Denominator
5+-rusher dropbacks / opposing dropbacks with a charted n_pass_rushers
Min n shown
100
Shrinkage
none
Era caveat
No
Source
FTN charting
Registry id
blitz_rate_rushers

Share of dropbacks where FTN's n_blitzers ≥ 1. n_blitzers counts only SECOND-LEVEL rushers, so this is a different construction from the 5+-rushers definition — the two are shown side by side, never blended.

Denominator
n_blitzers ≥ 1 dropbacks / opposing dropbacks with a charted n_blitzers
Min n shown
100
Shrinkage
none
Era caveat
No
Source
FTN charting
Registry id
blitz_rate_blitzers

Pressure generated without sending extra rushers: the pressure rate restricted to dropbacks with four or fewer pass rushers.

Denominator
pressures on ≤4-rusher dropbacks / ≤4-rusher dropbacks (charted n_pass_rushers)
Min n shown
100
Shrinkage
none
Era caveat
No
Source
FTN charting
Registry id
pressure_no_blitz

Share of sacks in the sample that FTN charted as the QB's fault (is_qb_fault_sack).

Denominator
FTN QB-fault sacks / sacks in the sample
Min n shown
none (all n shown)
Shrinkage
none
Era caveat
Yes — affected by the 2022 (NGS participation) vs 2023+ (FTN) charting break; era notes appear in place.
Source
FTN charting
Registry id
qb_fault_sack_share

How often a defense lines up in each charted coverage scheme, over dropbacks only (rps == 'pass' — QB scrambles with charted coverage are excluded, matching the QB coverage views). BLOWN (busted coverage — a data-quality bucket, not a callable scheme) is excluded from numerator AND denominator, so shown usage sums to 100%.

Denominator
team dropbacks in the scheme / team charted-coverage dropbacks (rps == 'pass'); league baseline = mean of per-team usage shares over ALL teams in the same filtered sample, with zero shares for teams that never show the scheme
Min n shown
none (all n shown)
Shrinkage
none
Era caveat
Yes — affected by the 2022 (NGS participation) vs 2023+ (FTN) charting break; era notes appear in place.
Source
FTN charting
Registry id
coverage_usage

Mean EPA a defense allows on dropbacks in each charted coverage scheme. Dropbacks only (rps == 'pass'): QB scrambles carry charted coverage too but belong to the run population, so they are excluded — the same denominator as the QB-vs-coverage views. League baseline is the play-weighted mean over all dropbacks in the scheme under the same filters.

Denominator
dropbacks (rps == 'pass') with the scheme charted vs the selected defense; league baseline over all such dropbacks league-wide
Min n shown
none (all n shown)
Shrinkage
none
Era caveat
Yes — affected by the 2022 (NGS participation) vs 2023+ (FTN) charting break; era notes appear in place.
Source
FTN charting
Registry id
coverage_epa_allowed

Player targets divided by team targets — computed PER TEAM STINT (player × team over that stint's weeks) so traded players are not blended across teams; the most recent stint is reported.

Denominator
player targets with the team / that team's total targets over the stint's weeks
Min n shown
30
Shrinkage
none
Era caveat
No
Source
nflfastR
Registry id
target_share

Completions on the receiver's targets (mean of complete_pass over targets) — of ALL targets, unlike Drop %, which uses catchable targets only.

Denominator
receptions / all targets (catchable or not)
Min n shown
30
Shrinkage
none
Era caveat
No
Source
nflfastR
Registry id
catch_rate

Drops divided by CATCHABLE targets (FTN-charted catchable balls) — never of all targets (league ≈5.0%). Lower is better; inverted in pizza percentiles.

Denominator
FTN-charted drops on catchable targets / catchable targets
Min n shown
25
Shrinkage
eb_shrink k=25 toward the play-weighted league drop rate (computed from everyone before the display filter)
Era caveat
No
Source
FTN charting
Registry id
drop_rate_catchable

Contested-catch conversion: completed catches on FTN-charted contested targets.

Denominator
contested catches (contested & complete) / contested targets
Min n shown
25
Shrinkage
eb_shrink k=25 toward the play-weighted league contested conversion (computed from everyone before the display filter)
Era caveat
No
Source
FTN charting
Registry id
contested_conv

Share of dropbacks with an FTN-charted interception-worthy throw. Uncharted flags count as not-flagged (≥99.6% of plays are charted).

Denominator
INT-worthy throws / QB dropbacks (rps == 'pass')
Min n shown
none (all n shown)
Shrinkage
none
Era caveat
Yes — affected by the 2022 (NGS participation) vs 2023+ (FTN) charting break; era notes appear in place.
Source
FTN charting
Registry id
int_worthy_rate

Share of a QB's interception-worthy throws that were actually intercepted — computed as the intersection sum(int & int_worthy) / sum(int_worthy), because tipped-ball INTs aren't always charted worthy. League ≈48.5% pooled 2022–25. Descriptive; never framed as “luck”.

Denominator
intercepted INT-worthy throws / INT-worthy throws
Min n shown
100
Shrinkage
none
Era caveat
Yes — affected by the 2022 (NGS participation) vs 2023+ (FTN) charting break; era notes appear in place.
Source
FTN charting
Registry id
int_worthy_conversion

Share of dropbacks FTN charted as throwaways (is_throw_away).

Denominator
throwaways / QB dropbacks (rps == 'pass')
Min n shown
none (all n shown)
Shrinkage
none
Era caveat
No
Source
FTN charting
Registry id
throwaway_rate

NGS avg_separation — yards between the receiver and the nearest defender at catch/arrival; the receiver's weekly NGS average joined per play.

Denominator
targets with an NGS separation value (weekly player average joined per play)
Min n shown
none (all n shown)
Shrinkage
none
Era caveat
No
Source
NGS weekly
Registry id
separation

Rush Yards Over Expected — the NGS model's actual minus expected rush yards given blocking/box, as a per-attempt weekly average joined per play.

Denominator
carries with an NGS RYOE value (per-attempt weekly average)
Min n shown
none (all n shown)
Shrinkage
none
Era caveat
No
Source
NGS weekly
Registry id
ryoe

Team usage of the FTN play flags (motion, no-huddle, RPO, shotgun, play action, screens) vs the play-weighted league under the same filters. Association, not play-calling causation — the flags are not randomly assigned.

Denominator
Motion / No-Huddle / RPO / Shotgun per scrimmage play (rps %in% c('pass','run')); Play Action / Screen per dropback (rps == 'pass')
Min n shown
100
Shrinkage
none
Era caveat
No
Source
FTN charting
Registry id
tendency_usage_rate

Score = EPA the defense allows on the player's most-TARGETED route families vs league average, weighted by the player's TARGET share on each family (0.5 = league-neutral). Targets are the charted data — routes run are not tracked (ff_opportunity route counts are weekly aggregates and are not wired here). Letter grades curve the Score across the graded (100+ target) players: A = top 20%, B = next 20%, C = middle 20%, D = next 20%, F = bottom 20%.

Denominator
the receiver's charted-route TARGETS overlaid on the opponent's coverage-allowed EPA; graded pool = players with ≥100 targets
Min n shown
100
Shrinkage
reliability curve: sub-100-target scores pulled toward the DISPLAYED population's mean raw score (recomputed from the current filtered field before curving — not a constant 0.5) by min(targets/100, 1); letter grades only for ≥100-target players
Era caveat
Yes — affected by the 2022 (NGS participation) vs 2023+ (FTN) charting break; era notes appear in place.
Source
derived
Registry id
matchup_grade

Targets per game in the pizza-chart metric tables (WR/TE and RB). The denominator is games the player APPEARED in — any offensive involvement on a play: targeted (receiver), carried (rusher), or dropped back (passer) — counted once per season-week. It is NOT games-with-a-target (which doubled the rate for players targeted in half their games) and not official games played: pbp has no participation log, so a zero-touch appearance cannot be counted.

Denominator
distinct season-weeks with any offensive involvement (target OR carry OR dropback) within the filtered sample (compute_player_games_appeared, R/07-utils-pizza.R)
Min n shown
none (all n shown)
Shrinkage
none
Era caveat
No
Source
nflfastR
Registry id
targets_per_game

Percentile of a player's metric vs the qualifying position pool, via the pool's empirical CDF: P(pool ≤ value), so ties share credit. Lower-is-better metrics (INT-Worthy%, TTT, Fumble%, Drop%) use the ECDF of NEGATED values — P(pool ≥ value) — which is tie-symmetric: players tied at the best value all get the top percentile (the old 1 − ECDF form was the strict P(pool > value) and charged every tie).

Denominator
position pool at the qualifying volume (QB ≥100 plays, WR/TE ≥30 targets, RB ≥40 carries), roster positions as pool authority
Min n shown
none (all n shown)
Shrinkage
none
Era caveat
No
Source
derived
Registry id
pizza_percentile

The GM simulator's ledger: the sum of APY over the team's active contracts, plus dead money from simulated cuts. This is an APY-BASED ESTIMATE, not official cap space — real cap hits differ from APY because signing bonuses prorate over up to five years and offseason accounting counts only the top-51 charges, so summing APY exceeds the $301.2M cap for most cap-compliant teams (headroom = cap − commitments is then negative, and the share-of-cap gauge exceeds 100%). Cut/sign/trade moves stay internally consistent in APY units; cap-hit modeling (prorations, restructures) is deliberately deferred.

Denominator
counting stat, not a rate: sum of OTC APY ($M) over the selected team's active contracts + simulated dead money; share of cap divides by the $301.2M 2026 league cap
Min n shown
none (all n shown)
Shrinkage
none
Era caveat
No
Source
OTC
Registry id
apy_commitments

Estimated APY for a simulated free-agent signing. Anchored on the player's own most recent contract APY (the market's last real observation of him); players with no usable prior APY fall back to the position's median APY among recent (2023+) signings. Where the player has recent play-by-play EPA, his EPA percentile within the pool's position group scales the anchor by a bounded 0.6x–1.8x multiplier. An estimate — age, injury, scheme fit, and bidding wars are not modeled, and the anchor lags when the last deal is stale.

Denominator
the free-agent pool: each player's latest inactive contract (year_signed ≥ 2022) for players holding NO active contract; EPA percentile over the pool's position group (whole pool when the group has < 10 EPA-attached players; EPA gates: 50 pass / 20 target / 30 rush plays)
Min n shown
none (all n shown)
Shrinkage
none
Era caveat
No
Source
derived
Registry id
fa_market_value

Points from the actual Jimmy Johnson trade value chart, embedded for all 224 picks (3000 for pick 1, 590 for 32, 100 for 100, 2 for 224); picks 225+ continue the round-7 step (0.3/pick) floored at 1. Replaced (2026-07) an exponential approximation that ran 1.7x–53x high after round 1 and flattened the chart's early-pick premium. Player-for-pick verdicts map the player's APY to a pick equivalent and compare chart points; the JJ chart reflects 1990s trade norms, not modern surplus-value research.

Denominator
not a rate: chart points per pick (1–262); player trade value uses apy_to_pick_equivalent(APY) → pick → chart points
Min n shown
none (all n shown)
Shrinkage
none
Era caveat
No
Source
derived
Registry id
jj_pick_value

How far a defense's coverage identity sits from its season's league norm — the leave-one-out Mahalanobis distance of the identity vector (CLR of 10 smoothed coverage shares + logit man rate + logit blitz 5+ rate) from the season's play-weighted league centroid computed WITHOUT the team, under an OAS-shrunk covariance fit on within-season-centered defense-seasons 2022+ and refit without the scored team. Reported as rank/percentile among the season's 32 defenses only — the reference distribution supports no p-values. Distinctiveness measures difference from the league, NOT quality — a distinctive defense is not thereby a good one.

Denominator
not a rate: distance over the defense's eligible charted non-BLOWN dropbacks (n shown); percentile among the season's 32 defenses
Min n shown
none (all n shown)
Shrinkage
coverage shares via kd_smooth_coverage_mix k=15 (week -> defense-season -> league); man/blitz rates via eb_shrink k=15 toward the league rate
Era caveat
Yes — affected by the 2022 (NGS participation) vs 2023+ (FTN) charting break; era notes appear in place.
Source
derived
Registry id
distinctiveness

Jensen-Shannon divergence (log base 2, bounded 0-1) between week w's smoothed coverage mix and the exponentially decayed trailing mix of the team's PRIOR weeks (half-life 4 weeks, week w excluded; the first two observed weeks are not scored). Because both arms shrink toward the same priors, raw JSD is deflated in low-volume weeks — every week is therefore shown against a multinomial parametric-bootstrap null band (90th percentile of 500 no-change resamples at the true ns), and a week only reads as changed when it clears the band. Within-season only; descriptive — no persistence alerts.

Denominator
week-w charted non-BLOWN dropbacks vs the effective n of the EW-decayed trailing mix (both ns shown)
Min n shown
none (all n shown)
Shrinkage
both arms smoothed via kd_smooth_coverage_mix k=15 toward the defense-season then league mix
Era caveat
Yes — affected by the 2022 (NGS participation) vs 2023+ (FTN) charting break; era notes appear in place.
Source
derived
Registry id
identity_change_jsd

Posterior probability from the frozen defense-archetype Gaussian mixture (mclust on ilr + logit identity vectors of all pooled defense-seasons, within-season centered; model/k selected by ICL; bootstrap-Jaccard stability gates: >= 0.75 named, 0.60-0.75 unnamed pattern, below dissolved to Mixed). Profiles are PROJECTED onto the frozen model — never re-clustered — so posteriors are deterministic. Archetypes describe style relative to the season's league norm, not quality; names are descriptive and unordered.

Denominator
not a rate: posterior probabilities over the frozen mixture components (sum to 1); fit pool = defense-seasons 2022-25 (n = 128)
Min n shown
none (all n shown)
Shrinkage
inputs are the smoothed identity features (kd_smooth_coverage_mix k=15; eb_shrink k=15 for rates)
Era caveat
Yes — affected by the 2022 (NGS participation) vs 2023+ (FTN) charting break; era notes appear in place.
Source
derived
Registry id
archetype_prob

Mean EPA allowed per dropback of the k=5 nearest defense-seasons by the same Mahalanobis identity metric — same charting era only, min-n gated, and always EXCLUDING the team itself (leave-one-out). A descriptive baseline: 'vs stylistically similar defenses', not opponent-adjusted, and similarity of style says nothing about quality — distinctiveness is not success.

Denominator
all dropbacks (rps == 'pass') faced by the k nearest same-era defense-seasons with >= 200 eligible dropbacks, self excluded
Min n shown
200
Shrinkage
none (plain mean over the neighbor defense-seasons)
Era caveat
Yes — affected by the 2022 (NGS participation) vs 2023+ (FTN) charting break; era notes appear in place.
Source
derived
Registry id
similar_def_epa_loo

Jensen-Shannon divergence (log base 2, bounded 0-1) between the hierarchically smoothed coverage mixes immediately before and after a documented defensive play-caller change. The observed divergence is compared with the 90th percentile of 500 multinomial no-change resamples at the two eras' true sample sizes. A shift is descriptive, not a causal effect of the staffing change.

Denominator
charted non-BLOWN defensive dropbacks in the adjacent play-caller segments; both segments require at least 100 eligible dropbacks
Min n shown
100
Shrinkage
both era mixes use kd_smooth_coverage_mix k=15 toward that defense-season and the season league mix
Era caveat
Yes — affected by the 2022 (NGS participation) vs 2023+ (FTN) charting break; era notes appear in place.
Source
derived
Registry id
caller_era_shift_jsd

Observed situation-adjusted output after a disruption event (pressure, hit, sack, INT, strip-sack), relative to this QB's OWN baseline: mean situation-bucket EPA residual on post-event dropbacks minus the same QB's residual on his non-post-event dropbacks reweighted to the post-event situation distribution (difference-in-differences). Reflects selection and mean reversion; descriptive, not a causal bounce-back, never toughness/psychology. Reliability tiers per measured event counts: pressure/hit/sack are per-QB-season viable, INT per-QB only pooled 2022-25, strip-sack league-level only (never per-QB — median 2 per QB-season).

Denominator
genuine dropbacks (qb_dropback == 1; no_play, kneels, spikes, and two-point tries excluded) inside the selected response window — next dropback, rest of drive, next same-QB drive, or rest of game — same game and same passer only; truncated (empty) windows dropped from denominators, never scored 0
Min n shown
20
Shrinkage
eb_shrink k=25 toward the league DiD; 95% CI from a game-clustered bootstrap (B=500) on the unshrunk DiD
Era caveat
No
Source
derived
Registry id
after_event_epa_did

The same within-QB DiD computed after a situation-matched bad play that was NOT the event: non-event dropbacks with EPA below the QB's own median, importance-weighted by situation bucket to match the real event's situation distribution. Shown beside the event DiD so the event-specific increment separates from generic bad-moment reversion — if the event and placebo deltas match, the 'response' is ordinary mean reversion, not something the event caused. Reflects selection and mean reversion; descriptive, not a causal bounce-back, never toughness/psychology.

Denominator
same response-window dropbacks as the event DiD, with placebo events = situation-matched non-event dropbacks below the QB's median EPA; same guards (truncated windows dropped, turnover plays empty the rest-of-drive window)
Min n shown
20
Shrinkage
eb_shrink k=25 toward the league placebo DiD; game-clustered bootstrap CI (B=500)
Era caveat
No
Source
derived
Registry id
after_event_placebo

The set of dropbacks scored as the response to a disruption event, under seven sequencing guards: plays ordered by game_id + play_id (monotonicity asserted); no_play/penalty-nullified snaps are skipped, never counted as the response; kneels, spikes, and two-point tries excluded; 'next drive' means the next drive with the SAME offense AND the SAME passer (never naively fixed_drive + 1, which is usually the opponent); a turnover on the event play empties the rest-of-drive window; truncated windows are dropped from denominators, not scored 0; and a benched QB's window resumes on his return without bridging the backup's plays. Post-event numbers reflect selection and mean reversion; descriptive, not a causal bounce-back, never toughness/psychology.

Denominator
events with at least one same-game, same-passer response dropback in the window (next dropback / rest of drive / next same-QB drive / rest of game); dropped-window counts are reported
Min n shown
none (all n shown)
Shrinkage
none (window definition, not an estimate)
Era caveat
No
Source
derived
Registry id
event_response_window

Model-estimated probability that a thrown ball is intercepted, summed over a QB's throws. Post-throw XGBoost model (air yards, pass location, coverage scheme incl. busted coverages, man/zone, pressure, time to throw, contested-ball, down/distance/field/score/clock, box, rushers) trained on charted attempts 2022-25 with cross-fit Platt-or-beta calibration, so probabilities sum honestly against the ~2.3% league INT rate. Deliberately EXCLUDES catchable-ball and INT-worthy charting (outcome-adjacent / the human label itself) and any QB or receiver identity — it scores the throw's danger, not the player. Promotion gates: beat league-rate, air-yards-bucket, and depth+situation baselines on log-loss in both expanding out-of-time folds, plus cross-fit calibration slope/intercept within tolerance (models/xint_oot_eval.json).

Denominator
charted pass attempts: rps == 'pass', pass_attempt == 1, sack == 0, FTN-charted coverage, down 1-4 — throwaways included (real throws with near-zero INT risk), two-point tries excluded (no down)
Min n shown
none (all n shown)
Shrinkage
none (calibrated model probability)
Era caveat
Yes — affected by the 2022 (NGS participation) vs 2023+ (FTN) charting break; era notes appear in place.
Source
derived
Registry id
xint

Actual interceptions minus expected interceptions (xINT) over the same throws. Positive = more picks than the danger of the throws implies; negative = fewer. Descriptive — reflects ball placement, defender plays, and variance; never framed as 'luck'. Leaderboards are built ONLY from out-of-fold predictions (each season scored by a model trained on prior seasons, calibrated cross-fit), never in-sample fits.

Denominator
the QB's xINT-eligible charted attempts in the selected window (out-of-fold seasons only for leaderboards)
Min n shown
200
Shrinkage
none
Era caveat
Yes — affected by the 2022 (NGS participation) vs 2023+ (FTN) charting break; era notes appear in place.
Source
derived
Registry id
int_over_expected
Connect