March Madness 2026 Prediction Model

Ensemble of 10 two-layer MLPs that predict NCAA tournament game outcomes.

Model Details

  • Architecture: 10 sub-networks, each Linear(122, 128) -> BN -> ReLU -> Dropout -> Linear(128, 1) -> Sigmoid, averaged at inference
  • Input: 122-dimensional difference vector (team_a_features - team_b_features)
  • Output: P(team_a wins) in [0, 1]
  • Training: 750 tournament games (2011-2023), with data augmentation (both game orientations)
  • Validation: 63 games (2024 tournament), LogLoss = 0.297
  • Test: 63 games (2025 tournament), LogLoss ~0.36
  • Calibration: Platt scaling applied post-hoc

Features

122 difference-encoded features from team-level aggregated player statistics:

  • Tournament seed, wins, losses, SOS, SRS
  • Per-game stats (pts, reb, ast, stl, blk, tov) x 4 aggregations (mean, max, std, weighted-mean)
  • Shooting percentages (FG%, 3P%, FT%, eFG%, TS%)
  • Advanced metrics (PER, BPM, Win Shares, Usage Rate)

Usage

import torch
from model import MLP  # or define MLP class as below

checkpoint = torch.load("best_model.pt", map_location="cpu", weights_only=False)
model = MLP(input_dim=122)
model.load_state_dict(checkpoint["model_state_dict"])
model.eval()

# Predict: features = team_a - team_b (normalized)
x = torch.randn(1, 122)  # replace with real features
prob = model(x).item()  # P(team_a wins)

Demo

Try the interactive bracket predictor: March Madness 2026 Space

Training Data

Player statistics from sports-reference.com/cbb for 68 tournament teams per season, 2011-2025.

Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support