Team rankings are one of my favorite aspects of college sports. The basketball rankings have long been irrelevant, given the selection process for the NCAA tournament. But, until this year, the AP and Coaches polls actually mattered in college football. And they mattered quite a bit. Until 1997, the AP Poll alone decided who the national champion was, sometimes before the championship game had actually been played.
Sure, the importance of human polls for college football has been declining, thanks to the introduction of the BCS system. But, nonetheless, the AP Poll was an integral (literally) part of the BCS equation. Until this year.
Until 1997, the AP Poll alone determined who the national champion was, sometimes before the championship game had actually been played.
With the introduction of the College Football Playoff (annoyingly abbreviated CFP), and, more importantly, the College Football Selection Committee,1 the AP is totally irrelevant. Many of the Selection Committee Members admit that they pay no attention to the polls, so they are, more than ever, a tool of popular media to drive viewership of...popular media.
It's actually an interesting (anecdotal) test case for what happens when rankings come detached from their intended purpose. If the rankings are no longer consequential for the outcomes of the rankees, what happens? In the case of the AP Poll, relative pandemonium happens.
The Data
To get a sense of context for this year's rankings, I collected rankings from the past 10 years (thanks to this site). Here's a sense of what the data looks like:
twrank lwrank team conference record points date lwwl lwor year rkdf wins losses wl
5 7 Baylor Big 12 5-0 1258 2014-10-05 1 0 2014 -2 5 0 5
6 9 Notre Dame Ind 5-0 1186 2014-10-05 1 12 2014 -3 5 0 5
7 3 Alabama SEC 4-1 1060 2014-10-05 1 15 2014 4 4 1 3
8 10 Michigan State Big Ten 4-1 981 2014-10-05 1 7 2014 -2 4 1 3
9 25 TCU Big 12 4-0 979 2014-10-05 1 22 2014 -16 4 0 4
10 26 Arizona Pac-12 5-0 951 2014-10-05 1 24 2014 -16 5 0 5
11 4 Oklahoma Big 12 4-1 904 2014-10-05 1 1 2014 7 4 1 3
12 2 Oregon Pac-12 4-1 888 2014-10-05 1 0 2014 10 4 1 3
13 13 Georgia SEC 4-1 854 2014-10-05 1 0 2014 0 4 1 3
14 6 Texas A&M SEC 5-1 731 2014-10-05 1 14 2014 8 5 1 4
15 20 Ohio State Big Ten 4-1 534 2014-10-05 1 0 2014 -5 4 1 3
16 21 Oklahoma State Big 12 4-1 527 2014-10-05 0 0 2014 -5 4 1 3
17 23 Kansas State Big 12 4-1 486 2014-10-05 0 0 2014 -6 4 1 3
18 8 UCLA Pac-12 4-1 460 2014-10-05 1 0 2014 10 4 1 3
19 22 East Carolina AAC 4-1 344 2014-10-05 0 0 2014 -3 4 1 3
20 26 Arizona State Pac-12 4-1 325 2014-10-05 1 10 2014 -6 4 1 3
21 19 Nebraska Big Ten 5-1 283 2014-10-05 1 16 2014 2 5 1 4
22 26 Georgia Tech ACC 5-0 235 2014-10-05 0 0 2014 -4 5 0 5
23 24 Missouri SEC 4-1 212 2014-10-05 NA NA 2014 -1 4 1 3
24 26 Utah Pac-12 4-1 206 2014-10-05 1 18 2014 -2 4 1 3
25 14 Stanford Pac-12 3-2 143 2014-10-05 0 17 2014 11 3 2 1
From 2008 on, the site has reliable results from the previous week (e.g. W vs #2 Oregon). When these results are present, I parse them into lwwl
(last week won/lost) and lwor
(last week opponent rank). rkdf
is the main variable of interest: the different between last week's rank and this week's rank.
Jump Up Jump Up
Here is a table of the biggest moves up the charts from 2004-2013. A rank of 26 means "unranked". A move up the charts means a move toward #1:
Current Rank | Last Rank | Team | conference | record | date | Rank Delta |
---|---|---|---|---|---|---|
11.00 | 24.00 | Auburn | SEC | 6-1 | 2013-10-20 | -13.00 |
13.00 | 26.00 | Iowa | Big Ten | 4-0 | 2009-09-27 | -13.00 |
9.00 | 21.00 | Stanford | Pac-12 | 3-0 | 2012-09-16 | -12.00 |
14.00 | 26.00 | East Carolina | C-USA | 2-0 | 2008-09-07 | -12.00 |
6.00 | 18.00 | South Florida | Big East | 5-0 | 2007-09-30 | -12.00 |
11.00 | 23.00 | Tennessee | SEC | 1-0 | 2006-09-05 | -12.00 |
14.00 | 25.00 | Missouri | SEC | 6-0 | 2013-10-13 | -11.00 |
15.00 | 26.00 | Miami (FL) | ACC | 2-0 | 2013-09-08 | -11.00 |
15.00 | 26.00 | Auburn | SEC | 4-1 | 2011-10-02 | -11.00 |
7.00 | 18.00 | Missouri | Big 12 | 7-0 | 2010-10-24 | -11.00 |
Before this year, Auburn and Iowa had the biggest jumps on October 20, 2013 and September 27, 2009, respectively. Unsurprisingly, most of the big jumps happen in September and October - early enough in the season that things are still pretty volatile. Nonetheless, the biggest jump over that 9-year span was 13. Here is the same chart, with this year's polls added:
Current Rank | Last Rank | Team | conference | record | date | Rank Delta |
---|---|---|---|---|---|---|
9.00 | 25.00 | TCU | Big 12 | 4-0 | 2014-10-05 | -16.00 |
10.00 | 26.00 | Arizona | Pac-12 | 5-0 | 2014-10-05 | -16.00 |
11.00 | 24.00 | Auburn | SEC | 6-1 | 2013-10-20 | -13.00 |
13.00 | 26.00 | Iowa | Big Ten | 4-0 | 2009-09-27 | -13.00 |
14.00 | 26.00 | Mississippi State | SEC | 4-0 | 2014-09-21 | -12.00 |
9.00 | 21.00 | Texas A&M | SEC | 1-0 | 2014-09-02 | -12.00 |
9.00 | 21.00 | Stanford | Pac-12 | 3-0 | 2012-09-16 | -12.00 |
14.00 | 26.00 | East Carolina | C-USA | 2-0 | 2008-09-07 | -12.00 |
6.00 | 18.00 | South Florida | Big East | 5-0 | 2007-09-30 | -12.00 |
11.00 | 23.00 | Tennessee | SEC | 1-0 | 2006-09-05 | -12.00 |
Hunch confirmed. This year, not one but two teams jumped sixteen (16!) spots up the rankings! What's more, they both made the jumps in the same week. Both TCU and Arizona had the biggest jumps in the last 10 years of the AP Poll. It seems unlikely that their wins (#4 Oklahoma at TCU and #2 Oregon at Oregon) were bigger than any two other wins in the past 10 years. Instead, it would appear that the AP Pollsters are just messing with us. This is further confirmed by the fact that 4 of the top 6 jumps up the chart have happened this year.
And Get Down
What about moves down the chart? Here are the same two tables for downward movement:
Current Rank | Last Week Rank | Team | conference | record | date | Rank Delta |
---|---|---|---|---|---|---|
26.00 | 5.00 | Michigan | Big Ten | 2007-09-04 | 21.00 | |
26.00 | 8.00 | Arkansas | SEC | 1-1 | 2012-09-09 | 18.00 |
24.00 | 6.00 | California | Pac-10 | 3-1 | 2009-09-27 | 18.00 |
21.00 | 4.00 | Mississippi | SEC | 2-1 | 2009-09-27 | 17.00 |
25.00 | 8.00 | West Virginia | Big East | 1-1 | 2008-09-07 | 17.00 |
26.00 | 9.00 | Clemson | ACC | 2008-09-02 | 17.00 | |
26.00 | 11.00 | UCLA | Pac-10 | 2007-09-16 | 15.00 | |
24.00 | 9.00 | Louisville | Big East | 2-1 | 2005-09-25 | 15.00 |
25.00 | 11.00 | West Virginia | Big East | 5-2 | 2011-10-23 | 14.00 |
21.00 | 7.00 | Texas | Big 12 | 3-1 | 2010-09-26 | 14.00 |
Current Rank | Last Week Rank | Team | conference | record | date | Rank Delta |
---|---|---|---|---|---|---|
26.00 | 5.00 | Michigan | Big Ten | 2007-09-04 | 21.00 | |
26.00 | 8.00 | Arkansas | SEC | 1-1 | 2012-09-09 | 18.00 |
24.00 | 6.00 | California | Pac-10 | 3-1 | 2009-09-27 | 18.00 |
21.00 | 4.00 | Mississippi | SEC | 2-1 | 2009-09-27 | 17.00 |
25.00 | 8.00 | West Virginia | Big East | 1-1 | 2008-09-07 | 17.00 |
26.00 | 9.00 | Clemson | ACC | 2008-09-02 | 17.00 | |
26.00 | 11.00 | UCLA | Pac-10 | 2007-09-16 | 15.00 | |
24.00 | 9.00 | Louisville | Big East | 2-1 | 2005-09-25 | 15.00 |
22.00 | 8.00 | Ohio State | Big Ten | 1-1 | 2014-09-07 | 14.00 |
25.00 | 11.00 | West Virginia | Big East | 5-2 | 2011-10-23 | 14.00 |
This is great for me, because I get to point out that Michigan has had the biggest drop the last 10 years of the AP Poll. On September 3, 2007, UM was ranked #5, and then ignominiously lost to Appalachian State at home. They were consequently dropped from the charts.2
Rankings-wise, the 2014 AP Pollsters come out okay: only one of the 10 biggest drops in the last 10 years came this year, and it was when another B1G team lost at home to an unranker (Ohio State vs Virginia Tech). Still, of the 20 biggest moves in the past 10 years, up or down the rankings, 5 (or 1/4) of them come from 2014 alone. The AP Poll has come unhinged.
Code
# LOAD PACKAGES
library('rvest')
library('lubridate')
library('lme4')
library('xtable')
# FOR-LOOP SETUP
theval <- 1079
ptf <- data.frame()
# FOR-LOOP PAGE SCRAPE
for (i in 1:170){
Sys.sleep(1)
theval <- theval-1
print(theval)
# Get Page & Find Table
url = paste('http://collegepollarchive.com/football/ap/seasons.cfm?appollid=', theval, sep="")
poll1 <- html(url)
table <- html_nodes(poll1, "table")
polltable <- html_table(table[[10]])
# Table Cleaning
names(polltable) <- c(polltable[1, ])
polltable <- polltable[-1, ]
names(polltable)[2] <- "LWR"
# Get Poll Date
date <- poll1 %>% html_node("h2") %>% html_text()
date <- sub(" AP Football Poll", "", date)
datep <- parse_date_time(date, "B d!, Y!")
# More Poll Cleaning
polltable <- polltable[,c("Rank", "LWR", "Team (FPV)", "Conf", "W-L", "PTS", "Last Week")]
names(polltable) <- c('twrank', 'lwrank','team', 'conference', 'record', 'points', 'lastweek')
pt <- na.omit(polltable)
pt$date <- date
# Bind Poll to Master Data Frame
ptf <- rbind(ptf, pt)
}
# Remove First Place Votes & Clean Team Names
ptf$team <- sub("\\([0-9]{1,2}\\)", "", ptf$team)
ptf$team <- sub("\r\n","", ptf$team)
ptf$team <- sub("[ \t]+$", "", ptf$team)
# Clean Ranks
ptf$lwrank <- sub("<", "", ptf$lwrank)
ptf$lwrank <- sub("[ \t]", "", ptf$lwrank)
# Parse Last Week Results
ptf$lwwl <- ifelse(regexpr("[WL]", ptf$lastweek)!=-1,regmatches(ptf$lastweek, regexpr("[WL]", ptf$lastweek)), NA)
ptf$lwor <- str_extract(ptf$lastweek, "#[0-9]{1,2}")
ptf$lwor[!(is.na(ptf$lwwl)) & is.na(ptf$lwor)] <- "26"
ptf$lwha <- ifelse(regexpr("[vs]", ptf$lastweek)==-1,0,1)
ptf$lwha[is.na(ptf$lwwl)] <- NA
ptf$lwor <- sub('\\#', '', ptf$lwor)
ptf$lwor <- as.numeric(as.character(ptf$lwor))
ptf$lwor <- 26-ptf$lwor
ptf$lwwl <- recode(ptf$lwwl, '"W"=1;"L"=0')
ptf$lwwl <- as.numeric(as.character(ptf$lwwl))
# Keep Only The Columns I want
ptf <- ptf[,c(1:10)]
# Remove Preseason and Postseason Rankings (for date purposes)
ptf2 <- ptf
pre <- grep('Preseason', ptf2$date)
ptf2 <- ptf2[-pre, ]
post <- grep('Final', ptf2$date)
ptf2 <- ptf2[-post, ]
# Clean Rankings: Set nonranked teams and those receiving votes to 26
ptf2$twrank[ptf2$twrank=='NR'] <- 26
ptf2$twrank[ptf2$twrank=='RV'] <- 26
ptf2$lwrank[ptf2$lwrank=='NR'] <- 26
ptf2$lwrank[ptf2$lwrank=='RV'] <- 26
ptf2$twrank <- as.numeric(as.character(ptf2$twrank))
ptf2$lwrank <- as.numeric(as.character(ptf2$lwrank))