x
La référence pour progresser au poker !
© Copyright 2016 Kill Tilt · Tous droits réservés. Création par Valstrate, Design par Julien Escalas
ENDETTEMENT, DÉPENDANCE, ISOLEMENT : JOUER COMPORTE DES RISQUES. APPELEZ LE 09 74 75 13 13.
Sélectionner une page

[Programmation Python] Détecter des fuites dans son jeu

Accueil Forums THÉORIE & TECHNIQUE DU POKER Trackers & Logiciels [Programmation Python] Détecter des fuites dans son jeu

  • Ce sujet contient 12 réponses, 4 participants et a été mis à jour pour la dernière fois par Mike_modano, le il y a 7 années.
13 sujets de 1 à 13 (sur un total de 13)
  • Auteur
    Messages
  • #156352
    Mike_modano
    Membre

    Bonjour à tous,

     

    Je me suis lancé comme objectif pour 2019 de faire un programme pour extraire facilement les fuites dans mon jeu. Je suis débutant avec quelques bases dans la programmation en langage python et pour le poker je suis +/- breakeven en NL10…
    On peut déjà faire ce travail avec un tracker mais je trouve qu’il y a tellement de données et facteurs à analyser que je ne sais pas si je m’y prend bien et/ou si je ne passe pas à côté de quelque chose.
    J’ai vu un autre intérêt : vu que l’on ne peut pas prendre en compte le winrate sur de faibles échantillons (trop impacté par la variance), j’ai pensé à calculer des coefficients de corrélations pour estimer si la fuite est récurrente ou non..
    Vu que je fais peu de volume, cela me permettrait également de travailler sur des échantillons de mains plus petits.
    Pour la méthode, j’utilise Holdem Manager 1 pour extraire les données des différentes mains à étudier : il ressort un fichier csv avec toutes les mains et les conditions : position, cartes, gain…
    Cela m’a évité de passer du temps à faire un programme pour obtenir le même résultat mais certaines informations ne seront pas disponibles (par exemple si IP ou OOP).
    J’ai commencé par réaliser des petites fonctions pour effectuer certaines tâches, que je vais détailler dans les prochaines messages…
    Je ne promets pas de passer beaucoup de temps mais si cela intéresse certains, on peut avancer ensemble pour que tout le monde puisse en profiter…
    L’idée à terme est de pouvoir analyser un maximum de données et de faire ressortir les fuites les plus importantes pour travailler des situations précises.
    Pour ceux qui ont encore HM1, mes codes sont utilisables sans connaissance en programmation, il suffit d’installer le logiciel Anaconda (https://www.anaconda.com/download/) et de copier/coller les codes. Je ne pensais pas les mettre dans ce blog car un peu barbare pour ceux qui n’y connaissent rien en programmation… mais aucun problème pour les donner si besoin.

     

    Les possibilités sont quasiment infinies, je compte sur votre imagination pour proposer des choses également…

     

    Voici les différents rapports déjà réalisés :

    1. Rapport des gains par position
    2. Rapport des gains en fonction de l’action qu’il y a eu avant d’avoir la parole
    3. Rapport des gains en fonction de l’action préflop
    4. Rapport des gains en fonction du type de mains
    5. Cibler les situations les plus perdantes
    #156353
    Mike_modano
    Membre

    Pour le rapport par position, j’ai intégré dans un sous programme (fonction python) plusieurs actions :

    • Regrouper les mains par positions
    • Calculer les gains en EVbbs par position
    • Calculer le winrate en EVbb/100 par position
    • Comparer avec le winrate attendu (winrate attendu – winrate réel) par position
    • Calculer la différence en EVbbs par rapport au gain attendu par position
    • Trier le tableau par ordre croissant de la différence de gain par rapport au gain attendu par position

    Cela permet de voir quelle est la position pour laquelle je perds le plus d’EV…

     

    Voici ce que cela peut donner pour mes 50 000 dernières mains :

    Position EVbbs_sum EVbbs_count EVbb100 bb100_diff EVgain_diff

    BB

    -4563.3 9500 -48.0 -28.0

    -2663.3

    CO 1142.9 9102 12.6 -12.4

    -1132.6

    MD 939.4 7850 12.0 -12.0

    -944.6

    EA 1092.2 4476 24.4 2.4

    107.5

    SB

    -1326.7 9586 -13.8 1.2

    111.2

    BTN 3434.7 9486 36.2 1.2

    114.6

     

    Ce code fait 13 lignes et cela prend moins d’une seconde pour extraire le tableau pour un fichier de 50 kH .

    Voici le code pour vous donner une idée :

     

    import pandas as pd

     

    hh2=pd.read_csv(‘hh2.csv’,sep=’,’, encoding=’utf-8′)

    position_winrate=pd.read_csv(‘position_winrate.csv’,sep=’,’,dtype={‘Winrate’:float}, encoding=’utf-8′)

     

    def Position_Report():

    tab = hh2.groupby([‘Position’])[[‘EVbbs’]].agg([‘sum’,’count’])
    tab.columns = [‘_’.join(x) for x in tab.columns.values]
    tab[‘EVbb100’] = round((tab[‘EVbbs_sum’]/tab[‘EVbbs_count’])*100,1)
    tab = tab.reset_index()
    for row in tab.itertuples():
    tab.loc[row.Index,’bb100_diff’] = row.EVbb100 – EV_Winrate(row.Position)
    tab.loc[row.Index,’EVgain_diff’] = round(row.EVbbs_sum -row.EVbbs_count*(EV_Winrate(row.Position)/100),1)
    tab = tab.sort_values(by = ‘EVgain_diff’)
    return print(tab, ‘\n\n’)

    #156393
    dbabar007
    Membre

    Salut !

    J’y connais rien en programmation et en code mais ça a l’air vraiment pas mal et assez complet.

     

    Tu pourrais peut être ajouter (je sais pas si c’est possible) une ligne qui nous dit contre quelle position on perd le plus de jetons  :thinking-20060614:

     

    En tout cas à suivre de près !

    #156487
    Mike_modano
    Membre

    [quote quote=285338]Tu pourrais peut être ajouter (je sais pas si c’est possible) une ligne qui nous dit contre quelle position on perd le plus de jetons[/quote]

    En fait, je n’ai pas présenté les différentes colonnes mais EVbbs_sum représente le winrate en bb pour la position, je ne sais pas si c’est que tu appelles le nombre de jetons?

    EVbbs_count est le nombre de mains, EVbb100 le winrate en bb/100, bb100_diff la différence entre le winrate souhaité et le winrate réel et enfin  EVgain_diff ce que représente cette différence en bb vu que le nombre de mains joué est différent en fonction de la position…

    Pour les winrates souhaité par position, j’ai pris les valeurs suivantes :

    SB : -15.0 bb/100
    BB : -20.0 bb/100
    EA : 22.0 bb/100
    MD : 24.0 bb/100
    CO : 25.0 bb/100
    BTN : 35.0 bb/100

     

    Cela fait un winrate de 10 bb/100 avec mon style de jeu..

    #156488
    Mike_modano
    Membre

    2- Rapport des gains en fonction de l’action qu’il y a eu avant d’avoir la parole

     

    Ce rapport est encore plus simple : je supprime toutes les mains que l’on a fold puis je regroupe les mains en fonction de l’action qu’il y a eu avant que l’on ait la parole.

    Et de la même manière, je compte le winrate en EVbbs, le nombre de mains et le winrate en bb/100.

    Je fais un tri du plus petit winrate en bb/100 au plus grand.
    Ce qui donne pour mes dernières 50000 mains :

     

    Facing_Preflop EVbbs_sum EVbbs_count EVbb100
    Raiser + Caller(s) -311.1 1086 -28.6
    2+ Raisers 83.5 101 82.7
    2+ Limpers 228.9 700 32.7
    1 Raiser 473.4 4007 11.8
    1 Limper 1914.8 2221 86.2
    Unopened 4454.2 8915 50.0
    #156489
    Mike_modano
    Membre

    3-Rapport des gains en fonction de l’action préflop

    Ce rapport est également simple et rapide à exécuter : je supprime toutes les mains que l’on a fold puis je regroupe les mains en fonction de l’action réalisée préflop (C = call, RC = raise/call (call 3bet)…).
    Je compte également le le winrate en EVbbs, le nombre de mains et le winrate en bb/100.

     

    Ce qui donne pour mes dernières 50000 mains :

     

    PF_action EVbbs_sum EVbbs_count EVbb100
    C -4283.7 4065 -105.4
    RF -2584.0 771 -335.1
    RC -814.6 932 -87.4
    CF -292.1 93 -314.1
    X -143.5 1372 -10.5
    RRF -119.0 5 -2380.0
    RCF -37.5 3 -1250.0
    RCC 13.1 3 436.7
    RRR 42.0 1 4200.0
    CR 62.9 4 1572.5
    RR 102.7 100 102.7
    RRC 247.4 5 4948.0
    CC 423.8 113 375.0
    R 14226.2 9563 148.8

     

    On peut voir que le cold call est assez catastrophique pour mon winrate…  :carton2:

    #156490
    Mike_modano
    Membre

    4-Rapport des gains en fonction du type de mains

     

    Pour ce rapport, cela se complique un peu.
    Les mains apparaissent dans le tableau extrait de HM1 mais pas le type de mains.
    J’ai donc créé un fichier avec les 1326 combos et un type de mains correspondant.
    J’ai repris la classifications de HM3 à savoir :

     

    Types de mains Ranges
    Suited Aces AJs-A2s
    Big Ace Hands AK-AQ
    Pocket Aces AA
    Low Pairs 66-22
    Medium Pairs TT-77
    Big Pairs KK-JJ
    Non Suited Connectors KQo-54o
    Non Suited One Gapper KJo-64o
    Non Suited Two Gappers KTo-63o
    Suited Connectors KQs-54s
    Suited One Gapper KJs-64s
    Suited Two Gappers KTs-63s
    Non Suited Aces AJo-A2o
    Other Non Suited Hands K9o-32o
    Other Suited Hands K9s-32s

    J’ai créé un autre petit programme qui uniformise les mains du tableau puis qui va chercher le type de la mains pour chaque HH (par exemple : Ah2h renvoi « Suited Aces »)
    Ce petit programme est beaucoup plus long que les autres, cela prend environ 8 minutes pour 50000 mains.
    J’en ai profité pour calculer directement et ajouter une colonne au tableau les gains en EVbb et extraire un nouveau fichier csv pour que le fichier d’origine ne soit pas modifié.
    Ce programme est à lancer une fois au début et on peut faire toutes les analyses que l’on veut très rapidement par la suite, on peut ensuite extraire le winrate en fonction du type de mains :

     

    Ce qui donne pour mes dernières 50000 mains :

     

    Hand_Type EVbbs_sum EVbbs_count EVbb100
    Low Pairs -1140.6 1115 -102.3
    Suited Two Gappers -969.4 766 -126.6
    Other Suited Hands -340.1 1634 -20.8
    Suited Aces -258.4 1456 -17.7
    Non Suited Connectors -56.4 1885 -3.0
    Non Suited One Gapper 26.3 1273 2.1
    Medium Pairs 67.7 887 7.6
    Other Non Suited Hands 90.9 1820 5.0
    Non Suited Two Gappers 123.4 871 14.2
    Suited Connectors 467.7 1213 38.6
    Non Suited Aces 696.7 2420 28.8
    Big Ace Hands 946.7 1165 81.3
    Suited One Gapper 1316.7 1031 127.7
    Pocket Aces 2581.5 204 1265.4
    Big Pairs 3976.0 660 602.4
    #156492
    dbabar007
    Membre

    Le programme pour chaque catégorie de mains est vraiment une fonctionnalité hyper utile !

     

     

    #157366
    Mike_modano
    Membre

    5-Cibler les situations les plus perdantes

     

    L’objectif de ce rapport est d’utiliser toutes ces informations et de donner les 10 situations où l’on a perdu le plus de bbs.

    Je commence par supprimer les mains où j’ai fold préflop puis je fais l’équivalent d’un tableau croisé dynamique d’excel avec les différents paramètres de jeu.

    J’en profite pour calculer ce que cela représente en % du total des bbs perdues lorsque j’ai décidé de mettre de l’argent au pot (VPIP = true).

    Pour mes 50 kH, cela me donne ceci :

     

    PF_action Position Facing_Preflop Hand_Type EVbbs_sum EVbbs_count EVbb100 %Leak
    RR MD Unopened Big Ace Hands -551.7 9 -6130.0 2.076855
    RC BTN Unopened Suited Two Gappers -525.1 10 -5251.0 1.976721
    C BB Raiser + Caller(s) Low Pairs -401.3 41 -978.8 1.510680
    RC BB 1 Raiser Big Ace Hands -401.0 4 -10025.0 1.509550
    RC MD Unopened Low Pairs -381.6 25 -1526.4 1.436520
    C BTN 1 Raiser Low Pairs -364.1 61 -596.9 1.370642
    C SB 1 Raiser Suited Aces -320.6 58 -552.8 1.206887
    RR MD Unopened Medium Pairs -295.4 2 -14770.0 1.112023
    C BB 1 Raiser Medium Pairs -277.9 68 -408.7 1.046145
    C BB 1 Raiser Suited One Gapper -273.1 105 -260.1 1.028075

     

    Avec ces résultats, on peut voir qu’en 9 4bet avec des Big Aces Hands (AK-AQ), j’ai perdu plus de 2% de l’ensemble de mes pertes (quand je VPIP) sur 50 kH… probablement des erreurs qui coûtent très chères.

    A vérifier également les call 3bet au bouton avec les Suited Two Gappers…

    L’idée est de pouvoir faire des review plus précises sur les spots qui ont peu de mains et beaucoup de pertes…

    #157368
    Mike_modano
    Membre

    [quote quote=285338]Salut ! J’y connais rien en programmation et en code mais ça a l’air vraiment pas mal et assez complet. Tu pourrais peut être ajouter (je sais pas si c’est possible) une ligne qui nous dit contre quelle position on perd le plus de jetons :thinking-20060614: En tout cas à suivre de près ![/quote]

     

    Content que cela intéresse quelqu’un… même si tu as l’air d’être le seul!   :biere:

    Malheureusement, l’extraction des mains proposée par HM1 ne me donne pas la position de l’open raiseur!

    Il faudrait que je fasse un programme qui, à partir de la HH formaté du site sur lequel on joue, puisse faire un tableau avec toutes ces infos… cela me prendrait beaucoup de temps, j’ai donc décidé de n’utiliser que les informations récupérer par HM1…

    Mais je suis de ton avis c’est une donnée très importante que je ne pourrais pas utiliser…

    #157382
    papanoel
    Membre

    Bravo Mike_modano !

    Super boulot. Je ne savais qu’on pouvait utiliser « python » pour faire ça. En voyant ces quelques lignes de code, il faut déjà avoir de bonnes notions. Chez moi, j’ai juste le livre « python pour les kids » que j’ai acheté pour les enfants, mais personne ne l’a encore ouvert. As-tu des suggestions pour bien commencer le langage « python » (livre, web, vidéo) ? Je fais le même style d’analyse que toi, mais uniquement, à partir de HM2 et sur papier, lol. Je le fais toutes les 5000 mains. Par ces méthodes, tu identifies assez rapidement ce qui ne va pas dans ton jeu.

    Encore bravo pour ton travail

    #157430
    Mike_modano
    Membre

    [quote quote=286734]Bravo Mike_modano ! Super boulot. Je ne savais qu’on pouvait utiliser « python » pour faire ça. [/quote]

     

    Salut, merci.. on peut tout faire avec python… c’est un amusement pour moi de lier programmation et poker!!  :0061:

    Pour apprendre, vu que c’est un langage très utilisé il y a énormément de contenu gratuit… je te conseille des cours très complets pour apprendre pas à pas sur openclassrooms par exemple..

    Ce qui m’a fait bien progresser est le site https://www.codingame.com/ où tu peux essayer de résoudre des problèmes pour tous les niveaux avec les solutions des meilleurs codeurs…

    Tu peux réussir à résoudre un puzzle en 30 lignes là ou certains y arrivent en 5 lignes!  :respect1:

    Tu peux également essayer des déchiffrer un package comme trey qui permet d’évaluer l’équité de 2 combos pour un board donné.

    Si cela t’intéresse aucun problème pour donner les codes que j’ai déjà fait mais il faut encore avoir HM1 pour extraire la liste des mains…

    @++

    #157431
    dibeuv
    Membre

    GL pour ton projet.

    J’avais démarré un truc équivalent en awk directement sur les hh winamaw.

    Rien que de le coder, cela m’avait permis de détecter des leaks dans mon jeu ^^

    J’aime bien l’idée de construire les rapports au fur et à mesure. :plusun:

     

13 sujets de 1 à 13 (sur un total de 13)
  • Vous devez être connecté pour répondre à ce sujet.