Corso
I data scientist creano modelli di machine learning per fare previsioni e ottimizzare le decisioni. Nel poker online, le opzioni sono puntare, chiamare o foldare. Non ti è però consentito usare software per prendere queste decisioni. È qui che la maggior parte dei siti di poker online traccia il confine nel regolamento. Dato che non puoi addestrare un modello di machine learning, devi addestrare il cervello. Questo richiede un flusso infinito di calcoli di equity lontano dal tavolo, che fanno uso di molti concetti diversi di probabilità e statistica.
In questo tutorial imparerai alcuni di questi concetti usando un mazzo di carte e situazioni generiche di poker.

Se ti interessa affrontare la statistica con Python, dai un'occhiata al corso di DataCamp Statistical Thinking in Python.
Motivazione personale
Per diversi anni ho vissuto giocando a poker online a livello professionale. La data science è stata una naturale evoluzione per me, perché richiede competenze simili a quelle per ottenere profitto dal poker online. Ho scritto un blog su cosa hanno in comune data science e poker, e ho menzionato che ogni volta che viene giocata una mano su un sito di poker online, viene generata una cronologia della mano. Queste cronologie spiegano tutto ciò che ogni giocatore ha fatto durante quella mano. Ho usato un software chiamato Hold’em Manager (pensa a Tableau per il poker) per sfruttare questi dati. Hold'em Manager scarica ognuna di queste cronologie in tempo reale in un database PostgreSQL così puoi tenere traccia delle tendenze dei tuoi avversari.
Teoria della probabilità: un'introduzione
Prima di sporcarti le mani, è il momento di considerare cos'è la teoria della probabilità e perché è importante conoscerla quando inizi con la data science. Inoltre, imparerai alcuni concetti chiave utili da tenere a mente durante il tutorial e imparerai a calcolare la probabilità di eventi singoli.
Nella vita reale ti chiederai spesso quali siano le probabilità che si verifichi un certo evento, come vincere la lotteria, la vittoria della tua squadra di calcio o uno sconto sul tuo paio di scarpe preferito. "Quali sono le probabilità che..." è un'espressione che probabilmente usi spesso. Determinare le probabilità che un evento si verifichi si chiama "probabilità".
Questo tipo di probabilità è diverso dall'approccio matematico alla probabilità, che trovi nella teoria della probabilità, un ramo della matematica. E in matematica hai due ampie categorie di interpretazioni di cosa sia la "probabilità": le probabilità "fisiche" e quelle "evidenziali".
Le prime sono dette anche oggettive o di frequenza e sono associate a sistemi fisici casuali come il lancio di monete, le roulette o il lancio di dadi. In tali sistemi, un dato tipo di evento tende a verificarsi a una frequenza persistente, o "frequenza relativa", in una lunga serie di prove.
Le seconde sono dette anche probabilità bayesiana, che può essere assegnata a qualsiasi affermazione, anche quando non è coinvolto alcun processo casuale, come modo per rappresentarne la plausibilità soggettiva, o il grado con cui l'affermazione è supportata dalle evidenze disponibili. Secondo molte interpretazioni, le probabilità evidenziali sono considerate gradi di credenza, definiti in termini di disposizione a scommettere a determinate quote.
Nota che la teoria della probabilità si occupa principalmente di prevedere la probabilità di eventi futuri, mentre la statistica analizza la frequenza di eventi passati. Questo spiega anche perché la teoria della probabilità è uno dei temi cardine da coprire se vuoi diventare data scientist: come ben sai, in data science e machine learning userai dati di eventi già avvenuti per prevedere eventi futuri.
Quindi, anche se in genere la teoria della probabilità è considerata difficile da comprendere in modo intuitivo, i concetti sono fondamentali per la data science e la predictive analytics.
Concetti e simboli chiave
Alcuni concetti chiave che dovresti conoscere per questo tutorial riguardano soprattutto la prospettiva frequentista della probabilità, dato che qui lavoriamo con un mazzo di 52 carte da gioco.
Da questa prospettiva, l'ingrediente fondamentale della teoria della probabilità è un esperimento che può essere ripetuto, almeno ipoteticamente, in condizioni essenzialmente identiche. Questo esperimento può portare a esiti diversi in diverse prove o singole esecuzioni dell'esperimento. L'insieme di tutti i possibili esiti o risultati di un esperimento è detto "spazio campionario". Un evento è un sottoinsieme ben definito dello spazio campionario.
Tutto questo è molto teorico.
Consideriamo qualche esempio:
- Un esempio un po' cliché è il lancio di una moneta. In questo caso, l'esperimento è proprio il lancio della moneta. Puoi lanciare la moneta più volte e tutte queste prove potrebbero avere esiti diversi. Poiché ci sono due possibili esiti - testa o croce - lo spazio campionario è 2. Tuttavia, l'evento "lanciare una moneta" può, per esempio, consistere in un solo esito "Testa". Allo stesso modo, quando lanci una moneta due volte, il tuo evento "il primo lancio risulta Testa" potrebbe avere un esito "Testa-Testa" o "Testa-Croce".
- Un altro esempio, forse meno immediato, è un esperimento in cui fai girare un mappamondo e lo fermi appoggiandoci il dito. Puoi farlo girare più volte e ogni volta potresti ottenere risultati diversi: il dito può finire sulla terraferma o sull'acqua. Significa che lo spazio campionario è 2. Un evento "il mio dito è sulla terraferma" può avere un esito "Terra - Acqua" o "Terra - Terra".
- Un ultimo esempio è l'esperimento in cui lanci un dado. Puoi lanciare il dado più volte e tutti questi lanci possono avere esiti diversi: 6 per la precisione, poiché il dado ha 6 numeri (1,2,3,4,5,6). Un evento "La somma dei risultati dei due lanci è uguale a 10" può essere composto da 10, mentre l'evento "il numero è pari" può essere composto da 2, 4 o 6.
Ora che hai un'idea dei concetti chiave che userai per tutto il tutorial, è il momento di considerare anche alcuni simboli di probabilità che incontrerai:
| Simbolo | Significato |
|---|---|
| $$\cap$$ | E |
| $$\cup$$ | Oppure |
| | | Dato |
Calcolare la probabilità per eventi singoli
Ora che sei completamente aggiornato, puoi iniziare a determinare la probabilità che si verifichi un singolo evento, ad esempio che una moneta cada su croce. Per calcolare questa probabilità, dividi il numero di esiti favorevoli all'evento per lo spazio campionario.
Ciò significa che devi considerare prima quante modalità possibili ci sono perché la moneta cada su croce e il numero di esiti possibili. Il primo è 1, perché hai un solo modo per ottenere croce. Il secondo è 2, perché lanciando la moneta otterrai o testa o croce.
In sintesi, il calcolo della probabilità di un evento A sarà qualcosa del genere:
$$P(A) = \frac{Event \ outcomes \ favorable \ to \ A}{Sample \ space}$$
Nel caso del lancio della moneta, la probabilità che esca croce è 1/2 o 0,5.
Nota come la probabilità sia sempre compresa tra 0 e 1, dove 0 indica che è poco probabile che l'evento accada, mentre 1 indica che è probabile che l'evento accada.
Consideriamo ora un secondo esempio in cui calcolerai la probabilità di un evento.

In un mazzo standard ci sono 52 carte e di queste 52 carte, 4 sono Assi. Se segui l'esempio del lancio della moneta di cui sopra per conoscere la probabilità di pescare un Asso, dividerai il numero di esiti favorevoli all'evento (4) per lo spazio campionario (52):
$$P(A) = \frac{4}{52}$$
Nota come $A$ rappresenti l'evento "pescare un Asso".
Ora determina la probabilità di pescare un Asso con l'aiuto di Python:
# 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
La probabilità di pescare un Asso da un mazzo standard è 0,08. Per esprimere la probabilità in percentuale, moltiplica semplicemente per 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%
La probabilità di pescare un Asso in percentuale è dell'8%.
Ora che hai visto due esempi in cui hai calcolato probabilità, è facile supporre che potresti estendere i tuoi calcoli per determinare, ad esempio, la probabilità di pescare una carta di Cuori, una figura (come Jack, Donna o Re), o una combinazione di entrambi, come la Donna di Cuori.
In questi casi, potresti voler creare una funzione definita dall'utente (UDF) event_probability() a cui passare event_outcomes e sample_space per trovare la probabilità di un evento in forma percentuale, dato che riutilizzerai molto del codice:
# 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%
Questi risultati probabilmente non ti sorprendono: come previsto, le probabilità di pescare la Donna di Cuori sono molto più piccole rispetto a quelle di pescare una normale figura o un Cuore.
Probabilità con combinazioni e permutazioni
Hai visto nella sezione precedente che determinare la dimensione dello spazio campionario è fondamentale per calcolare le probabilità. Tuttavia, a volte può essere una sfida!
Fortunatamente, esistono modi per rendere più facile il conteggio. Due di questi modi sono permutazioni e combinazioni. In questa sezione vedrai cosa significano esattamente questi due concetti e come puoi usarli per calcolare la dimensione dello spazio campionario!
Permutazioni
Le permutazioni sono il numero di modi in cui un sottoinsieme di dimensione specificata può essere disposto a partire da un insieme dato, generalmente senza reinserimento. Un esempio è un PIN di 4 cifre senza cifre ripetute. La probabilità di non avere cifre ripetute può essere calcolata eseguendo il seguente calcolo:
$$10 \times 9 \times 8 \times 7$$.
Hai 10 numeri tra cui scegliere, ma poiché lavori senza reinserimento, un'opzione cade sempre man mano che scegli una cifra per il PIN a 4 cifre. Ciò significa che per la prima cifra del PIN avrai 10 numeri tra cui scegliere (da 0 a 9), ma per la seconda cifra ne avrai solo 9, e così via.
A un livello più alto, vedi che il paragrafo precedente considera in realtà due cose: (1) i numeri tra cui scegliere e (2) i numeri che effettivamente scegli. Nell'esempio sopra, 10 è il numero di cifre tra cui puoi scegliere, poiché consideri tutti i numeri tra 0 e 9. Tuttavia, il numero effettivo di elementi che scegli è 4, poiché hai un PIN a 4 cifre.
Nel calcolo delle permutazioni, questo significa che consideri l'insieme completo dei numeri tra cui scegliere, che in realtà è $$10 \times 9 \times 8 \times 7 \times 6 \times 5 \times 4 \times 3 \times 2 \times 1$$ e dividi il risultato per la differenza tra i numeri tra cui scegliere (10) e i numeri che effettivamente scegli (4). Poiché stai considerando probabilità, questa differenza sarà $$6 \times 5 \times 4 \times 3 \times 2 \times 1$$.
Nota che puoi anche scrivere quanto sopra come
$$10P4 = \frac{10!}{(10 - 4)!}$$
Noterai che nell'equazione compaiono "10!" e "6!" ovvero "10 fattoriale" e "6 fattoriale", che indicano che tutti gli interi positivi consecutivi da 1 fino a 10 o 6 inclusi devono essere moltiplicati tra loro.
Il risultato di questo calcolo è 5040 permutazioni. Nota come sia esattamente lo stesso calcolo fatto sopra, quando hai moltiplicato 10, 9, 8 e 7.
Generalizzando i calcoli precedenti, la formula per calcolare le permutazioni è la seguente:
$$nPk = \frac{n!}{(n - k)!}$$
Facciamo pratica con un esempio!
Per trovare il numero di permutazioni di coppie di Assi, tra cui ne scegli solo 2, considererai l'insieme completo di assi tra cui scegliere (4) e anche il numero di assi che effettivamente scegli (2):
$$4P2 = \frac{4!}{(4 - 2)!}$$
Combinazioni
Hai visto che quando lavori con le permutazioni l'ordine conta. Con le combinazioni, invece, non è così: l'ordine non conta. Le combinazioni indicano il numero di modi in cui un sottoinsieme di dimensione specificata può essere estratto da un insieme dato.
Un esempio qui è la seguente situazione: hai il tuo mazzo di carte, composto da 52 carte. Tre carte verranno estratte dal mazzo. In quanti modi diversi puoi scegliere queste tre carte?
In effetti, dovrebbe essere $$52 \times 51 \times 50$$, che è in realtà lo stesso della formula delle permutazioni che hai appena usato! Tuttavia, con le combinazioni non consideri l'ordine. Significa che se vuoi capire quante combinazioni hai effettivamente, crei tutte le permutazioni e dividi per tutte le ridondanze, ovvero $$3 \times 2 \times 1$$.
Significa che il tuo calcolo delle combinazioni sarà così:
$$52C3 = \frac{\frac {52!}{(52-3)!}}{3!}$$
Questo calcolo può essere generalizzato con la seguente formula:
$$nCk = \frac{nPk}{k!}$$
Dove vedi chiaramente che il numeratore è esattamente la stessa formula delle permutazioni che hai appena visto, mentre il denominatore è il fattoriale del numero di carte che effettivamente sceglierai.
Considera un altro esempio con gli Assi. In un mazzo ci sono quattro Assi, e queste sono tutte le diverse combinazioni di coppie di Assi:
- Asso di Cuori / Asso di Quadri
- Asso di Cuori / Asso di Fiori
- Asso di Cuori / Asso di Picche
- Asso di Quadri / Asso di Fiori
- Asso di Quadri / Asso di Picche
- Asso di Fiori / Asso di Picche
Ci sono sei combinazioni di coppie di Assi. Per trovare il numero di combinazioni, devi prima trovare il numero di permutazioni:
# Permutations Code
import math
n = 4
k = 2
# Determine permutations and print result
Permutations = math.factorial(n) / math.factorial(k)
print(Permutations)
12.0
Per determinare il numero di combinazioni, dividi semplicemente il numero di permutazioni per il fattoriale della dimensione del sottoinsieme. Prova a trovare il numero di combinazioni di mani iniziali che possono essere distribuite nel 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
Eventi indipendenti e dipendenti
Hai letto nell'introduzione che un evento è un sottoinsieme ben definito dello spazio campionario. Gli eventi possono essere classificati in due categorie: dipendenti o indipendenti.
Gli eventi indipendenti sono eventi che non influenzano la probabilità dell'altro evento o degli altri eventi. Due eventi A e B sono indipendenti se sapere se l'evento A è avvenuto non dà informazioni sul fatto che l'evento B sia avvenuto.
Questo è vero quando, per esempio, peschi un Asso dal mazzo, rimetti la carta, mescoli il mazzo e poi peschi un'altra carta. La probabilità di pescare un Asso alla prima pescata è la stessa della seconda.
Gli eventi dipendenti, invece, sono eventi che hanno un impatto sulla probabilità dell'altro o degli altri eventi.
Ad esempio, peschi una carta dal mazzo e poi ne peschi una seconda senza rimettere la prima. In questo caso, la probabilità di pescare un Asso alla prima pescata non è la stessa della probabilità di pescare un Asso alla seconda. Dopo la prima carta, lo spazio campionario si è ridotto di 1, da 52 a 51. A seconda di quale fosse la prima carta, anche il numero di esiti favorevoli all'evento potrebbe essere cambiato. Se la carta era un Asso, ora restano solo 3 Assi per la seconda pescata.
Consideriamo ora queste definizioni in termini formali. Gli eventi A e B (che hanno probabilità non nulla) sono indipendenti se e solo se una delle seguenti affermazioni equivalenti è vera: $$P (A ∩ B) = P(A)P(B)$$ $$P (A|B) = P(A)$$ $$P (B|A) = P(B)$$
In altre parole, gli eventi A e B sono indipendenti se:
- La probabilità che si verifichino A e B è uguale al prodotto delle probabilità di ciascun evento.
- La probabilità che si verifichi A dato che si è verificato B è uguale alla probabilità che si verifichi A.
- La probabilità che si verifichi B dato che si è verificato A è uguale alla probabilità che si verifichi B.
Consideriamo il seguente esempio, in cui già conosci la probabilità di pescare un Asso alla prima pescata. Ora devi determinare la probabilità di pescare un Asso alla seconda pescata, se la prima carta pescata era o un Re o un Asso:
# 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
Ci sono alcune situazioni comuni nel poker pertinenti al concetto di eventi dipendenti.
Ma prima di iniziare, serve un po' di contesto. Il gioco è il Texas Hold’em. Giocato con un mazzo standard di 52 carte, il Texas Hold’em è la più popolare tra le varianti del poker. A ogni giocatore vengono distribuite due carte per iniziare la mano e si realizza la migliore mano di cinque carte usando le due carte proprie combinate con le cinque carte comuni distribuite nel corso della mano. Le carte vengono distribuite in quattro round:
- Pre-Flop: a ogni giocatore vengono distribuite due carte, dette "hole cards"
- Flop: vengono distribuite tre carte comuni
- Turn: viene distribuita una carta comune
- River: viene distribuita l'ultima carta comune
Eventi dipendenti: progetto di colore (Flush draw)
La tua mano

Carte comuni

Sei al Turn e hai quattro carte per un colore all'Asso. Un colore è una mano forte in cui tutte e cinque le carte sono dello stesso seme. Qual è la probabilità che l'ultima carta comune, detta River, sia un Quadri?
# 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
C'è circa il 20% di probabilità di chiudere il progetto di colore al River. Eccone un altro:
Eventi dipendenti: progetto di scala bilaterale (Open-Ended)
La tua mano

Carte comuni

Sei al Turn e hai un progetto di scala bilaterale. La scala è un'altra mano forte in cui ci sono cinque carte in ordine sequenziale. Il progetto è bilaterale perché qualsiasi Otto (8, 9, 10, Jack, Donna) o qualsiasi Re (9, 10, Jack, Donna, Re) completerà la scala.
Qual è la probabilità che il River completi la scala?
# 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
C'è circa il 17% di probabilità di chiudere la scala al River.
Eventi multipli
Finora hai considerato un solo evento quando calcolavi le probabilità, ma cosa succede quando hai a che fare con eventi multipli?
Un esempio di eventi multipli è la domanda "qual è la probabilità di mangiare tre biscotti all'avena seguiti da un biscotto con gocce di cioccolato quando mangi quattro biscotti da un barattolo pieno di questi due tipi?" Mangiare quattro biscotti sono in realtà quattro eventi.
Per calcolare la probabilità per eventi multipli, in pratica determini il numero di eventi (in questo caso 4), poi determini la probabilità di ciascun evento separatamente e moltiplichi tutte queste probabilità per ottenere la risposta finale. Nell'esempio descritto sopra, sarebbe 0,5 x 0,5 x 0,5 x 0,5 ovvero 0,0625.
$$P(Event A \cap Event B)=P(Event A) \times P(Event A)$$
Nota che in questo caso calcoli le probabilità di mangiare un biscotto all'avena E un altro biscotto all'avena E un terzo all'avena, E un ultimo con gocce di cioccolato. Quando consideri eventi che devono accadere tutti, moltiplichi le probabilità.
Per il tuo mazzo di carte, potresti chiederti: "Qual è la probabilità di ottenere tre Cuori scegliendo senza reinserimento?" Quando campioni o scegli senza reinserimento, significa che scegli una carta ma non la rimetti, quindi la tua selezione finale non può includere la stessa carta. In questo caso, il tuo calcolo della probabilità sarà il seguente: 13/52 x 12/51 x 11/50.
Eventi mutuamente esclusivi
Quando lavori con eventi multipli, potresti anche avere eventi che sono mutuamente esclusivi o disgiunti: non possono verificarsi entrambi. In tali casi, potresti voler calcolare la probabilità (o l'unione) che si verifichi uno qualsiasi di eventi mutuamente esclusivi. In questi casi, non moltiplichi le probabilità, ma sommi semplicemente la probabilità di ciascun evento:
$$P(Event A \cup Event B) = P(Event A) + P(Event B)$$
Qui è fondamentale capire che il componente "OPPURE" è molto importante: pescare un cuore O pescare un fiori sono due eventi mutuamente esclusivi. Un cuore è un cuore e un fiori è un fiori. Per determinare la probabilità di pescare un cuore o un fiori, somma la probabilità di pescare un cuore a quella di pescare un fiori.
$$P(Heart \cup Club) = (\frac{13}{52}) + (\frac{13}{52})$$
Ora tocca a te determinare la probabilità dei seguenti eventi mutuamente esclusivi:
- Pescare un cuore o pescare un fiori;
- Pescare un asso, un re o una donna.
# 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
Eventi non mutuamente esclusivi
Puoi immaginare che non tutti gli eventi siano mutuamente esclusivi: pescare un cuore o pescare un asso sono due eventi non mutuamente esclusivi. L'asso di cuori è sia un asso sia un cuore. Quando gli eventi non sono mutuamente esclusivi, devi correggere la sovrapposizione.
$$P(Event A \cup Event B) = P(Event A) + P(Event B) - P(EventA \cup EventB)$$
Per calcolare la probabilità di pescare un cuore o un asso, somma la probabilità di pescare un cuore alla probabilità di pescare un asso e poi sottrai la probabilità di pescare l'asso di cuori.
$$P(Heart \cup Ace) = (\frac{13}{52}) + (\frac{4}{52}) - (\frac{1}{52})$$
Calcola la probabilità dei seguenti eventi non mutuamente esclusivi:
- Pescare un cuore o un asso;
- Pescare una carta rossa o una figura.
# 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
Intersezione di eventi indipendenti
La probabilità dell'intersezione di due eventi indipendenti si determina moltiplicando le probabilità di ciascun evento.
$$P(Event A \cap Event B) = P(Event A) \times P(Event B)$$
Se vuoi sapere la probabilità di pescare un Asso da un mazzo di carte, rimetterlo, rimescolare il mazzo e pescare un altro Asso, moltiplichi la probabilità di pescare un Asso per la probabilità di pescare un Asso.
$$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
La probabilità di pescare due Assi di fila, in modo indipendente, è 0,592%. E se il secondo evento è dipendente?
Intersezione di eventi dipendenti
La probabilità dell'intersezione di due eventi non indipendenti (Evento A & Evento B dato A) si determina moltiplicando la probabilità che si verifichi l'Evento A per la probabilità dell'Evento B dato A.
$$P(Event A \cap Event B | A) = P(Event A) \times P(Event B | A)$$
La migliore mano iniziale che puoi avere nel Texas Hold’em è una coppia di Assi. Qual è la probabilità di ricevere due Assi?
$$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
La probabilità di pescare due Assi di fila dipendenti è 0,452%. Diamo un'occhiata a un paio di situazioni in cui questo entra in gioco al tavolo da poker.
Intersezione di eventi dipendenti: progetto di colore al flop
La tua mano

Carte comuni

Questa è una situazione simile al progetto di colore sopra, tranne per il fatto che ora sei al flop e hai due carte comuni da scoprire invece di una sola. Come puoi determinare la probabilità di fare colore entro il River? Per prima cosa devi determinare tutti i possibili scenari;
- A) Turn Quadri, River non Quadri (Colore chiuso)
- B) Turn non Quadri, River Quadri (Colore chiuso)
- C) Turn Quadri, River Quadri (Colore chiuso)
- D) Turn non Quadri, River non Quadri (Nessun colore)
Queste sono le uniche quattro possibilità, e ciascuno di questi scenari è mutuamente esclusivo. Ciò significa che se sommi le probabilità di ciascuno scenario, il totale sarà 1. In altre parole, uno di questi quattro scenari si verificherà di sicuro. Vuoi conoscere la probabilità che si verifichi lo scenario A, B o C. L'approccio più semplice è determinare la probabilità dello scenario D e sottrarla da 1.
# 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
Ora cambiamo leggermente la mano:
La tua mano

Carte comuni

Questa è una situazione simile alla precedente, tranne per una grande differenza. Hai ancora un progetto di colore, ma questa volta non hai l'Asso. Se cade un Quadri al Turn e al River, c'è una buona probabilità che qualcuno abbia un colore migliore. Determina la probabilità che cada un Quadri al Turn o al River, ma non in entrambi. Hai già la probabilità di non chiudere il colore.
Ora trova la probabilità che cada un Quadri al Turn e al River, aggiungila alla probabilità di non chiudere il colore e sottrai il tutto da 1.
# 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
Valore atteso (Expected Value)
Quando giochi a un gioco come il poker, ti interessa parecchio una domanda come "quanto guadagno - o perdo - in media, se gioco ripetutamente questo gioco?". Puoi immaginare che non sia diverso per il poker, soprattutto se sei un giocatore professionista!
Ora, se i possibili esiti del gioco e le loro probabilità associate possono essere descritti da una variabile casuale, allora puoi rispondere alla domanda sopra calcolando il suo valore atteso, che è uguale a una media ponderata degli esiti, dove ogni esito è ponderato con la sua probabilità.
In altre parole, moltiplichi semplicemente il Valore Totale per la probabilità di vincere per ottenere il Valore Atteso:
$$Expected Value = Total Value \times Probability$$
Qual è il valore atteso se nel piatto ci sono \$100 (Valore Totale) e la tua probabilità di vincere il piatto è 0,75?
$$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
Il tuo valore atteso è \$75. Il valore atteso è un concetto importante nel poker. Torniamo al primo esempio del progetto di colore per vedere come usare i valori attesi a tuo vantaggio.
La tua mano

Mano dell'avversario

Carte comuni

-
Piatto totale = \$60
-
Puntata dell'avversario = \$20
Il tuo avversario ha deciso di essere d'aiuto e mostrarti le sue carte, e ha un tris di 2. Per vincere la mano al River, devi chiudere con un Quadri qualsiasi tranne un Jack o un 2. Il Jack o il 2 di Quadri darebbero al tuo avversario una mano migliore, rispettivamente full e poker. Devi chiamare \$20 per restare nella mano, e se vinci la mano vinci \$60. Se il tuo valore atteso è superiore a \$20 dovresti chiamare la puntata, altrimenti dovresti foldare.
Stabilisci se dovresti chiamare la puntata:
# 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
Il tuo valore atteso è solo \$9,55, inferiore ai \$20 che dovresti rischiare per ottenere quella ricompensa, quindi devi foldare. Determinare il Valore Atteso è fondamentale da comprendere al tavolo da poker e la Parte 2 approfondirà molto il concetto.
Conclusione
Complimenti, sei arrivato alla fine di questo tutorial sulla teoria della probabilità con Python! Questa è la conclusione della Parte 1 del tutorial. Hai imparato diversi concetti fondamentali di probabilità tra cui eventi indipendenti/dipendenti, permutazioni/combinazioni, eventi multipli, valori attesi e come calcolarli.
Nella Parte 2 applicherai questi concetti a mani di poker reali che ho giocato durante la mia carriera.
*Prima del Flop, del Turn e del River viene distribuita una carta coperta, detta carta bruciata (Burn). Poiché la carta è coperta e nessun giocatore sa quale sia, non conta come prova.
Dai un'occhiata al tutorial di DataCamp Probability Distributions in Python.

