Introduction

This is number 11 in a series of forecasts of football match outcomes, following on from my efforts last week and the previous weeks. The method of forecasts is unchanged from previous weeks.

Bookmaker prices are compared with forecasts, potentially offering opportunities, should you sufficiently believe my forecasts to be better than those of bookmakers. Naturally, I make no such claim, and indeed since the bookmaker prices were collected (12 noon, Friday 10 April), they may well have changed.

Loading the Data

The dataset used is all English matches recorded on http://www.soccerbase.com, which goes back to 1877 and the very first football matches.  Experimentation will take place in time (i.e., not this week) with adjusting the estimation sample size, since it is not necessarily useful to have all matches back to 1877 when forecasting matches in 2015.  The Elo ranks have been calculated since the very first matches, and hence historical information is retained, to the extent that it is useful in determining a team’s current strength, back throughout footballing history.

Forecast Model

A linear regression model is estimated here and reported:

library(knitr)
library(MASS)
source("/home/readejj/Dropbox/Research/Code/R/betting/clean.data.R")

date.1 <- tail(dates,1)
forecast.matches <- read.csv(paste("forecasts_",date.1,".csv",sep=""),stringsAsFactors=F)
forecast.matches <- forecast.matches[is.na(forecast.matches$outcome)==F,]
forecast.matches <- forecast.matches[forecast.matches$date<"2015-05-01",]

loc0 <- "/home/readejj/Documents/Football-Forecasts/"
res.eng <- read.csv(paste(loc0,"historical_",date.1,".csv",sep=""))

An ordered logistic regression model is:

model.ord <- polr(as.factor(outcome) ~ E.1 + pts1 + pts.D + pts.D.2 + pld1 + pld.D + pld.D.2 + 
                    gs1 + gs.D + gs.D.2 + gd1 + gd.D + gd.D.2 + pos1 + pos.D + pos.D.2 + 
                    form1 + form.D + form.D.2 + tier1 + tier.D + tier.D.2 + season.d, 
                  data=res.eng, method = "logistic")
options(scipen=13)
#summary(model.ord)
kable(summary(model.ord)$coef, digits=3)
## 
## Re-fitting to get Hessian
Value Std. Error t value
E.1 1.879 0.007 275.302
pts1 0.000 0.002 -0.062
pts.D -0.013 0.001 -9.429
pts.D.2 0.000 0.000 -0.735
pld1 -0.002 0.003 -0.632
pld.D 0.011 0.003 3.691
pld.D.2 0.000 0.000 -0.981
gs1 0.002 0.001 3.049
gs.D -0.001 0.001 -0.763
gs.D.2 0.000 0.000 0.160
gd1 -0.002 0.001 -2.150
gd.D 0.018 0.001 21.577
gd.D.2 0.000 0.000 -0.096
pos1 -0.001 0.001 -0.978
pos.D -0.001 0.001 -0.949
pos.D.2 0.000 0.000 -0.577
form1 0.004 0.002 2.672
form.D -0.010 0.001 -7.685
form.D.2 0.000 0.000 -0.050
tier1 -0.017 0.003 -6.111
tier.D -0.280 0.013 -21.195
tier.D.2 -0.009 0.006 -1.502
season.d -0.006 0.000 -36.986
0|0.5 -0.209 0.013 -16.306
0.5|1 0.936 0.013 73.203

The Forecasts

Forecasts now, when many clubs have little left to play for, with the clubs still in contention for promotion/relegation being a small subset of all clubs, may well perform worse as a result of such out-of-contention teams playing more experimental sides.

Premier League

simpleplot("English Premier")

The coloured dots are forecasts from the ordered logistic regression model; the black circles are the forecasts from a simple OLS linear probability model.  Hence the black circles are essentially a probability of a home win occurring (given the ordinal variable defined to capture all three outcomes), whereas the red squares are the probability of a home win, the green solid circles are the probability of a draw, and the blue triangles the probability of an away win.  The home bias in football is notable in that the majority of red squares lie above blue triangles.

bkplot(date.1,"English Premier","premier-league")
## Loading required package: zoo
## 
## Attaching package: 'zoo'
## 
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric

The darker coloured and smaller symbols are the range of bookmaker implied probabilities for outcomes. Bookmakers are not distinguished, but the range of bookmaker prices as shown on Oddschecker is reported, rather than any summary statistic. A bigger spread of prices might suggest greater uncertainty amongst bookmakers about any particular outcome.

As is becoming customary (although I’m yet to properly evaluate these “tips”), I’ll point out the main differences between my model and bookmaker prices:

  • Bookmakers back QPR and Man City more strongly than my model.
  • My model backs Crystal Palace, Newcastle and Arsenal slightly more than the bookies.

Championship

Next, our Championship forecasts:

simpleplot("English Championship")

This week there appears to have been a problem with the collection of Championship bookmaker prices:

bkplot("2015-04-14","English Championship","championship")

League One

Next, our League One forecasts:

simpleplot("English League One")

bkplot(date.1,"English League One","league-1")

Adding in bookmakers at League One level, the main differences are:

  • My model backs Bradford and Scunthorpe less than the bookies.
  • My model backs Fleetwood more than the bookies against Colchester.

League Two

Next, our League Two forecasts:

simpleplot("English League Two")

bkplot(date.1,"English League Two","league-2")

At League Two level:

  • My model backs Bury and Wycombe less than the bookies.
  • My model backs York and Dagenham & Redbridge more than the bookies.

Football Conference

Next, our Football Conference forecasts:

simpleplot("Football Conference")

List of all forecasts

For transparency, all forecasts are also listed as a table:

kable(forecast.matches[order(forecast.matches$date,forecast.matches$division),
                       c("date","division","team1","outcome","team2","Ph","Pd","Pa")])
date division team1 outcome team2 Ph Pd Pa
66 2015-04-25 Conference North Boston Utd 0.7428614 Leamington 0.6478644 0.2046838 0.1474518
67 2015-04-25 Conference North Worcester 0.6819772 Colwyn Bay 0.5706983 0.2361663 0.1931355
68 2015-04-25 Conference North Tamworth 0.7468693 Hyde 0.6593745 0.1994513 0.1411742
69 2015-04-25 Conference North Chorley 0.6889261 Solihull Moors 0.5753703 0.2344526 0.1901771
70 2015-04-25 Conference North Stalybridge 0.5564576 Gainsborough 0.4136432 0.2755047 0.3108521
71 2015-04-25 Conference North Brackley 0.4268064 Hednesford 0.2806963 0.2701406 0.4491631
72 2015-04-25 Conference North Lowestoft T 0.4093367 Barrow 0.2691338 0.2673118 0.4635544
73 2015-04-25 Conference North Stockport 0.5629994 Harrogate T 0.4233874 0.2742727 0.3023398
74 2015-04-25 Conference North Nth Ferriby 0.6063627 Bradford PA 0.4799516 0.2636602 0.2563881
75 2015-04-25 Conference North AFC Fylde 0.7425863 Gloucester 0.6620196 0.1982307 0.1397497
76 2015-04-25 Conference North Oxford C 0.5973479 Guiseley 0.4632283 0.2673799 0.2693918
56 2015-04-25 Conference South Gosport Bor 0.5096362 Bromley 0.3635935 0.2786838 0.3577226
57 2015-04-25 Conference South Farnborough 0.2731042 Concord R 0.1697850 0.2214584 0.6087565
58 2015-04-25 Conference South Sutton Utd 0.6473736 Maidenhead 0.5235464 0.2518990 0.2245546
59 2015-04-25 Conference South Havant & W 0.5940550 Whitehawk 0.4586766 0.2683109 0.2730125
60 2015-04-25 Conference South Hayes & Y 0.5225593 St Albans 0.3748110 0.2784561 0.3467329
61 2015-04-25 Conference South Staines 0.4076750 Bath City 0.2666865 0.2666549 0.4666586
62 2015-04-25 Conference South Ebbsfleet 0.6517516 Bishop’s St. 0.5339115 0.2486945 0.2173940
63 2015-04-25 Conference South Weston S-M. 0.3659340 Basingstoke 0.2333953 0.2555629 0.5110418
64 2015-04-25 Conference South Hemel 0.6003807 Eastbourne 0.4652240 0.2669605 0.2678155
65 2015-04-25 Conference South Chelmsford 0.4143517 Boreham W 0.2698180 0.2674918 0.4626902
9 2015-04-25 English Championship Birmingham 0.5714456 Charlton 0.4262619 0.2738738 0.2998643
10 2015-04-25 English Championship Rotherham 0.3359177 Norwich 0.2116607 0.2459710 0.5423683
11 2015-04-25 English Championship Sheff Wed 0.6324398 Leeds 0.4990054 0.2588734 0.2421212
12 2015-04-25 English Championship Fulham 0.3747633 Middlesbro 0.2373453 0.2570984 0.5055563
13 2015-04-25 English Championship Reading 0.4786713 Brentford 0.3313486 0.2776182 0.3910332
14 2015-04-25 English Championship Ipswich 0.6383845 Nottm Forest 0.5121283 0.2552535 0.2326182
15 2015-04-25 English Championship Cardiff 0.7621020 Blackpool 0.6683953 0.1952614 0.1363433
16 2015-04-25 English Championship Brighton 0.3823667 Watford 0.2466009 0.2604585 0.4929406
17 2015-04-25 English Championship Wigan 0.4612538 Wolves 0.3138445 0.2758873 0.4102682
18 2015-04-25 English Championship Millwall 0.3494331 Derby 0.2223564 0.2509382 0.5267054
19 2015-04-25 English Championship Huddersfield 0.5019790 Blackburn 0.3512157 0.2785854 0.3701989
20 2015-04-25 English League One Scunthorpe 0.5160915 Gillingham 0.3682280 0.2786255 0.3531465
21 2015-04-25 English League One Peterborough 0.6443134 Crawley 0.5185710 0.2533837 0.2280453
22 2015-04-25 English League One Walsall 0.6382804 Oldham 0.5106953 0.2556612 0.2336435
23 2015-04-25 English League One Fleetwood 0.6548121 Colchester 0.5266388 0.2509586 0.2224026
24 2015-04-25 English League One Rochdale 0.4297942 MK Dons 0.2845119 0.2709769 0.4445112
25 2015-04-25 English League One Preston 0.6833076 Swindon 0.5643977 0.2384348 0.1971674
26 2015-04-25 English League One Leyton Orient 0.5000120 Sheff Utd 0.3531801 0.2786262 0.3681937
27 2015-04-25 English League One Notts Co 0.5031917 Doncaster 0.3523776 0.2786107 0.3690117
28 2015-04-25 English League One Coventry 0.6897262 Crewe 0.5754256 0.2344321 0.1901423
29 2015-04-25 English League One Chesterfield 0.4575506 Bristol C 0.3096564 0.2753445 0.4149991
30 2015-04-25 English League One Bradford 0.5694301 Barnsley 0.4264673 0.2738447 0.2996880
31 2015-04-25 English League One Yeovil 0.5269875 Port Vale 0.3775765 0.2783550 0.3440685
32 2015-04-25 English League Two Plymouth 0.6972456 Tranmere 0.5844743 0.2310377 0.1844880
33 2015-04-25 English League Two Cheltenham 0.3153580 Shrewsbury 0.1966575 0.2381521 0.5651903
34 2015-04-25 English League Two Oxford 0.6189351 Cambridge U 0.4825646 0.2630377 0.2543977
35 2015-04-25 English League Two Southend 0.6679484 Luton 0.5396487 0.2468573 0.2134940
36 2015-04-25 English League Two Bury 0.6635983 AFC W’bledon 0.5391623 0.2470148 0.2138229
37 2015-04-25 English League Two York 0.6479942 Newport Co 0.5232725 0.2519816 0.2247459
38 2015-04-25 English League Two Burton 0.6707768 Northampton 0.5438898 0.2454708 0.2106394
39 2015-04-25 English League Two Wycombe 0.6701766 Morecambe 0.5468670 0.2444832 0.2086498
40 2015-04-25 English League Two Dag & Red 0.6445806 Accrington 0.5183597 0.2534460 0.2281943
41 2015-04-25 English League Two Mansfield 0.4958760 Portsmouth 0.3406370 0.2781980 0.3811650
42 2015-04-25 English League Two Stevenage 0.6739162 Carlisle 0.5556454 0.2415037 0.2028509
43 2015-04-25 English League Two Hartlepool 0.4955941 Exeter 0.3461702 0.2784362 0.3753935
1 2015-04-25 English Premier QPR 0.5048448 West Ham 0.3574413 0.2786817 0.3638769
2 2015-04-25 English Premier Man City 0.7485666 Aston Villa 0.6621411 0.1981745 0.1396844
3 2015-04-25 English Premier Stoke 0.6946614 Sunderland 0.5763692 0.2340827 0.1895481
4 2015-04-25 English Premier Burnley 0.5508963 Leicester 0.4046712 0.2764707 0.3188581
5 2015-04-25 English Premier Southampton 0.6216345 Tottenham 0.4941483 0.2601473 0.2457043
6 2015-04-25 English Premier Newcastle 0.5062670 Swansea 0.3569831 0.2786779 0.3643390
7 2015-04-25 English Premier C Palace 0.6900928 Hull 0.5719950 0.2356933 0.1923117
8 2015-04-25 English Premier West Brom 0.4486655 Liverpool 0.2982767 0.2736082 0.4281151
77 2015-04-25 Evo-Stik N Premier Belper Town 0.5942617 Trafford 0.4632823 0.2673686 0.2693491
78 2015-04-25 Evo-Stik N Premier Stamford 0.5595341 Witton 0.4216535 0.2745056 0.3038409
79 2015-04-25 Evo-Stik N Premier Halesowen 0.6142163 Grantham Town 0.4858127 0.2622486 0.2519388
80 2015-04-25 Evo-Stik N Premier Skelmersdale 0.6254762 Stourbridge 0.4971212 0.2593719 0.2435069
81 2015-04-25 Evo-Stik N Premier Blyth Sptns 0.7183336 Marine 0.6197907 0.2168883 0.1633209
82 2015-04-25 Evo-Stik N Premier Frickley 0.3769304 Curzon Ashton 0.2401608 0.2581555 0.5016837
83 2015-04-25 Evo-Stik N Premier Ramsbottom 0.5030450 Matlock 0.3542119 0.2786437 0.3671444
84 2015-04-25 Evo-Stik N Premier Buxton 0.5919308 Barwell 0.4583370 0.2683789 0.2732840
85 2015-04-25 Evo-Stik N Premier Ashton Utd 0.6024888 Rushall Olympic 0.4664680 0.2666957 0.2668363
86 2015-04-25 Evo-Stik N Premier Workington 0.5138384 FC Utd 0.3614179 0.2786936 0.3598886
87 2015-04-25 Evo-Stik N Premier King’s Lynn 0.4823978 Whitby 0.3325859 0.2777087 0.3897053
88 2015-04-25 Evo-Stik N Premier Nantwich Town 0.4581027 Ilkeston 0.3136141 0.2758587 0.4105272
101 2015-04-25 Evo-Stik S Premier Frome Town 0.3518005 St Neots Town 0.2237212 0.2515371 0.5247418
102 2015-04-25 Evo-Stik S Premier Dorchester 0.6815070 Slough 0.5674697 0.2373349 0.1951954
103 2015-04-25 Evo-Stik S Premier Hungerford T 0.6467747 Paulton 0.5244543 0.2516243 0.2239214
104 2015-04-25 Evo-Stik S Premier Chippenham 0.6528364 Bideford 0.5350179 0.2483437 0.2166385
105 2015-04-25 Evo-Stik S Premier Biggleswade T 0.5359663 Weymouth 0.3989514 0.2769999 0.3240488
106 2015-04-25 Evo-Stik S Premier Cirencester 0.7933510 Burnham 0.7209090 0.1694134 0.1096776
107 2015-04-25 Evo-Stik S Premier Histon 0.3741753 Truro City 0.2413635 0.2585977 0.5000388
108 2015-04-25 Evo-Stik S Premier Chesham 0.6359844 Banbury 0.5304371 0.2497852 0.2197777
109 2015-04-25 Evo-Stik S Premier Dunstable 0.4623193 Cambridge C 0.3124692 0.2757146 0.4118162
110 2015-04-25 Evo-Stik S Premier Poole Town 0.5504915 Corby 0.4126065 0.2756246 0.3117689
111 2015-04-25 Evo-Stik S Premier Arlesey 0.3192230 Redditch 0.1998053 0.2398778 0.5603169
44 2015-04-25 Football Conference Welling 0.5995566 Southport 0.4669162 0.2665996 0.2664841
45 2015-04-25 Football Conference Telford 0.4918546 Wrexham 0.3455438 0.2784132 0.3760430
46 2015-04-25 Football Conference Forest Green 0.6306880 Dover 0.5029516 0.2578119 0.2392365
47 2015-04-25 Football Conference Eastleigh 0.7431676 Kidderminster 0.6452407 0.2058584 0.1489010
48 2015-04-25 Football Conference Woking 0.6672380 Halifax 0.5483581 0.2439842 0.2076577
49 2015-04-25 Football Conference Chester 0.6703177 Nuneaton 0.5502082 0.2433610 0.2064309
50 2015-04-25 Football Conference Torquay 0.5404862 Macclesfield 0.3968823 0.2771744 0.3259433
51 2015-04-25 Football Conference Dartford 0.5413393 Lincoln 0.3983623 0.2770505 0.3245872
52 2015-04-25 Football Conference Bristol R 0.7710054 Alfreton 0.6934416 0.1832344 0.1233241
53 2015-04-25 Football Conference Braintree 0.6433377 Altrincham 0.5181848 0.2534974 0.2283177
54 2015-04-25 Football Conference Grimsby 0.7121461 Aldershot 0.6060863 0.2225444 0.1713693
55 2015-04-25 Football Conference Barnet 0.7005921 Gateshead 0.6027872 0.2238752 0.1733376
89 2015-04-25 Ryman Premier Tonbridge 0.5290554 Dulwich H 0.3862735 0.2779247 0.3358018
90 2015-04-25 Ryman Premier Hendon 0.6475919 Leiston 0.5186757 0.2533528 0.2279715
91 2015-04-25 Ryman Premier Enfield Town 0.7083192 Witham Town 0.5995914 0.2251527 0.1752558
92 2015-04-25 Ryman Premier Peacehaven & T 0.5067776 Hampton & R 0.3635771 0.2786840 0.3577389
93 2015-04-25 Ryman Premier Leatherhead 0.6687142 Harrow Boro 0.5529077 0.2424437 0.2046487
94 2015-04-25 Ryman Premier Kingstonian 0.5123337 Grays 0.3650127 0.2786714 0.3563159
95 2015-04-25 Ryman Premier Bury Town 0.5023030 Lewes 0.3530443 0.2786236 0.3683320
96 2015-04-25 Ryman Premier Met. Police 0.7032599 Hornchurch 0.6026562 0.2239278 0.1734160
97 2015-04-25 Ryman Premier Bognor Regis 0.5015350 Margate 0.3578256 0.2786846 0.3634898
98 2015-04-25 Ryman Premier Canvey Isl. 0.5040515 Wingate & F 0.3580769 0.2786862 0.3632369
99 2015-04-25 Ryman Premier Maidstone 0.7226780 E Thurrock 0.6266213 0.2139939 0.1593848
100 2015-04-25 Ryman Premier VCD Athletic 0.5187381 Billericay 0.3756386 0.2784277 0.3459337
112 2015-04-26 English Premier Everton 0.4705011 Man Utd 0.3218288 0.2767828 0.4013884
113 2015-04-26 English Premier Arsenal 0.5990718 Chelsea 0.4631366 0.2673990 0.2694644
114 2015-04-27 English Championship Bournemouth 0.7651225 Bolton 0.6826586 0.1884818 0.1288596
116 2015-04-28 English Championship Rotherham 0.5726494 Reading 0.4296323 0.2733859 0.2969818
117 2015-04-28 English League One Colchester 0.4533051 Swindon 0.3116859 0.2756139 0.4127002
115 2015-04-28 English Premier Hull 0.4356592 Liverpool 0.2895461 0.2720085 0.4384454
118 2015-04-29 English Premier Leicester 0.3575044 Chelsea 0.2276427 0.2532150 0.5191424