Game Situation
Set the game situation and hit ANALYZE to simulate 30,000 overtime scenarios.
Simulating 30,000 overtime scenarios...
UCLA Bruin Sports Analytics
Created by Eshaan Dhavala, Abhi Kumar, Keith Bui, Josh Sujo, Maia Salti, Dillon Maheshwari, Andrew Yang, and Gonzalo Merino Sanchez
Set the game situation and hit ANALYZE to simulate 30,000 overtime scenarios.
Simulating 30,000 overtime scenarios...
This tool recommends whether an NFL coach should go for it, punt, or attempt a field goal on 4th down during overtime. It combines four machine-learning submodels with Monte Carlo simulation to estimate the win probability of each option.
For each of the three choices, the engine simulates 10,000 game continuations from the current decision point. Each simulation plays out the rest of overtime play-by-play, using historical NFL probability distributions. The win probability for each option is simply the fraction of simulations where the team wins.
Predicts the opponent's starting field position after a punt using an XGBoost Regressor. Trained on all punt attempts from 2016-2024. Uses the current yard line and rolling 6-game punter quality metrics.
Predicts the probability a field goal attempt is made using a Gradient Boosting Classifier with Platt scaling calibration. Accounts for kick distance, weather, venue, and kicker performance.
Predicts the probability of converting a 4th down attempt using an XGBoost Classifier with isotonic calibration. Yards to go is the primary feature, with a monotone constraint enforcing that more yards = lower probability.
Estimates the probability of winning from any game state using an XGBoost Classifier with isotonic calibration. Trained on 350,000+ regulation plays from 2016-2024. OT plays excluded to avoid rule-change contamination.
After a 4th-down decision, the game doesn't end -- there are dozens of subsequent plays, each with many possible outcomes. The number of possible game continuations grows exponentially, far too many to calculate analytically.
Monte Carlo simulation solves this by using randomness to explore the space of possibilities. Think of it like flipping a coin: flip 10 times and you might get 7 heads, but flip 10,000 times and you'll get very close to 50%. The same principle gives us stable, reliable win probability estimates.
Win probability is the weighted average of converting (continuing the drive) vs. failing (opponent gets the ball at the spot).
Win probability depends on where the punt pins the opponent. Deeper punts mean a worse starting position for the other team.
If made, the team gains 3 points and kicks off. If missed, the opponent gets the ball at the line of scrimmage or the 20, whichever is farther back.
All models are trained on NFL play-by-play data from the nfl_data_py package, spanning 2016-2024 (350,000+ plays). Rolling statistics use a 6-game window for special teams and 15-game window for offense/defense, shifted by 1 game to prevent data leakage.
Known limitations: The punt model tracks team-level stats rather than individual punters. The win probability model is trained on regulation plays only. Weather data may be incomplete for some older games. Rolling averages don't reset at season boundaries.
Built by UCLA Bruin Sports Analytics