Accéder au contenu principal

Analyser des mains de poker avec Python

Analysez des mains de poker avec Python et appliquez facilement des notions statistiques comme les combinaisons, les permutations, les événements (in)dépendants et la valeur attendue.
Actualisé 19 sept. 2026  · 15 min lire

Explorer avec l’IA

ChatGPTClaudePerplexity

Dans la première partie de ce tutoriel, vous avez découvert plusieurs concepts, notamment les événements indépendants et dépendants, les permutations et combinaisons, les événements multiples, la valeur attendue, et la façon de les calculer. Vous allez maintenant appliquer ces notions à de vraies mains de poker que j’ai jouées au cours de ma carrière. Au passage, vous approfondirez la notion de valeur attendue et verrez comment l’utiliser pour prendre des décisions optimales.

  • Vous commencerez par une brève introduction au No Limit Texas Hold’em afin d’avoir toutes les bases nécessaires pour suivre le tutoriel ;
  • Puis vous découvrirez quelques outils utilisés dans les études de cas sur les mains de poker.
  • Après ces deux sections d’introduction, vous reviendrez en détail sur un concept abordé dans le premier tutoriel : la valeur attendue.
  • Enfin, vous analyserez plusieurs mains : une paire de 10 face à une relance pré-flop, une paire de 8 face à une relance pré-flop, et un check-raise semi-bluff au flop.

cartes

Introduction au No Limit Texas Hold’em

Avant de commencer, un peu de contexte s’impose. Le jeu traité dans les études de cas de cet article est le No Limit Texas Hold’em. Joué avec un paquet standard de 52 cartes, le Texas Hold’em est la variante de poker la plus populaire. Chaque joueur essaie de constituer la meilleure main possible de cinq cartes en combinant ses deux cartes privatives avec les cinq cartes communes distribuées au cours de la main.

Le joueur à la gauche du bouton du donneur ouvre l’action, qui se poursuit dans le sens horaire. Les mises démarrent généralement lorsque le joueur à la gauche du bouton poste la petite blind, et le suivant la grosse blind. L’action se déroule sur plusieurs « rues » : pré-flop, flop, turn et river.

Voici quelques termes à connaître :

  • Bouton (Button) – Le bouton est un disque circulaire qui se déplace dans le sens horaire après chaque main. En partie privée, la personne au bouton distribue, en donnant la première carte au joueur à sa gauche. Au casino, le bouton indique le donneur théorique, mais la distribution est assurée par un croupier.
  • Blinds – Les blinds sont des mises forcées par les deux joueurs à la gauche du bouton. On les appelle « blinds » car ces deux joueurs doivent miser à l’aveugle, c’est‑à‑dire avant d’avoir vu leurs cartes.
  • Rues – Chaque phase de distribution de cartes est appelée une rue.
  • Pré-flop – Première ronde de mise. Chaque joueur reçoit deux cartes, et les blinds lancent l’action. Aucune carte commune n’a encore été dévoilée.
  • Flop – Deuxième ronde de mise. Trois cartes communes sont posées face visible au centre de la table, suivies d’une ronde de mise.
  • Turn – Une seule carte commune est distribuée, suivie de la troisième ronde de mise.
  • River – La dernière carte commune est distribuée, suivie de la dernière ronde de mise.
  • Abattage (Showdown) – Après la river et lorsque l’action est terminée, les joueurs encore en jeu montrent leurs cartes pour déterminer la meilleure main.
  • Check – Si c’est au tour d’un joueur d’agir et qu’aucune mise n’a été effectuée sur cette rue, il peut checker, c’est‑à‑dire choisir de ne pas miser et laisser la parole au joueur suivant.
  • Bet ou raise – Miser ou relancer consiste à augmenter le montant en jeu pendant une ronde de mise. Le premier joueur qui met de l’argent dans le pot effectue une mise (bet). Si un autre joueur augmente cette mise au cours de la même ronde, il effectue une relance (raise).
  • Call – Si c’est au tour d’un joueur d’agir et qu’une mise a déjà été faite dans la ronde, il peut s’aligner au montant demandé : c’est le call.
  • Fold – Si c’est au tour d’un joueur d’agir et qu’une mise a déjà été faite, il peut se coucher (fold), renoncer à la main et perdre l’argent déjà mis dans le pot.

Si vous n’avez jamais joué ou si la terminologie du poker vous est peu familière, cliquez ici pour une explication concise et détaillée.

Outils de probabilités pour le poker

Chaque fois que je me retrouvais dans une situation confuse en jouant, je marquais la main pour la revoir plus tard. Après la session, je repassais ces mains au peigne fin. Je les décomposais mathématiquement pour mieux savoir quoi faire dans des situations similaires à l’avenir.

Les mains utilisées dans ce tutoriel ont été téléchargées et stockées dans une base PostgreSQL par Hold’em Manager, un logiciel mentionné dans la partie I. Hold’em Manager calcule des statistiques à partir de ces historiques de mains pour chacun de vos adversaires. Les données sont mises à jour et affichées en temps réel pendant que vous jouez.

J’ai sélectionné trois mains de ma carrière. Vous utiliserez les statistiques disponibles sur mes adversaires à ce moment‑là, le raisonnement déductif et un outil appelé calculateur d’équité afin d’estimer la probabilité de gagner la main pour chaque option viable.

Remarque : un calculateur d’équité sert à déterminer la probabilité de gagner une main selon une situation donnée. Vous saisissez vos cartes, les cartes communes (le cas échéant) et l’éventail de mains que vous attribuez à votre adversaire. Le calculateur fournit une probabilité de gain si les cartes restantes sont distribuées.

Valeur attendue : regard approfondi

Avant d’entrer dans l’analyse de la première main, il vous faut mieux comprendre la valeur attendue. Dans la partie I, vous avez appris à calculer votre valeur attendue pour un pot de 100 $ avec 75 % de chances de gagner. Il n’y avait que deux issues possibles :

  • Gagner 100 $
  • Gagner 0 $

À l’aide de la formule ExpectedValue=TotalValue×Probability, vous avez calculé une valeur attendue de 100 $ × 0,75, soit 75 $.

Cependant, bien souvent, le calcul n’est pas aussi direct et il existe plus de deux issues possibles. Pour déterminer la valeur attendue, vous devez calculer la moyenne pondérée de chaque issue, chaque résultat étant pondéré par sa probabilité d’occurrence.

C’est pourquoi l’équation ci‑dessus serait mieux représentée ainsi :

$Expected Value = (100 * .75) + (0 * .25)$
$Expected Value = \$75$

Et s’il existait une troisième issue possible dans la situation ci‑dessus ?

Considérez le cas suivant : vous avez 50 % de chances de gagner 100 $, 25 % de chances de gagner 25 $ et 25 % de chances de ne rien gagner :

  • Gagner 100 $ (50 %)
  • Gagner 25 $ (25 %)
  • Gagner 0 $ (25 %)

Le calcul de votre valeur attendue sera alors le suivant :

$Expected Value = (100 * .50) + (25 * .25) + (0 * .25)$
$Expected Value = \$56.25$

Passons maintenant à l’application de ces notions à quelques scénarios rencontrés à la table de poker.

Paire de 10 face à une relance pré‑flop

Remarque : Lors de l’analyse de mains, on appelle souvent l’adversaire « Villain » et le joueur étudié « Hero ». Le joueur que vous allez suivre est « GamingFoSho », mon pseudonyme sur les sites de poker où je jouais.

Aperçu de la main 1

Aperçu main 1

Hero (GamingFoSho) a une paire de 10 et mise 0,85 $. Il lui reste 20,95 $. L’adversaire (Villain) relance à 2,50 $ et lui reste 30,35 $.

En termes de poker, c’est un 3‑bet. La petite blind et la grosse blind posent la mise initiale, et Hero a relancé (deuxième mise). Il y a actuellement 3,70 $ dans le pot. Payer (call) n’est pas une bonne option pour des raisons qui dépassent le cadre de cet article.

Remarque : de manière générale, un jeu passif au poker est peu rentable tandis qu’un jeu agressif l’est davantage. Payer est passif, miser ou relancer est agressif. D’autres facteurs stratégiques, comme la position, indiquent aussi que payer est mauvais ici, mais nécessiteraient de longues explications.

Hero doit choisir entre relancer avec l’intention de partir à tapis (All‑in) ou se coucher. Se coucher ne coûte rien, vous allez donc analyser la valeur attendue d’un tapis. Dans cette situation, je ferais une petite relance pour inciter Villain à bluffer à tapis, mais le calcul doit être effectué comme si je partais à tapis, puisque c’est le plan.

Hero risque 20,95 $ s’il part à tapis et perd. Partir « All‑in » signifie mettre tout son tapis dans le pot. Hero a 20,95 $ restants, donc il risque 20,95 $. Hero gagne 23 $ s’il part à tapis et gagne. Il y a actuellement 3,70 $ dans le pot. Hero a misé 0,85 $ et Villain a relancé à 2,50 $. Hero doit ajouter 1,65 $ de ses 20,95 $ restants pour s’aligner sur la relance, il lui restera 19,30 $. Cela signifie qu’il peut gagner 19,30 $ supplémentaires en plus des 3,70 $ déjà au pot, soit 23,00 $. Si Villain se couche, Hero remporte les 3,70 $ du pot.

Hand1_AllIn_Loses = -20.95
Hand1_AllIn_Winnings = 23
Hand1_Fold_Winnings = 3.7

Statistiques pertinentes pour la main 1

Le poker est un jeu de déduction à partir d’informations incomplètes. Dans Hold’em Manager, je peux revoir des mains jouées par le passé et consulter les statistiques dont je disposais au moment des faits. Ci‑dessous, des captures des statistiques que j’avais sur cet adversaire pour cette main.

Les nombres décrivent une situation précise, par exemple les mises pré‑flop depuis le bouton. La plupart du temps, deux valeurs sont indiquées. Le nombre de gauche est le pourcentage de fois où Villain a effectué un mouvement donné dans une situation donnée. Le nombre entre parenthèses à droite indique le nombre d’occurrences jusqu’à 99. S’il n’y a pas de parenthèses, il y a eu au moins 100 occurrences.

J’avais joué 392 mains contre cet adversaire et j’ai surligné les stats utiles ici :

Stats1

Stats2

  1. Villain est au bouton, c’est‑à‑dire juste à droite des blinds. Globalement, depuis cette position, il 3‑bet 7,4 % (27 occurrences) ;
  2. Hero est au cut‑off, soit juste à droite du bouton. Face au cut‑off, Villain 3‑bet 12,5 % (16 occurrences) ;
  3. Quand Villain est au bouton face à une relance pré‑flop du cut‑off, il 3‑bet 25 % (4 occurrences) ;
  4. Quand Villain 3‑bet pré‑flop et subit une sur‑relance, il se couche 50 % du temps (2 occurrences).

Remarque : Comment ai‑je choisi ces 4 points ? Hero était au cut‑off et Villain a 3‑bet depuis le bouton. Je veux des stats qui montrent ce que Villain a fait dans des situations similaires. À quelle fréquence 3‑bet‑il depuis le bouton ou contre un joueur au cut‑off ? À quelle fréquence se couche‑t‑il face à une sur‑relance après un 3‑bet ? Les stats ci‑dessus répondent le mieux à ces questions.

Hypothèses pour la main 1

Sur la base de ces statistiques, je formule les hypothèses suivantes, des estimations éclairées :

  1. Villain relance à 2,50 avec environ (~) 13–15 % des mains de départ possibles ;
  2. Villain se couche face à une sur‑relance ~25 % du temps et part à tapis ~75 % du temps ;
  3. Villain sur‑relance à tapis avec ~10 % de mains, représentées sur l’image ci‑dessous.
  4. Les mains surlignées en jaune représentent l’intervalle supposé de Villain, soit 128 combinaisons (9,7 % de l’ensemble).
  5. Si vous vous demandez pourquoi A5s et A2s figurent dans la range, ce sont ses mains de bluff.

Remarque : L’image ci‑dessous représente l’ensemble des combinaisons de mains de départ possibles au Texas Hold’em, soit 1326 combinaisons, comme vu dans la première partie de cette série.

Hypothèses main 1

  • AA = As As, KK = Roi Roi, etc.
  • AKo = As Roi offsuit (non assorties), ATo = As Dix offsuit, etc.
  • AKs = As Roi assorties, ATs = As Dix assorties, J8s = Valet Huit assorties, etc.

Analyse de la main 1

Maintenant que vous avez la range de Villain, vous devez déterminer la probabilité que la main de Hero gagne contre cette range si les deux partent à tapis. Vous pouvez entrer la main de Hero (10h10s) et la range de Villain dans un calculateur d’équité pour obtenir la probabilité de gain de Hero. Le calculateur d’équité simule 10h10s contre la range supposée de Villain des milliers de fois et indique que Hero gagne environ 53,77 % du temps.

Vous pouvez maintenant définir les variables EstFoldPercent et Equity, puis créer votre fonction AllinExpectedValue().

Hand1_Fold_Percent = .25
Hand1_Equity = .538

Le calcul est simple. Il faut coder une fonction qui représente l’équation suivante :

    $FoldEV = (FoldPercent * FoldWinnings)$
    $AllinEV = (1 - FoldPercent) * ((AllInWinnings * Equity) + (AllInLoses * (1 - Equity)))$
    $AllinExpectedValue = FoldEV + AllinEV$
def AllinExpectedValue(AllIn_Loses, AllIn_Winnings, Fold_Winnings, Fold_Percent, Equity):
    FoldEV = (Fold_Percent * Fold_Winnings)
    AllinEV = (1 - Fold_Percent) * ((AllIn_Winnings * Equity) + (AllIn_Loses * (1 - Equity)))
    AllinExpectedValue = FoldEV + AllinEV
    if AllinExpectedValue > 0:
        return 'Raise!', AllinExpectedValue
    else:
        return 'Fold!', AllinExpectedValue

Intégrez maintenant les variables de la main 1 dans la fonction AllinExpectedValue et affichez les résultats :

Hand1_Decision, Hand1_EV = AllinExpectedValue(Hand1_AllIn_Loses, Hand1_AllIn_Winnings, Hand1_Fold_Winnings, Hand1_Fold_Percent, Hand1_Equity)
print(Hand1_Decision)
print(Hand1_EV)
Raise!
2.9463250000000016

Résultats de la main 1

Résultats main 1

Hero remporte la main avec un brelan de dix, qui bat une paire de rois.

Paire de 8 face à une relance pré‑flop

Aperçu de la main 2

Aperçu main 2

Dans cette situation, Hero (GamingFoSho) mise 1,10 $ et il lui reste 28,58 $. Villain, lui, relance à 3,80 $ et il lui reste 10,66 $. Le pot est de 5,40 $. Situation similaire à la main précédente. Là encore, payer n’est pas une bonne option. Se coucher ne coûte rien, il faut donc déterminer si une relance à tapis a une valeur attendue positive.

Si Hero part à tapis, il risque 13,36 $ puisque Villain a 10,66 $ restants et a relancé de 2,70 $. Hero gagne 16,06 $ s’il part à tapis et gagne la main (les 10,66 $ restants de Villain plus les 5,40 $ du pot) et gagne 5,40 $ s’il part à tapis et que Villain se couche.

Hand2_AllIn_Loses = -13.36
Hand2_AllIn_Winnings = 16.06
Hand2_Fold_Winnings = 5.40

Statistiques pertinentes pour la main 2

Stats main 2-3 Stats main 2-1 Stats main 2-2

  1. Villain est en petite blind. Depuis cette position, il 3‑bet 7,2 % (100+ occurrences) ;
  2. Hero est au cut‑off, et face au cut‑off, Villain 3‑bet 7,9 % (89 occurrences) ;
  3. Villain se couche face à un 4‑bet 25 % du temps (8 occurrences) ;
  4. Villain 3‑bet 4 % au global (100+ occurrences), mais seulement 1 % face à Hero (98 occurrences). Grosse alerte : cela indique une main très forte ;
  5. Hors de position contre le cut‑off, Villain 3‑bet 9,8 % (51 occurrences). Hors de position signifie que Villain parlera en premier sur les rues suivantes, Hero en second.
  6. Hors de position, Villain se couche face à un 4‑bet 0 % du temps (5 occurrences). Autre signal d’alerte.

Hypothèses pour la main 2

À partir de ces statistiques, je formule les hypothèses suivantes :

  1. Comparé à la plupart des adversaires, Villain 3‑bet ~8–10 % du temps, mais semble 3‑better 4 fois plus souvent contre d’autres joueurs que contre Hero. Cela place sa range à ~3 %.
  2. Dans cette configuration, Villain n’a encore jamais passé face à un 4‑bet, donc au maximum il se couche 10 % du temps.
  3. Villain paie avec une range d’environ 2,7 %, représentée ci‑dessous.
  4. Les mains en jaune représentent la range supposée de Villain, soit 34 des 1326 combinaisons possibles (2,6 %).

Range main 2

Analyse de la main 2

À nouveau, j’utilise un calculateur d’équité pour déterminer l’équité de Hero. Ici, la main de Hero a 35,84 % d’équité contre la range de Villain.

Vous pouvez maintenant définir les variables EstFoldPercent et Equity.

Hand2_Fold_Percent = .10
Hand2_Equity = .3584

Intégrez ensuite les variables de cette main dans la fonction AllinExpectedValue, et affichez les résultats.

Hand2_Decision, Hand2_EV = AllinExpectedValue(Hand2_AllIn_Loses, Hand2_AllIn_Winnings, Hand2_Fold_Winnings, Hand2_Fold_Percent, Hand2_Equity)
print(Hand2_Decision)
print(Hand2_EV)
Fold!
-1.994284799999999

Résultats de la main 2

Résultats main 2

Hero gagne avec un brelan de huit contre deux paires, As et Rois. Un résultat chanceux issu d’une décision perdante sur le long terme. Le jeu optimal ici est de se coucher.

Check‑raise semi‑bluff au flop

Aperçu de la main 3

Aperçu main 3

Nous sommes au flop, Hero (GamingFoSho) parle en premier et checke. Il a 25,08 $. Villain mise 1,06 $ et il lui reste 25,37 $. Le pot est de 2,66 $.

Une fois encore, payer n’est pas une bonne option et se coucher ne coûte rien. Hero doit décider si une relance dans cette situation, appelée semi‑bluff, a une valeur attendue positive. Un semi‑bluff consiste à relancer avec une main à tirage, ici un tirage couleur.
Hero n’a pas encore une main faite, il n’a pour l’instant qu’un As haut, mais possède quatre cœurs et n’a besoin que d’un cœur supplémentaire pour la couleur, une main forte. Comme dans la première main, la meilleure ligne quand on relance est de faire une petite relance pour laisser à Villain l’occasion de bluffer. Si Hero partait directement à tapis, Villain coucherait probablement une main comme Roi de cœur/Valet de cœur.

Hero risque 25,08 $ s’il part à tapis. Il gagne 26,68 $ s’il part à tapis et gagne. Villain a misé 1,06 $, donc Hero doit s’aligner pour 1,06 $ sur ses 25,08 $ restants, il lui reste 24,02 $. Cela signifie qu’il peut gagner 24,02 $ supplémentaires en plus des 2,66 $ déjà dans le pot, pour un total de 26,68 $. Si Villain se couche, Hero remporte 2,66 $.

Hand3_AllIn_Loses = -25.08
Hand3_AllIn_Winnings = 26.68
Hand3_Fold_Winnings = 2.66

Statistiques pertinentes pour la main 3

Stats main 3-1 Stats main 3-2 Stats main 3-3

  1. Pré‑flop, Villain a relancé et, depuis la position intermédiaire, il relance 9 % (100+ occurrences) ;
  2. Au flop, Hero checke, et Villain (l’ouvreur pré‑flop) mise à nouveau. C’est une mise de continuation (C‑bet). Villain C‑bet 100 % (12 occurrences) ;
  3. Hero effectue un check‑raise, et face à un check‑raise, Villain se couche 67 % du temps (3 occurrences) ;

Hypothèses pour la main 3

  • La range pré‑flop de l’adversaire est ~9–10 %, et ressemble à ceci :

Range pré‑flop main 3

  • Les mains en jaune représentent la range de Villain, soit 128 des 1326 combinaisons de départ possibles (9,7 %) ;
  • Après avoir C‑betté 100 % du temps, Villain se couche ~67 % du temps face au check‑raise de Hero, ce qui laisse ~35–45 combinaisons dans la range de Villain. La range de Villain ressemble alors à ceci :

Range flop main 3

  • Cette range comporte 35 combinaisons et correspond aux mains les plus fortes de sa range pré‑flop.
  • Certaines mains sont en jaune plus ou moins foncé. Deux raisons :

    1. Retrait de cartes (card removal) – Une paire d’As (AA) compte normalement six combinaisons (Carreaux/Trèfles, Cœurs/Trèfles, Piques/Trèfles, Cœurs/Carreaux, Piques/Carreaux, Piques/Cœurs), mais Hero a l’As de cœur. Villain ne peut avoir que trois combinaisons (Carreaux/Trèfles, Piques/Trèfles, Piques/Carreaux).
    2. Tirages couleur – Il existe quatre combinaisons assorties de Roi/Valet (Carreaux, Cœurs, Piques, Trèfles), mais Villain ne partirait à tapis qu’avec l’une d’elles (Cœurs).

Analyse de la main 3

J’entre à nouveau la main de Hero et la range de Villain dans le calculateur d’équité, en renseignant cette fois les 3 cartes du flop. Le calculateur indique que Hero gagne dans cette situation 43,58 % du temps.

Vous pouvez maintenant définir vos variables EstFoldPercent et Equity.

Hand3_Fold_Percent = .67
Hand3_Equity = .4358

Intégrez ensuite les variables de la main 3 dans la fonction AllinExpectedValue et affichez les résultats :

Hand3_Decision, Hand3_EV = AllinExpectedValue(Hand3_AllIn_Loses, Hand3_AllIn_Winnings, Hand3_Fold_Winnings, Hand3_Fold_Percent, Hand3_Equity)
print(Hand3_Decision)
print(Hand3_EV)
Raise!
0.9496126400000008

Résultats de la main 3

Résultats main 3

Hero gagne avec une couleur à l’As, qui bat la paire de dix de Villain.

Conclusion

Félicitations, vous avez terminé ce tutoriel sur la théorie des probabilités avec Python ! Après avoir appris les notions clés — événements indépendants/dépendants, permutations et combinaisons, événements multiples, valeur attendue et leur calcul — dans la première partie de cette série, vous avez appliqué ces concepts à des situations réelles de poker.

Dans ce tutoriel, vous avez acquis une compréhension bien plus fine de la valeur attendue et l’avez utilisée pour prendre des décisions optimales à la table. Ce concept est extrêmement utile à garder en tête pour toute décision business ou financière : la prochaine fois que vous hésiterez, essayez de quantifier vos options en termes de valeur attendue.

Sujets
Python

Approfondissez vos connaissances en Python

Cours

Analyse de clusters en Python

4 h
65.8K
Dans ce cours, vous découvrirez l’apprentissage non supervisé via des techniques comme le clustering hiérarchique et k-means avec la bibliothèque SciPy.
Afficher les détailsRight Arrow
Commencer Le Cours
Voir plusRight Arrow