Weiter zum Inhalt

Poker-Wahrscheinlichkeit und Statistik mit Python

Geh Wahrscheinlichkeiten und Statistik in Python an: Lerne mehr über Kombinationen und Permutationen, abhängige und unabhängige Ereignisse sowie den Erwartungswert.
Aktualisiert 18. Sept. 2026  · 15 Min. lesen

Mit KI erkunden

ChatGPTClaudePerplexity

Data Scientists entwickeln Machine-Learning-Modelle, um Vorhersagen zu treffen und Entscheidungen zu optimieren. Beim Online-Poker sind die Optionen Setzen, Mitgehen oder Passen. Software, die dir diese Entscheidungen abnimmt, ist allerdings tabu – hier ziehen die meisten Pokerseiten die Grenze. Weil du also kein ML-Modell trainieren darfst, musst du dein Gehirn trainieren. Das bedeutet: unendlich viele Equity-Berechnungen abseits des Tisches, die auf zahlreichen Konzepten aus Wahrscheinlichkeit und Statistik beruhen.

In diesem Tutorial lernst du einige dieser Konzepte anhand eines Kartendecks und allgemeiner Pokersituationen kennen.

Poker Card Banner

Wenn du Statistik mit Python angehen willst, schau dir den DataCamp-Kurs Statistical Thinking in Python an.

Persönliche Motivation

Mehrere Jahre habe ich meinen Lebensunterhalt als professioneller Online-Pokerspieler verdient. Data Science war für mich der logische nächste Schritt, denn die nötigen Kompetenzen ähneln denen, die man braucht, um beim Online-Poker profitabel zu sein. In einem Blogpost über die Gemeinsamkeiten von Data Science und Poker habe ich erwähnt, dass bei jeder gespielten Hand auf einer Online-Plattform eine Hand-History erzeugt wird. Diese Hand-Histories dokumentieren, was jede Spielerin und jeder Spieler in der Hand getan hat. Mit einer Software namens Hold’em Manager (denk an Tableau für Poker) habe ich diese Daten genutzt. Hold'em Manager lädt alle Hand-Histories in Echtzeit in eine PostgreSQL-Datenbank, sodass du die Tendenzen deiner Gegner im Blick behältst.

Wahrscheinlichkeitstheorie: Ein Einstieg

Bevor wir loslegen, klären wir, was Wahrscheinlichkeitstheorie ist und warum sie wichtig ist, wenn du in Data Science einsteigst. Außerdem lernst du zentrale Konzepte, die dir im Tutorial begegnen werden, und wie du die Wahrscheinlichkeit einzelner Ereignisse berechnest.

Im Alltag fragst du dich oft, wie wahrscheinlich ein Ereignis ist – den Lottogewinn, der Sieg deines Fußballteams oder ein Rabatt auf deine Lieblingsschuhe. „Wie stehen die Chancen, dass…“ – diesen Satz benutzt du sicher häufig. Das Ermitteln dieser Chancen nennt man „Wahrscheinlichkeit“.

Diese alltagsnahe Wahrscheinlichkeit unterscheidet sich vom mathematischen Blick der Wahrscheinlichkeitstheorie, einem Teilgebiet der Mathematik. Dort gibt es zwei breite Interpretationsrichtungen: „physikalische“ und „evidenzielle“ Wahrscheinlichkeiten.

Erstere heißen auch objektive oder frequentistische Wahrscheinlichkeiten und beziehen sich auf zufällige physikalische Systeme wie Münzwürfe, Roulette oder Würfeln. In solchen Systemen tritt ein Ereignistyp in langen Versuchsreihen mit einer stabilen Rate, der relativen Häufigkeit, auf.

Letztere heißen auch Bayessche Wahrscheinlichkeiten. Sie lassen sich jeder Aussage zuordnen – selbst ohne Zufallsprozess – und drücken ihre subjektive Plausibilität aus, also wie stark die vorliegenden Belege die Aussage stützen. Meist versteht man evidenzielle Wahrscheinlichkeiten als Glaubensgrade, die sich durch die Bereitschaft definieren, zu bestimmten Quoten zu wetten.

Merke: Die Wahrscheinlichkeitstheorie beschäftigt sich vor allem mit der Vorhersage zukünftiger Ereignisse, während die Statistik die Häufigkeit vergangener Ereignisse analysiert. Deshalb gehört die Wahrscheinlichkeitstheorie zu den Kernthemen, wenn du Data Scientist werden willst: In Data Science und Machine Learning nutzt du Daten vergangener Ereignisse, um zukünftige vorherzusagen.

Auch wenn sich Wahrscheinlichkeit intuitiv oft schwer erschließt, sind ihre Konzepte für Data Science und Predictive Analytics zentral.

Zentrale Konzepte und Symbole

Für dieses Tutorial brauchst du vor allem den frequentistischen Blick auf Wahrscheinlichkeit, da wir mit einem 52-Karten-Deck arbeiten.

Aus dieser Perspektive ist das grundlegende Element ein Experiment, das sich – zumindest hypothetisch – unter im Wesentlichen identischen Bedingungen wiederholen lässt. Dieses Experiment kann in verschiedenen Durchläufen zu unterschiedlichen Ergebnissen führen. Die Menge aller möglichen Ausgänge eines Experiments heißt „Ergebnisraum“ (Sample Space). Ein Ereignis ist eine wohldefinierte Teilmenge dieses Ergebnisraums.

Sehr theoretisch – schauen wir uns Beispiele an:

  • Ein etwas klischeehaftes Beispiel ist der Münzwurf. Das Experiment ist das Werfen der Münze. Du kannst mehrfach werfen, und die Durchläufe können unterschiedliche Ergebnisse haben. Es gibt zwei mögliche Ausgänge – Kopf oder Zahl –, der Ergebnisraum hat also die Größe 2. Ein Ereignis „Münzwurf“ kann z. B. aus dem Ausgang „Kopf“ bestehen. Wirfst du zweimal, kann dein Ereignis „Der erste Wurf ist Kopf“ die Ausgänge „Kopf-Kopf“ oder „Kopf-Zahl“ haben.
  • Weniger naheliegend: Du drehst einen Globus und stoppst ihn mit dem Finger. Du kannst das mehrmals tun und landest mal auf Land, mal auf Wasser. Der Ergebnisraum hat wieder die Größe 2. Ein Ereignis „Mein Finger liegt auf Land“ kann die Ausgänge „Land – Wasser“ oder „Land – Land“ haben.
  • Letztes Beispiel: Du wirfst einen Würfel. Jeder Wurf kann sechs Ausgänge haben (1–6). Ein Ereignis „Die Summe aus zwei Würfen ist 10“ kann aus geeigneten Paaren bestehen, während das Ereignis „Die Zahl ist gerade“ die Ausgänge 2, 4 oder 6 umfasst.

Jetzt kennst du die Grundbegriffe. Im Folgenden noch ein paar Symbole, die dir begegnen:

Symbol Bedeutung
$$\cap$$ Und
$$\cup$$ Oder
| Gegeben

Wahrscheinlichkeiten für Einzelergebnisse berechnen

Nun berechnest du die Wahrscheinlichkeit eines einzelnen Ereignisses, etwa dass eine Münze auf Zahl landet. Dafür teilst du die Anzahl günstiger Ereignisausgänge durch die Größe des Ergebnisraums.

Du überlegst also: Wie viele Möglichkeiten gibt es für Zahl? Das ist 1. Wie groß ist der Ergebnisraum? Das ist 2, weil Kopf oder Zahl fallen kann.

Zusammengefasst sieht die Berechnung für ein Ereignis A so aus:

$$P(A) = \frac{Event \ outcomes \ favorable \ to \ A}{Sample \ space}$$

Beim Münzwurf ist die Wahrscheinlichkeit für Zahl 1/2 bzw. 0,5.

Merke: Wahrscheinlichkeiten liegen immer zwischen 0 und 1. 0 bedeutet, dass das Ereignis praktisch nicht eintritt, 1 bedeutet, dass es sicher eintritt.

Ein zweites Beispiel:

Statistics Sample Space for Deck of Cards

Ein Standarddeck hat 52 Karten, davon sind 4 Asse. Nach demselben Prinzip teilst du die günstigen Ausgänge (4) durch den Ergebnisraum (52):

$$P(A) = \frac{4}{52}$$

Hinweis: $A$ steht hier für das Ereignis „ein Ass ziehen“.

Bestimme nun mit Python die Wahrscheinlichkeit, ein Ass zu ziehen:

# Sample Space
cards = 52

# Outcomes
aces = 4

# Divide possible outcomes by the sample set
ace_probability = aces / cards

# Print probability rounded to two decimal places
print(round(ace_probability, 2))
0.08

Die Wahrscheinlichkeit, ein Ass aus einem Standarddeck zu ziehen, beträgt 0,08. Für Prozentangaben multiplizierst du einfach mit 100.

# Ace Probability Percent Code
ace_probability_percent = ace_probability * 100

# Print probability percent rounded to one decimal place
print(str(round(ace_probability_percent, 0)) + '%')
8.0%

Als Prozentwert sind es 8%.

Nachdem du nun zwei Beispiele gesehen hast, kannst du das leicht erweitern: etwa die Wahrscheinlichkeit, eine Herzkarte zu ziehen, eine Bildkarte (Bube, Dame, König) oder eine Kombination wie die Herzdame.

In solchen Fällen bietet sich eine benutzerdefinierte Funktion (UDF) event_probability() an, der du event_outcomes und sample_space übergibst, um die Ereigniswahrscheinlichkeit direkt in Prozent zu berechnen:

# Create function that returns probability percent rounded to one decimal place
def event_probability(event_outcomes, sample_space):
    probability = (event_outcomes / sample_space) * 100
    return round(probability, 1)

# Sample Space
cards = 52

# Determine the probability of drawing a heart
hearts = 13
heart_probability = event_probability(hearts, cards)

# Determine the probability of drawing a face card
face_cards = 12
face_card_probability = event_probability(face_cards, cards)

# Determine the probability of drawing the queen of hearts
queen_of_hearts = 1
queen_of_hearts_probability = event_probability(queen_of_hearts, cards)

# Print each probability
print(str(heart_probability) + '%')
print(str(face_card_probability) + '%')
print(str(queen_of_hearts_probability) + '%')
25.0%
23.1%
1.9%

Die Ergebnisse überraschen nicht: Die Chance auf die Herzdame ist deutlich kleiner als auf irgendeine Bildkarte oder eine Herzkarte.

Wahrscheinlichkeiten mit Kombinationen und Permutationen

Du hast gesehen, dass die Größe des Ergebnisraums entscheidend ist. Das Zählen kann jedoch knifflig sein.

Zum Glück gibt es Hilfsmittel: Permutationen und Kombinationen. Hier erfährst du, was sie bedeuten und wie du damit die Größe des Ergebnisraums berechnest.

Permutationen

Permutationen zählen, auf wie viele Arten sich eine Teilmenge bestimmter Größe aus einer Grundmenge anordnen lässt – in der Regel ohne Zurücklegen. Beispiel: eine 4-stellige PIN ohne Wiederholung von Ziffern. Die Anzahl der Möglichkeiten ohne Wiederholung berechnest du mit:

$$10 \times 9 \times 8 \times 7$$.

Es gibt 10 Ziffern, aber ohne Zurücklegen fällt bei jeder Wahl eine Option weg. Für die erste Ziffer hast du 10 Möglichkeiten (0–9), für die zweite nur noch 9, usw.

Allgemein betrachtest du zwei Dinge: (1) die Anzahl der wählbaren Elemente und (2) wie viele du tatsächlich auswählst. Im Beispiel stehen 10 Ziffern zur Wahl, gewählt werden 4.

Formal ist die vollständige Anordnung $$10 \times 9 \times 8 \times 7 \times 6 \times 5 \times 4 \times 3 \times 2 \times 1$$, und du teilst durch den „Überhang“ zwischen wählbaren (10) und gewählten (4) Elementen, also $$6 \times 5 \times 4 \times 3 \times 2 \times 1$$.

Hinweis: Das schreibt man auch als

$$10P4 = \frac{10!}{(10 - 4)!}$$

„10!“ und „6!“ (10- bzw. 6-Fakultät) bedeuten, dass alle positiven ganzen Zahlen von 1 bis einschließlich 10 bzw. 6 miteinander multipliziert werden.

Das Ergebnis sind 5040 Permutationen – identisch zur obigen 10·9·8·7-Rechnung.

Verallgemeinert lautet die Formel:

$$nPk = \frac{n!}{(n - k)!}$$

Ein Beispiel: Wie viele Permutationen gibt es für zwei ausgewählte Asse aus den vier Assen?

$$4P2 = \frac{4!}{(4 - 2)!}$$

Kombinationen

Bei Permutationen zählt die Reihenfolge. Bei Kombinationen nicht: Kombinationen zählen, auf wie viele Arten du eine Teilmenge bestimmter Größe aus einer Grundmenge ziehen kannst – ohne Reihenfolge.

Beispiel: Aus 52 Karten sollen 3 gezogen werden. Wie viele verschiedene Dreierkombinationen gibt es?

Zunächst wären es $$52 \times 51 \times 50$$ – also wie bei Permutationen. Da die Reihenfolge egal ist, teilst du durch die Redundanzen, also durch $$3 \times 2 \times 1$$.

Die Berechnung lautet:

$$52C3 = \frac{\frac {52!}{(52-3)!}}{3!}$$

Allgemein:

$$nCk = \frac{nPk}{k!}$$

Der Zähler entspricht der Permutationsformel, der Nenner ist die Fakultät der ausgewählten Elemente.

Noch ein Ass-Beispiel. Es gibt vier Asse im Deck. Die möglichen Kombinationen „Pocket Aces“ sind:

  1. Ass Herz / Ass Karo
  2. Ass Herz / Ass Kreuz
  3. Ass Herz / Ass Pik
  4. Ass Karo / Ass Kreuz
  5. Ass Karo / Ass Pik
  6. Ass Kreuz / Ass Pik

Es sind sechs Kombinationen. Um die Anzahl der Kombinationen zu finden, bestimmst du erst die Permutationen:

# Permutations Code
import math
n = 4
k = 2

# Determine permutations and print result
Permutations = math.factorial(n) / math.factorial(k)
print(Permutations)
12.0

Für die Kombinationen teilst du die Permutationen durch k! Versuche auch die Anzahl der möglichen Starthand-Kombinationen in Texas Hold’em zu bestimmen.

$$52C2 = \frac{52P2}{2!}$$

# Combinations Code
n = 52
k = 2

# Determine Permutations
Permutations = math.factorial(n) / math.factorial(n - k)

# Determine Combinations and print result
Combinations = Permutations / math.factorial(k)
print(Combinations)
1326.0

Unabhängige vs. abhängige Ereignisse

Ein Ereignis ist eine wohldefinierte Teilmenge des Ergebnisraums. Ereignisse lassen sich in zwei Kategorien einteilen: abhängig oder unabhängig.

Unabhängige Ereignisse beeinflussen sich gegenseitig nicht. Zwei Ereignisse A und B sind unabhängig, wenn das Eintreten von A keine Information über das Eintreten von B liefert.

Das gilt z. B., wenn du ein Ass ziehst, die Karte zurücklegst, mischst und erneut ziehst. Die Wahrscheinlichkeit für ein Ass ist beim ersten und zweiten Zug gleich.

Abhängige Ereignisse beeinflussen einander.

Ziehst du eine Karte und dann ohne Zurücklegen noch eine, ändert sich die Wahrscheinlichkeit. Nach dem ersten Zug schrumpft der Ergebnisraum von 52 auf 51. War die erste Karte ein Ass, gibt es für den zweiten Zug nur noch 3 Asse.

Formal sind A und B (mit P>0) genau dann unabhängig, wenn eine der folgenden äquivalenten Aussagen gilt: $$P (A ∩ B) = P(A)P(B)$$ $$P (A|B) = P(A)$$ $$P (B|A) = P(B)$$

Anders formuliert, A und B sind unabhängig, wenn:

  • Die Wahrscheinlichkeit von A und B gemeinsam dem Produkt der Einzelwahrscheinlichkeiten entspricht.
  • Die Wahrscheinlichkeit von A unter der Bedingung B gleich P(A) ist.
  • Die Wahrscheinlichkeit von B unter der Bedingung A gleich P(B) ist.

Beispiel: Du kennst die Wahrscheinlichkeit, beim ersten Zug ein Ass zu ziehen. Bestimme nun die Wahrscheinlichkeit für ein Ass beim zweiten Zug, wenn die erste Karte entweder ein König oder ein Ass war:

# Sample Space
cards = 52
cards_drawn = 1 
cards = cards - cards_drawn 

# Determine the probability of drawing an Ace after drawing a King on the first draw
aces = 4
ace_probability1 = event_probability(aces, cards)

# Determine the probability of drawing an Ace after drawing an Ace on the first draw
aces_drawn = 1
aces = aces - aces_drawn
ace_probability2 = event_probability(aces, cards)

# Print each probability
print(ace_probability1)
print(ace_probability2)
7.8
5.9

Einige typische Pokersituationen veranschaulichen abhängige Ereignisse besonders gut.

Zuvor ein kurzes Intro: Gespielt wird Texas Hold’em mit einem Standarddeck (52 Karten). Jede Person erhält zu Beginn zwei Karten und bildet die beste Fünf-Karten-Hand aus den eigenen zwei Karten und fünf Gemeinschaftskarten. Die Karten kommen in vier Runden:

  • Pre-Flop: Zwei „Hole Cards“ pro Spieler
  • Flop: Drei Gemeinschaftskarten
  • Turn: Eine Gemeinschaftskarte
  • River: Letzte Gemeinschaftskarte

Abhängige Ereignisse: Flush-Draw

Deine Hand

cards

Gemeinschaftskarten

cards

Du bist am Turn und hast vier Karten zu einem Ass-hohen Flush. Ein Flush ist eine starke Pokerhand, bei der alle fünf Karten dieselbe Farbe haben. Wie groß ist die Wahrscheinlichkeit, dass die letzte Gemeinschaftskarte (der River) ein Karo ist?

# Sample Space
cards = 52
hole_cards = 2
turn_community_cards = 4
cards = cards - (hole_cards + turn_community_cards)

# Outcomes
diamonds = 13
diamonds_drawn = 4
# In poker, cards that complete a draw are known as "outs"
outs = diamonds - diamonds_drawn

#Determine river flush probability
river_flush_probability = event_probability(outs, cards)
print(river_flush_probability)
19.6

Die Chance, am River deinen Flush zu treffen, liegt bei rund 20%. Weiter geht’s:

Abhängige Ereignisse: Offener Straight-Draw

Deine Hand

cards

Gemeinschaftskarten

cards

Du bist am Turn und hast einen offenen Straight-Draw. Ein Straight ist ebenfalls stark: fünf Karten in Reihenfolge. Der Draw ist „offen“, weil jede Acht (8, 9, 10, Bube, Dame) oder jeder König (9, 10, Bube, Dame, König) die Straße komplettiert.

Wie groß ist die Wahrscheinlichkeit, dass der River die Straße vollendet?

# Sample Space
cards = 52
hole_cards = 2
turn_community_cards = 4
cards = cards - (hole_cards + turn_community_cards)

# Outcomes
eights = 4
kings = 4
outs = eights + kings

# Determine river straight probability
river_straight_probability = event_probability(outs, cards)
print(river_straight_probability)
17.4

Die Chance auf den Straight am River liegt bei etwa 17%.

Mehrere Ereignisse

Bisher hast du Einzelereignisse betrachtet. Was ist bei mehreren aufeinanderfolgenden Ereignissen?

Beispiel: „Wie wahrscheinlich ist es, drei Haferkekse und danach einen Schokokeks zu essen, wenn du vier Kekse aus einer Dose mit beiden Sorten nimmst?“ Vier gegessene Kekse sind vier Ereignisse.

Für mehrere Ereignisse bestimmst du die Anzahl der Ereignisse (hier 4), ermittelst die Einzelwahrscheinlichkeiten und multiplizierst sie. Im Beispiel: 0,5 × 0,5 × 0,5 × 0,5 = 0,0625.

$$P(Event A \cap Event B)=P(Event A) \times P(Event A)$$

Merke: Wenn alle betrachteten Ereignisse eintreten müssen (UND-Verknüpfung), multiplizierst du die Wahrscheinlichkeiten.

Für das Kartendeck: „Wie wahrscheinlich sind drei Herzen beim Ziehen ohne Zurücklegen?“ Dann rechnest du 13/52 × 12/51 × 11/50.

Unvereinbare (mutually exclusive) Ereignisse

Manche Ereignisse schließen sich aus: Sie können nicht gleichzeitig eintreten. Willst du die Wahrscheinlichkeit (die Vereinigung) irgendeines von mehreren unvereinbaren Ereignissen berechnen, addierst du ihre Einzelwahrscheinlichkeiten:

$$P(Event A \cup Event B) = P(Event A) + P(Event B)$$

Wichtig ist hier das „ODER“: Eine Herzkarte ODER eine Kreuzkarte. Um die Wahrscheinlichkeit dafür zu bestimmen, addierst du beide Einzelwahrscheinlichkeiten.

$$P(Heart \cup Club) = (\frac{13}{52}) + (\frac{13}{52})$$

Bestimme nun die Wahrscheinlichkeit für diese unvereinbaren Ereignisse:

  1. Eine Herzkarte oder eine Kreuzkarte ziehen;
  2. Ein Ass, ein König oder eine Dame ziehen.
# Sample Space
cards = 52

# Calculate the probability of drawing a heart or a club
hearts = 13
clubs = 13
heart_or_club = event_probability(hearts, cards) + event_probability(clubs, cards)

# Calculate the probability of drawing an ace, king, or a queen
aces = 4
kings = 4
queens = 4
ace_king_or_queen = event_probability(aces, cards) + event_probability(kings, cards) + event_probability(queens, cards)

print(heart_or_club)
print(ace_king_or_queen)
50.0
23.1

Nicht unvereinbare Ereignisse

Nicht alle Ereignisse schließen sich aus: „Herz ziehen“ und „Ass ziehen“ können gleichzeitig eintreten (Ass Herz). Dann musst du die Überschneidung korrigieren.

$$P(Event A \cup Event B) = P(Event A) + P(Event B) - P(EventA \cup EventB)$$

Für „Herz oder Ass“ addierst du die Einzelwahrscheinlichkeiten und ziehst die Schnittmenge (Ass Herz) ab.

$$P(Heart \cup Ace) = (\frac{13}{52}) + (\frac{4}{52}) - (\frac{1}{52})$$

Berechne nun die Wahrscheinlichkeit für diese nicht unvereinbaren Ereignisse:

  1. Ein Herz oder ein Ass ziehen;
  2. Eine rote Karte oder eine Bildkarte ziehen.
# Sample Space
cards = 52

# Calculate the probability of drawing a heart or an ace
hearts = 13
aces = 4
ace_of_hearts = 1
heart_or_ace = event_probability(hearts, cards) + event_probability(aces, cards) - event_probability(ace_of_hearts, cards)

# Calculate the probability of drawing a red card or a face card
red_cards = 26
face_cards = 12
red_face_cards = 6
red_or_face_cards = event_probability(red_cards, cards) + event_probability(face_cards, cards) - event_probability(red_face_cards, cards)

print(round(heart_or_ace, 1))
print(round(red_or_face_cards, 1))
30.8
61.6

Schnittmenge unabhängiger Ereignisse

Die Wahrscheinlichkeit der Schnittmenge zweier unabhängiger Ereignisse ist das Produkt ihrer Einzelwahrscheinlichkeiten.

$$P(Event A \cap Event B) = P(Event A) \times P(Event B)$$

Willst du die Wahrscheinlichkeit wissen, ein Ass zu ziehen, zurückzulegen, neu zu mischen und erneut ein Ass zu ziehen, multiplizierst du beide Einzelwahrscheinlichkeiten.

$$P(Ace \cap Ace) = (\frac{4}{52}) \times (\frac{4}{52})$$

# Sample Space
cards = 52

# Outcomes
aces = 4

# Probability of one ace
ace_probability = aces / cards

# Probability of two consecutive independant aces 
two_aces_probability = ace_probability * ace_probability

# Two Ace Probability Percent Code
two_ace_probability_percent = two_aces_probability * 100
print(round(two_ace_probability_percent, 1))
0.6

Die Wahrscheinlichkeit für zwei unabhängige Asse in Folge beträgt 0,592%. Was, wenn das zweite Ereignis abhängig ist?

Schnittmenge abhängiger Ereignisse

Für die Schnittmenge zweier nicht unabhängiger Ereignisse (Ereignis A & Ereignis B gegeben A) multiplizierst du die Wahrscheinlichkeit von A mit der bedingten Wahrscheinlichkeit von B gegeben A.

$$P(Event A \cap Event B | A) = P(Event A) \times P(Event B | A)$$

Die beste Starthand in Texas Hold’em ist Pocket Aces. Wie groß ist die Wahrscheinlichkeit, zwei Asse ausgeteilt zu bekommen?

$$P(Ace \cap Ace | Ace) = (\frac{4}{52}) \times (\frac{3}{51})$$

# Sample Space first draw
cards = 52

# Outcomes first draw
aces = 4

# Probability of ace on first draw
first_ace_probability = aces / cards

# Sample Space second draw
cards = cards - 1

# Outcomes second draw
aces = aces - 1

# Probability of ace on second draw after ace on first
second_ace_probability = aces / cards

# Probability of two consecutive aces (dependent)
both_aces_probability = first_ace_probability * second_ace_probability * 100
print(both_aces_probability)
0.4524886877828055

Die Wahrscheinlichkeit für zwei abhängige Asse in Folge beträgt 0,452%. Schauen wir uns dazu zwei Tischsituationen an.

Schnittmenge abhängiger Ereignisse: Flush-Draw am Flop

Deine Hand

cards

Gemeinschaftskarten

cards

Ähnlich wie oben, nur bist du diesmal am Flop und es kommen noch zwei Gemeinschaftskarten. Wie bestimmst du die Wahrscheinlichkeit, bis zum River den Flush zu machen? Zuerst alle Szenarien auflisten:

  • A) Turn Karo, River kein Karo (Flush getroffen)
  • B) Turn kein Karo, River Karo (Flush getroffen)
  • C) Turn Karo, River Karo (Flush getroffen)
  • D) Turn kein Karo, River kein Karo (kein Flush)

Das sind die einzigen vier Möglichkeiten und sie schließen sich gegenseitig aus. Die Summe ihrer Wahrscheinlichkeiten ist 1 – eines wird sicher eintreten. Du willst A, B oder C. Am einfachsten berechnest du D und ziehst es von 1 ab.

# Sample Space on turn
cards = 52
hole_cards = 2
flop_community_cards = 3
cards = cards - (hole_cards + flop_community_cards)

# Outcomes
diamonds = 13
diamonds_drawn = 4
non_diamonds_drawn = 1
outs = diamonds - diamonds_drawn
turn_non_diamonds = cards - outs - non_diamonds_drawn 

# Probability of not getting a diamond on the turn
no_diamond_turn_probability = turn_non_diamonds / cards

# Sample Space on river
turn_community_card = 1
cards = cards - turn_community_card

# Outcomes on river
river_non_diamonds = turn_non_diamonds - turn_community_card

# Probability of not getting a diamond on the river
no_diamond_river_probability = river_non_diamonds / cards

# Probability of not getting a flush
no_flush_probability = no_diamond_turn_probability * no_diamond_river_probability

# Probability of getting a flush
flush_probability = 1 - no_flush_probability
flush_probability_percent = flush_probability * 100

# Print probability percent rounded to one decimal place
print(round(flush_probability_percent, 1))
38.4

Jetzt leicht abgewandelt:

Deine Hand

cards

Gemeinschaftskarten

cards

Wie zuvor, nur ohne Ass. Fällt sowohl am Turn als auch am River ein Karo, hat jemand anderes leicht einen besseren Flush. Bestimme die Wahrscheinlichkeit, dass am Turn oder am River – aber nicht an beiden – ein Karo fällt. Die Wahrscheinlichkeit für „kein Flush“ hast du bereits.

Finde nun die Wahrscheinlichkeit für „Turn und River Karo“, addiere sie zu „kein Flush“ und ziehe die Summe von 1 ab.

# Sample Space on turn
cards = 52
hole_cards = 2
flop_community_cards = 3
cards = cards - (hole_cards + flop_community_cards)

# Outcomes on turn
diamonds = 13
diamonds_drawn = 4
outs = diamonds - diamonds_drawn

# Probability of diamond on turn
diamond_turn_probability = outs / cards

# Sample Space on river
turn_diamonds = 1
cards = cards - turn_diamonds

# Outcomes on river
river_diamonds = outs - turn_diamonds

# Probability of diamond on river
diamond_river_probability = river_diamonds / cards

# Probability of getting a diamond on the turn and river
two_diamonds_probability = diamond_turn_probability * diamond_river_probability

# Determine the probability of getting only one diamond by the river
one_diamond_probability = 1 - (no_flush_probability + two_diamonds_probability)
one_diamond_probability_percent = one_diamond_probability * 100

# Print probability percent rounded to one decimal place
print(round(one_diamond_probability_percent, 1))
35.1

Erwartungswert

Bei Spielen wie Poker interessiert dich: „Wie viel gewinne oder verliere ich im Schnitt, wenn ich die Situation oft wiederhole?“ Für Profis ist das essenziell.

Wenn sich mögliche Ausgänge und ihre Wahrscheinlichkeiten durch eine Zufallsvariable beschreiben lassen, beantwortest du die Frage über den Erwartungswert: den gewichteten Durchschnitt der Ausgänge, gewichtet mit ihren Wahrscheinlichkeiten.

Oder kurz: Du multiplizierst den Gesamtwert mit der Gewinnwahrscheinlichkeit:

$$Expected Value = Total Value \times Probability$$

Wie hoch ist der Erwartungswert, wenn \$100 (Total Value) im Pot sind und deine Gewinnwahrscheinlichkeit 0,75 beträgt?

$$Expected Value = \$100 \times 0.75$$

# Initialize `pot` and `probability` variables
pot = 100
probability = 0.75

# Determine expected value
expected_value = pot * probability
print(expected_value)
75.0

Dein Erwartungswert beträgt \$75. Der Erwartungswert ist am Pokertisch enorm wichtig. Kehren wir zum ersten Flush-Beispiel zurück und nutzen ihn zu unserem Vorteil.

Deine Hand

cards

Gegnerische Hand

cards

Gemeinschaftskarten

cards

  • Gesamtpot = \$60

  • Einsatz des Gegners = \$20

Dein Gegner ist „hilfsbereit“ und zeigt dir seine Karten: ein Drilling Zweien. Um die Hand am River zu gewinnen, brauchst du ein beliebiges Karo außer Bube oder Zwei. Der Bube oder die Zwei in Karo würden dem Gegner ein Full House bzw. Vierling geben. Du musst \$20 callen, um in der Hand zu bleiben, und gewinnst \$60, falls du triffst. Liegt dein Erwartungswert über \$20, solltest du callen, sonst folden.

Finde heraus, ob du callen solltest:

# Sample Space
cards = 52
hole_cards = 2
# Your opponent provided you information... use it!
opponents_hole_cards = 2 

turn_community_cards = 4
cards = cards - (hole_cards + opponents_hole_cards + turn_community_cards)

# Outcomes
diamonds = 13
diamonds_drawn = 4

# You can't count the two diamonds that won't help you win
diamond_non_outs = 2 

outs = diamonds - diamonds_drawn - diamond_non_outs

# Determine win probability
win_probability = outs / cards

# Determine expected value
pot = 60
ev = pot * win_probability

# Print ev and appropriate decision
call_amount = 20
if ev >= 20:
    print(round(ev, 2), 'Call')
else:
    print(round(ev, 2), 'Fold')
9.55 Fold

Dein Erwartungswert liegt nur bei \$9,55 – weniger als die \$20 Einsatz. Also foldest du. Erwartungswert-Rechnungen sind am Tisch entscheidend; in Teil 2 steigen wir tiefer ein.

Fazit

Glückwunsch, du hast Teil 1 dieses Tutorials zur Wahrscheinlichkeitstheorie mit Python abgeschlossen! Du hast zentrale Konzepte kennengelernt – unabhängige/abhängige Ereignisse, Permutationen/Kombinationen, Mehrfache Ereignisse, Erwartungswerte – und wie man sie berechnet.

In Teil 2 wenden wir diese Konzepte auf echte Pokerhände aus meiner Laufbahn an.

*Vor Flop, Turn und River wird jeweils eine Karte verdeckt „verbrannt“. Da niemand sie kennt, zählt sie nicht als Versuch.

Sieh dir auch das DataCamp-Tutorial Probability Distributions in Python an.

Themen
Python
Datenwissenschaft

Erfahre mehr über Python

Kurs

Fortgeschrittene Regression mit statsmodels in Python

4 Std.
16.1K
Lerne, lineare und logistische Regression mit mehreren erklärenden Variablen durchzuführen.
Details anzeigenRight Arrow
Kurs Starten
Mehr anzeigenRight Arrow
Verwandt

Tutorial

Fibonacci-Folge in Python: Lerne und entdecke Programmiertechniken

Finde raus, wie die Fibonacci-Folge funktioniert. Schau dir die mathematischen Eigenschaften und die Anwendungen in der echten Welt an.
Laiba Siddiqui's photo

Laiba Siddiqui

6 Min.

Tutorial

Python-Tutorial zum Verknüpfen von Zeichenfolgen

Lerne verschiedene Methoden zum Verknüpfen von Zeichenfolgen in Python kennen, mit Beispielen, die jede Technik zeigen.
DataCamp Team's photo

DataCamp Team

5 Min.

Tutorial

Python Datenstrukturen Tutorial

Mach dich mit Python-Datenstrukturen vertraut: Lerne mehr über Datentypen und primitive sowie nicht-primitive Datenstrukturen wie Strings, Listen, Stapel usw.
Sejal Jaiswal's photo

Sejal Jaiswal

24 Min.

Tutorial

Python Switch Case Statement: Ein Leitfaden für Anfänger

Erforsche Pythons match-case: eine Anleitung zu seiner Syntax, Anwendungen in Data Science und ML sowie eine vergleichende Analyse mit dem traditionellen switch-case.
Matt Crabtree's photo

Matt Crabtree

5 Min.

Tutorial

Python range()-Funktion Tutorial

Lerne anhand von Beispielen die Python-Funktion range() und ihre Möglichkeiten kennen.
Aditya Sharma's photo

Aditya Sharma

7 Min.

Tutorial

Python-Listenfunktionen und -Methoden – Tutorial und Beispiele

Lerne die Funktionen und Methoden von Python-Listen kennen. Schau dir jetzt die Code-Beispiele für list() und andere Python-Funktionen und -Methoden an!
Abid Ali Awan's photo

Abid Ali Awan

7 Min.

Mehr AnzeigenMehr Anzeigen