What Is the Best Algorithm for Football Match Score Predictions?

What Is the Best Algorithm for Football Match Score Predictions?

We, here at LiveMatchUpdates, offer predictions down to the exact football match score of important games. However, ours is a detailed, subjective, and expertly-backed football prediction. This article is for those, who like us, are wondering – what is the best algorithm for football match score predictions?

One of the most fascinating features of football how unpredictable it is. It’s almost impossible to call a match, exactly how it will go down, but football predictions still do, even accurately.

So, for the fans wanting to estimate the scorelines of football matches, there is a logical algorithm to do so.

What Is the Best Algorithm for Football Match Score Predictions?

The answer to this question is Poisson. There is a distribution in statistics that is used for finding the probabilities of randomly occurring events, called Poisson Distribution.

A goal in a football match is more or less dependent on nothing but the game play at that moment. No team statistics, player profiles, formations’ analysis, or even previous goals in the very same match actually affect present goalscoring.

So, what better tool to anticipate random matches and the exact proportion of the random phenomena within, goals, than Poisson?

Now, lets go about predicting matches as we understand how to calculate results using the Poisson Distribution method!


The Poisson Distribution formula or probability mass function (pmf) is –

P(x) = (e-λ  * λ x) / x!


Mathematical Formula


  • The symbol “!” is a factorial,
  • e = 2.71828 (e is Euler’s number, a constant),
  • The letter “x” stands for the probability of the number of goals. So, if we want to estimate the chances on seeing 2 goals in total then x would be 2, x=2.]

Probability for Goalscoring

Here, the first variable to configure is λ. λ in this pmf is called the event rate or the rate parameter, it represents the expected number of occurrences.

To sum it up, we calculate λ to represent the average number of events per time period.

So, in terms of football prediction, λ would stand for the average number of goals scored per game.

Poisson distribution helping us to find the probability of observing how many goals may be scored in a match, regardless of which team scores how many, in a fixed time period.

But that will only happen if we provide it with the expectation of goals occurring. So, the average number of goals per time period in similar, past matches can illuminate the future chances of scoring.

Let`s start with finding the average goals we can expect within 90 minutes.

To figure out the average number of goals, create a dataset with statistics from similar matches of the past. Thus, if the match is between England and Italy, all the data from prior matches between the two is relevant.

Note down the home score and the away score in each match to find out the total no. of goals. Then, calculate the mean of all the total goals to get the average goals we can expect in a match.

Finally, having determined your λ value, apply it to the formula with varying values to “x”, x=1, 2, 3, etc. The P(x) value with the highest percentage will let you fixate on an x value, that is, determine the probable total number of goals.

Now, for an example, say λ= 2.74. Then, the likelihood of different number of total goals would look something like:

Graphical Representation

Predicting the Exact Scoreline

Now, let’s answer the most exciting question of who will win the match and what will the precise scoreline be.

For this calculation too, we have to source our data from the match history between the two teams.

Only, instead of determined the average (mean) of total goals, here, the two teams’ goals will figure independently.

Split the goal data into Team A’s goal across the history of their facing Team B, and vice versa.

Collate the following historical data:

  • HS = Mean of home goals scored by Team A throughout history.
  • AS = Mean of away goals scored by Team B throughout history.
  • HC = Mean of goals conceded in home matches by Team A.
  • AC = Mean of goals conceded in away matches by Team B.

So, Team A’s expected score will be calculated as (HS + AC) / 2.

And, Team B’s expected score will be calculated as (AS + HC) / 2.

This expected score for each team is the average number of goals we expect each to score in a game.

Now, say this figure is 2 for Team A and 1 for Team B. In this case, our exact scoreline prediction could be Team A : Team B – 2:1.

Such a calculation can also emerge from a coding algorithm like the one below:


import pandas as pd

import numpy as np

from scipy import stats


def PredictScore():


    home_team = input(“Enter Home Team: “)

    ht = (”.join(home_team.split())).lower()

    away_team = input(“Enter Away Team: “)

    at = (”.join(away_team.split())).lower()


    if len(data[(data.home_team ==ht) & (data.away_team ==at)]) > 20:


        avg_home_score = data[(data.home_team ==ht) & (data.away_team ==at)].home_score.mean()

        avg_away_score = data[(data.home_team ==ht) & (data.away_team ==at)].away_score.mean()


        home_goal = int(stats.mode(np.random.poisson(avg_home_score,100000))[0])                   

        away_goal = int(stats.mode(np.random.poisson(avg_away_score,100000))[0])



        avg_home_goal_conceded = data[(data.home_team ==ht)].away_score.mean()

        avg_away_goal_scored   = data[(data.away_team ==at)].away_score.mean()

        away_goal = int(stats.mode(np.random.poisson(1/2*(avg_home_goal_conceded+avg_away_goal_scored),100000))[0])


        avg_away_goal_conceded = data[(data.home_team ==at)].home_score.mean()

        avg_home_goal_scored   = data[(data.away_team ==ht)].home_score.mean()

        home_goal = int(stats.mode(np.random.poisson(1/2*(avg_away_goal_conceded+avg_home_goal_scored),100000))[0])


    avg_total_score = int(stats.mode(

        np.random.poisson((data[(data.home_team==ht) &    (data.away_team==at)].total_goals.mean()),100000))[0])


    print(f’Expected total goals are {avg_total_score}’)

    print(f’They have played {len(data[(data.home_team ==ht) & (data.away_team ==at)])} matches’)

    print(f’The scoreline is {home_team} {home_goal}:{away_goal} {away_team}’)




So, there you have it! For the best, most accurate football match score predictions, using the simple algorithm of Poisson Distribution!


Please enter your comment!
Please enter your name here