Back to home

Project Writeup

Onions Basketball Index

Patrick Melan|March 17, 2026

The Onions Basketball Index is a probabilistic model for predicting NCAA tournament outcomes. It combines KenPom efficiency ratings with historical upset patterns to generate a complete 63-game bracket prediction, including win probabilities for every matchup.

The name comes from the classic basketball phrase “that guy has onions” — meaning a player has guts, nerve, the willingness to take and make the big shot. The model tries to capture that same energy: which teams actually perform when it matters?

A 3-layer model for March Madness

Methodology

The model has three versions, each building on the last:

predict.py
def predict_matchup(team_a, team_b, kenpom):
    """Logistic model: P(A wins) from efficiency gap."""
    eff_a = kenpom[team_a]["adj_eff"]
    eff_b = kenpom[team_b]["adj_eff"]
    diff = eff_a - eff_b

    log_odds = 0.1462 * diff  # fitted coefficient
    prob_a = 1 / (1 + math.exp(-log_odds))
    return prob_a

def simulate_bracket(bracket, kenpom, n=10000):
    """Monte Carlo: simulate full tournament n times."""
    champion_counts = defaultdict(int)
    for _ in range(n):
        winners = {}
        for round_num in range(6):
            matchups = get_matchups(bracket, round_num, winners)
            for a, b in matchups:
                p = predict_matchup(a, b, kenpom)
                winner = a if random.random() < p else b
                winners[(round_num, a, b)] = winner
        champion_counts[winners["final"]] += 1
    return champion_counts

2026 NCAA Tournament. Scroll horizontally within each region on mobile.

v3 Model Predictions

Cyan = Model pickUpset pickCorrectIncorrectNot yet played

East

Round of 64

(1)Duke
(16)Siena
Duke 99.9%
(8)Ohio St.
(9)TCU
Ohio St. 65.7%
(5)St. John's
(12)Northern Iowa
St. John's 84.7%
(4)Kansas
(13)Cal Baptist
Kansas 90.1%
(6)Louisville
(11)South Florida
Louisville 84.7%
(3)Michigan St.
(14)North Dakota St.
Michigan St. 98.8%
(7)UCLA
(10)UCF
UCLA 72.9%
(2)Connecticut
(15)Furman
Connecticut 99.3%

Round of 32

(1)Duke
(8)Ohio St.
Duke 93.3%
(5)St. John's
(4)Kansas
St. John's 55% ⚠️
(3)Michigan St.
(6)Louisville
Michigan St. 63.1%
(2)Connecticut
(7)UCLA
Connecticut 72.5%

Sweet 16

(1)Duke
(5)St. John's
Duke 88.7%
(3)Michigan St.
(2)Connecticut
Michigan St. 51.9% ⚠️

Elite 8

(1)Duke
(3)Michigan St.
Duke 87.1%

West

Elite 8

(1)Arizona
(2)Purdue
Arizona 70.5%

Sweet 16

(1)Arizona
(4)Arkansas
Arizona 84.6%
(2)Purdue
(3)Gonzaga
Purdue 59.8%

Round of 32

(1)Arizona
(9)Utah St.
Arizona 95.4%
(4)Arkansas
(5)Wisconsin
Arkansas 58.5%
(3)Gonzaga
(11)Texas
Gonzaga 76.9%
(2)Purdue
(7)Miami FL
Purdue 81.1%

Round of 64

(1)Arizona
(16)LIU
Arizona 99.9%
(8)Villanova
(9)Utah St.
Utah St. 53.9% ⚠️
(5)Wisconsin
(12)High Point
Wisconsin 89.6%
(4)Arkansas
(13)Hawaii
Arkansas 90.6%
(6)BYU
(11)Texas
Texas 37.4% ⚠️
(3)Gonzaga
(14)Kennesaw St.
Gonzaga 99.4%
(7)Miami FL
(10)Missouri
Miami FL 72.7%
(2)Purdue
(15)Queens
Purdue 96.8%

Semifinal — Duke vs Florida

(1)Duke
(1)Florida
Duke 71.1%

Championship

(1)Duke
(1)Arizona
Duke 55.6%
ChampionChampion

Semifinal — Arizona vs Michigan

(1)Arizona
(1)Michigan
Arizona 50.3%

South

Round of 64

(1)Florida
(16)Prairie View A&M
Florida 99.9%
(8)Clemson
(9)Iowa
Iowa 63.3% ⚠️
(5)Vanderbilt
(12)McNeese
Vanderbilt 91.1%
(4)Nebraska
(13)Troy
Nebraska 97.8%
(6)North Carolina
(11)VCU
North Carolina 66.9%
(3)Illinois
(14)Penn
Illinois 97.9%
(7)Saint Mary's
(10)Texas A&M
Saint Mary's 70.7%
(2)Houston
(15)Idaho
Houston 99.5%

Round of 32

(1)Florida
(9)Iowa
Florida 90.2%
(5)Vanderbilt
(4)Nebraska
Vanderbilt 54.4% ⚠️
(3)Illinois
(6)North Carolina
Illinois 83.9%
(2)Houston
(7)Saint Mary's
Houston 85.8%

Sweet 16

(1)Florida
(5)Vanderbilt
Florida 73.3%
(2)Houston
(3)Illinois
Houston 54.5%

Elite 8

(1)Florida
(2)Houston
Florida 51.5%

Midwest

Elite 8

(1)Michigan
(2)Iowa St.
Michigan 69.1%

Sweet 16

(1)Michigan
(5)Texas Tech
Michigan 87.7%
(2)Iowa St.
(6)Tennessee
Iowa St. 73.4%

Round of 32

(1)Michigan
(9)Saint Louis
Michigan 97.2%
(4)Alabama
(5)Texas Tech
Texas Tech 48.4% ⚠️
(3)Virginia
(6)Tennessee
Tennessee 46.9% ⚠️
(2)Iowa St.
(7)Kentucky
Iowa St. 87.7%

Round of 64

(1)Michigan
(16)Howard
Michigan 99.5%
(8)Georgia
(9)Saint Louis
Saint Louis 41.5% ⚠️
(5)Texas Tech
(12)Akron
Texas Tech 87.9%
(4)Alabama
(13)Hofstra
Alabama 90.9%
(6)Tennessee
(11)Miami OH
Tennessee 94.4%
(3)Virginia
(14)Wright St.
Virginia 99.2%
(7)Kentucky
(10)Santa Clara
Kentucky 58.4%
(2)Iowa St.
(15)Tennessee St.
Iowa St. 99.8%

Key Predictions (v3)

Championship Probabilities

Top teams by probability of winning it all (v3 model, 10k simulations).

Duke
19.4%
Arizona
11.8%
Florida
9.6%
Michigan
8.1%
Houston
6.9%
Purdue
5.2%
Iowa St.
4.8%
Connecticut
3.4%

The v3 upset detection model picks more upsets along the way — like Texas over BYU and Tennessee over Virginia — but still lands on an all-1-seed Final Four. The historical seed priors add variance in early rounds without dramatically reshaping the deep bracket, where efficiency advantages compound.