|
--- |
|
language: en |
|
license: mit |
|
library_name: keras |
|
pipeline_tag: tabular-regression |
|
tags: |
|
- football |
|
- sports-analytics |
|
- decision-support |
|
- win-probability |
|
- tabular |
|
- keras |
|
model-index: |
|
- name: NFL 4th-Down Decision MLP |
|
results: |
|
- task: |
|
type: tabular-regression |
|
name: ΔWP regression (go / field goal / punt) |
|
dataset: |
|
name: NFL play-by-play (2016–2024) |
|
type: custom |
|
split: test (2023–2024) |
|
metrics: |
|
- name: Policy agreement (top-ΔWP) |
|
type: policy-agreement |
|
value: 0.794 |
|
- name: Mean regret ΔWP (overall) |
|
type: mean-regret |
|
value: 0.0023 |
|
- name: Policy agreement (late & close) |
|
type: policy-agreement |
|
value: 0.744 |
|
- name: Mean regret ΔWP (late & close) |
|
type: mean-regret |
|
value: 0.0099 |
|
--- |
|
|
|
# NFL 4th-Down Decision Model |
|
|
|
Small multi-task MLP that recommends **go / field goal / punt** on 4th down by |
|
predicting the change in win probability (ΔWP) for each action. |
|
Trained on 2016-2024 NFL play-by-play data with labels generated by |
|
[`nfl4th::add_4th_probs()`](https://github.com/guga31bb/nfl4th). |
|
|
|
## Model description |
|
- **Inputs** (23 features): quarter, game/half seconds remaining, yardline, |
|
yards-to-go, score differential, timeouts, weather, point spread, and one-hot |
|
roof/surface indicators, plus derived helpers (e.g., `fg_dist_yd`, |
|
`in_fg_range`). See `feature_order.json` for exact schema. |
|
- **Outputs**: ΔWP for go/field-goal/punt (main head) and auxiliary heads |
|
predicting FG make and 4th-down conversion probabilities. |
|
- **Recommendation**: choose the action with highest ΔWP. |
|
|
|
## Training |
|
- **Split**: 2016-2021 train, 2022 validation, 2023-2024 test. |
|
- **Objective**: Huber loss for ΔWP + 0.2·MSE(aux). |
|
- **Optimizer/regularization**: AdamW, BatchNorm, Dropout, L2. |
|
- **Artifacts**: best weights saved as `mlp_dwp_plus_aux_best.keras`. |
|
|
|
## Evaluation (2023–2024 test set) |
|
| Metric | Value | |
|
|---|---:| |
|
| Policy agreement | 0.794 | |
|
| Mean regret (ΔWP) | 0.0023 | |
|
| Late & close (≤600 s, abs(score) ≤ 8) agreement | 0.744 | |
|
| Late & close mean regret | 0.0099 | |
|
|
|
*(ΔWP reported in win-probability points; lower regret is better.)* |
|
|
|
## Usage |
|
|
|
### Load from this repo (Hugging Face Hub) |
|
```python |
|
from huggingface_hub import hf_hub_download |
|
import tensorflow as tf |
|
import numpy as np |
|
|
|
repo_id = "YOUR_USERNAME/YOUR_REPO" # change to your model repo |
|
weights = "mlp_dwp_plus_aux_best.keras" |
|
|
|
path = hf_hub_download(repo_id=repo_id, filename=weights) |
|
model = tf.keras.models.load_model(path) |
|
|
|
# example input (dict of feature: np.array([value])) |
|
x = { |
|
"quarter": np.array([2.0]), |
|
"game_seconds_remaining": np.array([1800.0]), |
|
"half_seconds_remaining": np.array([900.0]), |
|
"yardline_100": np.array([60.0]), |
|
"ydstogo": np.array([4.0]), |
|
"score_differential": np.array([3.0]), |
|
"receive_2h_ko": np.array([1.0]), |
|
"timeouts_off": np.array([3.0]), |
|
"timeouts_def": np.array([3.0]), |
|
"timeouts_total": np.array([6.0]), |
|
"timeouts_diff": np.array([0.0]), |
|
"temp_f": np.array([70.0]), |
|
"wind_mph": np.array([5.0]), |
|
"spread_line": np.array([0.0]), |
|
"fg_dist_yd": np.array([77.0]), |
|
"in_fg_range": np.array([0.0]), |
|
"one_score": np.array([1.0]), |
|
"late_game": np.array([0.0]), |
|
"second_half": np.array([0.0]), |
|
"roof": np.array(["outdoors"]), |
|
"surface": np.array(["grass"]), |
|
} |
|
|
|
pred = model.predict(x, verbose=0)["dwp"][0] # ΔWP for [go, FG, punt] |
|
actions = ["Go for it", "Field goal", "Punt"] |
|
print(dict(zip(actions, pred))) |
|
``` |
|
|
|
## Intended use & limitations |
|
|
|
Purpose: Educational decision assistant for 4th‑down scenarios. |
|
|
|
Not for wagering or real‑time coaching; relies on historical |
|
probabilities and inherits assumptions from nfl4th. |
|
|
|
Weather and wp_punt imputation introduce simplifications; apply domain |
|
judgment when using recommendations. |
|
|
|
## Citation |
|
|
|
If you use this model, please cite the original project: |
|
|
|
Villagran, M. (2025). NFL 4th-Down WinPct Recommender. MIT License. |