On Selection Sunday, the committee doesn't stare at one number — it reads a team sheet, the résumé that sorts every game into quadrants by opponent quality and location. We explained the system in our NET explainer; here we'll build a team-sheet analyzer in Python, using our own ranking as the sort key. Full code: scripts/cbb-quadrant-team-sheet-python.py.

The quadrant rule

A game's quadrant depends on the opponent's rank and where it was played — a road win counts more, so the thresholds shift:

def quad(opp_rank, location):
    bands = {"home": (30, 75, 160), "neutral": (50, 100, 200), "away": (75, 135, 240)}
    a, b, c = bands[location]
    return 1 if opp_rank <= a else 2 if opp_rank <= b else 3 if opp_rank <= c else 4
Quad 1 = a top opponent; Quad 4 = a cupcake. Location moves the goalposts.

Bring your own ranking

The official NET isn't freely scriptable, so we supply our own ranking as the opponent-quality key — here, season scoring margin (swap in your adjusted efficiency for a sharper version). The method is identical to the committee's; only the ranking source differs:

margin = {}                              # team_id -> avg scoring margin
# ...from team box scores...
rank = {t: i+1 for i, (t, _) in enumerate(
            sorted(margin.items(), key=lambda kv: kv[1], reverse=True))}

Then walk a team's schedule, classify each game by opponent rank and location, and tally a record per quadrant.

The result: a real team sheet

Run it for North Carolina's 2024-25 season — a famous bubble case — and the sheet explains the drama instantly:

Team sheet: North Carolina Tar Heels (2025)
Quadrant 1: 1-10
Quadrant 2: 2-2
Quadrant 3: 6-2
Quadrant 4: 14-0

Quad 1 & 2 games (selected):
  Q1 away    L 70-87  vs Duke (#1)
  Q1 neutral L 84-90  vs Florida (#4)
  Q1 neutral W 76-74  vs UCLA (#35)
  Q1 home    L 79-94  vs Alabama (#25)
  Q2 home    W 82-67  vs SMU (#42)
Actual output, sportsdataverse / hoopR, 2024-25, retrieved June 2026.

There's the whole bubble argument in four lines. A 1-10 Quadrant 1 record is the kind of résumé that makes a committee sweat — lots of chances against elite teams (Duke three times, Florida, Auburn, Alabama), almost no wins to show for them — propped up by a spotless 14-0 against Quadrant 4. The team sheet doesn't tell you whether they should get in; it frames the exact question the committee debates. (Our ranking differs slightly from the official NET, so treat the specific quadrants as illustrative of the method.)

Make it yours

  • Plug in a better rank. Use adjusted efficiency or Elo instead of raw margin and the quadrants tighten toward the committee's.
  • Add the bad-loss flag. Quad 3 and 4 losses sink résumés; surface them prominently.
  • Compare bubble teams side by side — that's exactly how bracketologists argue the last four in.

Sources & further reading

The CollegeAthleteInsider Analyst

I'm an independent analyst covering college football and basketball through public data. Every number here traces to a script in /scripts. More about the methodology →