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.
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.
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 |
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.
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:
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")
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:
Next, our League Two forecasts:
simpleplot("English League Two")
bkplot(date.1,"English League Two","league-2")
At League Two level:
Next, our Football Conference forecasts:
simpleplot("Football Conference")
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 |