The AP Poll Unhinged

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:

Biggest Moves Up the AP Poll Rankings, 2004-2013
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:

Biggest Moves Down the AP Poll Rankings, 2004-2014
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:

Biggest Moves Down the AP Poll Rankings, 2004-2013
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

Biggest Moves Down the AP Poll Rankings, 2004-2014
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))

  1. s/o Condi! 

  2. Oh Michigan, how you never fail to entertain/disappoint.