Edition 1·Updated 2026-10-03·11 min read
Sources
About this book
An overview of the book, with source information for further reading.
Football Analytics with Python R
Eric A. EagerRichard A. EricksonA practical guide to applying statistical modeling and data science techniques using Python and R to analyze American football data for purposes ranging from team analysis to sports betting and fantasy football.
Are you a football fan wanting to gain a competitive edge in your fantasy league, interested in sports betting, or aspiring to become a professional analyst? 'Football Analytics with Python & R' provides a clear, hands-on introduction to using statistical models to analyze football data. Authors Eric Eager and Richard Erickson guide you through real-world case studies, teaching you how to obtain, visualize, and model NFL data using both Python and R. You'll learn to build metrics like Rushing Yards Over Expected (RYOE) and Completion Percentage Over Expected (CPOE), evaluate draft picks, and even apply data science to sports betting. This book is your starting place for transforming complex football data into accessible wisdom, whether your goal is to dominate your league or simply learn data science with fun, practical examples.
Movement I
Orient
What this book claims, and who wrote it.
- — The book's one-line promise
- — The author and where the book stands
A practical guide to applying statistical modeling and data science techniques using Python and R to analyze American football data for purposes ranging from team analysis to sports betting and fantasy football.
The need-to-know
Context is crucial in football analytics; raw stats can be misleading without adjusting for situational factors like down, distance, and field position. Statistical modeling (like linear and logistic regression) allows us to create 'over expected' metrics (e.g., RYOE, CPOE) that better isolate individual player skill from the situation. Not all statistics are equally predictive; stability analysis helps identify which metrics are 'signal' (repeatable skill) and which are 'noise' (random variance).
About this guide
The guide describes these challenges, steps and possible outcomes.
Who it is for
An aspiring football analyst, a savvy fantasy football player, or a curious sports fan who wants to go beyond surface-level statistics and use data to gain a deeper, more objective understanding of the game.
Challenges
- In practice · They rely on traditional, often misleading, raw statistics (like total yards or completion percentage) which don't account for crucial game context, leading to flawed player evaluations and poor predictions.
- For the reader · They feel frustrated and overwhelmed by the complexity of football analytics, and unsure how to start using programming and statistics to answer their own questions about the game.
Steps to consider
- 1Learn to obtain and wrangle real NFL data using Python and R.
- 2Master exploratory data analysis to visualize and understand key football metrics.
- 3Apply regression models to create context-adjusted performance metrics like RYOE and CPOE.
- 4Extend your skills to sports betting, draft analysis, and player attribute classification.
- 5Discover advanced tools and next steps to continue your analytics journey.
Risks
Continuing to rely on flawed, context-free stats and gut feelings. Falling behind in an increasingly quantitative sports landscape.
Intended result
Becoming empowered to answer their own questions about football using data. Gaining a significant edge in their fantasy football leagues and sports betting.
Set the record straight
What this book sets straight
The common beliefs this book pushes back on.
Raw statistics like completion percentage or yards per carry are the best way to evaluate player performance.
Player performance should be evaluated using context-adjusted metrics, such as Completion Percentage Over Expected (CPOE) or Rushing Yards Over Expected (RYOE), which account for situational factors.
The value of a running back is immense, and they are a cornerstone of a winning team.
The impact of an individual running back on rushing production is less significant than other factors like offensive line play, and passing is generally more efficient than running; therefore, investing heavily in the running back position may not be a wise use of resources.
Evaluating football is purely an art form based on watching the game and gut feeling.
Statistical analysis and data science provide scalable, objective tools to tell more accurate stories about the game, evaluate players, and inform decision-making.
Movement II
Map
The book's main ideas and how they connect.
Football Analytics with Python R's own model — and how it sits inside its field.
- — 5 constructs the book works with
- — Where it agrees with the field, exceeds it, or fills a gap
The constructs
How they connect (5)
- Situational Context → influences → Actual Player Performance
- Actual Player Performance → influences → Performance Over Expected
- Situational Context → predicts → Performance Over Expected
- Performance Over Expected → influences → Metric Stability and Predictiveness
- Metric Stability and Predictiveness → influences → Talent Evaluation Accuracy
Where this book diverges from the corpus
- fills gap The name overlaps with Collective Situational Awareness, but that construct is a team's shared perception of the game, whereas the book means play-level game-state variables that constrain a player's opportunity, so the field has nothing equivalent.
- fills gap The field has no construct for individual observed statistical output; it only mentions personal statistics as something to subordinate (Selflessness) and measures team outcomes (Sustained Winning Performance).
- fills gap The book offers a context-adjusted way to isolate a player's value above an average baseline, and nothing in the field's leadership-and-culture model quantifies individual contribution.
- fills gap The book's test of whether a metric is repeatable year over year and so reflects true talent is a measurement-validity concern that the field's constructs do not address.
- fills gap The book addresses how well analysts and teams assess and predict player skill for acquisition and roster decisions, whereas the field concentrates on developing and leading players and does not cover evaluating them.
Movement III
Master
Explore the book's ideas, examples and practical tools.
How the author makes the case — section by section, with the book's own tools.
- — 5 sections, in the book's order
- — The book's frameworks, checklists, and worked cases
strong · 1 source
- Football Analytics with Python R
This section defines the game-state and play-level variables that set the baseline for any football outcome. You get a working list of features to model and the rules for choosing them.
Situational Context
The set of game-state and play-specific variables that constrain or influence a player's opportunity for success, independent of their own skill. This context forms the baseline for expected performance.
Why it matters. If you omit or mis-specify context such as down, distance, field position, or defensive look, every later metric credits or blames players for circumstances they did not control.
Myth
Context means the scoreboard situation: down, distance, and field position are enough to describe what a play asked of the player.
Reality
Game-state variables capture only part of a play's difficulty. Pre-snap and tracking-level factors such as box count, defenders' separation, time to throw, and pressure often drive the outcome more than down and distance do, and which of them you can use depends on your data source.
- Situational ContextFramework — How this mechanism is run, step by step, as the literature describes it.
- Situational ContextCase study — Compare short and long passes in the book's play-by-play data.
- Define context as only what is knowable at or before the snap and outside the player's control.
- Down, distance, and field position are a floor, not a full description; tracking features add the most explanatory power where they exist.
- Audit every feature for leakage from the outcome or from the player's own skill before it enters a model.
The deep drill-down: 8 operational steps, a worked example from the source, 5 decision rules, 5 failure modes, and the “Situational Baseline Worksheet” tool. Included when you buy this guide.
The rest of this section
the full written section · 4 how-to steps · 2 pitfalls to watch for · 2 tools for this section. Included when you buy this guide.
Grounded in: Football Analytics with Python R
strong · 1 source
- Football Analytics with Python R
This section covers the raw outputs you observe: yards, completions, touchdowns, and the plays behind them. It shows how to record them so they can be compared fairly with a baseline.
Actual Player Performance
The raw, observed statistical output of a player's action on a given play or set of plays, such as yards gained, a pass completion, or a touchdown scored.
Why it matters. Raw outcomes are the only ground truth you have, but taken at face value they reward players for good situations and sample luck, so mishandling them corrupts every downstream comparison.
Myth
Counting stats like yards and touchdowns directly show how good a player is, and the leaderboard is a ranking of talent.
Reality
Observed output is the sum of skill, context, and noise, and the leaderboard mostly sorts opportunity. Treat raw production as the measurement to be explained, not the conclusion.
- Actual Player PerformanceFramework — How this mechanism is run, step by step, as the literature describes it.
- Metric Stability and PredictivenessFramework — How this mechanism is run, step by step, as the literature describes it.
- Performance Over ExpectedFramework — How this mechanism is run, step by step, as the literature describes it.
- Actual Player Performance — decision rulesChecklist — 5 checkpoints
- Actual Player PerformanceCase study — Take Adrian Peterson's 2012 season, which the source describes as over 2,000 rushing yards while carrying an otherwise-bad Minnesota Vikings team to the playoffs.
- Performance Over ExpectedCase study — The source's motivating problem is that raw yards ignore context.
- Actual Performance Audit SheetTemplate
- Metric Stability Audit SheetTemplate
- Over-Expected Metric Build SheetTemplate
- Situational Baseline WorksheetTemplate
- Keep raw output at the play level with attached opportunity counts so it can be adjusted later.
- Volume totals measure usage as much as skill; pair them with per-play rates and sample sizes.
- Observed results are the input to the evaluation, never the final judgment of a player.
The deep drill-down: 8 operational steps, a worked example from the source, 5 decision rules, 5 failure modes, and the “Actual Performance Audit Sheet” tool. Included when you buy this guide.
The rest of this section
the full written section · 3 how-to steps · 2 pitfalls to watch for · 10 tools for this section. Included when you buy this guide.
Grounded in: Football Analytics with Python R
strong · 1 source
- Football Analytics with Python R
This section shows how to turn observed output and situational context into a single above-or-below-baseline measure, such as completion percentage over expected, rushing yards over expected, or EPA over expected. You will build the baseline model and compute the residual.
Performance Over Expected
A measure of a player's performance above or below a statistically established baseline, which accounts for the situational context of the play. It represents the value a player adds beyond what an average player would be expected to produce in the same circumstances.
Why it matters. A well-specified baseline isolates what a player added beyond his circumstances, while a poorly specified one just repackages volume or context as skill.
Myth
A positive over-expected number proves the player is better than average, because the model has already removed the context.
Reality
The residual is only as clean as the baseline. Anything the model leaves out, such as blocking quality or scheme, is credited to the player, and the baseline is itself estimated with error. Read the number as a noisy estimate of player effect.
- Over-expected measures are residuals, so their quality depends entirely on the baseline model.
- Use out-of-fold expectations so no play predicts itself.
- Report the over-expected value with its sample size and an uncertainty range, not as a bare ranking.
The deep drill-down: 8 operational steps, a worked example from the source, 5 decision rules, 5 failure modes, and the “Over-Expected Metric Build Sheet” tool. Included when you buy this guide.
The rest of this section
the full written section · 4 how-to steps · 2 pitfalls to watch for. Included when you buy this guide.
Grounded in: Football Analytics with Python R
strong · 1 source
- Football Analytics with Python R
This section gives you the tests for whether a metric reflects repeatable skill: year-over-year correlation, split-half reliability, and out-of-sample prediction. It tells you how to run them and how to read the results.
Metric Stability and Predictiveness
The degree to which a performance metric is repeatable over time (e.g., year-over-year) and therefore predictive of future performance. A more stable metric is considered a better indicator of true talent.
Why it matters. A metric that does not repeat will send you chasing last year's luck, so measuring stability before you rely on a number saves you from building decisions on noise.
Myth
A metric that is highly correlated with winning or with past results is a good one, regardless of whether it repeats.
Reality
Explaining past outcomes and predicting future ones are different jobs. Metrics like interception rate fit the past well but barely persist, while stable ones like pressure rate or target share carry forward, and stability varies by position and sample size.
- Talent Evaluation AccuracyFramework — How this mechanism is run, step by step, as the literature describes it.
- Metric Stability and Predictiveness — decision rulesChecklist — 5 checkpoints
- Performance Over Expected — decision rulesChecklist — 5 checkpoints
- Situational Context — decision rulesChecklist — 5 checkpoints
- Metric Stability and PredictivenessCase study — The source's anchor case is baseball.
- Player Metric Stability & Buy/Sell Evaluation SheetTemplate
- Test repeatability directly with year-over-year and split-half correlations before trusting any metric.
- Low-stability metrics need heavy regression toward the mean, with the amount set by the measured reliability.
- Stability depends on position and sample size, so report it separately for each group.
The deep drill-down: 8 operational steps, a worked example from the source, 5 decision rules, 5 failure modes, and the “Metric Stability Audit Sheet” tool. Included when you buy this guide.
The rest of this section
the full written section · 4 how-to steps · 2 pitfalls to watch for · 6 tools for this section. Included when you buy this guide.
Grounded in: Football Analytics with Python R
strong · 1 source
- Football Analytics with Python R
This section turns stable metrics into evaluations you can check against what players actually do next. It covers how to measure whether your assessments of draft picks, free agents, and starters were right.
Talent Evaluation Accuracy
The ability of an analyst, scout, or team to correctly assess a player's true skill level and predict their future performance, leading to better decision-making in player acquisition and roster construction.
Why it matters. Roster and contract decisions are expensive and slow to reverse, so an evaluation process whose accuracy you never measure will keep repeating its errors.
Myth
Accurate evaluation comes from finding the single best metric, and once you have it the rankings can be trusted.
Reality
Accuracy comes from combining stable metrics with context, uncertainty, and a record of past predictions you can score. A single metric, however good, leaves out injury, role change, and age, and without back-testing you cannot know whether your calls beat a simple benchmark.
- Talent Evaluation Accuracy — decision rulesChecklist — 5 checkpoints
- Talent Evaluation AccuracyCase study — The drafting-skill test shows both the method and the humility it demands.
- Measure evaluation accuracy by out-of-sample prediction error against a naive benchmark, not by narrative.
- Express forecasts with intervals so decisions reflect uncertainty, and judge them over many players, not single outcomes.
- Treat misses as inputs: classify them by cause and fold what you learn back into the metrics and baselines.
The deep drill-down: 8 operational steps, a worked example from the source, 5 decision rules, 6 failure modes, and the “Player Metric Stability & Buy/Sell Evaluation Sheet” tool. Included when you buy this guide.
The rest of this section
the full written section · 4 how-to steps · 2 pitfalls to watch for · 2 tools for this section. Included when you buy this guide.
Grounded in: Football Analytics with Python R
Movement III · The run-it-now depth
The Playbook
Practical tools and examples from this guide.
Frameworks
Actual Player Performance
How this mechanism is run, step by step, as the literature describes it.
- 1Fix the unit of observation first. Actual performance is one row per play from play-by-play data (the book uses nflfastR in R or nfl_data_py in Python). Name the outcome you are recording: yards gained, pass completed, touchdown scored. Do not mix outcomes in one column.
- 2Record the raw output untouched. Keep yards gained, the completion flag, and the touchdown flag exactly as logged. Do not adjust, cap, or smooth them. This column is the 'actual' side of every later comparison.
- 3Attach the situation to every play without altering the output. At minimum keep down and ydstogo (yards left to a first down or score) for rushes, and air yards (distance from the line of scrimmage to the intended receiver) for passes. Raw output is uninterpretable without the conditions it was produced under.
- 4Aggregate by player and report the sample alongside the total. Sum or average the raw output (for example, yards per carry or yards per attempt) and always print the play count next to it. A rate with no denominator hides how little evidence sits behind it.
- 5Split passing output by type before you read it. Chapter 2 separates deep passes from short passes to partition a quarterback's production into stable and unstable parts. A single pooled passing number mixes the two.
- 6Treat the raw number as the numerator of a residual, not as a verdict. RYOE is actual rushing yards minus the model's expected yards. CPOE is actual completion outcome minus modeled completion probability. Compute the actual number cleanly, then compare it with what the situation predicted.
- 7Test whether the raw figure persists. Compare a player's actual output in one year with the next. The book's regression-to-the-mean example is a back with above-average yards per carry one year, who is statistically expected to drift back toward the league average. If the number does not persist, do not forecast with it.
- 8Report actual and residual side by side. State what happened (actual), what the situation predicted (expected), and the gap. The actual number alone cannot separate player skill from play context.
Metric Stability and Predictiveness
How this mechanism is run, step by step, as the literature describes it.
◆ The full 8-step framework — included with this guide purchase
Performance Over Expected
How this mechanism is run, step by step, as the literature describes it.
◆ The full 8-step framework — included with this guide purchase
Situational Context
How this mechanism is run, step by step, as the literature describes it.
◆ The full 8-step framework — included with this guide purchase
Talent Evaluation Accuracy
How this mechanism is run, step by step, as the literature describes it.
◆ The full 8-step framework — included with this guide purchase
Checklists
Actual Player Performance — decision rules
- If you are about to rank players on a raw total (yards, completions, touchdowns), then first record the play count and the situation fields, and only then rank.
- If the output is a passing rate, then split it into deep and short passes before reading it. Treat the two parts as separate evidence.
- If a player's raw rate is well above or below league average in a single year, then expect regression toward the average and do not project the full gap forward without a year-over-year check.
- If you want to credit or blame the player rather than the situation, then subtract a modeled expectation (RYOE for rushing, CPOE for passing) and judge the residual, keeping the raw number as context.
- If a metric does not help predict what you care about year after year, then do not build decisions on it, even if it looks decisive in high-leverage moments like third-down conversions.
Metric Stability and Predictiveness — decision rules
◆ All 5 checkpoints — included with this guide purchase
Performance Over Expected — decision rules
◆ All 5 checkpoints — included with this guide purchase
Situational Context — decision rules
◆ All 5 checkpoints — included with this guide purchase
Talent Evaluation Accuracy — decision rules
◆ All 5 checkpoints — included with this guide purchase
Case studies — including what didn't work
Actual Player Performance
Take Adrian Peterson's 2012 season, which the source describes as over 2,000 rushing yards while carrying an otherwise-bad Minnesota Vikings team to the playoffs. That is a clean actual-performance fact: a large season total of rushing yards, and it earned him the last nonquarterback MVP. Stopping there invites the conclusion that the back made the offense. The book's approach asks for more. Rushing is less efficient than passing on yards per play and EPA, and swapping one running back for another does not change rushing production the way swapping quarterbacks, receivers, or linemen does. So you keep the 2,000-plus yards as the actual number, then ask what a model using situation (such as ydstogo in the simple version, tracking data in the Big Data Bowl version) expected on those same carries. The gap, RYOE, is the part attributable to the rusher. You then check whether that gap holds from one season to the next, since an above-average yards-per-carry year is expected to regress. The same logic sits behind Saquon Barkley going second overall in 2018 and drawing criticism from analytics people. The raw production was visible; whether it was player-driven was the open question the book sets out to test in Chapters 3 and 4. The source does not give Peterson's expected-yards figure, so the comparison step stays a procedure, not a number.
Metric Stability and Predictiveness
The source's anchor case is baseball. Walks, strikeouts and home runs, the 'three true outcomes', were the easiest to predict from one season to the next. What batted balls did once in play was noisier and drove most of the perceived year-to-year variance. The lesson is to buy the repeatable outcomes and discount the noisy ones. For football, the RYOE model works the same way. It fits rushing_yards ~ 1 + ydstogo, with an intercept of 3.2188 and a ydstogo slope of 0.1329, on about 92,425 rushing plays. A rush with 2 yards to go is expected to gain about 3.2188 + 0.1329×2 ≈ 3.5 yards (the book rounds the coefficients and writes 3.4). A back who gains 6 on that play has a residual of about +2.5. Summing or averaging those residuals by player gives RYOE. The model's R² is only 0.007, so this expectation is weak and the residual is mostly the raw yards minus a near-constant. That is why the test matters. You then compare each back's RYOE in season N with season N+1, and do the same with raw yards per carry. Whichever correlates better across seasons is the more stable metric. The passages pose this comparison but do not report the resulting stability numbers, so you must run it.
◆ What happened, and the outcome — included with this guide purchase
Performance Over Expected
The source's motivating problem is that raw yards ignore context. A receiver gains 7 yards when 8 are needed for a first down or touchdown, and no first down results. Another player gains 5 yards when 5 are needed, and the drive continues. Raw yardage ranks the 7-yard gain higher, but the 5-yard gain did more for the offense. A model that conditions on distance to go captures this. The book builds that logic in three steps. Chapter 3 fits a simple linear regression for rushing yards. Chapter 4 adds down and distance to make RYOE. Chapter 5 fits a logistic regression for completion probability from situational factors such as air yards (the distance from the line of scrimmage to the intended receiver). For a pass, suppose the model gives a 0.65 completion probability (an illustrative number, not from the book). A completion yields a residual of +0.35 and an incompletion yields -0.65. Averaged over a quarterback's passes, this is CPOE. The final step is the stability test: check whether a quarterback's CPOE in one season predicts the next better than his plain completion percentage does. The authors call CPOE one of the most predictive quarterback metrics available.
◆ What happened, and the outcome — included with this guide purchase
Situational Context
Compare short and long passes in the book's play-by-play data. Short passes: mean EPA 0.1196, standard deviation 1.43, 25th percentile -0.61, 75th percentile 0.96. Long passes: mean EPA 0.3826, standard deviation 2.19, 25th percentile -0.83, 75th percentile 2.14. Long passes carry a higher mean EPA but a much wider spread. The long-pass median EPA is -0.465, so the typical long attempt loses expected points while a few big hits lift the mean. Passing yards show the same pattern: the long-pass mean is 12.17, the median is 0, the 75th percentile is 26, and the maximum is 98. A quarterback who throws deep therefore faces a different baseline and more variance than one who throws short. Judging both on raw yards per attempt or completion percentage mixes skill with the situation. Modeling the situation first (as CPOE does) and then examining the residual separates the two.
◆ What happened, and the outcome — included with this guide purchase
Talent Evaluation Accuracy
The drafting-skill test shows both the method and the humility it demands. Instead of asking whether a team's picks were good, the analysis measures DrAV_OE, a team's draft value over what its pick slots would predict, so a team that always picks late is not penalized. It builds a 95% confidence interval around each team's DrAV_OE. If the interval contains 0, the team is not distinguishable from average. If DrAV_OE sits above the interval, the team did statistically better than average. If it sits below, worse. Only four teams cleared the bar: the Steelers and Packers were significantly better, and the Raiders and Browns significantly worse. Most front offices cannot be separated from average. That matches the research that over a typical GM or coach tenure it is very hard to discern drafting talent. The Raiders' 2018 Khalil Mack trade shows the cost of a poor selection process: two first-round picks came back, but the best pick of the bunch was Josh Jacobs. More picks give more chances, but the hit rate still depends on evaluation accuracy.
◆ What happened, and the outcome — included with this guide purchase
Templates
Actual Performance Audit Sheet
Metric Stability Audit Sheet
◆ The fillable template — included with this guide purchase
Over-Expected Metric Build Sheet
◆ The fillable template — included with this guide purchase
Situational Baseline Worksheet
◆ The fillable template — included with this guide purchase
Player Metric Stability & Buy/Sell Evaluation Sheet
◆ The fillable template — included with this guide purchase
Items marked Paid are included when you buy this guide.
Movement IV
Reflect
Consider the book's evidence, limitations and how it compares with other sources.
How good is it — where the book stands against the field, what it leaves open, and when to trust it.
- — Its positioning, its critique, its blind spots
- — When to apply it — and when not
- — The evidence behind the advice
Book profile · in the corpus
This book’s model, against the corpus
0 of 5 constructs align with the field · 5 the book adds · 0 where it diverges · the field spans 18 constructs across 4 books
This book's own emphasis — where it's the authority
The corpus adds — from 3 other sources this book doesn't cover
The full field guide folds in ideas this book doesn’t reach — drawn from 3 further sources and cited in the full model.
This book’s place in the corpus
Why the corpus guide, not just this book
The book stands on sports-analytics and sabermetric traditions of separating skill from context, and it is the authority on measuring individual performance, stability and talent evaluation. The reconciled field-guide still adds the human side the book leaves out (culture, trust, leadership, character, and collective awareness), which explains why talent turns into sustained winning.
This guide stands on the shoulders of this book and 3 other sources — every claim cited, the disagreements named.
Read it closely
The book, examined
Not a summary — a close analytical reading: how the book is built, what it leaves open, and where it falls short.
How it’s built — the argument in order
- 01Front matter, framing and purpose — Presents the book as a case-study-driven, hands-on route into football analytics with Python and R. It aims at fans, bettors, fantasy players and aspiring analysts, and endorsements stress both coding instruction and football storytelling.
- 02Analyst's mindset: scouting and statistics as the same process — Argues that statistical evaluation resembles scouting. Both need the right data to interrogate, the right production metrics, situational factors to control for, and information to discard. Skill comes from deliberate practice. Cites Tukey (a right-but-approximate answer beats a precise answer to the wrong question) and says statistics scale in a way scouting cannot.
- 03Getting and checking data (play-by-play) — Shows how to obtain and wrangle NFL play-by-play data in both languages. Builds grouped dataframes such as quarterback-season passing yards per attempt split by short and long air yards, and adds a lagged prior-season column. Models the habit of verifying code ('trust but verify', inspecting with info()/glimpse()) rather than assuming it is right.
- 04Stability analysis: signal versus noise — Introduces stability, meaning how much of a player's past performance transfers to another setting versus how much is variance. Compares a metric with its prior-season value (ypa vs. ypa_last) to tell repeatable skill from noise. Suggests buy-low candidates are players who do well on stable components and poorly on unstable ones.
- 05Simple regression and the running back question — Uses simple linear regression to ask whether running backs matter, supporting the claim that passing is more efficient than running and that individual running back contribution is smaller than commonly believed.
- 06Multiple regression: Rushing Yards Over Expected (Ch. 4) — Adds situational controls such as down and distance to build an expected-yards baseline, so RYOE isolates the runner from the situation. Closes with suggestions for extending the model (e.g., air_yards in the passing analogue) and with suggested readings on regression, writing about numbers, linear algebra and data journalism.
- 07Generalized linear models: Completion Percentage over Expected (Ch. 5) — Extends the 'over expected' logic from continuous outcomes to binary ones with logistic regression, building CPOE for quarterbacks.
- 08Applying models to betting markets — Turns probability and count models into estimates for player props and compares them with sportsbook odds to find value.
- 09Draft pick value and team drafting performance — Gets and evaluates draft data to value picks and assess how well teams draft, a talent-evaluation case study.
- 10Unsupervised learning: PCA and clustering of player attributes — Reduces the dimensionality of combine and athletic data and clusters players into archetypes, showing multivariate methods for classifying physical traits.
What it leaves unsolved
How much of a metric's year-to-year consistency reflects player skill, and how much reflects team, scheme, teammates or opportunity?
Stability is shown by comparing a player's metric with his own prior value, which cannot separate skill from stable context (offensive line, play-caller, receivers). The source passages do not say how to disentangle these.
Which situational variables belong in an 'over expected' model, and how complete does the expectation have to be?
The authors only suggest adding variables (e.g., air_yards beyond down and distance) and invite readers to experiment, so no standard for an adequate baseline is given. Residual credit assigned to a player depends on what the model omits.
Do running backs truly matter, or is their value just hard to measure with available data?
The takeaway is that individual running back contribution is smaller than traditionally believed. But this depends on the chosen model and data, and unmeasured blocking and scheme effects remain open.
Can a stable, repeatable statistical edge against sportsbook lines persist once markets adapt?
The book presents betting as an application of probability modeling to find value, but a model's apparent edge is not proof of long-run profit. How lines respond to widely known methods is not settled by the material.
How should one choose the right question and the right data when the question is vague?
Tukey's quote and the 'knack' for the right question are offered as the key skill, yet the authors say it comes only through years of deliberate practice, so no procedure is given.
How do analytical findings combine with traditional scouting in practice?
The authors say the two are not truly at odds because the process is essentially the same, but the passages give no framework for resolving disagreements between them.
Where it falls short — a fair critique
Stability is illustrated with a small panel (317 quarterback-season-length rows built from a handful of seasons and mostly well-known starters), using a simple lag comparison. The passages show no uncertainty quantification, no adjustment for sample size per player-season, and no treatment of regression to the mean, so 'stable' versus 'noisy' can be overstated.
'Over expected' metrics (RYOE, CPOE) are framed as better isolating individual skill, but the baseline models use a few observable covariates (down, distance, field position, perhaps air yards). Blocking quality, defensive alignment, receiver quality, and scheme are left in the residual, which is then credited to the player. The authors hint at this by urging extra variables, but the headline claim is stronger than the controls support.
Concluding that running backs contribute less than believed from a model that does not control for line play or box counts risks mistaking 'not detected in this model' for 'not present'. A low attributable share is compatible with omitted-variable explanations, so the causal reading goes further than the evidence.
Treating scouting and statistics as 'essentially the same process' is a reasonable rhetorical bridge, but it glosses over real differences: scouts use film, character and projection to cover things missing from tracking and play-by-play data. The scalability advantage is asserted but not weighed against what is lost, so the position reads somewhat one-sided.
Betting is offered as a data science application, yet the passages give little on bankroll management, vig, closing-line value, out-of-sample validation, or the risk that a profitable-looking backtest is overfit. For readers drawn by the betting promise, this may create overconfidence.
The pedagogical design of mirroring all code in Python and R has costs: it doubles the code on the page, and the verification and output listings (info(), glimpse()) take space that could go to interpretation, so statistical depth (e.g., assumptions, diagnostics) may be thinner than the practical focus suggests.
The unsupervised section (PCA, clustering of combine metrics) is presented as identifying 'distinct archetypes', but clustering results depend on choices (number of clusters, scaling, which metrics). Without a link showing archetypes predict on-field outcomes, the usefulness for talent evaluation is not established.
Before you apply it
Using it well
Where the method fits, who it’s for, and the honest case for and against — so you apply it where it works.
Is this book for you?
For you if
- You are a football fan, fantasy player, or bettor who wants to move from opinions to data-backed reasoning
- You aspire to a football analytics career and want portfolio-ready projects such as RYOE, CPOE, and draft analysis
- You want to learn data science (regression, GLMs, PCA, clustering) through engaging sports examples
- You work in either Python or R and want to see equivalent code in both
Skip it if
- You want guaranteed betting or fantasy winning strategies rather than a modeling education
- You already do advanced sports modeling (e.g., hierarchical or Bayesian models) and need cutting-edge methods
- You have no interest in writing code and only want conclusions about players
- You want analysis of sports other than American football
Need first
- Basic familiarity with football rules and concepts (downs, distance, field position, passing vs rushing)
- Some basic programming exposure in Python or R, or willingness to learn alongside the book
- Comfort with introductory statistics ideas like averages, correlation, and variance
- A working Python or R environment with the ability to install packages and pull NFL play-by-play data
When it applies — and when it doesn’t
- Deciding which player metrics to trust for next-season projections, such as fantasy drafts or buy-low trades — stability analysis (year-over-year correlation, e.g., YPA by pass length) separates repeatable skill from noise
- Learning to obtain and wrangle NFL play-by-play data in Python or R — the book gives parallel, hands-on code for both languages and a 'trust but verify' habit for checking your own code
- Judging whether a running back or the offensive line drives rushing success — the RYOE approach shows individual RB contribution is smaller than traditionally believed, but it needs the right context variables
- Evaluating draft picks and a team's drafting record — the book covers pick-value analysis and drafting performance, which suits front-office-style questions
- Classifying athletes by combine measurables into archetypes — PCA and clustering reduce correlated attributes into distinct player types
- Evaluating a quarterback or running back by raw box-score totals (yards, completion %) without adjusting for context — the book's core point is that down, distance, and air yards distort raw stats, so build 'over expected' metrics like CPOE and RYOE instead
- Building a model to find value against sportsbook lines or player props — the book shows how to estimate probabilities against odds, but it is an introduction, and betting markets are efficient enough that a simple model rarely guarantees an edge
- Treating a model's 'over expected' number as a pure measure of individual skill — the expectation is only as good as the variables included, and omitted factors such as blocking or receiver quality can leak into the player's number
- Small samples (a few games, a rookie's first season, rare situations) — the stability lesson implies noise dominates here, so conclusions from limited data are shaky
- Evaluating non-quantifiable aspects such as scheme fit, leadership, or injury recovery — the book's methods work on play-by-play and measurable data and do not capture these directly; pair them with scouting
- Seeking a deep statistics or machine learning theory text — it is a case-study-driven practical guide that teaches data science through football, not a rigorous theoretical treatment
The honest case
Strongest case for
- Raw stats mix player skill with situation, so adjusting for down, distance, and field position produces fairer comparisons of players
- 'Over expected' metrics built from regression and logistic models make the adjustment explicit and reproducible
- Stability analysis gives a principled way to separate signal from noise, which helps identify buy-low and sell-high candidates
- Statistical methods scale to many players at once, which traditional scouting cannot
- Parallel Python and R case studies and endorsements from NFL practitioners suggest the methods are usable in real football operations
- The same modeling process mirrors the scout's process: choose the right question, controls, and information to discard
Strongest objection
- An 'over expected' metric depends on the chosen model and covariates, so omitted factors like offensive line, receiver quality, or scheme can be misattributed to the player
- Football has small samples (17 games a season) and heavy noise, so even 'stable' metrics may offer weak predictive power
- Betting markets are already efficient, so simple public models are unlikely to find consistent value after the sportsbook's margin
- Strong conclusions such as 'running backs matter less' can be oversimplified when applied to individual players or teams
- Statistical models can miss unmeasured qualities that scouts see, so they work best as a complement rather than a replacement
The model's constructs are drawn from the source element(s); load-bearing constructs are corroborated across the shelf, emerging ones are flagged.
Ideas covered by the source notes
- Situational Context
- Actual Player Performance
- Performance Over Expected
- Metric Stability and Predictiveness
- Talent Evaluation Accuracy
Movement V
Measure
Use available assessments to reflect on what you have learned.
A way to gauge yourself against the book's model, and the instruments it gives you.
- — A self-check built from the book
- — Instruments and what you'd measure next
Learning curriculum
After this book, you can…
The book's learning objectives, classified by Bloom's taxonomy and ordered so each builds on the ones before it.
- explainAfter this book you can explain why raw football statistics (yards, completions, touchdowns) can mislead without situational context, and identify the context variables (down, distance, field position, air yards) that shape a player's opportunity.Check: Short-answer or case questions: given a raw stat line for two players, identify which situational factors could explain the difference and argue why the raw comparison is misleading.
- obtain and wrangleAfter this book you can obtain NFL play-by-play data and load, inspect, filter, and summarize it in both Python (pandas) and R (tidyverse), verifying that your code does what you intend.Check: Practical coding task: load a season of play-by-play data, filter to pass plays, compute per-player summaries, and use info()/glimpse() checks to confirm the output structure and correctness.
- visualizeAfter this book you can perform exploratory data analysis and build clear visualizations of football data to understand distributions and relationships before modeling.Check: Produce and interpret histograms, scatterplots, and summary tables for a football dataset, and write a short note on what the EDA suggests for modeling.
- applyAfter this book you can apply unsupervised learning (PCA and clustering) to player athletic attributes such as combine measurements to reduce dimensionality and identify player archetypes.Check: Run PCA and clustering on combine data, interpret the components and clusters, and name and justify the archetypes found.
- buildAfter this book you can build expected-value models (linear regression for yardage, logistic regression for completion probability) that use situational variables to set a baseline expectation for a play.Check: Fit a linear model of rushing yards and a logistic model of completion probability using down, distance, air yards, etc., in Python and R, and interpret the coefficients and predictions.
- calculateAfter this book you can calculate and interpret 'over expected' metrics such as Rushing Yards Over Expected (RYOE) and Completion Percentage Over Expected (CPOE) via residual analysis of actual versus expected performance.Check: Compute residuals from fitted models, aggregate to player level, rank players, and explain what a positive or negative value means for an individual player.
- computeAfter this book you can compute year-over-year stability of player metrics (e.g., passing yards per attempt by pass length) by lagging data and measuring correlations between consecutive seasons.Check: Given play-by-play data, build a player-season table with a lagged metric column and calculate the correlation between current and prior seasons for each split (e.g., short vs. long passes).
- distinguishAfter this book you can distinguish signal from noise by interpreting stability results and deciding which metrics are repeatable skill and which are unstable variance.Check: Given stability correlations for several metrics, rank them by repeatability, justify which should be prioritized for forecasting, and identify potential buy-low or sell-high candidates.
- analyzeAfter this book you can assess how much individual running backs contribute to rushing success compared with blocking and context, and critique claims about running back value, including the relative efficiency of passing versus running.Check: Using rushing data and expected-yards models, analyze the share of rushing outcomes attributable to the back versus context, and write an evidence-based argument on whether running backs matter.
- constructAfter this book you can apply data science to sports betting by building models that estimate probabilities (e.g., for player props) and comparing them with sportsbook odds to identify value.Check: Build a model for a player prop, convert its predicted probability and sportsbook odds into implied probabilities, flag value bets, and critique the model's weaknesses.
- evaluateAfter this book you can evaluate NFL draft picks and team drafting performance by comparing the production of selected players to the expected value of their draft slot.Check: Fit a draft-value curve and compute player or team residuals relative to pick position, then judge which teams or picks over- or under-performed and discuss the limits of the conclusions.
- evaluateAfter this book you can evaluate whether 'over expected' metrics are better than raw statistics by testing their stability and predictiveness across seasons.Check: Compare year-over-year correlations of raw yards per carry versus RYOE per carry (or completion percentage versus CPOE) and write a justified recommendation of which metric to use.
- judgeAfter this book you can frame a football question well, choosing the right data, metrics, and controls, and judge how accurately an analysis evaluates talent, following the principle that an approximate answer to the right question beats a precise answer to the wrong one.Check: Given a vague football question (e.g., 'Is this QB good?'), write an analysis plan that specifies the question, data, context controls, stable metrics, and validation, and critique a flawed alternative plan.
How to measure it
Turning each idea into a measure
For each construct: how to operationalize it, the observable signals to look for, and how well it holds up.
Measured using variables available in play-by-play data, such as down, distance to go for a first down, field position (yard line), score differential, run/pass location, and air yards of a pass. These variables serve as predictors in regression models.
- Specific values for down (1-4)
- distance to go (e.g., 10 yards)
- score_differential (e.g., -7 points)
- air_yards (e.g., 22 yards)
A mix of categorical (e.g., down, run_location) and continuous (e.g., air_yards, ydstogo) variables.
Measured as the direct outcome recorded in play-by-play data for a specific action. Examples from the book include `rushing_yards` for a run play and `complete_pass` (coded as 1 for a completion, 0 for an incompletion) for a pass play.
- A 5-yard rush.
- An incomplete pass.
- A passing touchdown.
Can be continuous (e.g., yards) or binary (e.g., complete/incomplete).
Calculated as the residual (Actual Performance - Predicted Performance) from a regression model where Actual Player Performance (e.g., rushing yards, pass completion) is the dependent variable and Situational Context variables are the predictors. Examples in the book include Rushing Yards Over Expected (RYOE) and Completion Percentage Over Expected (CPOE).
- A positive RYOE value on a given play.
- A season-long positive CPOE percentage for a quarterback.
Typically a continuous variable centered around zero.
Operationalized as the Pearson's correlation coefficient of a given player-level metric (e.g., CPOE, RYOE, YPA) aggregated by season, comparing player values from one season to the next. A higher correlation coefficient indicates greater stability.
- A year-over-year correlation of r=0.46 for CPOE, compared to r=0.44 for raw completion percentage.
- A higher correlation for short passing YPA compared to deep passing YPA.
A correlation coefficient ranging from -1 to 1.
The outcome of applying stable and predictive metrics to decision-making processes. It can be measured by assessing the value generated from draft picks relative to their draft position (Draft Value Over Expected) or the success of player prop bets against the market.
- A team consistently acquiring more Approximate Value from their draft picks than expected for their draft slots.
- A positive return on investment from a betting model built on context-adjusted metrics.
Can be measured as a rate of return, a surplus value (e.g., DrAV over expected), or a classification accuracy.
Self-assessment
Where would you like to improve?
This is a structured self-diagnostic built from the model — a mirror for reflection, not a validated psychometric scale. For validated measurement, see the instruments below.
1 = Strongly Disagree · 7 = Strongly Agree
Proposed measures — starter instruments where no validated one was found
Situational Context Capture Index (Proposed)
proposed · not validatedRated for your team or hiring process — not a personal self-check.
- Every play in the analytics dataset is tagged with game-state variables (e.g., down, distance, field position, score differential, time remaining) before any player evaluation is run.
- Play-specific variables outside the player's control (e.g., defensive alignment, pressure faced, blocking quality, weather) are recorded in a documented, consistently applied data schema.
- The process lists which situational variables are included in or excluded from player evaluations, and the list is reviewed and updated at least once per season.
Scale: 1–7 (Strongly Disagree → Strongly Agree), rated by an evaluator or the team. Average the items; treat ≤3 as a gap to close in the process.
Observed Performance Recording Index (Proposed)
proposed · not validatedRated for your team or hiring process — not a personal self-check.
- Raw outcomes of each player action (e.g., yards gained, completion, touchdown) are logged for every play using written, standardized definitions.
- Observed statistics are audited against an independent source (e.g., official league data or film review), and discrepancies are documented and resolved.
- Raw performance outputs are reported as separate fields, kept distinct from adjusted or modeled values, and remain accessible to evaluators.
Scale: 1–7 (Strongly Disagree → Strongly Agree), rated by an evaluator or the team. Average the items; treat ≤3 as a gap to close in the process.
Performance Over Expected Modeling Index (Proposed)
proposed · not validatedRated for your team or hiring process — not a personal self-check.
- The expected-outcome baseline is produced by a documented statistical model that takes situational context variables as inputs.
- The baseline model is checked for calibration and predictive accuracy on held-out plays, and the results are available to users.
- Each player evaluation reports the difference between actual and expected performance along with a measure of uncertainty or sample size.
Scale: 1–7 (Strongly Disagree → Strongly Agree), rated by an evaluator or the team. Average the items; treat ≤3 as a gap to close in the process.
Sources
- Football Analytics with Python R — Eric A. EagerRichard A. Erickson · A practical guide to applying statistical modeling and data science techniques using Python and R to analyze American football data for purposes ranging from team analysis to sports betting and fantasy football.
The cheat sheet
Everything, on one page
One key takeaway from each section, with links to read more.
- Situational ContextDefine context as only what is knowable at or before the snap and outside the player's control.
- Actual Player PerformanceKeep raw output at the play level with attached opportunity counts so it can be adjusted later.
- Performance Over ExpectedOver-expected measures are residuals, so their quality depends entirely on the baseline model.
- Metric Stability and PredictivenessTest repeatability directly with year-over-year and split-half correlations before trusting any metric.
- Talent Evaluation AccuracyMeasure evaluation accuracy by out-of-sample prediction error against a naive benchmark, not by narrative.
Publication details
Consult the sources listed in this guide for further reading. Edition 1 · Updated 2026-10-03.
Explore related books and profiles in the library.