all Technical posts

Predicting the Outcome of UEFA EURO 2020 with Microsoft Azure

In this blog post, we'll take a look at how we created an application in Azure where both users and AI can predict the outcome of games of the UEFA Euro 2020 football championship. Is man or machine better in predicting the outcome of football games?

The Premise

At Codit we are always looking for fun, challenging and interesting internal projects we can use to train our colleagues in new technologies. With the UEFA Euro 2020 football tournament coming up, the idea was born to replace the age-old tradition of using Microsoft Excel to register and track people’s predictions for the games with an application in Azure. With this, everyone within our company can join in predicting the outcome of games. Game results are automatically processed.

Next to having colleagues competing with each other, we will also develop AI models based on both historical and current data to predict the outcome of games. It will be very interesting to see if man or machine is better in predicting the outcomes!

The High Level Architecture

To create all this functionality, we need the following components:

  • A front-end website where users can see the schedule and result of games, add their predictions and see a leaderboard
  • APIs to deliver the necessary business functionality to the front-end and separate front-end from the back-end
  • A back-end database where we store information about teams, games, users, predictions and points scored
  • AI models which will predict outcomes of games

This resulted in the following high-level architecture:

As shown in the diagram above, we will use HTTP triggered Azure Functions to host our APIs and Time Triggered Azure Functions to periodically retrieve the game schedule, game results and calculate the points each user has earned.

The HTTP Triggered Azure Functions will be available through Azure API Management where we will also implement OAuth and caching of GET requests. The front-end and AI implementation will use the APIM layer to call the APIs.

Finally, we will use Arcus Observability ( to push all our logging to Application Insights.

Man versus Machine

Since we as Codit are a data driven company, we want to see if we can use data to perform better than the average human player. Or even better: beating the experts! For this we are using two approaches; each approach is taken up by a small subteam:

  1. Using only historical data of previous matches (team history)
  2. Using all kind of performance parameters of the players (team quality)

For both approaches, we start with a simple classification model that just predicts win, lose or draw. Later we will look at predicting the number of goals. We are using the Azure ML environment for all the models.

Once the models are there, we create an Azure function to act as an artificial player. It will call the model for each game and send the outcome back the APIs.


In the coming weeks we will be posting more blog posts about the technical details of the application, the AI models and how the AI predictions stack up against the predictions of our Codit colleagues!

Subscribe to our RSS feed

Thanks, we've sent the link to your inbox

Invalid email address


Your download should start shortly!

Stay in Touch - Subscribe to Our Newsletter

Keep up to date with industry trends, events and the latest customer stories

Invalid email address


Great you’re on the list!