Ties for the win

The objectively terrible overtime game between Penn State and Illinois made us all think about how we miss ties:

I think the current swing is a more mundane generational shift: The last tie in college football was in 1995 before the new overtime rules took effect the next year. Ties became associated with the recently bygone era and no one missed them for a while, but just as we are living in the time of a Friends reunion and hand-wringing trend pieces about 90s fashion revival so comes the nostalgia for ties.

From a data perspective college football’s overtime rules feel like a destruction of information. The endless series of short yardage coinflips creates an artificial certainty in the record (deceiving AP voters and CFP committee members) when it’s more accurate to say the teams played even that day. We have computers now! Let’s leave the ties in the official record and use more advanced stats to go to the next level for comparing teams. But from a fan’s perspective I do like to watch that coin flip.

I found one great tie in our California Cup history that we can really dig into and fix a nice bug. Here’s the verbose run with the current codebase for the year 1979:

$ python3  ./mcc_schedule.py -s 1979 -e 1979 -v
San José State 29 at Stanford 45 on Sep 14, 1979
San José State 10 at California 13 on Sep 21, 1979
San Diego State 32 at Fresno State 23 on Sep 21, 1979
Cal State Fullerton 17 at Pacific 7 on Sep 28, 1979
Cal State Fullerton 0 at San José State 23 on Oct 05, 1979
UCLA 24 at Stanford 27 on Oct 05, 1979
San José State 35 at Fresno State 22 on Oct 12, 1979
USC 21 at Stanford 21 on Oct 12, 1979
California 27 at UCLA 28 on Oct 19, 1979
Fresno State 14 at Long Beach State 24 on Oct 19, 1979
USC 24 at California 14 on Oct 26, 1979
Long Beach State 42 at San José State 53 on Oct 26, 1979
Fresno State 33 at Pacific 10 on Oct 26, 1979
Pacific 15 at Long Beach State 17 on Nov 02, 1979
Pacific 31 at San José State 32 on Nov 09, 1979
Fresno State 28 at Cal State Fullerton 24 on Nov 09, 1979
California 21 at Stanford 14 on Nov 16, 1979
UCLA 14 at USC 49 on Nov 23, 1979
Cal State Fullerton 13 at Long Beach State 16 on Nov 23, 1979

MIN: disqualifying insufficient wins (1) from San Diego State
1979 final standings

Long Beach State        3-1
San José State          4-2
USC                     2-0-1
Stanford                2-1-1
California              2-2
Fresno State            2-3
UCLA                    1-2
Cal State Fullerton     1-3
Pacific                 0-4

1979, 19, Long Beach State, 3-1

Some background on that 1979 USC team: they were monsters. Two years ago ESPN ranked them the 30th best team of all time. Marcus Allen was the backup RB because their first option was Charles White who rushed for 2000 yards and won the Heisman. Their QB also finished 6th in the Heisman voting. 22 members of the team later played in the NFL. Anthony Muñoz. Ronnie Lott. They came into the Stanford game undefeated and had been ranked number 1 all season. After the tie they dropped to number 4 but never lost a game. They beat number 1 Ohio State in the Rose Bowl and finished ranked number 2 to undefeated Alabama. It is absolutely certain that the 21-21 tie with Stanford cost them the national title.

But should it cost them the Mythical California Cup? Here’s the current StandingsRecord sort function we pass in to create the pre-tiebreaker ordered standings:

def standings_sortfunc(sr) :
    return (sr.wins * 1000 / (sr.losses + sr.wins + sr.ties)) - sr.losses + sr.wins

Since the python3 built-in function sorted() wants one integer value to make its determination this is my attempt at packing two layers of information into the number: Winning percentage matters most, then proceed to gross win/loss delta. But while the numerator includes only wins the denominator has every game. This makes a tie essentially as good as a loss. 2-0-1 USC is ranked below 3-1 LB State. The more I think about it that feels wrong. What should it be?

The current rules for standings in the NFL, which still has ties, says that ties are counted as half a win and half a loss for percentage purposes. (That would put USC’s 1979 percentage at .833.) There is an amazing piece of research referenced on wikipedia about NFL ties. According the authors, before 1972 the NFL didn’t count ties at all in the winning percentage calculations. 1-0-13 would be a perfect season. Once an 8-2-2 team finished ahead of a 9-3 team. I tried to find the college football standings rules from the days with ties but I could not. So let’s check a newspapers.com search of contemporary sports pages for the Pac-10 standings.

Oddly enough the two that I found conflict. Here’s the Torrance Daily Breeze from October 14, 1979:

Their implied formula is the same as mine: ties are as good as a loss. And here’s the Berkeley Gazette from the same day:

They seem to be using the old NFL formula: ties don’t count at all. (If they were using the half-a-win formula you would think 3-1 would rank above fellow .750 percentage-holder 1-0-1.)

Given that chaos let’s switch our code to the NFL-style half-a-win formula. It feels right and it gives 1979 USC its due. Here’s the diff:

-    return (sr.wins * 1000 / (sr.losses + sr.wins + sr.ties)) - sr.losses + sr.wins
+    return (((sr.wins * 1000) + (sr.ties * 500)) / (sr.losses + sr.wins + sr.ties)) - sr.losses + sr.wins

That also exposes another bug: the final CSV record printout was still ignoring ties. So let’s be good citizens and factor out the tie-aware record printout into one place and use it for both standings and csv string conversions.

Eyeball regression tests indicate the change only affects 1979 results. Real regression tests would be better…