UK General Election Prediction v1

Note – I know this isn’t a politics blog and people that read my blog probably aren’t bothered by this but I thought I’d put it up anyway.  From a geek point of view it does involve a lot of data and number crunching, so in the broadest sense of geek I reckon it counts.


With the recent failure of polls to predict results, I’ve decided as a starting point to look at what has actually happened in recent elections to get a decent picture as to what might happen in June.  I’ll try and do a number of models over the coming weeks, including ones based on:

  • MP By-Election Data and EU Referendum Results (this one)
  • Local Elections on 4th May
  • Combining the above two as well as taking in to account MPs standing down and their stance on Brexit


For anyone that wants to skip the explanations, the headline figures are:

Party Seats
Conservative 363
Labour 177
SNP 56
Liberal Democrat 27
Sinn Fein 4
Plaid Cymru 3
Green 1
Independent 1
Speaker 1
Grand Total 650



There have been five MP by-elections since the EU Referendum and I’ve used the data from these to build my first model.  What’s quite helpful about these five by-elections is that they are fairly even spread across estimated Yes/No percentages in the EU Referendum – these percentages have been estimated using ward level data and are about as accurate as can be possible.

The five by-elections were:

  • Witney – Conservative hold but big swing to Lib Dems
  • Richmond Park – Lib Dem win from Conservative after a huge swing (note – I am counting Zac Goldsmith as a Conservative despite him standing as an independent)
  • Sleaford and North Hykeham – Conservative hold
  • Copeland – Conservative win from Labour after a moderate swing
  • Stoke-on-Trent – Labour hold

Some patterns clearly emerged from the data compared to the 2015 general election:

  • The Labour % of the vote fell in every instance
  • The Lib Dem % of the vote increased in every instance and massively in pro-remain areas
  • The Conservative % of the vote fell in remain areas and generally increased in leave areas
  • UKIP were fairly inconsistent across each area
  • The Greens didn’t field candidates in each area so any conclusions from their data are hard to make

Before applying any percentage modifiers I gave each constituency a banding based on their EU Referendum estimated result.  These bandings were:

Banding Remain % Leave %
A 75-85% 15-24.99%
B 65-74.99% 25-34.99%
C 55-64.88% 35-44.99%
D 45-54.99% 45-54.99%
E 35-44.99% 55-64.99%
F 25-34.99% 65-74.99%
G 15-24.99% 75-84.99%

Each banding was then given a vote change percentages based on conclusions from the bye-elections.  These are completely arbitrary and will probably end up with my most inconsistent model of all but it is just a starting point.  The vote change percentages per banding were:

Banding Con Vote share % change Lab Vote share % change UKIP Vote share % change LD Vote share % change
A -20.00% -5.00% -5.00% 30.00%
B -15.00% -5.00% -5.00% 25.00%
C -5.00% -5.00% -5.00% 15.00%
D 2.50% -5.00% -5.00% 7.50%
E 2.50% -10.00% 2.50% 5.00%
F 5.00% -15.00% 5.00% 5.00%
G 10.00% -20.00% 10.00% 0.00%

Any party not mentioned above – i.e.. Green SNP, Plaid Cymru and the Northern Ireland Parties – have their percentage unchanged.  This gives a strange picture for Scotland and Wales that is unlikely to be anywhere near accurate.  Northern Ireland is assumed to remain the same though with election pacts being formed between unionist parties in some areas, I know this is unlikely to be the case.

Even in England there a lot of variables to factor in future models, including the fact that many MPs are standing down.

The Results

The overall results came up as follows:

Party Seats
Conservative 363
Labour 177
SNP 56
Liberal Democrat 27
Sinn Fein 4
Plaid Cymru 3
Green 1
Independent 1
Speaker 1
Grand Total 650

This isn’t the crushing victory that the Conservatives are looking for but it is still a pretty decent majority.

I won’t go into any detail on Scotland, Wales or Norther Ireland but in England there are some interesting points:

  • The Conservatives to win 44 seats from Labour
  • The Liberal Democrats to win 10 seats from the Conservatives and 7 from Labour (the model also predicts two from the SNP but I would probably ignore that)
  • UKIP to win 3 seats from Labour

Conservative Gains

Compared to 2015 the seats the model predicts the Conservatives to gain from Labour are:

  • Alyn & Deeside
  • Ashfield
  • Barrow & Furness
  • Bassetlaw
  • Batley & Spen
  • Birmingham Edgbaston
  • Birmingham Northfield
  • Bishop Auckland
  • Blackpool South
  • Bolton North East
  • Bridgend
  • City of Chester
  • Chorley
  • Clwyd South
  • Copeland (although already theirs due to the By-Election)
  • Coventry North West
  • Coventry South
  • Darlington
  • Dewsbury
  • Dudley North
  • Eltham
  • Enfield North
  • Gedling
  • Great Grimsby
  • Halifax
  • Hyndburn
  • Ilford North
  • Lancaster and Fleetwood
  • Mansfield
  • Middlesbrough South and Cleveland East
  • Newcastle-under-Lyme
  • North East Derbyshire
  • Norwich South
  • Scunthorpe
  • Stoke-on-Trent North
  • Stoke-on-Trent South
  • Wakefield
  • Walsall North
  • Wirral West
  • Wolverhampton North East
  • Wolverhampton South West
  • Workington
  • Wrexham
  • York Central

Liberal Democrat Gains

Seats the Liberal Democrats are predicted to win from the Conservatives are:

  • Bath
  • Battersea
  • Eastbourne
  • Kingston and Surbiton
  • Lewes
  • Oxford West and Abingdon
  • Richmond Park (though already theirs after by-election)
  • Thornbury and Yate
  • Twickenham
  • Wimbledon

Seats they are predicted to win from Labour are:

  • Bermondsey and Old Southwark
  • Bristol West
  • Burnley (!)
  • Cambridge
  • Cardiff Central
  • Hornsey and Wood Green
  • Manchester Withington


The UKIP gains from Labour are predicted to be:

  • Dagenham and Rainham
  • Hartlepool
  • Rother Valley


Although based on only five bye-election results and using the nearly year old EU Referendum result, I feel that the predictions the model has thrown up may not be too far away as it stands.  Elements I’m particularly wary of include:

  • Overestimated UKIP gains – as it stands I think they will get 0 seats
  • Overestimated Lib Dem Gains – I think they could reach 20 seats but 27 seems a stretch
  • Potentially underestimated Conservative gains from Labour

The local elections will hopefully give a better idea of where things are and after I’ve digested all the results I’ll develop the second model.