Spannender 5-ter Bundesliga-Spieltag – Vorhersagen meines Groovy-Bots

Auf der botLiga-Webseite werden Entwickler dazu aufgerufen, ein Programm zur Vorhersage der Bundesliga-Spielergebnisse zu schreiben. Diese Programme, Bots genannt, treten gegeneinander an, indem sie vor jedem Spieltag die Ergebnisse der Fußball-Bundesliga tippen. Zu jedem Spieltag werden die Ergebnisse ausgewertet und entsprechend grafisch dargestellt.

Dieser 5. Spieltag fing für mich mit 14 Punkten aus den 4 Dienstagsspielen hervorragend an (und dem korrekt getippten 3:3 zwischen Frankfurt und Dortmund), aber leider brachten mir die 5 Spiele am Mittwoch keine weiteren Punkte ein. Damit bleibt mein ‚THOR10-Bot‘ noch im Mittelfeld, aber der wird schon noch einen Spitzenplatz gegen Ende der Saison ergattern. 😉

Ergebnisse des 5. Spieltags - die Dienstagsspiele waren super

Ergebnisse des 5. Spieltages – die Dienstagsspiele waren super

Tendenz bis zum 5. Spieltag

Tendenz bis zum 5. Spieltag

Der Entwickler der botLiga-Webseite war nach eigenen Angaben zu faul für das regelmäßige Tippen mit seinen Kollegen bei kicktipp. So entwickelte er einen Bot zum Tippen und die Idee zur botLiga war geboren. Selbst entwickelte Bots müssen Folgendes bieten:

  • Quellcode muss offen bei GitHub gehostet werden
  • Tipps werden per HTTP-Post abgesetzt
  • Tipps müssen algorithmisch (nicht manuell) ermittelt werden
  • Zugriff auf alle frei zugänglichen Informationen erlaubt

Auf der botLiga-Webseite werden übrigens einige Datenquellen angeboten (z.B. historische und aktuelle Spieldaten), die man programmatisch auswerten kann. Außerdem kann man sich von den Konkurrenz-Bots und den Bots der letzten Saison inspirieren lassen. Auf http://openligadb-json.heroku.com/ werden einige Beispiele für die Abfrage von Spieldaten im JSON-Format aufgeführt, beispielsweise:

Für einen eigenen Bot muss ich mir zunächst überlegen, wie ich zu einem konkreten Ergebnistipp für ein Spiel komme und welche Daten ich dafür benötige. Folgende Strategien wurden von den Bots der letzten Saison und in dieser Saison beispielsweise verfolgt:

  • 2:1-Bot: tippt immer 2:1 und schneidet damit ganz gut ab
  • Tabellen-Bot: vergleicht die aktuellen Tabellenplätze der Teams
  • Spieler-Bot: vergleicht den Spieler-Marktwert der Teams
  • Wettquoten-Bot: nutzt aktuelle Wettquoten des Spiels

Ich habe mich bei meinem Bot für die Programmiersprache Groovy entschieden und war entzückt, wie leicht man damit (im Gegensatz zu Java) JSON-Strukturen auswerten kann. Einfach die Bibliothek ‚HTTP-Builder‚ per ‚Grape‚ einbinden und das Auslesen des 2. Spieltages 2011 sieht so einfach aus:

@Grapes([
   @Grab(group='org.codehaus.groovy.modules.http-builder', module='http-builder', version='0.5.2' ),
   @Grab(group='net.sf.json-lib', module='json-lib', version='2.4', classifier='jdk15'),
   @Grab(group='commons-beanutils', module='commons-beanutils', version='1.8.3')]
)

import groovyx.net.http.*
import static groovyx.net.http.ContentType.*
import static groovyx.net.http.Method.*

def http = new HTTPBuilder( 'http://openligadb-json.heroku.com' )
http.request( GET, JSON ) {
  uri.path = '/api/matchdata_by_group_league_saison'
  uri.query = [ group_order_id: 2, league_saison: 2011, league_shortcut: 'bl1' ]
  response.success = { resp, json ->
    println json.matchdata[0].group_name + " -> " + json.matchdata[0].match_date_time
    json.matchdata.each {
      println "${it.name_team1} - ${it.points_team1} : ${it.points_team2} - ${it.name_team2}"
    }
  }
}

Bei meinem eigenen Bot wollte ich Ergebnisse anhand der geschossenen Tore der letzten Spieltage vorhersagen, die in etwa 2:1 im Mittel haben, aber auch 0:0-Ergebnisse und 4:0-Ergebnisse zulassen. Konkret analysiere ich mit dem https://github.com/me4bruno/THOR10-Bot die eigenen Tore und die gegnerischen Tore der letzten 10 Spieltage, rechne ein bisschen hin und her, kalkuliere Heim- und Auswärtsspiele ein, erstelle Statistiken und erhalte – zack – das passsende Ergebnis zwischen zwei Spielen. Das sieht so aus:

  1. zunächst wird von dem Ergebnis 1,75 : 1,25 ausgegangen
  2. berechne aus den 10 letzten Spieltagen die gesamten Heimtore und Auswärtstore
  3. erstelle Heim-/Auswärts-Tabellen und Angriff-/Abwehr-Tabellen aus den jeweiligen Toren
  4. berechne einen Wert anhand des Platzes in der Tabelle (1-3=1.0, 4-7=0.5, 8-11=0.0, 12-15=-0.5, 16-18=-1.0)
  5. addiere den Wert aus der Angriffstabelle der Heimmannschaft zu den Toren der Heimmannschaft
  6. subtrahiere den Wert aus der Verteidigungstabelle der Heimmannschaft von den Toren der Gastmannschaft
  7. addiere den Wert aus der Angriffstabelle der Gastmannschaft zu den Toren der Gastmannschaft
  8. subtrahiere den Wert aus der Verteidigungstabelle der Gastmannschaft von den Toren der Heimmannschaft
  9. runde die Ergebniswerte, die zwischen [-0,25 – 3,75] : [-0,75 – 3,25] liegen
  10. damit sind theoretisch die Ergebnisse 0:0 und 4:3 möglich

Ich finde das eigentlich einen super Algorithmus für meinen Bot, aber leider sind die Algorithmen der anderen Bots auch nicht schlecht (abgesehen vom 2:1-Bot). Bei dem Werder-Spiel gestern war ich übrigens doch froh, dass sich mein Bot geirrt hat. Der tippt leider ganz schön oft gegen Werder – vielleicht sollte ich mal einen Werder-Bonus einbauen.

Advertisements

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s