What is XFP?

Math hurt brain? You're covered.

Fantasy production is driven by opportunity and execution. XFP (Expected Fantasy Points) is a reflection of the fantasy points a player would end up with on average, given the opportunity they received, independent of the outcome. We use statistical modeling in order to quantify this opportunity, using things like the yard line of the play, whether it was a run or pass, depth of target, etc. By summing play-level predictions, we can measure a player's expected production over a game, season, or career. The core insight: XFP isolates opportunity quality, allowing us to identify players who are getting good usage but have been unlucky (positive regression candidates) or those riding unsustainable efficiency (negative regression candidates). By supplementing a player's XFP and FP history with advanced stats, we can better calibrate our expectations for a player in the coming season.

What is OEX%?

OEX% (Over Expectation %) measures how much a player exceeded or fell short of their expected fantasy points — the metric for execution. If a player's XFP says they should have scored 15 points but they actually scored 18, their OEX% is +20%. It's the gap between opportunity and production — the part of fantasy scoring that isn't explained by role and usage alone. Generally speaking, players who have very high OEX% are due for serious regression in the following year, but the question is how much?

Based on our research, OEX% is mostly noise, but not entirely. In specific circumstances (same coaching scheme, high-volume players, certain positions like TE), OEX% can carry meaningful signal year-over-year. Across the site, OEX% is shown alongside XFP at the player, team, and coach level so you can see both sides of the equation.

What is Adj GP?

Adj GP (Adjusted Games Played) accounts for partial games due to injury or rest. Take for example a situation that's common in the NFL: a QB only plays one quarter in a meaningless week 18 game, or a receiver gets benched for bad behavior halfway through a game. If trying to get a gauge on their true fantasy value over the course of the season, and their true usage over the course of a season, only considering "active" status isn't the best way to capture it. By only considering quarters where the player played at least 1 snap, we can cut through some of the noise of raw game counts. Why do we do it? Well, the proof is in the pudding: XFP and FP per Adj Game has better predictive power than XFP and FP by the raw game totals (+0.7% overall). Across the site, anywhere you see GP — know it's a better reflection of reality.

How to Use XFP and OEX to Gauge Future Performance

  • Identifying Regression Candidates: Players with very high OEX% relative to their career averages (actual > expected) may regress downward; those with very low OEX% may bounce back. XFP tells you what their role is worth — OEX% tells you how much of the outcome was earned vs. lucky.
  • Evaluating Role Changes: When a player leaves a team, XFP shows exactly how much opportunity is up for grabs. The new player inherits the XFP, not the OEX%.
  • Separating Opportunity from Execution: Compare XFP/G to see who's getting the best usage, then check OEX% to see who's converting. Typically, a player with high XFP and low OEX% is a buy-low candidate; high OEX% on low XFP is a sell-high.
  • Avoiding Box Score Traps: A player's target count alone doesn't tell you if those targets were downfield throws or dump-offs. XFP properly quantifies the target value, and OEX% tells you whether the player's production was sustainable.
  • Team Tendencies: By leveraging XFP, we can see what share of the opportunity pie went to which players, and whether a team leaned more on passing, rushing, or QB scrambling inside and outside the red zone.

Model Architecture

Rather than building one monolithic model, xfpGM uses position-specific models for each play type. Click to see features:

Design goals: Our models aim to capture all plays that generate fantasy points without missing edge cases (sacks, laterals, 2PT conversions). We deliberately avoid features that indicate team strength outright — no team identifiers, no opponent adjustments in the model itself. The goal is pure opportunity measurement.

Related Metrics

For definitions of XFP, OEX%, Adj GP, and all other metrics used on this site, see the Data Catalogue, or check out any tooltip ? across the site tables.

Read next: XFP Model Validation →