Cours
Les data scientists créent des modèles d’apprentissage automatique pour faire des prédictions et optimiser les décisions. Au poker en ligne, les options sont miser, suivre ou se coucher. Vous n’êtes toutefois pas autorisé à utiliser un logiciel pour prendre ces décisions. C’est la limite imposée par la plupart des sites de poker en ligne. Puisque vous ne pouvez pas entraîner un modèle de machine learning, vous devez entraîner votre cerveau. Cela suppose une série sans fin de calculs d’équité en dehors de la table, mobilisant de nombreux concepts de probabilités et de statistiques.
Dans ce tutoriel, vous allez découvrir certains de ces concepts à partir d’un jeu de cartes et de situations génériques de poker.

Si vous souhaitez approfondir les statistiques avec Python, découvrez le cours Statistical Thinking in Python de DataCamp.
Motivation personnelle
Pendant plusieurs années, j’ai gagné ma vie en tant que joueur de poker en ligne professionnel. La data science a été une évolution naturelle pour moi, car elle exige un ensemble de compétences proches de celles nécessaires pour dégager un profit au poker en ligne. J’ai rédigé un article de blog sur ce que la data science a en commun avec le poker, où j’explique qu’à chaque main jouée sur un site de poker en ligne, un historique de main est généré. Ces historiques décrivent tout ce que chaque joueur a fait durant la main. J’ai utilisé un logiciel nommé Hold’em Manager (l’équivalent de Tableau pour le poker) pour exploiter ces données. Hold’em Manager télécharge en temps réel chacun de ces historiques dans une base PostgreSQL afin de suivre les tendances de vos adversaires.
Théorie des probabilités : introduction
Avant de passer à la pratique, prenons un instant pour définir ce qu’est la théorie des probabilités et pourquoi il est essentiel de s’y intéresser lorsque vous débutez en data science. Vous allez aussi découvrir des notions clés utiles tout au long du tutoriel et apprendre à calculer la probabilité d’événements simples.
Dans la vie courante, on se demande souvent quelles sont les chances qu’un événement se produise, comme gagner à la loterie, voir son équipe de football l’emporter ou profiter d’une remise sur sa paire de chaussures préférée. « Quelles sont les chances que… » est sans doute une expression que vous utilisez souvent. Déterminer la chance qu’un événement se produise, c’est calculer une « probabilité ».
Ce type de probabilité diffère de l’approche mathématique formelle, étudiée en théorie des probabilités, une branche des mathématiques. En mathématiques, on distingue deux grandes familles d’interprétations de la « probabilité » : les probabilités « physiques » et les probabilités « informationnelles ».
Les premières sont dites objectives ou fréquentistes et sont associées à des systèmes physiques aléatoires, comme le lancer de pièce, la roulette ou les dés. Dans ces systèmes, un type d’événement donné se produit à un taux persistant, ou « fréquence relative », sur une longue série d’essais.
Les secondes sont dites bayésiennes et peuvent s’appliquer à toute affirmation, même lorsqu’aucun processus aléatoire n’est en jeu, pour représenter sa plausibilité subjective, autrement dit le degré de soutien qu’apportent les éléments disponibles. Dans la plupart des approches, ces probabilités informationnelles sont vues comme des degrés de croyance, que l’on peut relier, par exemple, à une propension à parier à certaines cotes.
Remarque : la théorie des probabilités s’intéresse surtout à la prédiction de la vraisemblance d’événements futurs, tandis que les statistiques analysent la fréquence d’événements passés. C’est aussi pourquoi la théorie des probabilités fait partie des fondamentaux à maîtriser pour devenir data scientist : en data science et en machine learning, vous utilisez des données d’événements déjà survenus pour prédire des événements à venir.
Même si la théorie des probabilités est souvent jugée peu intuitive, ses concepts sont essentiels pour la data science et l’analytique prédictive.
Notions et symboles clés
Les notions clés à connaître pour ce tutoriel relèvent principalement du point de vue fréquentiste des probabilités, car nous travaillons ici avec un jeu standard de 52 cartes.
Dans cette perspective, l’ingrédient fondamental est une expérience que l’on peut répéter, au moins en théorie, dans des conditions identiques. Cette expérience peut produire différents résultats à différents essais (exécutions uniques de l’expérience). L’ensemble de tous les résultats possibles de l’expérience s’appelle « l’espace échantillon ». Un événement est un sous-ensemble bien défini de cet espace.
Tout cela reste assez théorique.
Voyons quelques exemples :
- Un exemple un peu cliché est le lancer de pièce. Ici, l’expérience est justement le lancer de pièce. Vous pouvez la lancer plusieurs fois, et chaque essai peut donner un résultat différent. Comme il existe deux issues possibles — pile ou face —, la taille de l’espace échantillon est 2. Un événement « lancer une pièce » peut, par exemple, consister en l’issue « face ». De même, si vous lancez deux fois, l’événement « le premier lancer donne face » peut se réaliser via « face-face » ou « face-pile ».
- Un autre exemple, moins immédiat, consiste à faire tourner un globe et à l’arrêter en posant votre doigt dessus. Vous pouvez répéter l’expérience plusieurs fois avec des issues différentes : votre doigt peut atterrir sur une terre émergée ou sur l’eau. L’espace échantillon vaut donc 2. Un événement « mon doigt est sur la terre » peut se réaliser par « Terre - Eau » ou « Terre - Terre ».
- Dernier exemple : le lancer de dé. Vous pouvez lancer le dé plusieurs fois et obtenir des résultats différents : 6 possibilités exactement, car le dé a 6 faces (1, 2, 3, 4, 5, 6). Un événement « la somme de deux lancers vaut 10 » peut se réaliser de diverses manières, tandis que l’événement « le nombre est pair » correspond aux issues 2, 4 ou 6.
Maintenant que vous situez les notions clés utilisées dans ce tutoriel, évoquons aussi quelques symboles de probabilité que vous rencontrerez :
| Symbole | Signification |
|---|---|
| $$\cap$$ | Et |
| $$\cup$$ | Ou |
| | | Sachant |
Calculer la probabilité d’événements simples
Vous êtes à jour : vous pouvez commencer à déterminer la probabilité d’un événement simple, comme obtenir pile en lançant une pièce. Pour la calculer, divisez le nombre d’issues favorables par la taille de l’espace échantillon.
Commencez par compter le nombre de façons possibles d’obtenir pile, puis le nombre total d’issues. Le premier vaut 1 (une seule façon d’obtenir pile). Le second vaut 2 (pile ou face).
En résumé, le calcul de la probabilité d’un événement A s’écrit :
$$P(A) = \frac{Issues \ favorables \ à \ A}{Espace \ échantillon}$$
Dans le cas du lancer de pièce, la probabilité d’obtenir pile est 1/2, soit 0,5.
Remarque : une probabilité est toujours comprise entre 0 et 1. 0 signifie que l’événement est très improbable, 1 qu’il est certain.
Passons à un deuxième exemple de calcul de probabilité.

Un jeu standard compte 52 cartes, dont 4 As. En suivant l’exemple précédent, la probabilité de tirer un As se calcule en divisant le nombre d’issues favorables (4) par la taille de l’espace échantillon (52) :
$$P(A) = \frac{4}{52}$$
Remarque : $A$ représente ici l’événement « tirer un As ».
Calculez maintenant la probabilité de tirer un As avec Python :
# Espace échantillon
cards = 52
# Issues
aces = 4
# Diviser les issues favorables par l'espace échantillon
ace_probability = aces / cards
# Afficher la probabilité arrondie à deux décimales
print(round(ace_probability, 2))
0.08
La probabilité de tirer un As d’un jeu standard est de 0,08. Pour l’exprimer en pourcentage, multipliez simplement par 100.
# Probabilité d'un As en pourcentage
ace_probability_percent = ace_probability * 100
# Afficher la probabilité en % arrondie à une décimale
print(str(round(ace_probability_percent, 0)) + '%')
8.0%
La probabilité de tirer un As en pourcentage est de 8 %.
Après ces deux exemples, vous pouvez facilement étendre vos calculs pour déterminer, par exemple, la probabilité de tirer un Cœur, une figure (Valets, Dames, Rois) ou une combinaison précise comme la Dame de Cœur.
Dans ces cas, il est pratique de créer une fonction utilisateur (UDF) event_probability() à laquelle vous passez event_outcomes et sample_space pour obtenir la probabilité d’un événement en pourcentage, puisque vous réutiliserez souvent le même code :
# Créer une fonction qui retourne une probabilité en % arrondie à une décimale
def event_probability(event_outcomes, sample_space):
probability = (event_outcomes / sample_space) * 100
return round(probability, 1)
# Espace échantillon
cards = 52
# Probabilité de tirer un cœur
hearts = 13
heart_probability = event_probability(hearts, cards)
# Probabilité de tirer une figure
face_cards = 12
face_card_probability = event_probability(face_cards, cards)
# Probabilité de tirer la dame de cœur
queen_of_hearts = 1
queen_of_hearts_probability = event_probability(queen_of_hearts, cards)
# Afficher chaque probabilité
print(str(heart_probability) + '%')
print(str(face_card_probability) + '%')
print(str(queen_of_hearts_probability) + '%')
25.0%
23.1%
1.9%
Ces résultats ne vous surprennent sans doute pas : la chance de tirer la Dame de Cœur est bien plus faible que celle de tirer une figure ou un Cœur.
Probabilités avec combinaisons et permutations
Vous l’avez vu, connaître la taille de l’espace échantillon est essentiel pour calculer des probabilités. Mais ce n’est pas toujours trivial !
Heureusement, il existe des méthodes pour faciliter le décompte : les permutations et les combinaisons. Dans cette section, vous verrez ce que recouvrent ces deux notions et comment les utiliser pour déterminer la taille de l’espace échantillon.
Permutations
Les permutations correspondent au nombre de façons d’ordonner un sous-ensemble de taille donnée à partir d’un ensemble, généralement sans remise. Exemple : un code PIN à 4 chiffres sans répétition. La probabilité d’obtenir un code sans chiffre répété se calcule par :
$$10 \times 9 \times 8 \times 7$$.
Vous avez 10 chiffres possibles, mais sans remise : une option disparaît à chaque choix pour le code à 4 chiffres. Pour le premier chiffre, 10 choix (0 à 9), pour le second, plus que 9, etc.
De manière générale, on distingue (1) le nombre total de choix possibles et (2) le nombre d’éléments effectivement choisis. Dans l’exemple ci-dessus, 10 est le nombre de chiffres disponibles (0 à 9) et 4 le nombre choisi (code à 4 chiffres).
Pour les permutations, on considère l’ensemble complet des choix possibles, soit en réalité $$10 \times 9 \times 8 \times 7 \times 6 \times 5 \times 4 \times 3 \times 2 \times 1$$, que l’on divise par la différence entre le nombre total de choix (10) et le nombre choisi (4). Dans notre contexte, cela revient à $$6 \times 5 \times 4 \times 3 \times 2 \times 1$$.
Remarque : on peut écrire cela ainsi :
$$10P4 = \frac{10!}{(10 - 4)!}$$
Vous remarquez la présence de « 10! » et « 6! » (10 factorielle et 6 factorielle), indiquant que l’on multiplie tous les entiers positifs consécutifs de 1 jusqu’à 10 ou 6 inclus.
Le résultat est 5 040 permutations. Remarque : c’est exactement le même résultat que le produit 10 × 9 × 8 × 7.
En généralisant, la formule des permutations est :
$$nPk = \frac{n!}{(n - k)!}$$
Mettons en pratique !
Pour trouver le nombre de permutations d’As en main (pocket Aces) lorsque vous n’en choisissez que 2, considérez l’ensemble des As disponibles (4) et le nombre effectivement choisi (2) :
$$4P2 = \frac{4!}{(4 - 2)!}$$
Combinaisons
Avec les permutations, l’ordre compte. Avec les combinaisons, non : seules les sélections importent. Les combinaisons désignent le nombre de façons de tirer un sous-ensemble de taille donnée à partir d’un ensemble.
Exemple : vous avez un jeu de 52 cartes. Trois cartes sont tirées. Combien de façons différentes de choisir ces trois cartes ?
À première vue, cela donne $$52 \times 51 \times 50$$, soit la même logique que pour les permutations. Mais pour les combinaisons, l’ordre ne compte pas. Pour obtenir le nombre de combinaisons, on prend toutes les permutations et on divise par toutes les redondances, soit $$3 \times 2 \times 1$$.
Le calcul devient donc :
$$52C3 = \frac{\frac {52!}{(52-3)!}}{3!}$$
Ce calcul se généralise par :
$$nCk = \frac{nPk}{k!}$$
Le numérateur est bien la formule des permutations, et le dénominateur est la factorielle du nombre d’éléments choisis.
Autre exemple avec les As. Il y a quatre As dans un jeu. Voici toutes les combinaisons de « pocket Aces » :
- As de cœur / As de carreau
- As de cœur / As de trèfle
- As de cœur / As de pique
- As de carreau / As de trèfle
- As de carreau / As de pique
- As de trèfle / As de pique
Il y a six combinaisons d’As en main. Pour trouver le nombre de combinaisons, commencez par calculer le nombre de permutations :
# Code permutations
import math
n = 4
k = 2
# Calculer les permutations et afficher
Permutations = math.factorial(n) / math.factorial(k)
print(Permutations)
12.0
Pour déterminer le nombre de combinaisons, divisez simplement le nombre de permutations par la factorielle de la taille du sous-ensemble. Essayez de trouver le nombre de combinaisons de mains de départ au Texas Hold’em.
$$52C2 = \frac{52P2}{2!}$$
# Code combinaisons
n = 52
k = 2
# Calculer les permutations
Permutations = math.factorial(n) / math.factorial(n - k)
# Calculer les combinaisons et afficher
Combinations = Permutations / math.factorial(k)
print(Combinations)
1326.0
Événements indépendants vs dépendants
Comme mentionné en introduction, un événement est un sous-ensemble bien défini de l’espace échantillon. Les événements se classent en deux catégories : dépendants ou indépendants.
Des événements indépendants n’affectent pas leurs probabilités respectives. Deux événements A et B sont indépendants si savoir si A s’est produit n’apporte aucune information sur la survenue de B.
C’est le cas si, par exemple, vous tirez un As, remettez la carte dans le paquet, mélangez, puis tirez une autre carte. La probabilité d’un As au premier tirage est la même qu’au second.
Les événements dépendants, eux, modifient la probabilité de l’un ou l’autre événement.
Par exemple, vous tirez une carte, puis une seconde sans remettre la première. La probabilité d’obtenir un As au premier tirage n’est pas la même qu’au second. Après le premier tirage, l’espace échantillon passe de 52 à 51. Selon la carte tirée d’abord, le nombre d’issues favorables peut aussi changer. Si c’était un As, il n’en reste plus que 3 au second tirage.
Formalisons. Des événements A et B (de probabilité non nulle) sont indépendants si et seulement si l’une des égalités équivalentes suivantes est vérifiée : $$P (A ∩ B) = P(A)P(B)$$ $$P (A|B) = P(A)$$ $$P (B|A) = P(B)$$
Autrement dit, A et B sont indépendants si :
- La probabilité que A et B se produisent ensemble est le produit de leurs probabilités respectives.
- La probabilité de A sachant B est égale à la probabilité de A.
- La probabilité de B sachant A est égale à la probabilité de B.
Considérons l’exemple suivant : vous connaissez la probabilité de tirer un As au premier tirage. Déterminez maintenant la probabilité d’en tirer un au second tirage si la première carte était un Roi, puis si c’était un As :
# Espace échantillon
cards = 52
cards_drawn = 1
cards = cards - cards_drawn
# Probabilité d'un As après avoir tiré un Roi au premier tirage
aces = 4
ace_probability1 = event_probability(aces, cards)
# Probabilité d'un As après avoir tiré un As au premier tirage
aces_drawn = 1
aces = aces - aces_drawn
ace_probability2 = event_probability(aces, cards)
# Afficher chaque probabilité
print(ace_probability1)
print(ace_probability2)
7.8
5.9
Plusieurs situations fréquentes au poker illustrent bien les événements dépendants.
Petit rappel sur le jeu. Il s’agit du Texas Hold’em. Joué avec un paquet standard de 52 cartes, c’est la variante la plus populaire. Chaque joueur reçoit deux cartes fermées et doit constituer la meilleure main de cinq cartes en combinant ses deux cartes avec les cinq cartes communes distribuées au fil des tours. Les cartes sont distribuées en quatre phases :
- Pré-flop : deux cartes fermées par joueur
- Flop : trois cartes communes
- Turn : une carte commune
- River : dernière carte commune
Événements dépendants : tirage couleur (flush)
Votre main

Cartes communes

Vous êtes au Turn et vous avez quatre cartes vers une couleur à l’As. Une couleur est une main forte où les cinq cartes sont de la même couleur. Quelle est la probabilité que la dernière carte commune, la River, soit un carreau ?
# Espace échantillon
cards = 52
hole_cards = 2
turn_community_cards = 4
cards = cards - (hole_cards + turn_community_cards)
# Issues
diamonds = 13
diamonds_drawn = 4
# Au poker, les cartes qui complètent un tirage sont appelées "outs"
outs = diamonds - diamonds_drawn
# Déterminer la probabilité de couleur à la river
river_flush_probability = event_probability(outs, cards)
print(river_flush_probability)
19.6
Vous avez environ 20 % de chances de compléter votre couleur à la River. En voici un autre :
Événements dépendants : tirage quinte par les deux bouts
Votre main

Cartes communes

Vous êtes au Turn et avez un tirage quinte par les deux bouts. Une quinte est une main forte composée de cinq cartes consécutives. Le tirage est « ouvert » car n’importe quel Huit (8, 9, 10, Valet, Dame) ou n’importe quel Roi (9, 10, Valet, Dame, Roi) complétera la quinte.
Quelle est la probabilité que la River complète la quinte ?
# Espace échantillon
cards = 52
hole_cards = 2
turn_community_cards = 4
cards = cards - (hole_cards + turn_community_cards)
# Issues
eights = 4
kings = 4
outs = eights + kings
# Déterminer la probabilité de quinte à la river
river_straight_probability = event_probability(outs, cards)
print(river_straight_probability)
17.4
Vous avez environ 17 % de chances de compléter votre quinte à la River.
Événements multiples
Jusqu’ici, vous avez considéré un seul événement à la fois. Mais que faire lorsqu’il y en a plusieurs ?
Exemple d’événements multiples : « quelle est la probabilité de manger trois cookies à l’avoine puis un cookie aux pépites de chocolat lorsque vous en prenez quatre dans un bocal qui contient ces deux types ? ». Manger quatre cookies correspond à quatre événements.
Pour calculer la probabilité d’événements multiples, déterminez le nombre d’événements (4), calculez la probabilité de chaque événement séparément, puis multipliez ces probabilités pour obtenir le résultat final. Dans l’exemple ci-dessus, cela donne 0,5 × 0,5 × 0,5 × 0,5 = 0,0625.
$$P(Event A \cap Event B)=P(Event A) \times P(Event A)$$
Remarque : dans ce cas, vous calculez la probabilité de manger un cookie à l’avoine ET un autre à l’avoine ET un troisième à l’avoine ET un dernier aux pépites. Quand vous considérez des événements qui doivent tous se produire, vous multipliez les probabilités.
Pour un jeu de cartes, on peut se demander : « Quelle est la probabilité d’obtenir trois Cœurs sans remise ? ». Sans remise signifie que vous ne remettez pas la carte tirée, donc la sélection finale ne peut pas contenir deux fois la même carte. Ici, le calcul est : 13/52 × 12/51 × 11/50.
Événements mutuellement exclusifs
Avec des événements multiples, certains peuvent être mutuellement exclusifs (disjoints) : ils ne peuvent pas se produire simultanément. Vous pouvez vouloir calculer la probabilité (l’union) que l’un quelconque de ces événements se produise. Dans ce cas, vous n’effectuez pas un produit mais une somme des probabilités de chaque événement :
$$P(Event A \cup Event B) = P(Event A) + P(Event B)$$
L’élément clé ici est le « OU » : tirer un cœur OU tirer un trèfle sont deux événements mutuellement exclusifs. Un cœur est un cœur, un trèfle est un trèfle. Pour la probabilité de tirer un cœur ou un trèfle, additionnez la probabilité de cœur et celle de trèfle.
$$P(Heart \cup Club) = (\frac{13}{52}) + (\frac{13}{52})$$
À vous de jouer : calculez la probabilité des événements mutuellement exclusifs suivants :
- Tirer un cœur ou un trèfle ;
- Tirer un as, un roi ou une dame.
# Espace échantillon
cards = 52
# Probabilité de tirer un cœur ou un trèfle
hearts = 13
clubs = 13
heart_or_club = event_probability(hearts, cards) + event_probability(clubs, cards)
# Probabilité de tirer un as, un roi ou une dame
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
Événements non mutuellement exclusifs
Tous les événements ne sont pas disjoints : tirer un cœur ou tirer un as ne sont pas mutuellement exclusifs. L’As de Cœur est à la fois un cœur et un as. Quand les événements ne sont pas exclusifs, il faut corriger le chevauchement.
$$P(Event A \cup Event B) = P(Event A) + P(Event B) - P(EventA \cup EventB)$$
Pour calculer la probabilité de tirer un cœur ou un as, additionnez la probabilité de cœur et celle d’as, puis soustrayez la probabilité de tirer l’As de Cœur.
$$P(Heart \cup Ace) = (\frac{13}{52}) + (\frac{4}{52}) - (\frac{1}{52})$$
Calculez la probabilité des événements non mutuellement exclusifs suivants :
- Tirer un cœur ou un as ;
- Tirer une carte rouge ou une figure.
# Espace échantillon
cards = 52
# Probabilité de tirer un cœur ou un as
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)
# Probabilité de tirer une carte rouge ou une figure
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
Intersection d’événements indépendants
La probabilité de l’intersection de deux événements indépendants se calcule en multipliant leurs probabilités respectives.
$$P(Event A \cap Event B) = P(Event A) \times P(Event B)$$
Si vous voulez connaître la probabilité de tirer un As, remettre et mélanger, puis tirer à nouveau un As, multipliez la probabilité d’un As par elle-même.
$$P(Ace \cap Ace) = (\frac{4}{52}) \times (\frac{4}{52})$$
# Espace échantillon
cards = 52
# Issues
aces = 4
# Probabilité d'un As
ace_probability = aces / cards
# Probabilité de deux As consécutifs indépendants
two_aces_probability = ace_probability * ace_probability
# Probabilité en pourcentage
two_ace_probability_percent = two_aces_probability * 100
print(round(two_ace_probability_percent, 1))
0.6
La probabilité de tirer deux As d’affilée, de façon indépendante, est de 0,592 %. Et si le second événement dépend du premier ?
Intersection d’événements dépendants
La probabilité de l’intersection de deux événements non indépendants (événement A & événement B sachant A) se calcule en multipliant la probabilité de A par la probabilité de B sachant A.
$$P(Event A \cap Event B | A) = P(Event A) \times P(Event B | A)$$
La meilleure main de départ au Texas Hold’em est la paire d’As servie (pocket Aces). Quelle est la probabilité de recevoir deux As ?
$$P(Ace \cap Ace | Ace) = (\frac{4}{52}) \times (\frac{3}{51})$$
# Espace échantillon premier tirage
cards = 52
# Issues premier tirage
aces = 4
# Probabilité d'un As au premier tirage
first_ace_probability = aces / cards
# Espace échantillon second tirage
cards = cards - 1
# Issues second tirage
aces = aces - 1
# Probabilité d'un As au second tirage sachant As au premier
second_ace_probability = aces / cards
# Probabilité de deux As consécutifs (dépendants)
both_aces_probability = first_ace_probability * second_ace_probability * 100
print(both_aces_probability)
0.4524886877828055
La probabilité de tirer deux As d’affilée de façon dépendante est de 0,452 %. Voyons deux situations typiques à la table.
Intersection d’événements dépendants : tirage couleur au flop
Votre main

Cartes communes

Situation proche du tirage couleur précédent, sauf qu’ici vous êtes au flop et il reste deux cartes communes à venir au lieu d’une seule. Comment déterminer la probabilité d’obtenir une couleur à la River ? Commencez par énumérer les scénarios possibles :
- A) Carreau au Turn, pas de carreau à la River (couleur réalisée)
- B) Pas de carreau au Turn, carreau à la River (couleur réalisée)
- C) Carreau au Turn, carreau à la River (couleur réalisée)
- D) Pas de carreau au Turn, pas de carreau à la River (pas de couleur)
Il n’y a que ces quatre possibilités, et elles sont mutuellement exclusives. La somme de leurs probabilités vaut 1. Vous cherchez la probabilité que A, B ou C se produise. L’approche la plus simple consiste à calculer la probabilité de D, puis à la soustraire de 1.
# Espace échantillon au turn
cards = 52
hole_cards = 2
flop_community_cards = 3
cards = cards - (hole_cards + flop_community_cards)
# Issues
diamonds = 13
diamonds_drawn = 4
non_diamonds_drawn = 1
outs = diamonds - diamonds_drawn
turn_non_diamonds = cards - outs - non_diamonds_drawn
# Probabilité de ne pas toucher de carreau au turn
no_diamond_turn_probability = turn_non_diamonds / cards
# Espace échantillon à la river
turn_community_card = 1
cards = cards - turn_community_card
# Issues à la river
river_non_diamonds = turn_non_diamonds - turn_community_card
# Probabilité de ne pas toucher de carreau à la river
no_diamond_river_probability = river_non_diamonds / cards
# Probabilité de ne pas faire couleur
no_flush_probability = no_diamond_turn_probability * no_diamond_river_probability
# Probabilité de faire couleur
flush_probability = 1 - no_flush_probability
flush_probability_percent = flush_probability * 100
# Afficher la probabilité en % arrondie à une décimale
print(round(flush_probability_percent, 1))
38.4
Modifions légèrement la main :
Votre main

Cartes communes

Situation similaire, à une différence près : vous avez toujours un tirage couleur, mais sans l’As. Si un carreau tombe au Turn puis à la River, il y a de bonnes chances que quelqu’un détienne une meilleure couleur. Déterminez la probabilité qu’un carreau tombe au Turn ou à la River, mais pas aux deux. Vous avez déjà la probabilité de ne pas toucher la couleur.
Trouvez maintenant la probabilité d’obtenir un carreau au Turn et à la River, additionnez-la à la probabilité de ne pas toucher la couleur, puis soustrayez l’ensemble de 1.
# Espace échantillon au turn
cards = 52
hole_cards = 2
flop_community_cards = 3
cards = cards - (hole_cards + flop_community_cards)
# Issues au turn
diamonds = 13
diamonds_drawn = 4
outs = diamonds - diamonds_drawn
# Probabilité de carreau au turn
diamond_turn_probability = outs / cards
# Espace échantillon à la river
turn_diamonds = 1
cards = cards - turn_diamonds
# Issues à la river
river_diamonds = outs - turn_diamonds
# Probabilité de carreau à la river
diamond_river_probability = river_diamonds / cards
# Probabilité d'obtenir un carreau au turn et à la river
two_diamonds_probability = diamond_turn_probability * diamond_river_probability
# Probabilité d'obtenir un seul carreau d'ici la river
one_diamond_probability = 1 - (no_flush_probability + two_diamonds_probability)
one_diamond_probability_percent = one_diamond_probability * 100
# Afficher la probabilité en % arrondie à une décimale
print(round(one_diamond_probability_percent, 1))
35.1
Valeur attendue (expected value)
Dans un jeu comme le poker, une question cruciale est : « en moyenne, combien vais-je gagner — ou perdre — si je rejoue cette situation à l’infini ? ». Au poker, surtout en professionnel, c’est central.
Si les issues possibles et leurs probabilités associées peuvent être décrites par une variable aléatoire, vous pouvez répondre à cette question en calculant sa valeur attendue, égalée à une moyenne pondérée des issues, chaque issue étant pondérée par sa probabilité.
Autrement dit, multipliez simplement la valeur totale par la probabilité de gain pour obtenir la valeur attendue :
$$Expected Value = Total Value \times Probability$$
Quelle est la valeur attendue s’il y a 100 $ (Total Value) dans le pot et que votre probabilité de gagner est de 0,75 ?
$$Expected Value = \$100 \times 0.75$$
# Initialiser les variables `pot` et `probability`
pot = 100
probability = 0.75
# Calculer la valeur attendue
expected_value = pot * probability
print(expected_value)
75.0
Votre valeur attendue est de 75 $. La valeur attendue est une notion clé au poker. Revenons au premier exemple de tirage couleur pour voir comment l’exploiter.
Votre main

Main de l’adversaire

Cartes communes

-
Pot total = 60 $
-
Mise de l’adversaire = 20 $
Votre adversaire vous « aide » en montrant ses cartes : il a un brelan de 2. Pour gagner à la River, vous devez toucher n’importe quel carreau sauf un Valet ou un 2. Le Valet ou le 2 de carreau lui donneraient une meilleure main, full house et carré respectivement. Vous devez payer 20 $ pour rester dans le coup, et si vous gagnez, vous remportez 60 $. Si votre valeur attendue dépasse 20 $, vous devez suivre ; sinon, vous coucher.
Décidez si vous devez payer :
# Espace échantillon
cards = 52
hole_cards = 2
# Votre adversaire vous donne de l'info... servez-vous-en !
opponents_hole_cards = 2
turn_community_cards = 4
cards = cards - (hole_cards + opponents_hole_cards + turn_community_cards)
# Issues
diamonds = 13
diamonds_drawn = 4
# Ne comptez pas les deux carreaux qui ne vous aident pas
diamond_non_outs = 2
outs = diamonds - diamonds_drawn - diamond_non_outs
# Probabilité de gain
win_probability = outs / cards
# Valeur attendue
pot = 60
ev = pot * win_probability
# Afficher EV et décision
call_amount = 20
if ev >= 20:
print(round(ev, 2), 'Call')
else:
print(round(ev, 2), 'Fold')
9.55 Fold
Votre valeur attendue n’est que de 9,55 $, inférieure aux 20 $ à investir pour ce gain potentiel : vous devez vous coucher. Maîtriser la valeur attendue est crucial à la table ; la partie 2 ira beaucoup plus loin sur ce concept.
Conclusion
Félicitations, vous êtes arrivé au bout de ce tutoriel sur la théorie des probabilités avec Python ! Cette première partie se termine ici. Vous avez vu plusieurs notions clés : événements indépendants/dépendants, permutations/combinaisons, événements multiples, valeurs attendues, et comment les calculer.
Dans la partie 2, vous appliquerez ces concepts à de vraies mains jouées au cours de ma carrière.
*Avant le Flop, le Turn et la River, une carte est brûlée face cachée. Personne ne la connaît, elle ne compte donc pas comme un essai.
Consultez aussi le tutoriel de DataCamp Probability Distributions in Python.