🏈 The Pigskin Index

Why the Pigskin Index exists

I love college football. What I don't love is how the season gets decided.

Watch the games, then rank the teams

I'm tired of a season being shaped by AP voters who don't even watch most of the games they rank. A ballot built on reputation, highlights and last year's narrative isn't a ranking. It's a popularity contest. And when the dust settles, the final CFP rankings too often don't show the twelve teams that actually earned a shot.

So I built something that only cares about what happens on the field this season.

No brand bias. Period.

  • No preseason polls. Everybody starts at zero in Week 1.
  • No recruiting rankings. Stars on signing day don't win games in October.
  • No last-season results. Last year's team graduated.
  • No logo tax and no built-in SEC advantage. Nobody gets docked for having a less flashy brand, and nobody gets a bump for wearing a famous helmet. A conference only looks strong here if its teams win.

There's no such thing as a "quality loss"

I can't stand that phrase. A loss is a loss. It makes no sense for a team to get more credit for losing to a good opponent than another team gets for actually beating a comparable one. You earn credit by winning. Every loss costs you real ground. Losing to a mediocre team costs a little more than losing to a great one, but no loss ever helps you, and nobody gets rewarded for "hanging with" a good team.

A little credit for a tough schedule

Wins are still what count. But if you actually played a brutal slate, week after week, you get a light nudge for it. It's a small term, not a trump card: it won't lift a team past someone who beat them, and it isn't an SEC bonus or a brand bonus. Any team in any conference that plays good opponents gets the same credit.

Results first, and head-to-head matters

This ranks what teams have done, not who might win some hypothetical playoff game in January. And if you beat a team on the field, with the same number of losses or fewer, you're ranked ahead of them. You settled it already.

Analytics measure who's actually good

Records don't tell the whole story, so the Index also looks under the hood: EPA per play, success rate, explosiveness, havoc and finishing drives, all adjusted for who you played. Those numbers separate the teams that are dominating from the ones getting by. They also remind us that turnover luck is real: bouncing fumbles and tipped picks can make a team look better or worse than it is. So on the predictive side I trim it out (about 4 points per net turnover) and flag the extreme cases.

How the number gets made

60% RésuméWhat you earned: credit for every win, more for beating good teams, minus a penalty for every loss, plus a light nudge for a tough schedule.
40% PredictiveHow good you actually are: opponent-adjusted efficiency and scoring margin, capped so running up the score doesn't help.
Losses always hurtEach loss costs 0.8 to 1.1 points: a bit more against a weak opponent, never less than 0.8. No quality losses.
Weak-win thresholdBeating a cupcake earns nothing. Wins only count once the opponent is good enough to actually test you.
Head-to-head ruleBeat them with the same number of losses or fewer, and you're ranked above them. Loops get settled sensibly.
Official Pigskin PollA fan vote that rivals the AP. Real fans who actually watch submit one top-25 ballot a week, and it locks Sunday at noon Mountain Time.

That's it. No smoke, no brands, no "quality losses." Just football. Dig into the rankings, build your own in Build Your Own, and tell me where I'm wrong. That's half the fun.

— Nate

Projected 12-team CFP bracket

The Pigskin Index vs the AP Top 25

TeamConfRecordIndex rankAP rankDiffFan poll

Build Your Own Top 25 & Playoff

Drag teams from the pool into your Top 25. Each team can only appear once. "vs Index" = Pigskin Index rank minus your rank: + means you rank the team higher than the Index. Ballots are saved only in this browser (localStorage). Submit as official ballot sends it to the Official Pigskin Poll. You need to sign in first, and you can edit it until Sunday 12:00 PM Mountain Time.

Team pool

The top 40 by Pigskin Index. Drag a card into a slot, or tap it to fill the next empty slot.

Your Top 25

Drag to reorder, and drag a team back to the pool (or tap ✕) to remove it.

Your 12-team bracket

Official Pigskin Poll

This is a fan poll: signed-in voters each submit one top-25 ballot per week from the Build Your Own tab. Ballots lock Sunday at 12:00 PM Mountain Time, and the tally publishes then.

Rankings

Click a column header to sort. Green rows = the 12-team playoff field (ranks 1–12). Flags: TO+ turnover margin ≥ +1/game (likely unsustainable luck), TO− ≤ −1/game, 1-score record in one-score games.

Methodology

Only games played in the current season count. No preseason polls, recruiting, last year's results, betting lines, FPI/SP+, or AP/CFP polls. Everything is calculated from this season's scores and play-by-play stats (via CollegeFootballData.com), then adjusted for opponent. Teams outside FBS are grouped into one pooled "FCS" opponent.

The final score = Predictive × weight + Résumé × (1 − weight). Each half is a z-score, meaning standard deviations above the FBS average. The default is 60% Résumé / 40% Predictive: results come first, but how well a team actually plays carries real weight.

Head-to-head rule: if Team A beat Team B and A has the same number of losses as B or fewer, A is ranked above B, no matter what the scores say. When these results form a loop (A beat B, B beat C, C beat A), the result involving the highest-ranked team is applied first, and any later result that would complete the loop is ignored. Teams that directly jumped a team they beat are marked ↑H2H.

Predictive half: how good is this team?

Adjusted Margin (40%)
Each game's score margin is first adjusted for turnover luck (4 points removed per net turnover in that game), then capped at ±28 so running up the score doesn't help. A ridge regression then solves for one rating per team (plus home-field advantage) that best explains every margin at once. That builds in opponent strength: beating a good team by 10 counts for more than beating a bad one by 10. The number is in points vs an average FBS team on a neutral field.
Adjusted EPA/play, offense and defense (30%)
Expected Points Added (EPA/PPA) measures how much each play changes a team's expected points. Garbage time is excluded. Per-game values go through a regression that separates a team's offense from the quality of the defenses it faced, and the same is done for defense.
Adjusted Success Rate (10%)
The share of plays that keep the offense "on schedule" (50% of yards needed on 1st down, 70% on 2nd, 100% on 3rd/4th). It's opponent-adjusted the same way.
Adjusted Explosiveness (5%)
Average EPA on successful plays, i.e. how big the big plays are. Opponent-adjusted.
Havoc (7.5%)
The share of defensive plays that produce a tackle for loss, forced fumble, interception, or pass breakup (minus the havoc your own offense allows). This is a season rate and isn't opponent-adjusted.
Finishing Drives (7.5%)
Points per scoring opportunity (drives that reach the opponent's 40), offense minus defense.

Résumé half: what has this team earned?

Win Value
Only wins earn credit. Each win starts at the chance that a typical #25 team (by The Pigskin Index's own Adjusted Margin) would fail to win that same game at the same site. A cupcake threshold of 0.30 is then subtracted from every win, with a floor of 0, so wins over weak opponents are worth nothing and an unbeaten record built on easy wins doesn't add up. Beating a top-5 team on the road is still worth about 0.6–0.7.
Losses (opponent-scaled penalty)
Each loss subtracts between 0.8 and 1.1. A loss to a team whose Adjusted Margin is top-10 caliber costs 0.8; the penalty rises linearly to 1.1 for a loss to a team ranked #100 or worse by margin (or a non-FBS team). Even the smallest penalty is most of a full win, so there's no reward for a "quality loss".
Résumé = z(Win Value − Loss Penalties) + 0.13 × z(SOS)
Win credit minus loss penalties is converted to a z-score. A light strength-of-schedule term (0.13 × the z-score of SOS*, the average Adjusted Margin of opponents) is added and the result is re-standardized. It's small by design: beating good teams still matters far more than just playing them. No conference or brand adjustment of any kind.
Quality wins / bad losses / game control
These are shown for context only and aren't in the score.

No unbeaten protection

Unbeaten teams get no special ordering rule. Their wins and zero losses already count in the Résumé score. Only the head-to-head rule overrides the scores.

Context flags (not in the score)

Turnover margin
Takeaways minus giveaways. Fumble recoveries and tipped interceptions are largely random, so an extreme margin suggests a record better (or worse) than the team's underlying play.
One-score record
The record in games decided by 8 points or fewer. These results swing on coin flips, so a team that's 4-0 in them is probably not as dominant as its record says.

Tiers (optional display): turning on "Show tiers" groups the ranking into Top Contenders (1–4), Playoff Field (5–12), Playoff Bubble (13–20), Next Up (21–25) and Outside Looking In (26+). Tiers are labels by rank only and don't change any score.

vs AP Poll tab: compares The Pigskin Index with the latest AP Top 25 from CFBD, for comparison only. Poll rankings are never used to calculate the Index.

Playoff projection

The 12-team field is exactly The Pigskin Index top 12. No team is bumped in or out for an automatic bid. The four first-round byes go to current conference winners: the leader of each conference by conference win %, then fewest conference losses, then The Pigskin Index ranking. Independents can't win a conference. Power-conference champions (SEC, Big Ten, Big 12, ACC) in the top 12 get first priority for byes, then other conference champions in the top 12. If fewer than four conference champions are in the top 12, the highest-ranked remaining teams take the open byes. The bye teams are seeds 1–4 in ranking order, and the other eight are seeds 5–12 in ranking order. First round: 5 v 12, 6 v 11, 7 v 10, 8 v 9. Quarterfinals: 1 v 8/9, 2 v 7/10, 3 v 6/11, 4 v 5/12.