Wie Sportwettquoten funktionieren und wie man damit rechnet

Da ich heute darüber nachdachte, algorithmisch an Sportwetten teilzunehmen, habe ich ein wenig mit den Quoten herumgerechnet.

Schauen wir zunächst in echte Daten

Zuerst einmal muss man sich überlegen, was eine Quote bedeutet und wie sie entsteht bzw. wie das Wettbüro damit Geld verdient. Im Gegensatz zu anderen Artikeln im Internet bin ich mir dabei nicht so sicher, ob ein Wettbüro wirklich immer selbst Gewinnvorhersagen für die einzelnen Spiele treffen muss. Es lohnt sich nämlich ebenso, die Verteilung der Wetteinsätze der Spieler exakt zu treffen. Trifft das Wettbüro diese genau, ist der tatsächliche Ausgang des Spiels vollkommen egal.

Bei Tipico kann man neben den Quoten auch die Wettverteilung der Spieler ansehen. Rechnen wir einfach mal damit, um diese Überlegung zu prüfen.

Die 5 obersten Highlights, als ich tipico betrachtete
Begegnung                            Quoten           Wettverteilung  Quoten in % *
England (F) - Kanada (F)             3,4   3,0  2,3   26%  30%  44%   28%  31%  41%
IBV Vestmannaeyjar - Breidablik Kop. 5,0   3,7  1,62  10%  13%  77%   18%  25%  57%
Palmeiras SP - Sao Paulo SP          2,35  3,1  3,0   26%  27%  47%   39%  30%  31%
Fjölnir Reykjavik - FH Hafnarfjördur 4,3   3,5  1,75  16%  22%  62%   21%  26%  52%
Chile - Peru                         1,5   4,0  8,0   79%  14%   7%   64%  24%  12%

* von mir berechnet

Wie ich die Quoten in % berechne, sehen wir gleich noch. Diese spiegeln jedoch (unter bestimmten Annahmen) die Wahrscheinlichkeit wider, die tipico als Grundlage zur Berechnung ihrer Quoten benutzt.

Auffällig ist auf jeden Fall schon einmal, dass gerade bei sehr einseitigen Quoten sehr viel mehr Spieler auf den vermeintlich sicheren Sieger setzen, als dies von der Quote erwartet würde oder gedeckt wäre. Bei ausgeglicheneren Partien liegen die Quoten in der Tat sehr nahe an der Wettverteilung. Ich vermute allerdings hinter den angezeigten Zahlen von tipico die Anzahl an Spielern, nicht die Menge an gesetztem Geld. Geht man davon aus, dass gerade Gelegenheitsspieler mit geringen Beträgen auf die sehr starken Mannschaften setzen (z.B. der Gelegenheitsspieler, der mal auf Bayern München setzt), wären die gesetzten Summen wieder näher an den von mir errechneten Prozenten.

Die Berechnung von Quoten

Schauen wir uns aber mal an, wie Quoten entstehen und warum es für ein Wettbüro auch Sinn machen kann, die Wettverteilung der Spieler exakt zu treffen. Wie bin ich also von den Quoten auf die Quoten in % gekommen? Dazu erkläre ich die Gegenrichtung. Angenommen wir sind ein Wettbüro und nehmen an, dass entweder

  1. das Spiel mit den Wahrscheinlichkeiten 50% Sieg für A, 30% unentschieden und 20% Sieg für B ausgeht, oder
  2. die Wetteinsätze ebendiese Wettverteilung beim Tippen haben werden.

Gerade durch zweitere Variante lässt sich die Sache ein wenig anschaulicher erklären. In der Wahrscheinlichkeitstheorie rechnen wir ansonsten ja immer mit Erwartungswerten. Also nehmen wir mal an die Spieler tippen genauso, wie wir unsere Wahrscheinlichkeiten berechnet haben. Nämlich 50% des Geldes wird auf Sieg für A gesetzt, 30% auf unentschieden und 20% auf Sieg für B.

Insgesamt wurden 10.000 Euro gesetzt. Das macht also 5.000, 3.000 und 2.000 auf die drei verschiedenen Ergebnisse.

Nehmen wir an, A gewinnt. Wieviel könnte das Wettbüro also ohne Verlust an die Gewinner auszahlen? Tippgruppe 2 und 3 haben insgesamt 5000 Euro verloren, also kann das Wettbüro (ohne Verlust, aber auch ohne Gewinn) 5000 Euro auszahlen. Da auf einen Sieg für A insgesamt 5000 Euro eingezahlt wurden, entspräche das einer Quote von 2,0.

Rechnet man Selbiges für Tippgruppe 2 und Tippgruppe 3 aus, kommt man auf Quoten von 3,333 und 5.

Mathematisch kann man die Quoten auch als den Kehrwert der Wahrscheinlichkeit berechnen, also , wobei q die Quote und p die Wahrscheinlichkeit ist.

Der Vorteil für das Wettbüro: Der Gebührenfaktor g

Jetzt ist es natürlich so, dass in unserem Beispiel der Wettbürobetreiber keinerlei Gewinn macht – zumindest nicht, solange er nicht besser tippt als die Spieler. Dies ist keine erstrebenswerte Situation für ein Wettbüro. Deshalb verringert das Wettbüro die Quoten um einen gewissen Anteil, den ich im Moment aus meiner Sicht als Spieler “Wettgebühren” nenne. Bei tipico scheint dieser ein wenig variabel zu sein, bei egamingbets lag er ziemlich genau um die 10%.

Damit ergibt sich eine angepasste Quote , die der Wettbürobetreiber dem Spieler bietet: , wobei g den Faktor angibt, der die Gebühren für das Wetten einberechnet. Will das Wettbüro 10% Gebühren festlegen, wäre g = 0,9.

Umgekehrt können wir mit obigen Zahlen einmal durchrechnen, dass das Wettbüro in unserem vereinfachten Beispielfall nun tatsächlich 10% an Gebühren einnimmt. Dazu rechnen wir zunächst die angepassten Quoten aus: q’_1 = 1,8; q’_2 = 3; q’_3 = 4,5.

Nehmen wir nun einmal an, unsere Tippgruppe 1 gewinnt. Es wurden 5000 Euro gesetzt, die übrigen beiden Gruppen hatten ebenso 5000 Euro gesetzt und verloren. Durch die Quote von 1,8 zahlt der Betreiber den Gewinnern nun insgesamt 5000 * 1.8 = 9000 Euro aus, ihm selbst bleiben 1000 Euro. Das sind genau 10% des Gesamteinsatzes.

Aufgrund dieses Faktors g macht es für den Wettbürobetreiber durchaus auch Sinn, auf die Wettverteilung der Spieler zu setzen.

Kleiner Zusatz zum Rechnen

Interessant für mich war eigentlich noch eine andere Rechnung. Ich wollte für einige Portale wissen, wie die Gebühren aussehen – ich spreche immer von Gebühren, da ich es wie Transaktionsgebühren bei Paypal sehe, nur muss ich sie mir eben selbst ausrechnen. Die Höhe der Gebühren eines Wettanbieters ist wichtig um zu errechnen, welche Tippquote ich richtig haben müsste, um überhaupt Gewinn zu erwirtschaften.

Startet man mit dem Wissen (also die Summe aller Wahrscheinlichkeiten auf einem Ereignis muss exakt 1 sein), kommt man durch unsere obigen Überlegungen zur angepassten Quote darauf, dass ebenso gelten muss .

Bringt man das Ganze auf einen Hauptnenner, kommt man auf:

Das kann man noch umstellen und dann bequem den Faktor g berechnen. Voraussetzung hierfür ist allerdings, dass der Betreiber auf alle Quoten einer Partie denselben Faktor anwendet.

Flattr this!

150.000 SQLite-INSERTs beschleunigen

Bei Sprakit hatte ich das Problem, dass ich 150.000 Wikipedia-Artikel in eine SQLite-Datenbank eintragen musste (für Kroatisch, d.h. für Englisch oder Deutsch noch mehr). Mit einer normalen SQLite-Datenbank auf der Festplatte dauerte das mind. 1h – etwa so lange war ich weg und das Skript war immer noch nicht fertig.

Ein Ex-Kommilitone erklärte mir, dass ich die Datenbank in ein ramfs schieben solle, dort die Änderungen machen, und dann zurückschreiben – weil SQLite bei jeder Änderung auf die Festplatte zugreift, was natürlich langsam ist.

Ich habe kurzerhand mein Skript angepasst:

# Copy SQLite DB to RAM, so that insert is faster                       
tmpfile = tempfile.NamedTemporaryFile()                                 
shutil.copy2(settings['sqlite'], tmpfile.name)                          
 
sqlite_conn = sqlite3.connect(tmpfile.name)
 
# do some real work
 
shutil.copy2(tmpfile.name, settings['sqlite'])

Bin aus dem Zimmer und das Skript war fertig… Innerhalb von etwa 1-2 Minuten.

Ich habe absichtlich tempfile.NamedTemporaryFile() verwendet, um das Skript plattformunabhängig zu halten. Natürlich ist es damit nur auf Systemen schnell, auf denen der temporäre Ordner, den Python verwendet (bei mir /tmp) im RAM liegt.

Flattr this!

Es ist vollbracht!

Internetradio selbstgebaut

Endlich ist es fertig, mein Internetradio basierend auf einem Raspberry Pi. Der schwierigste Teil war die Frontverkleidung, der fehleranfälligste ist bisher noch die selbstgelötete Verstärkerplatine. Die scheint im Moment immer noch einen Wackelkontakt zu haben, mir ist nur nicht klar an welcher Stelle. Ich kann ihn auch durch Rütteln an verschiedenen Lötstellen / der gesamten Platine nicht erzeugen, wohl aber beheben, wenn er mal auftritt…

Die Frontabdeckung dagegen ist wunderbar. Die Schwierigkeit bestand darin, die kleinen Kurzubschalter und deren Frontabdeckungen so zu befestigen, dass man die Knöpfe auch wirklich drücken kann (selbiges beim Potentiometer).

Die Abdeckungen passten nicht exakt zu den Kurzhubschaltern, insgesamt war es nicht ganz einfach hier günstig, formpassend und schön einzukaufen. Die Abdeckungen sind eigentlich für größere Druckschalter. Die Öffnung hab ich entsprechend ausgespachtelt und die Kurzhubschalter von hinten in die noch weiche Masse eingedrückt. Hält bombenfest.

Die so fertiggestellten Druckknöpfe mussten jetzt irgendwie an die Frontplatte geklebt werden. Dazu hab ich sie auf eine Lochrasterplatine gesteckt und die Lochrasterplatine von hinten gegen die Holzplatte geklebt. Das Ergebnis sieht man in folgendem Foto:

Raspberry Pi Radio von innen

Die goldenen Platinen sind die Lochrasterplatinen, von vorne sind die Kurzhubschalter aufgesteckt. Die Beinchen hab ich so verbogen, dass sie in der Lochrasterplatine stecken bleiben und angelötet. Da sie nicht nach vorne gezogen werden, hält das problemlos.

Die grüne Platte ist das Display. Ein 4-zeiliges LCD-Display. Ich habe auch noch ein Display mit Pixel-Auflösung in meiner Kiste, aber das 4-reihige-Display war schon schwierig genug anzuschließen und anzusteuern :)

Das Potentiometer (rechts oben in der Innenansicht) wiederum habe ich auf ein kleines Holzplättchen mit passendem Durchmesser gesteckt und festgeschraubt. Dann noch messen, wie lang das Potentiometer sein muss und den Stab vorne passend abgesägt. Darauf dann den Drehknopf aufgeschraubt. Die Holzplatte wurde dann gleich wie die Lochrasterplatine von hinten an die Frontabdeckung geklebt.

Das heißt, die Knöpfe und der Drehschalter sind jetzt fest mit der Frontplatte verbaut. Direkt hinter den Drehschaltern wird der Aufbau aber wieder modularer. Ich habe an die Lochrasterplatinen noch einzelne Pins aus Stiftleisten angelötet. Daran kann ich jetzt direkt Jumper-Kabel anschließen, die dann zum Mikrocontroller oder Pi laufen. Dadurch sind die internen Komponenten leicht austausch- oder änderbar.

Ein Kabel des Potentiometers habe ich direkt an den Verstärker gelötet, aber hinter dem Verstärker ist dann auch wieder alles absteckbar (Stromversorgung, Audioausgang, Audioeingang).

Flattr this!