Bet Wisely: Predicting the Scoreline of a Football Match using Poisson Distribution

Dieser Artikel wurde im Rahmen des Data Science Blogathon veröffentlicht.

“ Die größte Religion der Welt ist nicht einmal eine Religion.“ – Fernando Torres

Fußball wird von allen geliebt und seine Schönheit liegt in seiner unvorhersehbaren Natur. Eine Sache, die stark mit diesem Spiel verbunden ist, sind seine Fans, Grübeln und debattieren vor einem Spiel darüber, wer das Spiel gewinnen wird. Und einige Fans gehen sogar bis an die Grenze, um vor dem Spiel über die Torlinie zu spekulieren. Versuchen wir also, einige dieser Fragen logisch zu beantworten.

Poisson kennenlernen

Nun, wie ich bereits gesagt habe Fußball ist ein unvorhersehbares Spiel, Ein Tor kann jederzeit im Spiel völlig zufällig auftreten und hat keine Abhängigkeiten von früheren Toren oder Teams oder anderen Faktoren. Warte, sagte ich „Random“. Weil es in der Statistik eine Verteilung gibt, die zum Ermitteln der Wahrscheinlichkeiten zufällig auftretender Ereignisse verwendet wird, die Poisson-Verteilung.

Angenommen, Ihr Freund sagt, dass durchschnittlich 2 Tore pro Spiel passieren, nun, hat er Recht? Wenn ja, wie hoch sind dann die tatsächlichen Chancen, zwei Tore in einem Spiel zu sehen? Hier kommt zu unserer Rettung Die Poisson-Verteilung, die uns hilft, die Wahrscheinlichkeit zu finden, ’n‘ Ereignisse (lesen Sie ’n‘ Ziele) in einem festen Zeitraum zu beobachten, da wir sie mit der Erwartung von Ereignissen versorgen (durchschnittliche Ereignisse pro Zeitraum). Lass es uns einmal mathematisch sehen

 Poisson-Verteilung

( wobei λ = durchschnittliche Ereignisse pro Zeitraum)

Torchancen

Lassen Sie uns nun einige Fragen mit dieser Gleichung beantworten, aber zuerst benötigen wir Daten. Dafür habe ich die internationalen Fußballergebnisse von 1872 bis 2020 von Kaggle heruntergeladen. Ein Beispiel unseres Datensatzes ist unten dargestellt.

Kode:

data.head(3)
 Poisson-Verteilung - Kopf

Beginnen wir damit, die durchschnittlichen Ziele zu finden, die wir innerhalb von 90 Minuten erwarten können.

Dazu habe ich einen separaten Datensatz erstellt, der Daten für Spiele des 21.Jahrhunderts (2000-2020) herausfiltert und den home_score und den away_score hinzugefügt, um die Gesamt-Nr. dann den Mittelwert der Spalte Gesamtziele, um die durchschnittlichen Ziele zu erhalten, die wir in einem Spiel erwarten können.

Kode:

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

Wenn wir nun diese Erwartung in die Poissson-Verteilungsformel aufnehmen, wollen wir sehen, wie hoch die tatsächlichen Chancen sind, 3 Tore in einem Spiel zu sehen.

Wow, nur eine Chance von 22%. Lassen Sie uns die Wahrscheinlichkeiten der Nr. von Toren in einem Spiel, um ein besseres Bild zu bekommen.

 Poisson-Verteilung

Daraus können wir nun die Wahrscheinlichkeit berechnen, ‚x‘ oder weniger Tore zu sehen, indem wir einfach die Wahrscheinlichkeiten von ‚x‘ und die Zahlen, die kleiner als ‚x‘ sind, addieren.Und indem wir dies einfach von 1 subtrahieren, können wir die Wahrscheinlichkeit erhalten, mehr als ‚x‘ Tore in einem Spiel zu sehen. Lassen Sie uns das auch zeichnen.

Das Warten hat ein Ende …

Angenommen, Sie haben einen ungeduldigen Freund, der nicht das ganze Spiel sitzen möchte. Und er kommt während eines Spiels zu dir und fragt, wie viel Zeit er warten muss, um ein Tor zu sehen. Woah, das ist eine schwierige Frage, aber keine Sorge, bitten Sie ihn, 10000 Spiele durchzusitzen und die Zeit zwischen den einzelnen Toren zu notieren. Nur ein Scherz, offensichtlich würde er ausflippen. Tatsächlich habe ich 10000 Übereinstimmungen simuliert und die durchschnittliche Zeit ermittelt.

Die wahrscheinlichste Wartezeit beträgt 2 Minuten. Aber warte, das ist nicht wirklich das, wonach ich gesucht habe, ich möchte die durchschnittliche Zeit, die ich warten muss, um ein Tor zu sehen, wenn ich anfange, das Spiel zu einem zufälligen Zeitpunkt zu sehen. Dafür nehme ich 10000 Instanzen, in denen jede Instanz 10000 Spiele ansieht und die durchschnittliche Wartezeit zwischen den Zielen in diesen 10000 Spielen berechnet und uns meldet. Schließlich werde ich diese 10000 Berichte aus jeder meiner Instanzen zeichnen und die erwartete durchschnittliche Wartezeit ermitteln.

Es sieht so aus, als müssten wir ca. 33 Minuten warten. Wie auch immer wir auf mehr warten müssen, dies ist ein klassisches Wartezeitparadoxon.

Vorhersage der Torlinie

Lassen Sie uns zum Schluss die Frage stellen, mit der wir begonnen haben, und die aufregendste Frage, wer gewinnen wird und wie die Torlinie aussehen wird, um genau zu sein.

Dazu verwende ich die Historie zwischen zwei Teams (lassen Sie sie als Heimmannschaft und Auswärtsmannschaft betrachten) und nehme den average_home_score als erwartete Tore für die Heimmannschaft und den average_away_score als erwartete Tore für die Auswärtsmannschaft und prognostiziere die Torlinie mithilfe der Poisson-Verteilung. Falls die Teams weniger Begegnungen haben, werden wir einige Faktoren berücksichtigen

HS = Mittelwert der Heimtore, die die Heimmannschaft im Laufe der Geschichte erzielt hat.

AS = Mittelwert der von der Auswärtsmannschaft im Laufe der Geschichte erzielten Auswärtstore.

HC = Mittelwert der Gegentore in Heimspielen der Heimmannschaft.

AC = Mittelwert der Gegentore in Auswärtsspielen der Auswärtsmannschaft.

Die erwartete Punktzahl der Heimmannschaft wird also wie folgt berechnet: (HS + AC) / 2

Die erwartete Punktzahl der Auswärtsmannschaft wird also wie folgt berechnet: (AS + HC) / 2

Warten Sie, die erwartete Punktzahl ist nicht die vorhergesagte Punktzahl. Die erwartete Punktzahl ist die durchschnittliche Anzahl der Tore, die wir in einem Spiel zwischen ihnen erwarten.

Kode:

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}')

Versuchen wir es mit Brasilien als Heimmannschaft und Mexiko als Auswärtsmannschaft.

Kode:

PredictScore()

Poisson-Verteilung gibt uns eine Vorhersage von Brasilien gewinnt mit einem 2-0 scoreline. Ich habe im Internet gesucht und festgestellt, dass das letzte Spiel zwischen ihnen am 2. Juli 2018 ausgetragen wurde und Brasilien mit 2: 0 gewonnen hat. Nun, ich hatte Glück, du darfst nicht.

Wenn Sie weiter erkunden möchten, keine Sorge, hier ist mein Code. Heutzutage werden Klassifizierungsalgorithmen verwendet, um das Ergebnis vorherzusagen, und Regressionsalgorithmen, um die Punktezahl vorherzusagen. Aber das ist das Thema für einen anderen Tag, bis dahin viel Spaß damit. Adios!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.