This document summarises the forecast outcomes for the most set of forecasts for English football match outcomes, following on from recent weeks, and it provides outcomes for forecasts of matches over the last week as detailed in this document.

Two sets of forecasts are constructed, one using a simple linear regression method for a dependent variable taking the values 0 for an away win, 0.5 for a draw, and 1 for a home win. This linear regression method only yields a number which can be interpreted as a probability of an outcome occurring. The second, ordered logit method, treats each outcome in an ordered manner, from away win, to draw, to home win, and estimates a probability for each outcome.

The purpose of this document is to evaluate these forecasts, and begin to form a longer-term narrative about them.

Outcomes

To consider outcomes; we must load up the specific outcomes file for matches forecast over the weekend:

dates <- c("2015-01-30","2015-02-06","2015-02-13","2015-02-20","2015-02-27","2015-03-06","2015-03-13")
date.1 <- dates[NROW(dates)]
recent.forecast.outcomes <- read.csv(paste("forecast_outcomes_",date.1,".csv",sep=""),stringsAsFactors=F)
forecast.matches <- read.csv(paste("forecasts_",date.1,".csv",sep=""))
forecast.matches <- forecast.matches[is.na(forecast.matches$outcome)==F,]
forecast.outcomes <- merge(forecast.matches[,c("match_id","outcome","Ph","Pd","Pa")],
                           recent.forecast.outcomes,by=c("match_id"),
                           suffixes=c(".forc",".final"))
forecast.outcomes <- forecast.outcomes[is.na(forecast.outcomes$outcome.final)==F,]

all.forecast.outcomes <- data.frame()
loc <- "/home/readejj/Dropbox/Teaching/Reading/ec313/2015/Football-forecasts/"
for(i in dates) {
  temp.0 <- read.csv(paste(loc,"forecast_outcomes_",i,".csv",sep=""),stringsAsFactors=F)
  temp.0$X <-NULL
  temp.0$forc.week <- i
  temp.1 <- read.csv(paste(loc,"forecasts_",i,".csv",sep=""))
  temp.1$X <-NULL
  temp.1 <- temp.1[is.na(temp.1$outcome)==F,]
  if(!("Ph" %in% colnames(temp.1))) {
    temp.1$Ph <- NA
    temp.1$Pd <- NA
    temp.1$Pa <- NA
  }
  if(!("tier" %in% colnames(temp.0))) {
    temp.0$tier <- NA
  }
  temp.2 <- merge(temp.1[,c("match_id","outcome","Ph","Pd","Pa")],
                             temp.0[,c("match_id","date","division","team1",
                                       "goals1","goals2","team2","outcome",
                                       "season","tier","forc.week")],
                  by=c("match_id"),suffixes=c(".forc",".final"))
  all.forecast.outcomes <- rbind(temp.2[is.na(temp.2$outcome.final)==F,],all.forecast.outcomes)
}
outcomeplot <- function(div) {
  matches <- forecast.outcomes[forecast.outcomes$division==div,]
  matches$id <- 1:NROW(matches)
  par(mar=c(9,4,4,5)+.1)
  plot(matches$id,matches$outcome.forc,xaxt="n",xlab="",ylim=range(0,1),
       main=paste("Forecasts of Weekend ",div," Matches",sep=""),
       ylab="Probability of Outcome")
  lines(matches$id,matches$Ph,col=2,pch=15,type="p")
  lines(matches$id,matches$Pd,col=3,pch=16,type="p")
  lines(matches$id,matches$Pa,col=4,pch=17,type="p")
  legend("topleft",ncol=4,pch=c(1,15,16,17),col=c(1:4),
         legend=c("OLS","OL (home)","OL (draw)","OL (away)"),bty="n")
  abline(h=0.5,lty=2)
  abline(h=0.6,lty=3)
  abline(h=0.7,lty=2)
  abline(h=0.4,lty=3)
  for(i in 1:NROW(matches)) {
    if(matches$outcome.final[i]==1) {
      lines(matches$id[i],matches$outcome.final[i],col=2,type="p",pch=0)
      lines(rep(i,2),c(matches$Ph[i],matches$outcome.final[i]),type="l",lty=2,col="red")
    } else if (matches$outcome.final[i]==0.5) {
      lines(matches$id[i],matches$outcome.final[i],col=3,type="p",pch=1)
      lines(rep(i,2),c(matches$Pd[i],matches$outcome.final[i]),type="l",lty=2,col="green")
    } else {
      lines(matches$id[i],matches$outcome.final[i],col=4,type="p",pch=2)
      lines(rep(i,2),c(matches$Pa[i],matches$outcome.final[i]),type="l",lty=2,col="blue")
    }
  }
  axis(1,at=matches$id,labels=paste(matches$team1,matches$team2,sep=" v "),las=2,cex.axis=0.65)
}

We also load up previous weeks’ forecasts and outcomes in order that we can begin to determine trends over time. This week was one particularly filled with surprise results, but that does not necessarily mean our forecast model need be amended. More, it reflects that football is intrinsically a very uncertain game. This, of course, is not to say that the model cannot be improved upon.

First, our Premier League forecasts:

outcomeplot("English Premier")

Outcomes are hollowed variants of their predicted probabilities; red empty circles are home wins, marked on at 1, green empty circles are draws, marked on at 0.5, and blue empty triangles are away wins. All are linked to their associated probability. This drawing doesn’t quite reflect actual forecast errors since each outcome is 1 if it happened, but nonetheless illustrates the weekend’s outcomes.

Next, our Championship forecasts:

outcomeplot("English Championship")

Next, our League One forecasts:

outcomeplot("English League One")

Next, our League Two forecasts:

outcomeplot("English League Two")

Next, our Football Conference forecasts:

outcomeplot("Football Conference")

Tabular Version

Numerically it is important to evaluate forecast errors.

For the OLS model:

forecast.outcomes$error <- forecast.outcomes$outcome.final - forecast.outcomes$outcome.forc
forecast.outcomes$error2 <- forecast.outcomes$error^2
forecast.outcomes$aerror <- abs(forecast.outcomes$error)
#summary(forecast.outcomes[forecast.outcomes$tier<=5,c("error","error2","aerror")])
summary(forecast.outcomes[,c("error","error2","aerror")])
##      error              error2              aerror        
##  Min.   :-0.77659   Min.   :0.0000238   Min.   :0.004877  
##  1st Qu.:-0.49458   1st Qu.:0.0356949   1st Qu.:0.188929  
##  Median :-0.09206   Median :0.1374032   Median :0.370679  
##  Mean   :-0.10999   Mean   :0.1794764   Mean   :0.367013  
##  3rd Qu.: 0.25841   3rd Qu.:0.2731278   3rd Qu.:0.522601  
##  Max.   : 0.73313   Max.   :0.6030880   Max.   :0.776587

For the ordered logit we must consider the three outcomes distinctly; for the home win:

forecast.outcomes$error.h <- forecast.outcomes$outcome.final - forecast.outcomes$Ph
forecast.outcomes$error.d <- as.numeric(forecast.outcomes$outcome.final==0.5) - forecast.outcomes$Pd
forecast.outcomes$error.a <- as.numeric(forecast.outcomes$outcome.final==0) - forecast.outcomes$Pa
forecast.outcomes$error.h2 <- forecast.outcomes$error.h^2
forecast.outcomes$error.d2 <- forecast.outcomes$error.d^2
forecast.outcomes$error.a2 <- forecast.outcomes$error.a^2
forecast.outcomes$aerror.h <- abs(forecast.outcomes$error.h)
forecast.outcomes$aerror.d <- abs(forecast.outcomes$error.d)
forecast.outcomes$aerror.a <- abs(forecast.outcomes$error.a)
#summary(forecast.outcomes[forecast.outcomes$tier<=5,c("error","error2","aerror")])
summary(forecast.outcomes[,c("error.h","error.d","error.a")])
##     error.h            error.d            error.a        
##  Min.   :-0.67930   Min.   :-0.28876   Min.   :-0.62200  
##  1st Qu.:-0.33910   1st Qu.:-0.27874   1st Qu.:-0.28633  
##  Median : 0.04603   Median :-0.23986   Median :-0.13806  
##  Mean   : 0.02124   Mean   : 0.03914   Mean   : 0.08584  
##  3rd Qu.: 0.37143   3rd Qu.: 0.71345   3rd Qu.: 0.62750  
##  Max.   : 0.84382   Max.   : 0.80695   Max.   : 0.87429

Considering here just the mean errors, the forecasts for home wins were biased downward much more than those for either the draw or away win; a positive forecast error suggests that the event occurs more often than the model predicts.  Until we consider more forecasts, it is difficult to say whether this is simply an artifact of one particular week.

We can consider also, by division, forecast errors for our linear regression model:

library(knitr)
aggs <- aggregate(forecast.outcomes[,c("error","error2","aerror")],
          by=list(forecast.outcomes$division),FUN=mean,na.rm=T)
kable(aggs[c(4,1,2,3,5),])
Group.1 error error2 aerror
4 English FA Cup 0.4066898 0.1653966 0.4066898
1 Conference North 0.3249273 0.1055778 0.3249273
2 Conference South 0.3161500 0.0999508 0.3161500
3 English Championship -0.1041715 0.1325534 0.3147237
5 English League One -0.1827473 0.2146822 0.4039176

The error column is the mean forecast error, the error2 column is the mean squared forecast error, and the aerror column is the absolute forecast error.

We do the same for each outcome for the ordered probit model:

library(knitr)
aggs <- aggregate(forecast.outcomes[,c("error.h","error.h2","aerror.h")],
          by=list(forecast.outcomes$division),FUN=mean,na.rm=T)
colnames(aggs) <- gsub("Group.1","Home win",colnames(aggs))
kable(aggs[c(4,1,2,3,5),])
Home win error.h error.h2 aerror.h
4 English FA Cup 0.5386706 0.2901660 0.5386706
1 Conference North 0.4459522 0.1988734 0.4459522
2 Conference South 0.4280749 0.1832481 0.4280749
3 English Championship 0.0254027 0.1183597 0.3036271
5 English League One -0.0526060 0.1865225 0.3884213
aggs <- aggregate(forecast.outcomes[,c("error.d","error.d2","aerror.d")],
          by=list(forecast.outcomes$division),FUN=mean,na.rm=T)
colnames(aggs) <- gsub("Group.1","Draw",colnames(aggs))
kable(aggs[c(4,1,2,3,5),])
Draw error.d error.d2 aerror.d
4 English FA Cup -0.2763350 0.0763611 0.2763350
1 Conference North -0.2490700 0.0620359 0.2490700
2 Conference South -0.2424309 0.0587727 0.2424309
3 English Championship 0.1004408 0.2359350 0.4202624
5 English League One 0.0083516 0.1925225 0.3795346
aggs <- aggregate(forecast.outcomes[,c("error.a","error.a2","aerror.a")],
          by=list(forecast.outcomes$division),FUN=mean,na.rm=T)
colnames(aggs) <- gsub("Group.1","Away win",colnames(aggs))
kable(aggs[c(4,1,2,3,5),])
Away win error.a error.a2 aerror.a
4 English FA Cup -0.2623356 0.0688200 0.2623356
1 Conference North -0.1968822 0.0387626 0.1968822
2 Conference South -0.1856441 0.0344637 0.1856441
3 English Championship 0.0480696 0.2054340 0.3913458
5 English League One 0.1746892 0.2825975 0.4628295

We can also look at errors across weeks:

all.forecast.outcomes$error.h <- all.forecast.outcomes$outcome.final - all.forecast.outcomes$Ph
all.forecast.outcomes$error.d <- as.numeric(all.forecast.outcomes$outcome.final==0.5) - all.forecast.outcomes$Pd
all.forecast.outcomes$error.a <- as.numeric(all.forecast.outcomes$outcome.final==0) - all.forecast.outcomes$Pa
all.forecast.outcomes$error.h2 <- all.forecast.outcomes$error.h^2
all.forecast.outcomes$error.d2 <- all.forecast.outcomes$error.d^2
all.forecast.outcomes$error.a2 <- all.forecast.outcomes$error.a^2
all.forecast.outcomes$aerror.h <- abs(all.forecast.outcomes$error.h)
all.forecast.outcomes$aerror.d <- abs(all.forecast.outcomes$error.d)
all.forecast.outcomes$aerror.a <- abs(all.forecast.outcomes$error.a)

aggs.h <- aggregate(all.forecast.outcomes[,c("error.h","error.h2","aerror.h")],
          by=list(all.forecast.outcomes$forc.week),FUN=mean,na.rm=T)
aggs.d <- aggregate(all.forecast.outcomes[,c("error.d","error.d2","aerror.d")],
          by=list(all.forecast.outcomes$forc.week),FUN=mean,na.rm=T)
aggs.a <- aggregate(all.forecast.outcomes[,c("error.a","error.a2","aerror.a")],
          by=list(all.forecast.outcomes$forc.week),FUN=mean,na.rm=T)
plot(as.Date(aggs.h$Group.1),aggs.h$error.h,type="o",main="Forecast Errors Each Week",
     ylab="Forecast Error",xlab="Date",
     ylim=range(c(aggs.h$error.h,aggs.d$error.d,aggs.a$error.a),na.rm=T),col="red")
lines(as.Date(aggs.d$Group.1),aggs.d$error.d,type="o",col="green")
lines(as.Date(aggs.a$Group.1),aggs.a$error.a,type="o",col="blue")

plot(as.Date(aggs.h$Group.1),aggs.h$error.h2,type="o",main="Squared Forecast Errors Each Week",
     ylab="Forecast Error",xlab="Date",
     ylim=range(c(aggs.h$error.h2,aggs.d$error.d2,aggs.a$error.a2),na.rm=T),col="red")
lines(as.Date(aggs.d$Group.1),aggs.d$error.d2,type="o",col="green")
lines(as.Date(aggs.a$Group.1),aggs.a$error.a2,type="o",col="blue")

plot(as.Date(aggs.h$Group.1),aggs.h$aerror.h,type="o",main="Absolute Forecast Errors Each Week",
     ylab="Forecast Error",xlab="Date",
     ylim=range(c(aggs.h$aerror.h,aggs.d$aerror.d,aggs.a$aerror.a),na.rm=T),col="red")
lines(as.Date(aggs.d$Group.1),aggs.d$aerror.d,type="o",col="green")
lines(as.Date(aggs.a$Group.1),aggs.a$aerror.a,type="o",col="blue")

Finally, we list all the forecasts again with outcomes:

kable(forecast.outcomes[order(forecast.outcomes$date,forecast.outcomes$division),
                       c("date","division","team1","goals1","goals2","team2",
                         "outcome.forc","Ph","Pd","Pa","outcome.final","error","error2","aerror")],digits=3)
date division team1 goals1 goals2 team2 outcome.forc Ph Pd Pa outcome.final error error2 aerror
70 2015-03-13 English League Two Newport Co 1 1 Cheltenham 0.723 0.609 0.227 0.163 0.5 -0.223 0.050 0.223
102 2015-03-14 Conference North Bradford PA 1 0 Stalybridge 0.675 0.554 0.249 0.197 1.0 0.325 0.106 0.325
101 2015-03-14 Conference South Hayes & Y 3 0 Farnborough 0.684 0.572 0.242 0.186 1.0 0.316 0.100 0.316
12 2015-03-14 English Championship Leeds 0 0 Nottm Forest 0.629 0.494 0.268 0.238 0.5 -0.129 0.017 0.129
15 2015-03-14 English Championship Watford 4 1 Reading 0.828 0.740 0.163 0.097 1.0 0.172 0.030 0.172
20 2015-03-14 English Championship Charlton 1 3 Blackburn 0.530 0.378 0.288 0.334 0.0 -0.530 0.281 0.530
21 2015-03-14 English Championship Birmingham 1 1 Huddersfield 0.789 0.681 0.194 0.125 0.5 -0.289 0.083 0.289
24 2015-03-14 English Championship Middlesbro 4 1 Ipswich 0.690 0.570 0.243 0.187 1.0 0.310 0.096 0.310
26 2015-03-14 English Championship Rotherham 1 2 Wigan 0.516 0.358 0.289 0.354 0.0 -0.516 0.266 0.516
27 2015-03-14 English Championship Bolton 2 0 Millwall 0.778 0.673 0.198 0.129 1.0 0.222 0.049 0.222
28 2015-03-14 English Championship Norwich 1 1 Derby 0.701 0.586 0.237 0.177 0.5 -0.201 0.040 0.201
29 2015-03-14 English Championship Bournemouth 4 0 Blackpool 0.898 0.823 0.116 0.061 1.0 0.102 0.010 0.102
32 2015-03-14 English Championship Sheff Wed 1 1 Fulham 0.653 0.526 0.259 0.215 0.5 -0.153 0.023 0.153
33 2015-03-14 English Championship Brighton 1 1 Wolves 0.505 0.352 0.289 0.359 0.5 -0.005 0.000 0.005
34 2015-03-14 English Championship Brentford 1 2 Cardiff 0.642 0.514 0.262 0.224 0.0 -0.642 0.413 0.642
36 2015-03-14 English League One Port Vale 0 1 Swindon 0.544 0.398 0.287 0.315 0.0 -0.544 0.296 0.544
38 2015-03-14 English League One Doncaster 0 2 Peterborough 0.562 0.415 0.285 0.301 0.0 -0.562 0.316 0.562
41 2015-03-14 English League One Scunthorpe 1 1 Sheff Utd 0.572 0.430 0.282 0.287 0.5 -0.072 0.005 0.072
46 2015-03-14 English League One Notts Co 1 1 Bradford 0.449 0.290 0.283 0.427 0.5 0.051 0.003 0.051
49 2015-03-14 English League One Oldham 1 3 Barnsley 0.465 0.309 0.286 0.405 0.0 -0.465 0.216 0.465
50 2015-03-14 English League One Colchester 2 3 Crawley 0.543 0.395 0.287 0.318 0.0 -0.543 0.295 0.543
51 2015-03-14 English League One Preston 5 1 Crewe 0.810 0.727 0.170 0.102 1.0 0.190 0.036 0.190
52 2015-03-14 English League One Bristol C 0 0 Gillingham 0.765 0.668 0.200 0.131 0.5 -0.265 0.070 0.265
53 2015-03-14 English League One Fleetwood 1 0 Rochdale 0.501 0.343 0.289 0.369 1.0 0.499 0.249 0.499
54 2015-03-14 English League One Walsall 1 1 MK Dons 0.761 0.655 0.207 0.138 0.5 -0.261 0.068 0.261
55 2015-03-14 English League One Chesterfield 2 3 Coventry 0.754 0.645 0.211 0.143 0.0 -0.754 0.569 0.754
56 2015-03-14 English League One Leyton Orient 3 0 Yeovil 0.666 0.547 0.251 0.201 1.0 0.334 0.111 0.334
58 2015-03-14 English League Two Northampton 1 0 Tranmere 0.826 0.723 0.172 0.104 1.0 0.174 0.030 0.174
59 2015-03-14 English League Two Wycombe 1 0 Shrewsbury 0.554 0.403 0.286 0.311 1.0 0.446 0.199 0.446
60 2015-03-14 English League Two York 0 0 Carlisle 0.678 0.559 0.247 0.194 0.5 -0.178 0.032 0.178
62 2015-03-14 English League Two Morecambe 0 1 Hartlepool 0.680 0.568 0.244 0.188 0.0 -0.680 0.462 0.680
63 2015-03-14 English League Two Cambridge U 1 1 Stevenage 0.475 0.322 0.287 0.391 0.5 0.025 0.001 0.025
64 2015-03-14 English League Two Dag & Red 1 3 Southend 0.525 0.374 0.288 0.338 0.0 -0.525 0.276 0.525
65 2015-03-14 English League Two Exeter 3 2 AFC W’bledon 0.671 0.545 0.252 0.203 1.0 0.329 0.109 0.329
66 2015-03-14 English League Two Mansfield 0 1 Bury 0.544 0.395 0.287 0.318 0.0 -0.544 0.296 0.544
67 2015-03-14 English League Two Burton 3 0 Accrington 0.769 0.666 0.202 0.133 1.0 0.231 0.053 0.231
75 2015-03-14 English League Two Portsmouth 2 0 Luton 0.515 0.362 0.289 0.349 1.0 0.485 0.235 0.485
78 2015-03-14 English League Two Oxford 0 0 Plymouth 0.567 0.420 0.284 0.296 0.5 -0.067 0.004 0.067
1 2015-03-14 English Premier C Palace 3 1 QPR 0.720 0.609 0.228 0.164 1.0 0.280 0.078 0.280
4 2015-03-14 English Premier West Brom 1 0 Stoke 0.448 0.291 0.283 0.426 1.0 0.552 0.305 0.552
5 2015-03-14 English Premier Arsenal 3 0 West Ham 0.820 0.721 0.173 0.105 1.0 0.180 0.032 0.180
6 2015-03-14 English Premier Sunderland 0 4 Aston Villa 0.528 0.378 0.288 0.334 0.0 -0.528 0.279 0.528
7 2015-03-14 English Premier Burnley 1 0 Man City 0.267 0.156 0.222 0.622 1.0 0.733 0.537 0.733
11 2015-03-14 English Premier Leicester 0 0 Hull 0.546 0.398 0.287 0.315 0.5 -0.046 0.002 0.046
82 2015-03-14 Football Conference Halifax 2 2 Bristol R 0.421 0.263 0.277 0.460 0.5 0.079 0.006 0.079
83 2015-03-14 Football Conference Gateshead 2 1 Macclesfield 0.511 0.358 0.289 0.354 1.0 0.489 0.239 0.489
84 2015-03-14 Football Conference Telford 1 3 Woking 0.334 0.200 0.251 0.549 0.0 -0.334 0.112 0.334
85 2015-03-14 Football Conference Aldershot 1 2 Southport 0.625 0.494 0.268 0.238 0.0 -0.625 0.390 0.625
87 2015-03-14 Football Conference Altrincham 1 4 Wrexham 0.579 0.432 0.282 0.286 0.0 -0.579 0.335 0.579
88 2015-03-14 Football Conference Dartford 0 1 Alfreton 0.487 0.333 0.288 0.378 0.0 -0.487 0.237 0.487
89 2015-03-14 Football Conference Nuneaton 0 0 Torquay 0.520 0.372 0.288 0.339 0.5 -0.020 0.000 0.020
90 2015-03-14 Football Conference Eastleigh 1 2 Barnet 0.608 0.473 0.274 0.253 0.0 -0.608 0.369 0.608
91 2015-03-14 Football Conference Forest Green 1 1 Braintree 0.783 0.679 0.195 0.126 0.5 -0.283 0.080 0.283
94 2015-03-14 Football Conference Kidderminster 0 2 Dover 0.595 0.451 0.279 0.270 0.0 -0.595 0.354 0.595
97 2015-03-14 Football Conference Lincoln 0 2 Welling 0.742 0.631 0.218 0.151 0.0 -0.742 0.550 0.742
98 2015-03-14 Football Conference Chester 2 2 Grimsby 0.452 0.296 0.284 0.420 0.5 0.048 0.002 0.048
103 2015-03-14 Ryman Premier Canvey Isl. 2 2 Margate 0.474 0.315 0.287 0.399 0.5 0.026 0.001 0.026
104 2015-03-14 Ryman Premier Maidstone 2 1 Lewes 0.779 0.698 0.185 0.116 1.0 0.221 0.049 0.221
2 2015-03-15 English Premier Everton 3 0 Newcastle 0.501 0.350 0.289 0.361 1.0 0.499 0.249 0.499
3 2015-03-15 English Premier Chelsea 1 1 Southampton 0.762 0.656 0.206 0.138 0.5 -0.262 0.069 0.262
10 2015-03-15 English Premier Man Utd 3 0 Tottenham 0.654 0.531 0.257 0.212 1.0 0.346 0.120 0.346
105 2015-03-16 English FA Cup Reading 3 0 Bradford 0.593 0.461 0.276 0.262 1.0 0.407 0.165 0.407
106 2015-03-16 English FA Cup Reading 3 0 Bradford 0.593 0.461 0.276 0.262 1.0 0.407 0.165 0.407
8 2015-03-16 English Premier Swansea 0 1 Liverpool 0.370 0.219 0.260 0.520 0.0 -0.370 0.137 0.370
9 2015-03-16 English Premier Swansea 0 1 Liverpool 0.370 0.219 0.260 0.520 0.0 -0.370 0.137 0.370
13 2015-03-17 English Championship Cardiff 1 1 Bournemouth 0.347 0.206 0.254 0.540 0.5 0.153 0.023 0.153
14 2015-03-17 English Championship Wigan 0 2 Watford 0.374 0.232 0.266 0.502 0.0 -0.374 0.140 0.374
16 2015-03-17 English Championship Wolves 3 0 Sheff Wed 0.610 0.470 0.274 0.255 1.0 0.390 0.152 0.390
18 2015-03-17 English Championship Derby 0 1 Middlesbro 0.496 0.341 0.288 0.371 0.0 -0.496 0.246 0.496
19 2015-03-17 English Championship Blackburn 2 3 Brentford 0.704 0.585 0.237 0.178 0.0 -0.704 0.496 0.704
22 2015-03-17 English Championship Blackpool 0 3 Charlton 0.289 0.164 0.228 0.607 0.0 -0.289 0.084 0.289
25 2015-03-17 English Championship Millwall 0 0 Brighton 0.401 0.245 0.271 0.484 0.5 0.099 0.010 0.099
30 2015-03-17 English Championship Huddersfield 2 2 Norwich 0.312 0.182 0.240 0.577 0.5 0.188 0.036 0.188
31 2015-03-17 English Championship Ipswich 1 0 Bolton 0.552 0.412 0.285 0.303 1.0 0.448 0.201 0.448
35 2015-03-17 English League One Chesterfield 3 0 Gillingham 0.599 0.459 0.277 0.264 1.0 0.401 0.161 0.401
37 2015-03-17 English League One Oldham 1 3 MK Dons 0.756 0.651 0.209 0.141 0.0 -0.756 0.572 0.756
39 2015-03-17 English League One Preston 2 0 Peterborough 0.629 0.503 0.266 0.231 1.0 0.371 0.138 0.371
40 2015-03-17 English League One Leyton Orient 0 0 Barnsley 0.440 0.287 0.282 0.431 0.5 0.060 0.004 0.060
42 2015-03-17 English League One Notts Co 1 2 Rochdale 0.425 0.267 0.278 0.455 0.0 -0.425 0.180 0.425
43 2015-03-17 English League One Port Vale 2 3 Crawley 0.728 0.619 0.223 0.158 0.0 -0.728 0.530 0.728
44 2015-03-17 English League One Bristol C 3 0 Crewe 0.848 0.773 0.145 0.082 1.0 0.152 0.023 0.152
45 2015-03-17 English League One Doncaster 1 2 Swindon 0.640 0.509 0.264 0.227 0.0 -0.640 0.410 0.640
47 2015-03-17 English League One Fleetwood 0 2 Coventry 0.668 0.540 0.254 0.206 0.0 -0.668 0.446 0.668
48 2015-03-17 English League One Colchester 2 0 Yeovil 0.515 0.362 0.289 0.349 1.0 0.485 0.235 0.485
57 2015-03-17 English League One Walsall 1 1 Sheff Utd 0.562 0.415 0.285 0.300 0.5 -0.062 0.004 0.062
61 2015-03-17 English League Two Newport Co 1 0 Luton 0.582 0.436 0.281 0.283 1.0 0.418 0.175 0.418
68 2015-03-17 English League Two Wycombe 2 2 Accrington 0.782 0.683 0.193 0.124 0.5 -0.282 0.080 0.282
69 2015-03-17 English League Two Mansfield 2 1 AFC W’bledon 0.733 0.616 0.224 0.160 1.0 0.267 0.072 0.267
71 2015-03-17 English League Two Morecambe 1 4 Shrewsbury 0.415 0.258 0.275 0.467 0.0 -0.415 0.172 0.415
72 2015-03-17 English League Two Portsmouth 2 2 Cheltenham 0.653 0.529 0.258 0.213 0.5 -0.153 0.023 0.153
73 2015-03-17 English League Two York 0 1 Bury 0.469 0.313 0.286 0.400 0.0 -0.469 0.220 0.469
74 2015-03-17 English League Two Exeter 0 0 Stevenage 0.469 0.313 0.286 0.401 0.5 0.031 0.001 0.031
76 2015-03-17 English League Two Northampton 0 2 Carlisle 0.777 0.679 0.195 0.126 0.0 -0.777 0.603 0.777
77 2015-03-17 English League Two Dag & Red 2 0 Plymouth 0.591 0.450 0.279 0.272 1.0 0.409 0.167 0.409
79 2015-03-17 English League Two Oxford 0 2 Hartlepool 0.715 0.608 0.228 0.164 0.0 -0.715 0.511 0.715
81 2015-03-17 English League Two Cambridge U 1 2 Tranmere 0.740 0.629 0.219 0.152 0.0 -0.740 0.548 0.740
86 2015-03-17 Football Conference Chester 1 2 Dartford 0.743 0.631 0.218 0.151 0.0 -0.743 0.551 0.743
92 2015-03-17 Football Conference Halifax 1 1 Barnet 0.423 0.266 0.277 0.457 0.5 0.077 0.006 0.077
93 2015-03-17 Football Conference Telford 0 1 Gateshead 0.414 0.266 0.277 0.456 0.0 -0.414 0.171 0.414
95 2015-03-17 Football Conference Alfreton 0 0 Lincoln 0.612 0.478 0.272 0.250 0.5 -0.112 0.012 0.112
96 2015-03-17 Football Conference Torquay 1 5 Braintree 0.586 0.444 0.280 0.276 0.0 -0.586 0.343 0.586
99 2015-03-17 Football Conference Dover 2 1 Altrincham 0.552 0.413 0.285 0.302 1.0 0.448 0.201 0.448
100 2015-03-17 Football Conference Eastleigh 2 2 Wrexham 0.747 0.644 0.212 0.144 0.5 -0.247 0.061 0.247
17 2015-03-18 English Championship Nottm Forest 2 0 Rotherham 0.664 0.548 0.251 0.201 1.0 0.336 0.113 0.336
23 2015-03-18 English Championship Fulham 0 3 Leeds 0.490 0.334 0.288 0.377 0.0 -0.490 0.240 0.490
80 2015-03-18 English League Two Burton 2 1 Southend 0.591 0.448 0.279 0.273 1.0 0.409 0.168 0.409