Parier à bon escient: Prédire le Score d’un match de Football à l’aide de la Distribution de Poisson

Cet article a été publié dans le cadre du Blogathon Data Science.

 » La plus grande religion au monde n’est même pas une religion. » – Fernando Torres

Le football est aimé de tous et sa beauté réside dans sa nature imprévisible. Une chose qui est fortement associée à ce jeu, ce sont ses fans, qui réfléchissent et débattent avant un match pour savoir qui gagnera le match. Et certains fans vont même jusqu’à spéculer sur le score avant le match. Essayons donc de répondre logiquement à certaines de ces questions.

Apprendre à connaître Poisson

Comme je l’ai dit plus tôt, le football est un jeu imprévisible, un but peut survenir à tout moment du match de manière totalement aléatoire sans dépendre des buts ou des équipes précédents ou de tout autre facteur. J’ai dit « Au hasard ». Parce qu’il existe une distribution dans les statistiques qui est utilisée pour trouver les probabilités d’événements aléatoires, la distribution de Poisson.

Supposons que votre ami dise qu’en moyenne 2 buts se produisent par match, eh bien, a-t-il raison? Si c’est bien, quelles sont les chances réelles de voir deux buts dans un match? Voici notre distribution de poisson à la rescousse qui nous aide à trouver la probabilité d’observer « n » événements (lire « n » objectifs) dans une période de temps fixe étant donné que nous lui fournissons l’attente d’événements survenant (événements moyens par période de temps). Voyons-le mathématiquement une fois

 Distribution de Poisson

( où λ = événements moyens par période de temps)

Chances de marquer

Maintenant, répondons à quelques questions avec cette équation, mais nous avons d’abord besoin de données, donc pour cela, j’ai téléchargé les résultats du football international de 1872 à 2020 données de Kaggle. Un échantillon de notre ensemble de données est présenté ci-dessous.

code:

data.head(3)
 Répartition de Poisson - Tête

Commençons par trouver les buts moyens auxquels nous pouvons nous attendre en 90 minutes.

Pour cela, j’ai créé un ensemble de données distinct filtrant les données des matchs joués au 21e siècle (2000-2020) et ajouté le home_score et le away_score pour connaître le nombre total. des buts se produisant dans chaque match, puis pris la moyenne de la colonne des buts totaux pour obtenir les buts moyens auxquels nous pouvons nous attendre dans un match.code

:

data=data+datadata=data.apply(lambda x : int(str.split(x,'-')))rec_data=data.loc>=2000)]rec_data.iloc]print(rec_data.total_goals.mean())

2.744112130054189

Maintenant, en mettant cette attente dans la formule de distribution de Poissson, voyons quelles sont les chances réelles de voir 3 buts dans un match.

Wow, seulement 22% de chances. Traçons les probabilités du non. des buts dans un match pour avoir une meilleure image.

 Distribution de Poisson

Maintenant, à partir de cela, nous pouvons calculer la probabilité de voir « x » ou moins de buts simplement en ajoutant les probabilités de « x » et les nombres inférieurs à « x ».Et en soustrayant simplement cela de 1, nous pouvons obtenir la probabilité de voir plus de « x » buts dans un match. Traçons-le aussi.

L’attente est terminée

Supposons maintenant que vous ayez un ami impatient qui ne veut pas rester assis pendant toute la partie. Et il vient vers vous pendant un match et vous demande combien de temps doit-il attendre pour voir un but. Woah, c’est une question difficile à droite, mais ne vous inquiétez pas, demandez-lui de s’asseoir à travers 10000 matchs et de noter le temps entre chaque but. Je plaisante, évidemment, il flipperait. En fait, j’ai simulé 10000 matchs et j’ai découvert le temps moyen.

Le temps d’attente le plus probable est de 2 minutes. Mais attendez ce n’est pas vraiment ce que je cherchais, je veux le temps moyen que je dois attendre pour voir un objectif si je commence à regarder le match à un moment aléatoire. Pour cela, je prendrai 10000 instances, où chaque instance regarde 10000 matchs et calcule le temps d’attente moyen entre les buts de ces 10000 matchs et nous rapporte. Enfin, je vais tracer ces 10000 rapports de chacune de mes instances et connaître le temps d’attente moyen attendu.

Il semble que nous devions attendre environ 33 minutes. Cependant, nous devrons peut-être attendre plus, c’est un paradoxe classique du Temps d’Attente.

Prédire la ligne de score

Enfin, faisons la question avec laquelle nous avons commencé et la question la plus excitante qui va gagner et quelle sera la ligne de score pour être précis.

Pour cela, je vais utiliser l’historique entre deux équipes (laissez-les considérer comme l’équipe à domicile et l’équipe à l’extérieur) et prendre le average_home_score comme les buts attendus pour l’équipe à domicile et average_away_score comme les buts attendus pour l’équipe à l’extérieur et prédire le score en utilisant la distribution de Poisson. Dans le cas où les équipes ont moins de rencontres entre elles, nous considérerons quelques facteurs

HS = Moyenne des buts marqués à domicile par l’équipe à domicile tout au long de l’histoire.

AS = Moyenne des buts marqués à l’extérieur par une équipe à l’extérieur tout au long de l’histoire.

HC = Moyenne des buts encaissés en matchs à domicile par l’équipe à domicile.

AC = Moyenne des buts encaissés à l’extérieur par l’équipe à l’extérieur.

Donc, le score attendu de l’équipe à domicile sera calculé comme (HS + AC) / 2

Donc, le score attendu de l’équipe à l’extérieur sera calculé comme (AS + HC) / 2

Attendez, le score attendu n’est pas le score prédit. Le score attendu est le nombre moyen de buts que nous nous attendons à ce qu’ils marquent dans un match entre eux.code

:

import pandas as pdimport numpy as npfrom 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) > 20: avg_home_score = data.home_score.mean() avg_away_score = data.away_score.mean() home_goal = int(stats.mode(np.random.poisson(avg_home_score,100000))) away_goal = int(stats.mode(np.random.poisson(avg_away_score,100000))) else: avg_home_goal_conceded = data.away_score.mean() avg_away_goal_scored = data.away_score.mean() away_goal = int(stats.mode(np.random.poisson(1/2*(avg_home_goal_conceded+avg_away_goal_scored),100000))) avg_away_goal_conceded = data.home_score.mean() avg_home_goal_scored = data.home_score.mean() home_goal = int(stats.mode(np.random.poisson(1/2*(avg_away_goal_conceded+avg_home_goal_scored),100000))) avg_total_score = int(stats.mode( np.random.poisson((data.total_goals.mean()),100000))) print(f'Expected total goals are {avg_total_score}') print(f'They have played {len(data)} matches') print(f'The scoreline is {home_team} {home_goal}:{away_goal} {away_team}')

Essayons avec le Brésil comme équipe à domicile et le Mexique comme équipe à l’extérieur.code

:

PredictScore()

La distribution de poisson nous donne une prédiction de la victoire du Brésil avec un score de 2-0. J’ai cherché sur le filet et j’ai constaté que le dernier match entre eux s’était joué le 2 juillet 2018 et que le score indiquait que le Brésil avait gagné par 2-0. J’ai eu de la chance, peut-être pas.

Conclusion

Si vous voulez explorer plus loin pas de souci, voici mon code. De plus, ce n’est qu’un moyen de base de prédire le jeu, de nos jours, des algorithmes de classification sont utilisés pour prédire le résultat et un algorithme de régression pour prédire le score. Mais c’est le sujet d’un autre jour, d’ici là, amusez-vous à jouer avec cela. Adios!

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.