TL;DR: um, pretty… badly.

The General Election result of 2017 was a surprise. Though the largest party in terms of votes and seats, Theresa May’s Conservatives did not build on their 2015 majority as expected, but lost it. Labour did not crash to a defeat on the scale of Michael Foot’s 1983 showing, but in fact came away with a net gain of 30 seats. Like the majority of the forecasts out there (with the exception of Ben Lauderdale’s YouGov model), ours had the Tories on for a pretty comfortable majority.

So hands up, we got it wrong, and in some individual seats, embarrassingly so. Our final forecast, or ‘nowcast’, for example, had Chester (Lab) with a 90.9% probability of the changing hands. One of the most marginal seats in the country, it instead held firm for Labour. On balance, though, it did correctly forecast Sheffield Hallam (LDem), Brighton Kemptown (Con), Plymouth Sutton (Con) and Croydon Central (Con) going Labour.

Fwiw, our forecast and comparable numbers with the result are GB-wide only:

Party Nowcast Result Seat error Nowcast vote % Result vote % Vote % error
Con 356 317 -39 43.6 43.6 0.0
Lab 219 262 43 36.5 41.1 4.6
SNP 43 35 -8 NA NA NA
LDem 9 12 3 7.9 7.6 -0.3
PC 4 3 -1 NA NA NA
Grn 1 1 0 2.1 1.7 -0.4
UKIP 0 0 0 4.2 1.9 -2.3

Our forecast overall put the Conservatives on course to take 356 seats (or 357 if you include the Speaker), an increase of 26 on 2015. We had Labour on 219, down 13.

Our calculator was reliant on our poll tracker (a polling aggregate of the latest polls) with added adjustments (taking into account regional polling) so as to account for the variation, say, between London and the North East. The poll tracker, simply, underestimated the Labour share, overestimated the Green and UKIP shares, but got the Tory share bang on.

After the result was known, I ran the actual vote shares through the calculator and found the forecast would have come a lot closer to the result which took place then we projected. Using the result vote shares rather than our polling aggregate, our calculator would have produced a hung parliament, with the Tories on 322 seats, Labour 256, the SNP 37 and the Liberal Democrats 14. This, obviously, isn’t perfect, but in the effort of straw grasping I’ll take it as some vindication of our model going in the right direction regarding regional swing, what with getting the SNP number almost bang on.

Essentially, the underestimation of the Labour share (by an avg of 5pts) in the polling aggregate – and the polls generally – was what stuffed it. Had the polls got it right, then so would the forecast.

The reason as to why there was an underestimation of the Labour share is yet to be seen. Ipsos Mori’s breakdown of how Britain voted shows a Labour vote more young and diverse than in 2015 (and a participating electorate on average younger and more diverse than those that turned out in the EU referendum), and it is perhaps a failure to account for that (the entry of new voters, and the exit of old) that saw most forecasts do so poorly.