Ga naar hoofdinhoud

Pokerkans en -statistiek met Python

Pak kans en statistiek in Python aan: leer meer over combinaties en permutaties, afhankelijke en onafhankelijke gebeurtenissen, en verwachte waarde.
Bijgewerkt 2 okt 2026  · 15 min lezen

Verken met AI

ChatGPTClaudePerplexity

Data scientists bouwen machine learning-modellen om voorspellingen te doen en beslissingen te optimaliseren. In online poker zijn de opties inzetten, callen of folden. Je mag echter geen software gebruiken om die beslissingen te nemen. Daar trekken de meeste online pokersites de grens in de regels. Omdat je geen machine learning-model kunt trainen, moet je je brein trainen. Dat betekent: eindeloos veel equity-berekeningen naast de pokertafel, waarbij je allerlei kans- en statistiekconcepten gebruikt.

In deze tutorial leer je enkele van die concepten aan de hand van een kaartspel en algemene pokersituaties.

Poker Card Banner

Als je statistiek met Python wilt aanpakken, bekijk dan de DataCamp-cursus Statistical Thinking in Python.

Persoonlijke motivatie

Jarenlang verdiende ik mijn geld als professioneel online pokerspeler. Data science was voor mij een logische volgende stap, omdat het een vergelijkbare skillset vereist als winst maken met online poker. Ik schreef een blog over wat data science gemeen heeft met poker, en ik noemde daarin dat elke keer dat er een pokerhand wordt gespeeld op een online pokersite, er een handgeschiedenis wordt gegenereerd. Deze handgeschiedenissen leggen uit wat elke speler tijdens die hand heeft gedaan. Ik gebruikte software genaamd Hold’em Manager (denk aan Tableau voor poker) om van deze data te profiteren. Hold’em Manager downloadt al deze handgeschiedenissen in real-time naar een PostgreSQL-database, zodat je de neigingen van je tegenstanders kunt bijhouden.

Kansrekening: een introductie

Voordat je aan de slag gaat, is het tijd om te bekijken wat kansrekening is en waarom het belangrijk is om erover te leren als je met data science begint. Daarnaast leer je enkele kernbegrippen die handig zijn in deze tutorial en leer je hoe je de kans van enkele gebeurtenissen berekent.

In het dagelijks leven vraag je je vaak af wat de kans is dat een bepaalde gebeurtenis plaatsvindt, zoals het winnen van de loterij, de overwinning van je voetbalteam of een korting op je favoriete paar schoenen. “Hoe groot is de kans dat…” is een uitdrukking die je waarschijnlijk vaak gebruikt. Het bepalen van de kans dat een gebeurtenis plaatsvindt, heet “probability” of waarschijnlijkheid.

Dit type waarschijnlijkheid verschilt van de wiskundige benadering die je vindt in de kansrekening, een tak van de wiskunde. En in de wiskunde heb je grofweg twee categorieën interpretaties van “kans”: de “fysieke” en “evidentiële” kansen.

De eerste worden ook wel objectieve of frequentiekansen genoemd en zijn verbonden aan willekeurige fysieke systemen zoals muntwerpen, roulettetafels of dobbelstenen. In zulke systemen treedt een bepaald type gebeurtenis op met een stabiel tempo, of “relatieve frequentie”, over een lange reeks proeven.

De tweede wordt ook wel Bayesiaanse kans genoemd, die aan elke bewering kan worden toegekend, zelfs wanneer er geen willekeurig proces betrokken is, als een manier om de subjectieve aannemelijkheid ervan weer te geven, of de mate waarin de bewering wordt ondersteund door het beschikbare bewijs. In de meeste opvattingen worden evidentiële kansen beschouwd als gradaties van geloof, gedefinieerd in termen van de bereidheid om te gokken tegen bepaalde odds.

Let op dat kansrekening zich vooral bezighoudt met het voorspellen van de waarschijnlijkheid van toekomstige gebeurtenissen, terwijl statistiek de frequentie van gebeurtenissen uit het verleden analyseert. Dit verklaart ook waarom kansrekening een van de kerntopics is als je data scientist wilt worden: zoals je weet, gebruik je in data science en machine learning data van gebeurtenissen die al hebben plaatsgevonden om toekomstige gebeurtenissen te voorspellen.

Hoewel kansrekening doorgaans lastig intuïtief te begrijpen is, zijn de concepten cruciaal voor data science en voorspellende analyses.

Belangrijke concepten en symbolen

Enkele kernbegrippen die je voor deze tutorial moet kennen, komen vooral uit het frequentistische perspectief op kans, omdat deze tutorial werkt met een set van 52 speelkaarten.

Vanuit dat perspectief is het fundamentele ingrediënt van de kansrekening een experiment dat ten minste hypothetisch herhaalbaar is onder in essentie identieke omstandigheden. Dit experiment kan bij verschillende proeven of enkele uitvoeringen tot verschillende uitkomsten leiden. De verzameling van alle mogelijke uitkomsten of resultaten van een experiment heet de “steekproefruimte”. Een gebeurtenis is een welomschreven deelverzameling van die steekproefruimte.

Dit is allemaal erg theoretisch.

Laten we enkele voorbeelden bekijken:

  • Een wat clichématig voorbeeld is het opgooien van een munt. In dit geval is het experiment het gooien van de munt. Je kunt de munt meerdere keren werpen en al die proeven kunnen verschillende uitkomsten hebben. Omdat er twee mogelijke uitkomsten zijn – kop of munt – is de steekproefruimte 2. De gebeurtenis “munt gooien” kan bijvoorbeeld bestaan uit één uitkomst “Kop”. Evenzo kan, wanneer je twee keer gooit, je gebeurtenis “de eerste worp is kop” de uitkomst “Kop-Kop” of “Kop-Munt” hebben.
  • Een minder voor de hand liggend voorbeeld is een experiment waarbij je een wereldbol laat draaien en hem stopt door je vinger erop te leggen. Je kunt de globe meerdere keren draaien en elke keer kan een andere uitkomst hebben – je vinger komt op land of op water. Dat betekent dat de steekproefruimte 2 is. Een gebeurtenis “mijn vinger staat op land” kan de uitkomst “Land – Water” of “Land – Land” hebben.
  • Een laatste voorbeeld is het werpen van een dobbelsteen. Je kunt de dobbelsteen meerdere keren gooien en elke worp kan een andere uitkomst hebben: 6 om precies te zijn, want je dobbelsteen heeft 6 ogen (1,2,3,4,5,6). Een gebeurtenis “De som van de resultaten van twee worpen is gelijk aan 10” kan bestaan uit 10, terwijl de gebeurtenis “het getal is even” kan bestaan uit 2, 4 of 6.

Nu je een idee hebt van de kernbegrippen die je in deze tutorial gebruikt, is het tijd om ook enkele kanssymbolen te bekijken die je zult tegenkomen:

Symbool Betekenis
$$\cap$$ En
$$\cup$$ Of
| Gegeven

Kans berekenen voor enkele gebeurtenissen

Nu je helemaal bij bent, kun je beginnen met het bepalen van de kans op één enkele gebeurtenis, zoals een munt die op munt landt. Om deze kans te berekenen, deel je het aantal mogelijke gunstige uitkomsten door de steekproefruimte.

Je moet dus eerst nagaan hoeveel manieren er zijn waarop de munt op munt kan landen, en het aantal mogelijke uitkomsten. Het eerste is 1, want er is maar één manier om munt te krijgen. Het tweede is 2, omdat je bij het opgooien van de munt of kop of munt krijgt.

Samengevat ziet de berekening van de kans op een gebeurtenis A er zo uit:

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

In het geval van muntwerpen is de kans dat de munt op munt landt 1/2 of 0,5.

Let op dat de kans altijd tussen 0 en 1 ligt, waarbij 0 aangeeft dat het niet erg waarschijnlijk is dat de gebeurtenis plaatsvindt, en 1 aangeeft dat het waarschijnlijk is dat de gebeurtenis plaatsvindt.

Laten we nu een tweede voorbeeld bekijken waarin je de kans op een gebeurtenis berekent.

Statistics Sample Space for Deck of Cards

Er zijn 52 kaarten in een standaard kaartspel en daarvan zijn er 4 Azen. Als je het voorbeeld van het muntwerpen van hierboven volgt om de kans te weten op het trekken van een Aas, deel je het aantal mogelijke gunstige uitkomsten (4) door de steekproefruimte (52):

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

Let op dat $A$ de gebeurtenis “een Aas trekken” voorstelt.

Bepaal nu met behulp van Python de kans op het trekken van een Aas:

# 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

De kans om een Aas uit een standaard deck te trekken is 0,08. Om de kans in procenten te krijgen, vermenigvuldig je simpelweg met 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%

De kans om een Aas te trekken in procenten is 8%.

Nu je twee voorbeelden hebt gezien waarin je kansen hebt berekend, is het makkelijk te veronderstellen dat je je kansberekeningen kunt uitbreiden om bijvoorbeeld de kans te bepalen op het trekken van een kaart die Harten is, een plaatje (zoals Boer, Vrouw of Heer), of een combinatie van beide, zoals de Vrouw van Harten.

In zulke gevallen wil je misschien een door de gebruiker gedefinieerde functie (UDF) event_probability() maken, waaraan je de event_outcomes en de sample_space doorgeeft om de kans op een gebeurtenis in procenten te vinden, omdat je veel van de code hergebruikt:

# 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%

Deze resultaten zullen je waarschijnlijk niet verbazen: zoals je verwachtte, is de kans om de Vrouw van Harten te trekken veel kleiner dan de kans op een willekeurig plaatje of een Harten.

Kans met combinaties en permutaties

Je hebt in de vorige sectie gezien dat het bepalen van de grootte van je steekproefruimte de sleutel is tot het berekenen van kansen. Dat kan echter soms een uitdaging zijn!

Gelukkig zijn er manieren om het telwerk makkelijker te maken. Twee van die manieren zijn permutaties en combinaties. In deze sectie zie je wat beide concepten precies betekenen en hoe je ze kunt gebruiken om de grootte van je steekproefruimte te berekenen!

Permutaties

Permutaties zijn het aantal manieren waarop een subset van een bepaalde grootte kan worden gerangschikt uit een gegeven set, doorgaans zonder terugleggen. Een voorbeeld hiervan is een pincode van 4 cijfers zonder herhaalde cijfers. De kans op geen herhaalde cijfers kun je berekenen door de volgende berekening uit te voeren:

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

Je hebt 10 cijfers om uit te kiezen, maar omdat je zonder terugleggen werkt, valt er telkens één optie weg zodra je een cijfer kiest voor de 4-cijferige pincode. Dit betekent dat je voor het eerste cijfer 10 keuzes hebt (0 tot 9), maar voor het tweede cijfer nog 9 opties, enzovoort.

Op een hoger niveau zie je dat de vorige alinea eigenlijk twee dingen beschouwt: (1) de aantallen om uit te kiezen, en (2) de aantallen die je daadwerkelijk kiest. In het voorbeeld hierboven is 10 het aantal cijfers waaruit je kunt kiezen, aangezien je alle cijfers tussen 0 en 9 bekijkt. Het daadwerkelijke aantal dingen dat je kiest is echter 4, omdat je pincode 4 cijfers telt.

Bij het berekenen van de permutaties betekent dit dat je de volledige set van te kiezen cijfers meeneemt, wat in feite $$10 \times 9 \times 8 \times 7 \times 6 \times 5 \times 4 \times 3 \times 2 \times 1$$ is, en je deelt de uitkomst door het verschil tussen het aantal keuzes (10) en het aantal dat je daadwerkelijk kiest (4). Omdat je met kansen werkt, betekent dit dat dit verschil $$6 \times 5 \times 4 \times 3 \times 2 \times 1$$ zal zijn.

Let op dat je het bovenstaande ook zo kunt schrijven:

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

Je ziet dat er “10!” en “6!” of “10 faculteit” en “6 faculteit” in de vergelijking staan, wat aangeeft dat alle opeenvolgende positieve gehele getallen van 1 tot en met 10 of 6 met elkaar moeten worden vermenigvuldigd.

De uitkomst van deze berekening is 5040 permutaties. Let op hoe dit precies dezelfde uitkomst is als de berekening die je eerder maakte, toen je 10, 9, 8 en 7 met elkaar vermenigvuldigde.

Algemenere formule om permutaties te berekenen:

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

Oefen dit met een voorbeeld!

Om het aantal permutaties van pocket Azen te vinden, waarbij je er 2 kiest, bekijk je de volledige set Azen om uit te kiezen (4) en het aantal Azen dat je daadwerkelijk kiest (2):

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

Combinaties

Je hebt gezien dat bij permutaties de volgorde ertoe doet. Bij combinaties is dat niet zo: de volgorde doet er niet toe. Combinaties verwijzen naar het aantal manieren waarop een subset van een bepaalde grootte kan worden getrokken uit een gegeven set.

Een voorbeeld: je hebt een kaartspel met 52 kaarten. Er worden drie kaarten uit het deck gehaald. Op hoeveel verschillende manieren kun je deze drie kaarten kiezen?

In feite zou dit $$52 \times 51 \times 50$$ moeten zijn, wat eigenlijk dezelfde vorm heeft als de permutatieformule die je net gebruikte! Maar bij combinaties neem je de volgorde niet mee. Wil je weten hoeveel combinaties je werkelijk hebt, dan maak je alle permutaties en deel je door alle redundantie, oftewel door $$3 \times 2 \times 1$$.

Dat betekent dat je berekening van de combinaties er zo uitziet:

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

Deze berekening kun je generaliseren tot de volgende formule:

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

Waarbij je duidelijk ziet dat de teller exact dezelfde formule is als de permutatieformule die je net zag, terwijl de noemer de faculteit is van het aantal kaarten dat je daadwerkelijk kiest.

Beschouw nog een voorbeeld met Azen. Er zijn vier Azen in een kaartspel, en dit zijn alle verschillende combinaties van pocket Azen:

  1. Aas Harten / Aas Ruiten
  2. Aas Harten / Aas Klaver
  3. Aas Harten / Aas Schoppen
  4. Aas Ruiten / Aas Klaver
  5. Aas Ruiten / Aas Schoppen
  6. Aas Klaver / Aas Schoppen

Er zijn zes combinaties van pocket Azen. Om het aantal combinaties te vinden, moet je eerst het aantal permutaties vinden:

# Permutations Code
import math
n = 4
k = 2

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

Om het aantal combinaties te bepalen, deel je eenvoudig het aantal permutaties door de faculteit van de grootte van de subset. Probeer het aantal starthandcombinaties te vinden dat kan worden gedeeld in Texas Hold’em.

$$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

Onafhankelijke versus afhankelijke gebeurtenissen

Je hebt in de inleiding gelezen dat een gebeurtenis een welomschreven deelverzameling van de steekproefruimte is. Gebeurtenissen kunnen in twee categorieën worden ingedeeld: afhankelijk of onafhankelijk.

Onafhankelijke gebeurtenissen zijn gebeurtenissen die de kans op de andere gebeurtenis(sen) niet beïnvloeden. Twee gebeurtenissen A en B zijn onafhankelijk als weten of gebeurtenis A plaatsvond geen informatie geeft over of gebeurtenis B plaatsvond.

Dit is het geval wanneer je bijvoorbeeld een Aas uit het deck trekt, de kaart teruglegt, het deck schudt en daarna nog een kaart trekt. De kans op het trekken van een Aas bij de eerste trek is dan hetzelfde als bij de tweede.

Afhankelijke gebeurtenissen zijn gebeurtenissen die wél invloed hebben op de kans op de andere gebeurtenis(sen).

Bijvoorbeeld: je trekt een kaart uit het deck en trekt daarna nog een kaart zonder de eerste kaart terug te leggen. In dit geval is de kans op het trekken van een Aas bij de eerste trek niet gelijk aan de kans op het trekken van een Aas bij de tweede trek. Na de eerste kaart is de steekproefruimte met 1 afgenomen, van 52 naar 51. Afhankelijk van wat de eerste kaart was, kan ook het aantal gunstige uitkomsten veranderd zijn. Als de kaart een Aas was, zijn er nu nog maar 3 Azen over voor de tweede trek.

Bekijk deze definities nu in formele termen. Gebeurtenissen A en B (met niet-nul kans) zijn onafhankelijk dan en slechts dan als een van de volgende gelijkwaardige uitspraken geldt: $$P (A ∩ B) = P(A)P(B)$$ $$P (A|B) = P(A)$$ $$P (B|A) = P(B)$$

Met andere woorden, gebeurtenissen A en B zijn onafhankelijk als:

  • De kans dat zowel A als B optreden gelijk is aan het product van de kansen dat elk van beide optreedt.
  • De kans dat A optreedt gegeven dat B is opgetreden gelijk is aan de kans dat A optreedt.
  • De kans dat B optreedt gegeven dat A is opgetreden gelijk is aan de kans dat B optreedt.

Beschouw het volgende voorbeeld, waarin je de kans op het trekken van een Aas bij de eerste trek al kent. Nu moet je de kans bepalen op het trekken van een Aas bij de tweede trek, als de eerst getrokken kaart een Heer of een Aas was:

# 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

Er zijn enkele situaties die vaak voorkomen in poker en relevant zijn voor het concept van afhankelijke gebeurtenissen.

Maar voordat je begint, is wat achtergrondinformatie op zijn plaats. Het spel is Texas Hold’em. Gespeeld met een standaard deck van 52 kaarten is Texas Hold’em de populairste pokervariant. Elke speler krijgt twee kaarten om de hand te beginnen en maakt de beste vijfkaartshand mogelijk door zijn twee kaarten te combineren met de vijf gemeenschappelijke kaarten die gedurende de hand worden gedeeld. Kaarten worden in vier rondes gedeeld:

  • Pre-Flop: Elke speler krijgt twee kaarten, de “hole cards”
  • Flop: Drie gemeenschappelijke kaarten worden gedeeld
  • Turn: Eén gemeenschappelijke kaart wordt gedeeld
  • River: De laatste gemeenschappelijke kaart wordt gedeeld

Afhankelijke gebeurtenissen: flush draw

Jouw hand

cards

Gemeenschappelijke kaarten

cards

Je bent op de Turn en je hebt vier kaarten naar een Aas-hoge Flush. Een Flush is een sterke pokerhand waarbij alle vijf kaarten dezelfde soort hebben. Wat is de kans dat de laatste gemeenschappelijke kaart, de River, een Ruit is?

# 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

Er is ongeveer 20% kans dat je je flush draw op de River hit. Hier is er nog een:

Afhankelijke gebeurtenissen: open-ended straight draw

Jouw hand

cards

Gemeenschappelijke kaarten

cards

Je bent op de Turn en je hebt een open-ended straight draw. Een Straight is een andere sterke hand waarbij vijf kaarten in opeenvolgende volgorde liggen. De straight draw is open-ended omdat elke Acht (8, 9, 10, Boer, Vrouw) of elke Heer (9, 10, Boer, Vrouw, Heer) de straight compleet maakt.

Wat is de kans dat de River de Straight compleet maakt?

# 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

Er is ongeveer 17% kans dat je je straight draw op de River hit.

Meerdere gebeurtenissen

Tot nu toe heb je bij het berekenen van kansen slechts één gebeurtenis bekeken, maar wat als je met meerdere gebeurtenissen te maken hebt?

Een voorbeeld van meerdere gebeurtenissen is de vraag “wat is de kans dat je drie havermoutkoekjes eet gevolgd door een chocoladekoekje wanneer je vier koekjes uit een pot met deze twee soorten pakt?” Vier koekjes eten zijn feitelijk vier gebeurtenissen.

Om de kans voor meerdere gebeurtenissen te berekenen, bepaal je in wezen het aantal gebeurtenissen (in dit geval 4), vervolgens bepaal je de kans op elk van die gebeurtenissen afzonderlijk en vermenigvuldig je al die kansen om je eindantwoord te krijgen. In het voorbeeld hierboven zou dat 0,5 x 0,5 x 0,5 x 0,5 of 0,0625 zijn.

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

Let op dat je in dit geval de kansen berekent op het eten van een havermoutkoekje EN nog een havermoutkoekje EN een derde havermoutkoekje EN een laatste chocoladekoekje. Wanneer je gebeurtenissen bekijkt die allemaal moeten gebeuren, vermenigvuldig je de kansen.

Voor je kaartspel zou je je kunnen afvragen: “Wat is de kans op drie Harten als je zonder terugleggen kiest?” Wanneer je zonder terugleggen kiest, betekent dit dat je een kaart kiest maar deze niet teruglegt, zodat je uiteindelijke selectie diezelfde kaart niet kan bevatten. In dit geval is je kansberekening als volgt: 13/52 x 12/51 x 11/50.

Mutueel uitsluitende gebeurtenissen

Wanneer je met meerdere gebeurtenissen werkt, kun je ook te maken hebben met gebeurtenissen die mutueel uitsluitende of disjunct zijn: ze kunnen niet allebei optreden. In zulke gevallen wil je misschien de kans (of de unie) berekenen dat een van meerdere mutueel uitsluitende gebeurtenissen optreedt. In zulke gevallen vermenigvuldig je geen kansen, maar tel je simpelweg de kans van elke gebeurtenis bij elkaar op:

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

Hier is het belangrijk om te begrijpen dat het “OF”-component cruciaal is: een Harten trekken OF een Klaver trekken zijn twee mutueel uitsluitende gebeurtenissen. Harten is Harten en Klaver is Klaver. Om de kans te bepalen op het trekken van een Harten of een Klaver, tel je de kans op een Harten bij de kans op een Klaver op.

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

Bepaal nu de kans op de volgende mutueel uitsluitende gebeurtenissen:

  1. Een Harten trekken of een Klaver trekken;
  2. Een Aas, een Heer of een Vrouw trekken.
# 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

Niet-mutueel uitsluitende gebeurtenissen

Je kunt je voorstellen dat niet alle gebeurtenissen mutueel uitsluitende zijn: een Harten trekken of een Aas trekken zijn twee niet-mutueel uitsluitende gebeurtenissen. De Aas van Harten is zowel een Aas als een Harten. Wanneer gebeurtenissen niet mutueel uitsluitende zijn, moet je corrigeren voor de overlap.

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

Om de kans te berekenen op het trekken van een Harten of een Aas, tel je de kans op een Harten bij de kans op een Aas op en trek je vervolgens de kans op het trekken van de Aas van Harten af.

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

Bereken de kans op de volgende niet-mutueel uitsluitende gebeurtenissen:

  1. Een Harten trekken of een Aas;
  2. Een rode kaart trekken of een plaatje trekken.
# 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

Doorsnede van onafhankelijke gebeurtenissen

De kans op de doorsnede van twee onafhankelijke gebeurtenissen wordt bepaald door de kansen op elk van die gebeurtenissen met elkaar te vermenigvuldigen.

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

Als je de kans wilt weten op het trekken van een Aas uit een kaartspel, deze terugleggen, opnieuw schudden en nog een Aas trekken, vermenigvuldig je de kans op het trekken van een Aas met de kans op het trekken van een Aas.

$$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

De kans om twee Azen achter elkaar, onafhankelijk, te trekken is 0,592%. Wat als de tweede gebeurtenis afhankelijk is?

Doorsnede van afhankelijke gebeurtenissen

De kans op de doorsnede van twee niet-onafhankelijke gebeurtenissen (Gebeurtenis A & Gebeurtenis B gegeven A) wordt bepaald door de kans dat Gebeurtenis A optreedt te vermenigvuldigen met de kans op Gebeurtenis B gegeven A.

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

De beste starthand die je in Texas Hold’em kunt hebben is pocket Azen. Wat is de kans dat je twee Azen gedeeld krijgt?

$$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

De kans om twee afhankelijke Azen achter elkaar te trekken is 0,452%. Laten we een paar situaties bekijken waarin dit aan de pokertafel speelt.

Doorsnede van afhankelijke gebeurtenissen: flop flush draw

Jouw hand

cards

Gemeenschappelijke kaarten

cards

Dit is een vergelijkbare situatie als de flush draw hierboven, behalve dat je nu op de flop bent en nog twee gemeenschappelijke kaarten te gaan hebt in plaats van één. Hoe kun je de kans bepalen om tegen de River een Flush te hebben? Eerst moet je alle verschillende scenario’s bepalen:

  • A) Turn Ruit, River geen Ruit (Flush gemaakt)
  • B) Turn geen Ruit, River Ruit (Flush gemaakt)
  • C) Turn Ruit, River Ruit (Flush gemaakt)
  • D) Turn geen Ruit, River geen Ruit (Geen Flush)

Dat zijn de enige vier mogelijkheden, en elk van die scenario’s is mutueel uitsluitende. Dat betekent dat als je de kansen van elk van die scenario’s bij elkaar optelt, het totaal 1 is. Met andere woorden, een van die vier scenario’s gaat zeker optreden. Je wilt de kans weten dat scenario A, B of C optreedt. De eenvoudigste aanpak is om de kans op scenario D te bepalen en die van 1 af te trekken.

# 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

Laten we de hand nu iets aanpassen:

Jouw hand

cards

Gemeenschappelijke kaarten

cards

Dit lijkt op de vorige situatie, met één groot verschil. Je hebt nog steeds een flush draw, maar dit keer heb je niet de Aas. Als er een Ruit op de Turn én de River valt, is de kans groot dat iemand een betere flush heeft. Bepaal de kans dat er op de Turn of op de River een Ruit valt, maar niet op allebei. Je hebt de kans om geen flush te hitten al.

Vind nu de kans dat er zowel op de Turn als op de River een ruit valt, tel die op bij de kans om geen flush te hitten, en trek dit van 1 af.

# 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

Verwachte waarde

Als je een spel als poker speelt, ben je sterk bezig met vragen als “hoeveel win – of verlies – ik gemiddeld als ik dit spel herhaaldelijk speel?”. Je kunt je voorstellen dat dit bij poker niet anders is, zeker als je een professionele pokerspeler bent!

Als de mogelijke uitkomsten van het spel en hun bijbehorende kansen kunnen worden beschreven door een toevalsvariabele, dan kun je de bovenstaande vraag beantwoorden door de verwachte waarde te berekenen, die gelijk is aan een gewogen gemiddelde van de uitkomsten, waarbij elke uitkomst wordt gewogen met zijn kans.

Met andere woorden, je vermenigvuldigt simpelweg de totale waarde met de kans op winst om je verwachte waarde te krijgen:

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

Wat is de verwachte waarde als er \$100 (Totale waarde) in de pot zit, en jouw kans om de pot te winnen 0,75 is?

$$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

Je verwachte waarde is \$75. Verwachte waarde is een belangrijk concept in poker. Laten we teruggaan naar het eerste flush-voorbeeld om te zien hoe je verwachte waarde in je voordeel gebruikt.

Jouw hand

cards

Tegenstanders hand

cards

Gemeenschappelijke kaarten

cards

  • Totale pot = \$60

  • Inzet tegenstander = \$20

Je tegenstander is behulpzaam en laat zijn kaarten zien: hij heeft een set tweeën. Om de hand op de River te winnen, moet je elke Ruit hitten behalve een Boer of een 2. De Boer of 2 van Ruiten geeft je tegenstander een betere hand, respectievelijk een full house en four of a kind. Je moet \$20 callen om in de hand te blijven, en als je wint pak je \$60. Als je verwachte waarde groter is dan \$20 moet je callen, zo niet dan moet je folden.

Bepaal of je moet callen:

# 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

Je verwachte waarde is slechts \$9,55, wat minder is dan de \$20 die je zou moeten riskeren voor die beloning, dus je moet folden. Het bepalen van de verwachte waarde is cruciaal om te begrijpen aan de pokertafel en Deel 2 gaat veel dieper in op dit concept.

Conclusie

Gefeliciteerd, je bent aan het einde gekomen van deze tutorial over kansrekening met Python! Dit is het einde van Deel 1 van de tutorial. Je leerde verschillende kernconcepten van kansrekening, waaronder onafhankelijke/afhankelijke gebeurtenissen, permutaties/combinaties, meerdere gebeurtenissen, verwachte waarden en hoe je elk daarvan berekent.

In Deel 2 pas je deze concepten toe op echte pokerhanden die ik tijdens mijn carrière heb gespeeld.

*Voor de Flop, Turn en River wordt telkens één kaart gesloten gedeeld, de zogenaamde Burn card. Omdat de kaart gesloten wordt gedeeld en geen speler weet welke het is, telt die niet als proef.

Bekijk de DataCamp-tutorial Probability Distributions in Python.

Onderwerpen
Python
Data Science

Leer meer over Python

Cursus

Gemiddelde regressie met statsmodels in Python

4 uur
16.4K
Leer lineaire en logistische regressie uitvoeren met meerdere verklarende variabelen.
Bekijk detailsRight Arrow
Start Cursus
Meer bekijkenRight Arrow
Gerelateerd

blog

AI vanaf nul leren in 2026: een complete gids van de experts

Ontdek alles wat je moet weten om in 2026 AI te leren, van tips om te beginnen tot handige resources en inzichten van industrie-experts.
Adel Nehme's photo

Adel Nehme

15 min

Meer BekijkenMeer Bekijken