The Tells Board answers "what does this opponent tend to do." The Threat Board answers "who drives those tendencies, and how do they match up against Tampa Bay this week." This isn't a claim that these grades are universally better than a service like PFF — it's a much narrower one: how much a player matters against Tampa Bay specifically, this season.
Threat answers one question: "how much should
Tampa Bay worry about this player this week?" It is a percentile, not a standardized grade — where this
player's raw projected weekly impact ranks among eligible
positional peers (below-threshold players are labeled LOW PROJECTED ROLE and excluded from that ranking
population so a bench player can't distort real starters' ranks).
Threat 92 means roughly top-8%-level among relevant weekly peers —
not "8 points below elite."
It is explicitly not a weighted average of Quality, Role, and Matchup (that was the v1 formula, since replaced). Instead it's computed in raw expected-value units first:
ProjectedImpact = ProjectedOpportunities × ExpectedValuePerOpportunityVsTB
— summed across every opportunity type a player has (an RB sums rushing and receiving value separately, for example) — and then converted to a percentile. A high-volume average player can outrank a low-volume elite one if he's projected to produce more total positive value, exactly like real usage does.
Each carries its own A/B/C confidence, not one badge for the whole card:
grade_scope (e.g. a WR's
Quality is receiving only — blocking is explicitly excluded, not
silently ignored). Shrunk toward a same-season league average
before z-scoring, then mapped to a 0–100 scale where 50 is
roughly league average (clip(50 + 15·z, 0, 100)).
Independent of both Role and Matchup by construction — a
player's Quality doesn't move because his role changed or
because he's facing a good or bad Tampa Bay defense.
Quality and Matchup are both 0–100 standardized grades (50 = average performer / neutral matchup, each 15 points ≈ one standard deviation) — but they answer different questions, so each has its own label. Threat is not a standardized grade at all: it's a percentile — where this player's projected weekly impact ranks among eligible positional peers, including projected opportunity. A Threat of 92 means roughly top-8%-level among relevant weekly peers; it is not "8 points below elite."
| Grade | Meaning |
|---|---|
| 90-100 | Elite |
| 80-89 | Very Good |
| 65-79 | Above Average |
| 45-64 | Average Range |
| 30-44 | Below Average |
| 0-29 | Poor |
| Grade | Meaning |
|---|---|
| 80-100 | Very Favorable |
| 65-79 | Favorable |
| 45-64 | Neutral / Mixed |
| 30-44 | Unfavorable |
| 0-29 | Very Unfavorable |
| Percentile | Meaning |
|---|---|
| 90-100 | Elite Weekly Threat |
| 80-89 | High Threat |
| 65-79 | Above-Average Threat |
| 40-64 | Moderate Threat |
| 20-39 | Low Threat |
| 0-19 | Minimal Projected Threat |
Projected Role is shown in football units (carries, targets, dropbacks, snaps) — not another 0–100 grade — because "how much will he play" is more useful as a number of touches than a standardized score. Confidence (A/B/C) is tracked separately for Quality, Matchup, and Threat, since the evidence behind each can differ even for the same player.
Every raw metric is blended toward a same-season league prior before being z-scored, weighted by how much sample the player actually has. A receiver who caught 3 passes in Week 1 doesn't get a 96 grade — his number gets pulled hard toward league average until his sample grows.
Grading only goes as deep as the publicly available data supports. Rather than invent precision nobody can verify, the Threat Board uses three tiers:
matchup_method: "team_environment" everywhere it's used.
Confidence is capped at B regardless of sample size, since the
underlying data itself is coarser, not just smaller.
Every unit shows two separate team-level numbers that are allowed to disagree: Personnel Quality is a roster estimate — the Role-weighted average of the individual players' Quality grades (only meaningful for QB/RB/WR/TE/Edge/Interior DL; null for OL/LB/Secondary, since no individual rollup is invented there). Unit Performance is what the team has actually produced on the field this season. For OL, Linebackers, and Secondary, Unit Performance is context-adjusted — it compares each team's outcome (pressure rate, run-stuff rate, EPA allowed) against what a league-average unit would have produced facing that exact same mix of situations (pass-rusher count, box count, pressure presence), not the raw leaguewide rate. A team with good personnel can still have below-average results, and vice versa — that gap is itself information.
Narrative bullets are generated from plain string templates driven by the same computed facets, in five fixed slots — role, primary strength, primary weakness, Tampa Bay relevance, and a confidence/sample warning — each filled only when the data actually supports it. A weakness bullet is never invented when nothing is actually below league average, and a candidate is never selected from a metric family (e.g. two different efficiency stats) that's already been used by another bullet. Every eligible player card also gets up to six automatically selected evidence plays — matchup-relevant positive and negative plays plus a recent representative play of each — chosen by the same completeness/relevance logic, not hand-picked. None of this is written or polished by a language model; the numbers decide the grades and the bullets, not the other way around.
Top Threats simply ranks every graded player by Threat. Attack Points — where Tampa Bay can attack this opponent — is restricted to claims the data can actually support: a weak Offensive Line or run-defense Matchup at the unit level, or a skill-position player whose own projected value against TB is directly measured and negative. Consistent with the rest of the board, an Attack Point is never an individual lineman, linebacker, or defensive back blamed without attribution data.
Slot/outside alignment, per-route data for non-targeted receivers,
run-concept classification (zone/gap/power), and individual
defensive-back coverage assignment aren't available in any publicly
ingested source used here, so no facet claims to measure them. A
licensed hand-charted dataset (e.g. Fantasy Points) could add these
later — the underlying schema already records a source
per fact so that becomes additive, not a rewrite.
The first time a given week's matchup is published, it's saved as
an immutable official snapshot. Any later refresh —
a data update, a model change — is saved as a new numbered
revision, never overwriting the original. That's what
makes an honest postgame audit possible later: seeing exactly what
was believed and when, not just the latest belief.