This document summarises the forecast outcomes for the second weekly set of forecasts for English football match outcomes, following on from last week, and it provides outcomes for forecasts of matches over the last week as detailed in this document.
That second set of forecasts made one improvement over that from the previous week as it used an ordered logit model to provide forecasts for each event outcome (away win, draw, home win). The time it takes to estimate ordered probit models prohibited any serious analysis of such forecasts, but this has since been carried out, and is produced here.
Firstly, we should consider outcomes; we load up the specific outcomes file for matches forecast over the weekend:
loc2 <- "/home/readejj/Dropbox/Teaching/Reading/ec313/2015/Football-forecasts/"
date.1 <- "2015-02-06"
recent.forecast.outcomes <- read.csv(paste(loc2,"forecast_outcomes_",date.1,".csv",sep=""),stringsAsFactors=F)
forecast.matches <- read.csv(paste(loc2,"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"))
First, our Premier League forecasts:
prem.matches <- forecast.outcomes[forecast.outcomes$division=="English Premier",]
prem.matches$id <- 1:NROW(prem.matches)
par(mar=c(9,4,4,5)+.1)
plot(prem.matches$id,prem.matches$outcome.forc,xaxt="n",xlab="",ylim=range(0,1),
main="Forecasts of Weekend Premier League Matches",
ylab="Probability of Outcome")
lines(prem.matches$id,prem.matches$Ph,col=2,pch=15,type="p")
lines(prem.matches$id,prem.matches$Pd,col=3,pch=16,type="p")
lines(prem.matches$id,prem.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)
lines(prem.matches$id,prem.matches$outcome.final,col=2,type="p")
for(i in 1:NROW(prem.matches)) {
lines(rep(i,2),c(prem.matches$outcome.forc[i],prem.matches$outcome.final[i]),type="l",lty=2,col=4)
}
axis(1,at=prem.matches$id,labels=paste(prem.matches$team1,prem.matches$team2,sep=" v "),las=2,cex.axis=0.65)
Red circles are outcomes, which are either 0 (away win), 0.5 (draw), or 1 (home win). Blue lines link OLS forecasts to outcomes. Interpreting the success of our ordered logit forecasts (OL, red green and blue solid shapes) is a little trickier on this graph. The red squares are the probability of a home win, and with the exception of Man City’s surprising draw with Hull, all the matches where the probability of a home win was above 60% turned out as a home win. Additionally, the matches where the probability of an away winwas significantly higher than either other probability (QPR v Southampton, Aston Villa v Chelsea and Stoke v Man City) all did turn out as away wins.
Next, our Championship forecasts:
champ.matches <- forecast.outcomes[forecast.outcomes$division=="English Championship",]
champ.matches$id <- 1:NROW(champ.matches)
par(mar=c(9,4,4,5)+.1)
plot(champ.matches$id,champ.matches$outcome.forc,xaxt="n",xlab="",ylim=range(0,1),
main="Forecasts of Weekend Championship Matches",
ylab="Probability of Outcome")
lines(champ.matches$id,champ.matches$Ph,col=2,pch=15,type="p")
lines(champ.matches$id,champ.matches$Pd,col=3,pch=16,type="p")
lines(champ.matches$id,champ.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)
lines(champ.matches$id,champ.matches$outcome.final,col=2,type="p")
for(i in 1:NROW(champ.matches)) {
lines(rep(i,2),c(champ.matches$outcome.forc[i],champ.matches$outcome.final[i]),type="l",lty=2,col=4)
}
axis(1,at=champ.matches$id,labels=paste(champ.matches$team1,champ.matches$team2,sep=" v "),las=2,cex.axis=0.65)
In the Championship, again most of the big favourites won, with the possible exception of Ipswich at Rotherham, but given that in that case the away win probability was only at 40%, this is not too dramatic a surprise.
Next, our League One forecasts:
lg1.matches <- forecast.outcomes[forecast.outcomes$division=="English League One",]
lg1.matches$id <- 1:NROW(lg1.matches)
par(mar=c(9,4,4,5)+.1)
plot(lg1.matches$id,lg1.matches$outcome.forc,xaxt="n",xlab="",ylim=range(0,1),
main="Forecasts of Weekend League One Matches",
ylab="Probability of Outcome")
lines(lg1.matches$id,lg1.matches$Ph,col=2,pch=15,type="p")
lines(lg1.matches$id,lg1.matches$Pd,col=3,pch=16,type="p")
lines(lg1.matches$id,lg1.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)
lines(lg1.matches$id,lg1.matches$outcome.final,col=2,type="p")
for(i in 1:NROW(lg1.matches)) {
lines(rep(i,2),c(lg1.matches$outcome.forc[i],lg1.matches$outcome.final[i]),type="l",lty=2,col=4)
}
axis(1,at=lg1.matches$id,labels=paste(lg1.matches$team1,lg1.matches$team2,sep=" v "),las=2,cex.axis=0.65)
In League One my own team, Oldham, confounded the forecasts twice, winning at Scunthorpe despite only having a 20% chance, and then beating Swindon at home when the forecast probability of that event was just 30%. This was, however, set in the context of a number of surprising results in this tier, with Bradford beating MK Dons, Gillingham winning at Peterborough and Crewe winning at Colchester, amongst other results.
Next, our League Two forecasts:
lg2.matches <- forecast.outcomes[forecast.outcomes$division=="English League Two",]
lg2.matches$id <- 1:NROW(lg2.matches)
par(mar=c(9,4,4,5)+.1)
plot(lg2.matches$id,lg2.matches$outcome.forc,xaxt="n",xlab="",ylim=range(0,1),
main="Forecasts of Weekend League Two Matches",
ylab="Probability of Outcome")
lines(lg2.matches$id,lg2.matches$Ph,col=2,pch=15,type="p")
lines(lg2.matches$id,lg2.matches$Pd,col=3,pch=16,type="p")
lines(lg2.matches$id,lg2.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)
lines(lg2.matches$id,lg2.matches$outcome.final,col=2,type="p")
for(i in 1:NROW(lg2.matches)) {
lines(rep(i,2),c(lg2.matches$outcome.forc[i],lg2.matches$outcome.final[i]),type="l",lty=2,col=4)
}
axis(1,at=lg2.matches$id,labels=paste(lg2.matches$team1,lg2.matches$team2,sep=" v "),las=2,cex.axis=0.65)
In League Two, again by and large results followed predictions, with the exceptions of Hartlepool’s win over Northampton, and away wins for Carlisle, Plymouth and Dagenham and Redbridge.
Next, our Football Conference forecasts:
conf.matches <- forecast.outcomes[forecast.outcomes$division=="Football Conference",]
conf.matches$id <- 1:NROW(conf.matches)
par(mar=c(9,4,4,5)+.1)
plot(conf.matches$id,conf.matches$outcome.forc,xaxt="n",xlab="",ylim=range(0,1),
main="Forecasts of Weekend Football Conference Matches",
ylab="Probability of Outcome")
lines(conf.matches$id,conf.matches$Ph,col=2,pch=15,type="p")
lines(conf.matches$id,conf.matches$Pd,col=3,pch=16,type="p")
lines(conf.matches$id,conf.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)
lines(conf.matches$id,conf.matches$outcome.final,col=2,type="p")
for(i in 1:NROW(conf.matches)) {
lines(rep(i,2),c(conf.matches$outcome.forc[i],conf.matches$outcome.final[i]),type="l",lty=2,col=4)
}
axis(1,at=conf.matches$id,labels=paste(conf.matches$team1,conf.matches$team2,sep=" v "),las=2,cex.axis=0.65)
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.67041 Min. :0.0000057 Min. :0.002386
## 1st Qu.:-0.44742 1st Qu.:0.0307116 1st Qu.:0.175247
## Median :-0.06021 Median :0.1244412 Median :0.352762
## Mean :-0.03989 Mean :0.1563219 Mean :0.346421
## 3rd Qu.: 0.33644 3rd Qu.:0.2422470 3rd Qu.:0.492186
## Max. : 0.54857 Max. :0.4494449 Max. :0.670407
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.54966 Min. :-0.28225 Min. :-0.45499
## 1st Qu.:-0.29903 1st Qu.:-0.27631 1st Qu.:-0.28259
## Median : 0.08454 Median :-0.25355 Median :-0.20753
## Mean : 0.09360 Mean : 0.02302 Mean : 0.02558
## 3rd Qu.: 0.45528 3rd Qu.: 0.71782 3rd Qu.: 0.57654
## Max. : 0.69881 Max. : 0.83122 Max. : 0.79573
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:
library(knitr)
#aggs <- aggregate(forecast.outcomes[forecast.outcomes$tier<=5,c("error","error2","aerror")],
# by=list(forecast.outcomes$division[forecast.outcomes$tier<=5]),FUN=mean,na.rm=T)
#kable(aggs[c(4,1,2,3,5),])
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.
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 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 101 | 2015-02-07 | Conference North | Hyde | 1 | 3 | Boston Utd | 0.356 | 0.224 | 0.256 | 0.520 | 0.0 | -0.356 | 0.127 | 0.356 |
| 102 | 2015-02-07 | Conference North | Tamworth | 1 | 1 | Barrow | 0.631 | 0.501 | 0.261 | 0.238 | 0.5 | -0.131 | 0.017 | 0.131 |
| 103 | 2015-02-07 | Conference North | Stockport | 4 | 3 | Stalybridge | 0.647 | 0.520 | 0.256 | 0.225 | 1.0 | 0.353 | 0.124 | 0.353 |
| 100 | 2015-02-07 | Conference South | Hayes & Y | 0 | 1 | Eastbourne | 0.559 | 0.421 | 0.278 | 0.301 | 0.0 | -0.559 | 0.312 | 0.559 |
| 22 | 2015-02-07 | English Championship | Fulham | 1 | 1 | Birmingham | 0.594 | 0.458 | 0.272 | 0.271 | 0.5 | -0.094 | 0.009 | 0.094 |
| 24 | 2015-02-07 | English Championship | Wolves | 1 | 2 | Reading | 0.620 | 0.484 | 0.266 | 0.250 | 0.0 | -0.620 | 0.384 | 0.620 |
| 27 | 2015-02-07 | English Championship | Leeds | 0 | 1 | Brentford | 0.520 | 0.373 | 0.282 | 0.345 | 0.0 | -0.520 | 0.271 | 0.520 |
| 30 | 2015-02-07 | English Championship | Wigan | 1 | 3 | Bournemouth | 0.392 | 0.253 | 0.266 | 0.481 | 0.0 | -0.392 | 0.154 | 0.392 |
| 31 | 2015-02-07 | English Championship | Watford | 1 | 0 | Blackburn | 0.610 | 0.486 | 0.265 | 0.249 | 1.0 | 0.390 | 0.152 | 0.390 |
| 32 | 2015-02-07 | English Championship | Norwich | 4 | 0 | Blackpool | 0.734 | 0.641 | 0.210 | 0.149 | 1.0 | 0.266 | 0.071 | 0.266 |
| 35 | 2015-02-07 | English Championship | Derby | 4 | 1 | Bolton | 0.705 | 0.600 | 0.227 | 0.173 | 1.0 | 0.295 | 0.087 | 0.295 |
| 36 | 2015-02-07 | English Championship | Millwall | 1 | 3 | Huddersfield | 0.560 | 0.416 | 0.279 | 0.305 | 0.0 | -0.560 | 0.314 | 0.560 |
| 37 | 2015-02-07 | English Championship | Middlesbro | 3 | 1 | Charlton | 0.759 | 0.660 | 0.201 | 0.139 | 1.0 | 0.241 | 0.058 | 0.241 |
| 38 | 2015-02-07 | English Championship | Sheff Wed | 1 | 1 | Cardiff | 0.593 | 0.452 | 0.273 | 0.275 | 0.5 | -0.093 | 0.009 | 0.093 |
| 39 | 2015-02-07 | English Championship | Brighton | 2 | 3 | Nottm Forest | 0.633 | 0.504 | 0.260 | 0.236 | 0.0 | -0.633 | 0.401 | 0.633 |
| 109 | 2015-02-07 | English Championship | Rotherham | 2 | 0 | Ipswich | 0.455 | 0.306 | 0.279 | 0.416 | 1.0 | 0.545 | 0.297 | 0.545 |
| 47 | 2015-02-07 | English League One | Swindon | 2 | 0 | Barnsley | 0.693 | 0.581 | 0.235 | 0.184 | 1.0 | 0.307 | 0.094 | 0.307 |
| 49 | 2015-02-07 | English League One | Yeovil | 2 | 1 | Crawley | 0.607 | 0.469 | 0.269 | 0.262 | 1.0 | 0.393 | 0.155 | 0.393 |
| 50 | 2015-02-07 | English League One | Doncaster | 0 | 2 | Walsall | 0.590 | 0.446 | 0.274 | 0.280 | 0.0 | -0.590 | 0.348 | 0.590 |
| 53 | 2015-02-07 | English League One | MK Dons | 0 | 0 | Bristol C | 0.603 | 0.469 | 0.269 | 0.262 | 0.5 | -0.103 | 0.011 | 0.103 |
| 54 | 2015-02-07 | English League One | Scunthorpe | 0 | 1 | Oldham | 0.633 | 0.503 | 0.261 | 0.236 | 0.0 | -0.633 | 0.401 | 0.633 |
| 55 | 2015-02-07 | English League One | Notts Co | 0 | 1 | Chesterfield | 0.492 | 0.341 | 0.282 | 0.377 | 0.0 | -0.492 | 0.242 | 0.492 |
| 58 | 2015-02-07 | English League One | Port Vale | 2 | 2 | Bradford | 0.516 | 0.366 | 0.282 | 0.352 | 0.5 | -0.016 | 0.000 | 0.016 |
| 59 | 2015-02-07 | English League One | Colchester | 2 | 3 | Crewe | 0.617 | 0.488 | 0.264 | 0.247 | 0.0 | -0.617 | 0.381 | 0.617 |
| 60 | 2015-02-07 | English League One | Gillingham | 2 | 0 | Sheff Utd | 0.511 | 0.363 | 0.282 | 0.355 | 1.0 | 0.489 | 0.240 | 0.489 |
| 61 | 2015-02-07 | English League One | Preston | 1 | 0 | Coventry | 0.693 | 0.577 | 0.236 | 0.187 | 1.0 | 0.307 | 0.094 | 0.307 |
| 65 | 2015-02-07 | English League One | Fleetwood | 1 | 1 | Peterborough | 0.598 | 0.458 | 0.271 | 0.270 | 0.5 | -0.098 | 0.010 | 0.098 |
| 67 | 2015-02-07 | English League Two | Bury | 1 | 1 | Exeter | 0.615 | 0.483 | 0.266 | 0.251 | 0.5 | -0.115 | 0.013 | 0.115 |
| 71 | 2015-02-07 | English League Two | Portsmouth | 1 | 0 | Hartlepool | 0.668 | 0.549 | 0.246 | 0.205 | 1.0 | 0.332 | 0.110 | 0.332 |
| 72 | 2015-02-07 | English League Two | AFC W’bledon | 2 | 0 | Newport Co | 0.580 | 0.440 | 0.275 | 0.285 | 1.0 | 0.420 | 0.177 | 0.420 |
| 73 | 2015-02-07 | English League Two | Mansfield | 1 | 0 | Stevenage | 0.509 | 0.360 | 0.282 | 0.357 | 1.0 | 0.491 | 0.241 | 0.491 |
| 74 | 2015-02-07 | English League Two | Cheltenham | 1 | 3 | Burton | 0.447 | 0.299 | 0.278 | 0.423 | 0.0 | -0.447 | 0.200 | 0.447 |
| 77 | 2015-02-07 | English League Two | Plymouth | 1 | 0 | Accrington | 0.657 | 0.537 | 0.250 | 0.213 | 1.0 | 0.343 | 0.118 | 0.343 |
| 78 | 2015-02-07 | English League Two | Shrewsbury | 1 | 1 | Southend | 0.664 | 0.539 | 0.250 | 0.211 | 0.5 | -0.164 | 0.027 | 0.164 |
| 79 | 2015-02-07 | English League Two | Cambridge U | 0 | 1 | Wycombe | 0.572 | 0.431 | 0.276 | 0.292 | 0.0 | -0.572 | 0.328 | 0.572 |
| 80 | 2015-02-07 | English League Two | Tranmere | 0 | 2 | Carlisle | 0.670 | 0.550 | 0.246 | 0.204 | 0.0 | -0.670 | 0.449 | 0.670 |
| 83 | 2015-02-07 | English League Two | York | 0 | 2 | Dag & Red | 0.612 | 0.476 | 0.268 | 0.256 | 0.0 | -0.612 | 0.375 | 0.612 |
| 86 | 2015-02-07 | English League Two | Northampton | 2 | 1 | Morecambe | 0.624 | 0.493 | 0.263 | 0.244 | 1.0 | 0.376 | 0.142 | 0.376 |
| 87 | 2015-02-07 | English League Two | Oxford | 1 | 1 | Luton | 0.492 | 0.341 | 0.282 | 0.377 | 0.5 | 0.008 | 0.000 | 0.008 |
| 1 | 2015-02-07 | English Premier | Leicester | 0 | 1 | C Palace | 0.534 | 0.387 | 0.281 | 0.331 | 0.0 | -0.534 | 0.285 | 0.534 |
| 3 | 2015-02-07 | English Premier | QPR | 0 | 1 | Southampton | 0.389 | 0.247 | 0.265 | 0.488 | 0.0 | -0.389 | 0.151 | 0.389 |
| 4 | 2015-02-07 | English Premier | Man City | 1 | 1 | Hull | 0.773 | 0.673 | 0.195 | 0.132 | 0.5 | -0.273 | 0.074 | 0.273 |
| 5 | 2015-02-07 | English Premier | Aston Villa | 1 | 2 | Chelsea | 0.327 | 0.201 | 0.244 | 0.555 | 0.0 | -0.327 | 0.107 | 0.327 |
| 6 | 2015-02-07 | English Premier | Tottenham | 2 | 1 | Arsenal | 0.501 | 0.349 | 0.282 | 0.369 | 1.0 | 0.499 | 0.249 | 0.499 |
| 8 | 2015-02-07 | English Premier | Everton | 0 | 0 | Liverpool | 0.502 | 0.355 | 0.282 | 0.363 | 0.5 | -0.002 | 0.000 | 0.002 |
| 9 | 2015-02-07 | English Premier | Swansea | 1 | 1 | Sunderland | 0.591 | 0.453 | 0.273 | 0.275 | 0.5 | -0.091 | 0.008 | 0.091 |
| 105 | 2015-02-07 | FA Trophy | Halifax | 3 | 1 | Dartford | 0.707 | 0.604 | 0.226 | 0.170 | 1.0 | 0.293 | 0.086 | 0.293 |
| 106 | 2015-02-07 | FA Trophy | Gateshead | 2 | 2 | Wrexham | 0.664 | 0.540 | 0.249 | 0.210 | 0.5 | -0.164 | 0.027 | 0.164 |
| 108 | 2015-02-07 | FA Trophy | Dover | 3 | 3 | Bath City | 0.798 | 0.725 | 0.169 | 0.106 | 0.5 | -0.298 | 0.089 | 0.298 |
| 92 | 2015-02-07 | Football Conference | Forest Green | 2 | 1 | Grimsby | 0.546 | 0.397 | 0.281 | 0.323 | 1.0 | 0.454 | 0.206 | 0.454 |
| 93 | 2015-02-07 | Football Conference | Altrincham | 1 | 0 | Aldershot | 0.663 | 0.536 | 0.251 | 0.214 | 1.0 | 0.337 | 0.114 | 0.337 |
| 94 | 2015-02-07 | Football Conference | Bristol R | 2 | 0 | Lincoln | 0.644 | 0.517 | 0.256 | 0.226 | 1.0 | 0.356 | 0.127 | 0.356 |
| 95 | 2015-02-07 | Football Conference | Alfreton | 4 | 2 | Southport | 0.539 | 0.391 | 0.281 | 0.328 | 1.0 | 0.461 | 0.213 | 0.461 |
| 96 | 2015-02-07 | Football Conference | Eastleigh | 3 | 3 | Telford | 0.713 | 0.608 | 0.224 | 0.168 | 0.5 | -0.213 | 0.045 | 0.213 |
| 97 | 2015-02-07 | Football Conference | Macclesfield | 3 | 2 | Welling | 0.724 | 0.617 | 0.220 | 0.163 | 1.0 | 0.276 | 0.076 | 0.276 |
| 99 | 2015-02-07 | Football Conference | Barnet | 2 | 1 | Woking | 0.664 | 0.545 | 0.248 | 0.208 | 1.0 | 0.336 | 0.113 | 0.336 |
| 2 | 2015-02-08 | English Premier | West Ham | 1 | 1 | Man Utd | 0.513 | 0.364 | 0.282 | 0.354 | 0.5 | -0.013 | 0.000 | 0.013 |
| 7 | 2015-02-08 | English Premier | Burnley | 2 | 2 | West Brom | 0.560 | 0.415 | 0.279 | 0.306 | 0.5 | -0.060 | 0.004 | 0.060 |
| 10 | 2015-02-08 | English Premier | Newcastle | 1 | 1 | Stoke | 0.533 | 0.385 | 0.281 | 0.334 | 0.5 | -0.033 | 0.001 | 0.033 |
| 46 | 2015-02-09 | English League One | Bradford | 2 | 1 | MK Dons | 0.466 | 0.315 | 0.280 | 0.406 | 1.0 | 0.534 | 0.286 | 0.534 |
| 21 | 2015-02-10 | English Championship | Blackpool | 1 | 2 | Middlesbro | 0.333 | 0.205 | 0.247 | 0.548 | 0.0 | -0.333 | 0.111 | 0.333 |
| 23 | 2015-02-10 | English Championship | Charlton | 2 | 3 | Norwich | 0.465 | 0.313 | 0.279 | 0.408 | 0.0 | -0.465 | 0.216 | 0.465 |
| 25 | 2015-02-10 | English Championship | Brentford | 1 | 2 | Watford | 0.573 | 0.427 | 0.277 | 0.296 | 0.0 | -0.573 | 0.328 | 0.573 |
| 26 | 2015-02-10 | English Championship | Huddersfield | 1 | 4 | Wolves | 0.528 | 0.380 | 0.282 | 0.338 | 0.0 | -0.528 | 0.278 | 0.528 |
| 28 | 2015-02-10 | English Championship | Cardiff | 0 | 0 | Brighton | 0.548 | 0.400 | 0.280 | 0.320 | 0.5 | -0.048 | 0.002 | 0.048 |
| 29 | 2015-02-10 | English Championship | Bolton | 3 | 1 | Fulham | 0.612 | 0.477 | 0.267 | 0.255 | 1.0 | 0.388 | 0.151 | 0.388 |
| 33 | 2015-02-10 | English Championship | Ipswich | 2 | 1 | Sheff Wed | 0.698 | 0.583 | 0.234 | 0.183 | 1.0 | 0.302 | 0.091 | 0.302 |
| 34 | 2015-02-10 | English Championship | Birmingham | 0 | 1 | Millwall | 0.647 | 0.518 | 0.256 | 0.226 | 0.0 | -0.647 | 0.418 | 0.647 |
| 41 | 2015-02-10 | English Championship | Bournemouth | 2 | 2 | Derby | 0.579 | 0.440 | 0.275 | 0.285 | 0.5 | -0.079 | 0.006 | 0.079 |
| 42 | 2015-02-10 | English Championship | Blackburn | 2 | 1 | Rotherham | 0.655 | 0.527 | 0.254 | 0.220 | 1.0 | 0.345 | 0.119 | 0.345 |
| 43 | 2015-02-10 | English Championship | Reading | 0 | 2 | Leeds | 0.599 | 0.458 | 0.271 | 0.270 | 0.0 | -0.599 | 0.358 | 0.599 |
| 44 | 2015-02-10 | English League One | Bristol C | 3 | 1 | Port Vale | 0.734 | 0.631 | 0.214 | 0.155 | 1.0 | 0.266 | 0.071 | 0.266 |
| 45 | 2015-02-10 | English League One | Leyton Orient | 0 | 1 | Notts Co | 0.567 | 0.426 | 0.277 | 0.297 | 0.0 | -0.567 | 0.322 | 0.567 |
| 48 | 2015-02-10 | English League One | Chesterfield | 0 | 2 | Preston | 0.570 | 0.428 | 0.277 | 0.295 | 0.0 | -0.570 | 0.325 | 0.570 |
| 51 | 2015-02-10 | English League One | Crawley | 0 | 5 | Doncaster | 0.474 | 0.321 | 0.280 | 0.398 | 0.0 | -0.474 | 0.224 | 0.474 |
| 52 | 2015-02-10 | English League One | Coventry | 1 | 1 | Scunthorpe | 0.519 | 0.370 | 0.282 | 0.348 | 0.5 | -0.019 | 0.000 | 0.019 |
| 56 | 2015-02-10 | English League One | Oldham | 2 | 1 | Swindon | 0.452 | 0.301 | 0.278 | 0.421 | 1.0 | 0.548 | 0.300 | 0.548 |
| 57 | 2015-02-10 | English League One | Barnsley | 1 | 2 | Fleetwood | 0.606 | 0.468 | 0.269 | 0.263 | 0.0 | -0.606 | 0.367 | 0.606 |
| 62 | 2015-02-10 | English League One | Crewe | 1 | 0 | Yeovil | 0.614 | 0.474 | 0.268 | 0.258 | 1.0 | 0.386 | 0.149 | 0.386 |
| 63 | 2015-02-10 | English League One | Peterborough | 1 | 2 | Gillingham | 0.574 | 0.432 | 0.276 | 0.292 | 0.0 | -0.574 | 0.329 | 0.574 |
| 64 | 2015-02-10 | English League One | Sheff Utd | 4 | 1 | Colchester | 0.699 | 0.579 | 0.235 | 0.185 | 1.0 | 0.301 | 0.091 | 0.301 |
| 66 | 2015-02-10 | English League One | Walsall | 3 | 2 | Rochdale | 0.541 | 0.393 | 0.281 | 0.326 | 1.0 | 0.459 | 0.211 | 0.459 |
| 68 | 2015-02-10 | English League Two | Stevenage | 0 | 0 | Bury | 0.589 | 0.448 | 0.273 | 0.279 | 0.5 | -0.089 | 0.008 | 0.089 |
| 69 | 2015-02-10 | English League Two | Newport Co | 1 | 1 | Tranmere | 0.588 | 0.443 | 0.274 | 0.283 | 0.5 | -0.088 | 0.008 | 0.088 |
| 70 | 2015-02-10 | English League Two | Hartlepool | 1 | 0 | Northampton | 0.451 | 0.302 | 0.278 | 0.420 | 1.0 | 0.549 | 0.301 | 0.549 |
| 75 | 2015-02-10 | English League Two | Dag & Red | 0 | 0 | Portsmouth | 0.575 | 0.432 | 0.276 | 0.292 | 0.5 | -0.075 | 0.006 | 0.075 |
| 76 | 2015-02-10 | English League Two | Carlisle | 1 | 2 | Shrewsbury | 0.414 | 0.269 | 0.271 | 0.460 | 0.0 | -0.414 | 0.172 | 0.414 |
| 81 | 2015-02-10 | English League Two | Wycombe | 0 | 2 | Plymouth | 0.647 | 0.515 | 0.257 | 0.228 | 0.0 | -0.647 | 0.419 | 0.647 |
| 82 | 2015-02-10 | English League Two | Morecambe | 2 | 1 | Mansfield | 0.649 | 0.521 | 0.255 | 0.224 | 1.0 | 0.351 | 0.123 | 0.351 |
| 84 | 2015-02-10 | English League Two | Southend | 2 | 0 | Cheltenham | 0.717 | 0.600 | 0.227 | 0.172 | 1.0 | 0.283 | 0.080 | 0.283 |
| 85 | 2015-02-10 | English League Two | Accrington | 1 | 0 | Oxford | 0.530 | 0.379 | 0.282 | 0.339 | 1.0 | 0.470 | 0.221 | 0.470 |
| 88 | 2015-02-10 | English League Two | Exeter | 2 | 2 | Cambridge U | 0.505 | 0.351 | 0.282 | 0.367 | 0.5 | -0.005 | 0.000 | 0.005 |
| 89 | 2015-02-10 | English League Two | Burton | 0 | 0 | AFC W’bledon | 0.659 | 0.530 | 0.253 | 0.218 | 0.5 | -0.159 | 0.025 | 0.159 |
| 90 | 2015-02-10 | English League Two | Luton | 2 | 2 | York | 0.675 | 0.550 | 0.246 | 0.204 | 0.5 | -0.175 | 0.031 | 0.175 |
| 11 | 2015-02-10 | English Premier | Arsenal | 2 | 1 | Leicester | 0.753 | 0.653 | 0.204 | 0.143 | 1.0 | 0.247 | 0.061 | 0.247 |
| 12 | 2015-02-10 | English Premier | Hull | 2 | 0 | Aston Villa | 0.554 | 0.411 | 0.279 | 0.310 | 1.0 | 0.446 | 0.199 | 0.446 |
| 16 | 2015-02-10 | English Premier | Liverpool | 3 | 2 | Tottenham | 0.604 | 0.468 | 0.269 | 0.263 | 1.0 | 0.396 | 0.157 | 0.396 |
| 19 | 2015-02-10 | English Premier | Sunderland | 0 | 2 | QPR | 0.663 | 0.538 | 0.250 | 0.212 | 0.0 | -0.663 | 0.440 | 0.663 |
| 104 | 2015-02-10 | Evo-Stik S Premier | Histon | 0 | 0 | Slough | 0.452 | 0.315 | 0.280 | 0.405 | 0.5 | 0.048 | 0.002 | 0.048 |
| 91 | 2015-02-10 | Football Conference | Alfreton | 2 | 2 | Forest Green | 0.416 | 0.273 | 0.272 | 0.455 | 0.5 | 0.084 | 0.007 | 0.084 |
| 98 | 2015-02-10 | Football Conference | Southport | 1 | 2 | Eastleigh | 0.488 | 0.339 | 0.282 | 0.379 | 0.0 | -0.488 | 0.238 | 0.488 |
| 107 | 2015-02-10 | Football Conference | Macclesfield | 2 | 1 | Altrincham | 0.685 | 0.569 | 0.239 | 0.192 | 1.0 | 0.315 | 0.099 | 0.315 |
| 40 | 2015-02-11 | English Championship | Nottm Forest | 3 | 0 | Wigan | 0.586 | 0.444 | 0.274 | 0.282 | 1.0 | 0.414 | 0.171 | 0.414 |
| 13 | 2015-02-11 | English Premier | Man Utd | 3 | 1 | Burnley | 0.738 | 0.636 | 0.212 | 0.152 | 1.0 | 0.262 | 0.068 | 0.262 |
| 14 | 2015-02-11 | English Premier | Southampton | 0 | 0 | West Ham | 0.630 | 0.502 | 0.261 | 0.237 | 0.5 | -0.130 | 0.017 | 0.130 |
| 15 | 2015-02-11 | English Premier | C Palace | 1 | 1 | Newcastle | 0.596 | 0.459 | 0.271 | 0.270 | 0.5 | -0.096 | 0.009 | 0.096 |
| 17 | 2015-02-11 | English Premier | West Brom | 2 | 0 | Swansea | 0.525 | 0.376 | 0.282 | 0.342 | 1.0 | 0.475 | 0.226 | 0.475 |
| 18 | 2015-02-11 | English Premier | Chelsea | 1 | 0 | Everton | 0.733 | 0.630 | 0.215 | 0.155 | 1.0 | 0.267 | 0.071 | 0.267 |
| 20 | 2015-02-11 | English Premier | Stoke | 1 | 4 | Man City | 0.459 | 0.308 | 0.279 | 0.413 | 0.0 | -0.459 | 0.211 | 0.459 |