apinn.io
Alle Artikel
Pricing8 Min. Lesezeit

Gleicher Bet, fünf verschiedene EVs: das richtige Devig-Modell wählen

Bei einem 6.00-Außenseiter verschiebt ein anderes Devig-Modell den EV um mehr als einen vollen Punkt. Hier erfährst du, welches Modell für welchen Markt taugt.

In vielen Value-Detection-Systemen steckt ein stiller Bug: Der angezeigte EV hängt von einer Entscheidung ab, die nie jemand schriftlich festgehalten hat. Diese Entscheidung ist das Modell, mit dem die Marge des Buchmachers herausgerechnet wird. Ändere es, und dieselbe Wette springt von +1,2% auf +2,6% EV — ohne dass sich ein einziger Preis bewegt.

Das ist kein Implementierungsdetail. Es ist die zentrale Annahme deines gesamten Pricing-Stacks: Wie verteilt der Buchmacher seine Kommission über die Ausgänge?

Der Ausgangspunkt: die Summe übersteigt 100%

Bei einer Moneyline von 1,55 / 2,55 ergibt der Kehrwert jedes Preises 64,5% und 39,2%. Summe: 103,7%. Diese 3,7 Punkte sind die Marge. Jedes Modell zielt darauf ab, wieder auf 100% zu kommen; sie unterscheiden sich nur darin, wie sie den Überschuss herausnehmen.

odds = [1.55, 2.55]
raw = [1 / o for o in odds]
print(f"overround: {sum(raw) - 1:.2%}")   # 3.70 %

Additive: von allen denselben Betrag abziehen

Das naivste Modell: von jeder Wahrscheinlichkeit wird ein gleicher Anteil des Überschusses abgezogen. Leicht zu erklären, behandelt aber einen 90%-Favoriten und einen 5%-Außenseiter so, als trügen sie dieselbe Margenlast — was bei keinem Buchmacher zutrifft.

def additive(odds):
    raw = [1 / o for o in odds]
    excess = (sum(raw) - 1) / len(raw)
    return [p - excess for p in raw]

Bei einem stark einseitigen Markt kann additive für den höchsten Preis eine negative Wahrscheinlichkeit liefern. Wenn dein Code dafür keine Absicherung hat, erzeugt er absurde faire Quoten statt eines sichtbaren Fehlers.

Multiplicative: proportional

Jede Wahrscheinlichkeit wird durch die Summe geteilt. Schnell, parameterfrei, der Standard in den meisten Tools. Auf einem engen Zwei-Wege-Markt ist es kaum zu schlagen. Seine Annahme — die Marge wird als gleicher Prozentsatz verteilt — ist jedoch falsch, sobald der Markt asymmetrisch wird.

def multiplicative(odds):
    raw = [1 / o for o in odds]
    total = sum(raw)
    return [p / total for p in raw]

# 1.55 / 2.55 → probabilities 62.22 % / 37.78 %

Power: die Kurve biegen

Finde einen Exponenten k, sodass die Summe der mit k potenzierten Wahrscheinlichkeiten genau 1 ergibt. Statt Wahrscheinlichkeiten zu verschieben, wird die Kurve verzerrt: kleiner Effekt bei Favoriten, großer Effekt im Tail. Dieses Verhalten passt am besten zu Märkten mit vielen Ausgängen.

from scipy.optimize import brentq

def power(odds):
    raw = [1 / o for o in odds]
    k = brentq(lambda k: sum(p ** k for p in raw) - 1, 0.5, 1.5)
    return [p ** k for p in raw]

Shin: Marge als Versicherungsprämie

Shin fügt eine ökonomische Annahme hinzu: Der Buchmacher setzt seine Marge so, dass er sich gegen einen Anteil z besser informierter Wetter absichert. Dieser Anteil wird aus den Preisen abgeleitet und dann herausgerechnet — was mehr Marge auf Außenseiter lädt, genau wie Buchmacher es in der Praxis tun.

def shin(odds, iterations=100):
    raw = [1 / o for o in odds]
    total = sum(raw)
    z = 0.0
    for _ in range(iterations):
        probs = [
            (((z ** 2 + 4 * (1 - z) * p ** 2 / total) ** 0.5) - z) / (2 * (1 - z))
            for p in raw
        ]
        s = sum(probs)
        z += (s - 1) / 2
    return [p / s for p in probs]

Odds ratio: ein einziger Verzerrungsparameter

Das Odds-ratio-Modell sucht einen einzigen Faktor, der auf das Odds-Verhältnis jedes Ausgangs angewendet wird (die "odds" statt der Wahrscheinlichkeit). Es landet oft nahe bei Shin, mit einer einfacheren Intuition: Der Buchmacher verzerrt keine Wahrscheinlichkeiten, er verzerrt Verhältnisse.

Wo die Modelle wirklich auseinanderlaufen

Auf einem ausgeglichenen Zwei-Wege-Markt liegen alle Modelle dicht beieinander: Die Spanne zwischen den fünf Modellen bleibt unter 0,3 Wahrscheinlichkeitspunkten — innerhalb des Rauschens deiner eigenen Schätzung. Weg von der Parität ändern sich die Entscheidungen:

  • Klarer Favorit (1,10 gegen 9,00): multiplicative unterschätzt den Favoriten und überschätzt den Außenseiter; die Lücke zu Shin übersteigt beim Außenseiter einen Punkt.
  • 1X2 mit falsch bepreistem Unentschieden: power und Shin stimmen überein, multiplicative erzeugt künstlichen Value auf das Unentschieden.
  • Märkte mit vielen Ausgängen (Outrights, Correct Score, Torschützen): multiplicative wird bei langen Preisen richtig schlecht. Power oder Shin, nie multiplicative allein.
  • Asian Handicaps und Totals: sehr liquide Zwei-Wege-Märkte, dünne Marge — die Modellwahl spielt kaum eine Rolle, nimm das schnellste.
Ein Devig-Modell ist keine kosmetische Einstellung: Es ist deine Annahme darüber, wie sich der Buchmacher verhält. Besser, du wählst es bewusst.

Die Regel, die wichtiger ist als das Modell

Was auch immer du wählst, behalte es bei. Die teuerste Falle ist nicht die Wahl des "falschen" Modells, sondern der Wechsel zwischen Backtest und Produktion: Dein historischer EV wird mit deinem Live-EV unvergleichbar, und du wirst schließen, dass dein Edge zusammengebrochen ist, während sich nur der Maßstab verschoben hat.

  1. Lege pro Marktfamilie ein Modell fest und schreibe es irgendwo auf.
  2. Speichere das verwendete Modell bei jedem geloggten EV — sonst wird deine Historie irgendwann uninterpretierbar.
  3. Bevor du deine EV-Schwelle anpasst, prüfe, ob nicht dein Devig sich geändert hat.

Serverseitig umgesetzt

Bei apinn sind die fünf Modelle serverseitig implementiert und werden bei jedem Tick angewendet: Jede Linie kommt mit ihrem Marktpreis und ihrem fairen Preis, unter dem von dir gewählten Modell an. Du legst deine Annahme pro Request fest — oder ein für alle Mal in deinen Kontoeinstellungen —, und deine Backtests verwenden exakt dieselbe Mathematik wie dein Bot.

curl -H "X-API-Key: $APINN_KEY" \
  "https://api.apinn.io/api/odds?event_id=1610000123&model=shin"

# odds1/odds2   = market prices
# todds1/todds2 = fair prices
# model = power (default) | multiplicative | additive | shin | odds_ratio

Dein EV reduziert sich damit auf eine Division — und die Devig-Debatte wird einmal, in Ruhe, entschieden, statt bei jedem Tick.

Diese Rechnung mit echten Daten

Pinnacle-Quoten in Echtzeit inklusive True Odds, plus Opening- und Closing-Historie — Self-Service-Zugang, API-Key in Minuten.