Predicting Winners in the Eurovision Song Contest

By Tim Kicker, Yauheni Zviazdou, Anna-Ilona Nikolaeva

Motivation

Since 1956, European countries have come together every year to compete for the best song. Eurovision is in the center of attention each May, and betting markets start booming around that time with predictions of the winner.

But do we know who should win, statistically? In this project we analyzed previous Eurovision contests to get insights into trends, the public's and the juries' favorites, and the general statistics that define winners.

We wanted to help prediction market users make smarter bets, and to give competing Eurovision artists insights into their statistical advantages and disadvantages.

We also wanted to explore how shared borders and languages between countries influence voting, but in the end we focused on predicting the winner and used them only as inputs to the prediction.

Dataset description

One row is one directed pair in one final: who gives, who receives and how many points. Finals only, 2008 to 2026 (2020 was cancelled). Up to 2015 each country cast one vote; since 2016 we take half of jury plus public, so every year is on the same 0 to 12 scale. We work with pairs rather than songs because 462 songs are too few to learn from, and things like distance or past votes only exist for a pair of countries.

18,069pair rows
18finals
462songs

Sources

We deliberately do not use YouTube views. They are only available as of today, so a winner would get views it earned because it won.

Visualizations

We looked at how winners are distributed across categories, and which factors are most associated with winning, i.e. with the highest finalist-to-winner conversion.

We also looked at how the language and content of the lyrics relate to winning, using lyrics from the 2008-2026 contests (2010 is missing: no lyrics data).

We used Google searches to measure pre-final interest in each song (Google Trends, 2008-2026, with no data for 2010). These features later turned out to matter most for finding the winner.

Prediction results

So, can we actually tell who is going to win Eurovision the day before the final? Partly yes!

We predicted how many points every country gives every other country, using only what is already known before the show: how these two countries voted for each other in the past, how much people in the voting country googled the song, the distance between the countries, shared language and the running order. Then we added up the predicted points for every song and got our own scoreboard.

1st, 3rd, 3rdwhere we put the real winners of 2024-2026
9 of 18finals with the winner in our top three, each final left out once
5.7average place of the winner, each final left out once (random guess: 13.3)

Which factors matter?

Google searches turned out to be one of the most important things. Without them the validation winners dropped from predicted 1st, 2nd and 1st places to 2nd, 9th and 18th respectively. On the other hand, lyrics turned out to be noise (in the data format that we had): leaving them out changed nothing in the predictions.

Can we predict the winner?

Our chosen model (gradient boosting, without the artist and lyrics features) learned from the finals of 2008-2019 and was picked by how well it found the winners of 2021-2023, and then used to predict winners of 2024-2026. It put Switzerland in 1st place and Austria and Bulgaria in 3rd, so 2.3 on average, where a random guess would put the winner somewhere around 13th.

Below the top our scoreboard is still rough: every song is 6.42 places off on average, against 8.43 for a random order. Lasso and linear regression do slightly better there (5.88 and 5.93 places), so the trees are only better at finding the winner.

We also tried leaving out each of the 18 finals one at a time and predicting it from all the others. The real winner came 1st in 4 finals and was in our top three in 9. The biggest misses were Germany in 2010 (the year we have no search data for) and Portugal in 2017, both of which we put 16th, followed by Denmark in 2013 (13th) and Sweden in 2015 (12th). The twelve training years on their own do worse: the winner lands at place 7.7 on average and in our top three only 3 times.

Jury and public: an overview

Since 2016 the jury and the public vote separately, so for 2016-2026 our pipeline also predicts the two rankings on their own. Each year is left out once and predicted from all the others.

ModelJury error (lower is better)Public error (lower is better)
Random order8.518.43
Country pairs only, without searches6.776.41
Country pairs + Google searches6.405.56

The numbers are how many places a song is off on average, so lower is better. Google searches help the public ranking about twice as much as the jury's. Also, the jury ranking correlates with the public one at only 0.43 (Spearman). When we compute the earlier votes from the training years alone, these numbers change by at most 0.13 places. They are a different check from the winner results above, and the features were chosen on the same years, so the two can't be compared directly.

For orientation, Adamska and Reiss (2025) also leave out one year at a time (2008-2024). They get 6.07 places in the final with audio, lyrics, YouTube views, running order and voting history, 6.05 with YouTube views alone and 7.59 with running order and voting history. That last set is the closest to ours, and chance in their setup is 8.55.

We also simulated win chances 2,000 times per final from the errors of the public model. Of the eight songs that got more than 50 %, only one actually won, so we don't show these numbers.

Technical background

If you want all the details, everything is in our technical report (PDF), and the code is public on GitHub.

What one row means

Instead of one row per song, one row in our data is one country giving points to another country in one final. For example, in 2024 the Greek jury gave Cyprus 10 points and the Greek public gave 12, so that row gets 11. We did it this way because the 18 finals from 2008 to 2026 (2020 was cancelled) only have 462 songs, which is way too few to learn from, but they have 18,069 country pairs. Things like distance or past votes also only exist for a pair of countries.

Up to 2015 every country had one vote, and since 2016 the jury and the public vote separately. So from 2016 we take half of jury plus public, and every year stays on the same 0 to 12 scale.

The Rest of the World bug

Since 2023, viewers from countries without an entry vote together as "Rest of the World". That is only a public vote, without a jury. To get one score per country we average jury and public, but for Rest of the World this "average" was just its full public score, so it counted twice as much as a real country. Now it's halved like everyone else.

After the fix we ran the whole prediction notebook again, choice of settings included. That is why our presentation on 15 October still showed the test winners at 1st, 4th and 4th, while the numbers here are 1st, 3rd and 3rd.

Google searches

Google Trends gives us how much each voting country searched for each song, on web search and YouTube. We used data collected up to one day before the final. Google trends doesn't give real search numbers, it scales the country with the most interest to 100 and shares that scale between everything you ask for at once. Our first download asked for several songs together and came back almost all zeros, so we queried every song on its own.

No peeking at the future

A forecast can only use what exists before the final. So semi-final points are out (they are published after the final), and so are YouTube views, since you can only get today's count, which already includes all the views a winner got for winning.

We split the finals by year and never at random, because votes from the same final depend on each other. We trained on 2008-2019, chose the model on 2021-2023 and tested on 2024-2026. Missing values are filled with the median of the training years.

Models

We tried seven models with scikit-learn: linear regression, lasso, random forests and gradient boosting, some with and some without the artist and lyrics features. We picked the one that put the real winners of 2021-2023 highest. Two models found all three winners there, so the tie went to the one with the higher R² (0.206 against 0.183): gradient boosting with learning rate 0.03, depth 3, at least 50 rows per leaf and 300 rounds.

The lyrics were labelled by mood, theme and repetition with a language model (gpt-oss-120b), which could only answer with fixed categories. The age and sex of solo artists come from Wikidata.

Technical deliverables

The pipeline is written in Python with pandas and keeps its tables as Parquet files. One command (uv run esc all) downloads, cleans and joins all the sources, every download is cached and pinned with a checksum wherever the source has a fixed release, and the tests run offline.

The analysis itself happens in three Jupyter notebooks next to the pipeline:

Limits

Future improvements

There is a lot we would still like to try:

And if we did it all again, we would decide how to measure success before seeing any results, keep the test finals closed until the very end, query Google Trends one song at a time from the start and write down our main question in the first week.