The 2020 Presidential race was one of the most contentious races in America’s history.  People from both sides saw the world as two distinct realities – especially when it came to predicting the results.   Democrats predicted a Biden landslide while Republicans thought polling still had a large Liberal lean and predicted a Trump victory.  Nate Silver’s 538 builds a very sophisticated per-state forecast taking, among other things, a weighted average of all polls.

 Predictit.org allows you to trade contracts on the election creating a prediction market.
However, it is far from an efficient market.  Since they limit your exposure in a market to $850, ‘smart money’ cannot make the market more efficient.  These two prediction markets diverged quite a bit.  I wanted to see if you could have created a profitable betting strategy using 538’s forecasts for the key swing states on PredictIt.


I built a feed to pull in the 90 day histories for the swing states in PredictIt markets.  To keep things simple, I only took in the Biden prices and assumed that selling Biden contracts would be (1 – Biden Price).  I also built a feed to pull in 538’s forecast data from the same data over the same time frame.  I choose to use only the swing states because they have the most polling and should be the best representation of the two models – wisdom of the crowd vs deep modeling.


With this data, I was able to build out a trading algo running in a simulator.  The algo works by assuming I made a bet each day starting September 1.  On each day, I look at the diff between 538’s Biden win probability and the cost of a Biden contract in PredictIt (Pb = P538 – Ppi).  If Pb is positive, then I buy a Biden contracts, otherwise, I sell Biden contracts.  To scale the trade to the diff between to forecast and the price, I buy/sell N contracts where N is Pb/5 * 10- in other words, for every 5% diff between 538 and PredictIt, I buy 10 contracts.  I run the algo each day until either Election Day or I have $850 in exposure.


The algo would have placed $6705.71 worth of bets netting a profit of $721.29 (10.76%) before fees.  If you take a look at this chart, you will see the breakdown of results by state.  The returns were driven by the biggest diffs – FL, MI, MN, PA, WI in which Florida was the only incorrect prediction by 538.  Interestingly, those markets really started to converge to Trump as we got closer to the election which you can see in these charts which let you look at the trends for both models over time by state.  


That seems pretty good, but I wanted to see if there was a liberal bias to 538’s model.  What would our returns have looked like if we bought 10 contracts a day for Biden for each of those states?  I created an two new trading algos similar to the main one.  On each day, one algo buys 10 Biden contracts and the other sells 10 Biden contracts.  The Biden only algo placed $6666.30 worth of bets netting a profit of $653.70 (9.81%) before fees.  The Trump only algo placed $13519.04 worth of bets netting a profit of -$3703.70 (-17.65%) before fees.  Looking at these charts, you can see how closely the 538 model tracked the Biden-only model which makes sense given how 538 correctly predicted Biden victories in most of the swing states.


I must give credit where it is due – 538’s Presidential Forecast was very accurate despite the systemic polling error we saw this cycle.  The forecast was much more accurate than PredictIt’s markets and you could have made money using it as the basis for a trading strategy.


Note: I am using Edison and the AP’s election calls to determine the state results.  Even though no races have been certified as of the writing of this post, it is my belief that the media’s calls will hold up.

Unlock your business's full potential with AI!

Schedule a FREE AI consultation with Coegil today and discover how our all-in-one platform can transform your data into actionable insights. Don't miss this opportunity to supercharge your decision-making and drive growth. Book now and embark on your AI journey with confidence!