The complete guide to football analytics for sports betting, fantasy football, and data science. Learn EPA, win probability, and data-driven decision making.
Free interactive calculators for NFL analytics, betting, and fantasy football
Calculate Expected Points for any down, distance, and field position situation.
Use ToolShould you go for it, punt, or kick? Analyze the optimal fourth-down decision.
Use ToolEstimate win probability based on score, time, possession, and field position.
Use ToolFind +EV bets by comparing your probability estimates to betting odds.
Use ToolPlain-English guides to the advanced metrics — the formulas, what they reveal, and the caveats. New June 6, 2026
How football's opponent-adjusted efficiency metric works — and how to read a number that lives on a percentage scale.
Three efficiency metrics, one decision: what each measures, where they agree, and why they sometimes disagree.
How tracking data turns every throw into a probability — and isolates a quarterback's accuracy from scheme.
The same quarterback, two scales: how each rating is built and what each one actually rewards.
Why points scored and allowed predict next season better than this season's win-loss record.
Breaking a pass-catcher's production into opportunity, depth of target, and yards after the catch.
What win-probability math really recommends on fourth down — and why teams still punt too much.
Opponent adjustment and the Simple Rating System, so you can compare teams on a level field.
One formula that rewards touchdowns, punishes interceptions, counts sacks — and predicts winning better than passer rating.
Raw rushing yards reward blocking and volume. How tracking data isolates what the back actually added.
Why pressure rate beats sack totals, what win rates measure, and the hard problem of dividing sack blame.
Interceptions lie and good corners get avoided. The stats that actually measure coverage — and why defense is so hard to grade.
Field goals over expected, the points hiding in field position, and why the kicking game still swings outcomes.
Leading teams run, trailing teams pass — so raw run/pass splits lie. PROE strips out game script to reveal a coach's true tendencies.
Moving the ball is easy between the 20s; the field shrinks inside them. How to measure who actually finishes drives.
A handful of chunk plays drive most scoring drives. What counts as explosive, and why explosive-play rate predicts winning.
Third down is where drives live or die — but raw conversion rate hides how hard the down-and-distance really was.
Winning teams hold the ball because they're winning — not the other way around. Why TOP is mostly a symptom, not a cause.
Turnover margin decides games and barely predicts them. The fumble-recovery coin flip and why turnover luck regresses hard.
That live win-probability percentage is a model output. How it's built, what leverage means, and how WPA assigns credit for the swing.
Wild Card complete! 8 teams remain. Data-driven Super Bowl LX predictions and Divisional Round betting angles powered by EPA, win probability, and advanced metrics.
From foundational concepts to advanced machine learning techniques, our textbook covers everything you need to master NFL analytics.
Browse All ChaptersData infrastructure, nflverse, wrangling, and visualization basics.
5 ChaptersPassing, rushing, EPA analysis, success rate, and efficiency metrics.
7 ChaptersCoverage analysis, pass rush, run defense, and scheme evaluation.
6 ChaptersFourth down decisions, two-point conversions, and win probability.
4 ChaptersMachine learning, Bayesian methods, tracking data, and simulation.
5 ChaptersSpecial teams, personnel, college football, and future trends.
18 ChaptersIn-depth analytics profiles for all 32 NFL teams
100+ code examples in R and Python covering data loading, EPA analysis, visualization, betting models, and machine learning.
# Load NFL play-by-play data with nflfastR
library(nflfastR)
library(tidyverse)
# Get 2024 season data
pbp_2024 <- load_pbp(2024)
# Calculate team EPA per play
team_epa <- pbp_2024 %>%
filter(!is.na(epa)) %>%
group_by(posteam) %>%
summarize(
plays = n(),
total_epa = sum(epa),
epa_per_play = mean(epa),
success_rate = mean(success)
) %>%
arrange(desc(epa_per_play))
# View top offenses
head(team_epa, 10)
Data-driven betting strategies
Learn how to use analytics to find +EV bets, manage your bankroll, and make smarter betting decisions.
Data sources, tools & community
Curated collection of the best NFL analytics resources, data sources, APIs, and learning materials.
Start with Chapter 1 and work your way through our comprehensive curriculum.