![見出し画像](https://assets.st-note.com/production/uploads/images/146520794/rectangle_large_type_2_aef356924f372519c2eaa9a99a79ff06.jpeg?width=1200)
機械学習を用いてGTO戦略を理解する Part I 〜XGBoostを用いたアクション頻度推定モデルの構築〜
自己紹介
はじめまして。Yuck(ゆっく)と申します。私は元々大学で機械学習(所謂AI)の理論的な側面を研究しており、その息抜きとして2022年ごろからポーカーを時々遊んでおりました。また昨年度は下記などのいくつかのトーナメントで運良く結果を残すことができました。
JOPT 2023 GF Builder 2nd/216 entries
JOPT 2023 Tokyo #02 NLH Hyper 1st/294 entries
15th Taiwan Millions Tournament (TMT) MiniStack (Event #21) 1st/86 entries
普段は、特にGTO戦略などに関して友人と議論しているのですが、その中で、実は自分が専門にしている機械学習と、ポーカーは非常に相性が良く、戦術を解析できるのでは、という話になりました。
そこで、いくつか実験していたところ結果がまとまったので今回noteを書く運びとなりました。
![思い出のトロフィーたち](https://assets.st-note.com/img/1717252390435-o7MLq6GMAI.jpg?width=1200)
全4回のnoteで行うこと
全4回を予定しており、以下の手順で機械学習を用いたGTO戦略の解析方法論の一つを示します。
Part I: XGBoostを用いたアクション頻度推定モデルの構築
Part II: Permutation Feature Importance (PFI)を用いた、アクション頻度決定における重要特徴量抽出
Part III: Partial Dependence (PD)を用いた、GTO戦略のマクロな理解
Part IV: Shapley Additive Explanation (SHAP)を用いた、GTO戦略のミクロ・マクロな理解
なおいずれのnoteも100bb 6max tableにおけるBB vs LJ (4bettor)の4bet potにおけるLJの25%CBの頻度を考察の対象とします。
具体的には、ボード・ハンドレンジの情報を用いて25%CBの頻度を予測するモデルを作成し、ボード・レンジの情報を変えた時にCB頻度がどう変化するかを一貫して考察します。
なお想定している読者層は以下です:
GTO戦略に興味がある。
機械学習・AIはよくわからない。
とりあえず解析結果だけでもしりたい。
はじめに
近年日本においてポーカーが大きな流行りを見せています。先日開催された、国内最大規模であるJapan Open Poker Tour (JOPT)ではメインイベントの参加者が約4000人ほどで、これは世界最大のポーカー大会の一つであるWSOPの約半分ほどの規模感であり、この盛り上がりは今後も続くと予想されます。
さて、ポーカーはゲーム理論の枠組みで解析することが可能であり、その戦略は完璧にバランシングされています。これをGTO戦略とよびます。
GTO戦略はPioSolverやGTO wizardなどを用いて戦略を学ぶことが可能です。しかし同時に、計算された戦略を人間に解釈するのは非常に困難であることも知られています。
例えば次の画面は100bb 6max cash tableにおける BB (3bettor) vs LJにおけるQsQh6sのFlopのBBの戦略です。この戦略はcheck, 33% bet, 66% betを非常に複雑な混合比を適切な頻度で分けることを要求しますが、これをそのまま人間に再現するのは非常に困難です。
![複雑なGTO戦略](https://assets.st-note.com/img/1717252389991-m8YNUWQUVr.png?width=1200)
そこで、bet sizeを制限し、人間に再現可能かつGTO戦略にくらべ十分に期待値の損失が少ない簡易戦略を導出する試みや、多様なボードにおけるハンド・レンジの戦略の傾向を考察する集合分析が日夜行われています。
しかしながら集合分析に機械学習やAIを持ち込んで解析しようという取り組みは比較的少ないと言わざるをえません(注1)。
機械学習とは
機械学習(およびAI)の定義は非常に難しい話ですが、ここでは簡便に、データが与えられた時に、そのデータから何らかの有用な知識を抽出する取り組みと定義します(注2)。
機械学習の最も基本的な応用は予測モデルの構築です。例えば代表的なところでいうと、画像に写っている物体を検知する画像認識が挙げられます。これは画像を入力、写っている物体を出力とし、その入出力の関係性・ルールをデータから抽出する取り組みといえます。他には、最近流行りのChatGPTは入力文章に対する返答を予測するモデルと捉えたり、diffusion modelは入力文章に対応する画像を出力するモデルとらえることができます。
また、単に予測するだけではなく、入出力の関係性を理解する取り組みも行われています。例えば、ある機械学習モデルが、ある会社の株価を一週間後に一株1000円から1100円に高騰すると予測したとします。当然この株に投資したい気持ちになりますが、この時、特に経営陣が意思決定をする上で、
機械学習モデルがなぜそのような予測を行ったのか?
予測にどの程度の確信度があるのか
というようなことを知りたい要望があります。
これを受け、機械学習モデルの予測の理由づけや、より一般的に、学習されたモデルを解析し、データの入出力の関係性を理解する取り組みが行われており、これをexplanable AI(XAI)や、解釈可能な機械学習(interpretable machine learning)と呼びます。
日本語では以下の書籍などで紹介されています。今回私が書く4回のnoteも基本的にはこちらの書籍で紹介されている解析手法をポーカーに適用する形で進めます。
https://www.amazon.co.jp/dp/429712226X
機械学習とポーカーの相性の良さ
私は機械学習とポーカーの相性の良さは、容易に大量のデータを得られることにあると考えています。
そもそも機械学習を実際に使用する上でよく問題になるのが、「データを入手できない」ことです(当然データがない状態で知識を抽出することは不可能なので)。
しかしポーカーにはそのような障壁が存在しないと言って良いでしょう。というのも、ソルバーを用いてさまざまなボード・ハンドレンジにおける戦略を入手したり、オンラインにおける人間同士の対戦ログを容易に入手可能だからです。
これらの大量に得られたデータを用いてGTO戦略を解析するのも良いし、あるいは実データから、レートごとの平均的なプレーヤーが犯すミスとそのexploit戦略の抽出なども興味深いと考えています。
XGBoost (XGB)を用いたアクション頻度の予測
前置きはこの程度にして、機械学習技術をGTO戦略の解析に適用していきます。全4回のnoteを通して、最終的にボード・ハンドの特徴とアクションの頻度の関係性を考察することを目標にします。
これの準備のため、まずレンジ・ボードの特徴から25%CBの頻度を予測するモデルを作成します。
今回利用するのはXGBoostというモデルです。XGBoostは比較的古いモデルなのですが、テーブル形式として表せるデータの予測に非常に相性が良く、いまだに現役で強力なモデルです。
実験設定
データ準備
100bb BB vs LJ (4bettor)の4bet pot
pot sizeは50.5bb、残りスタックは75bb
レンジは以下のものを使用しました(注3)。
![BBの4bet call range](https://assets.st-note.com/img/1717252390222-Uy5GUhLZiw.png?width=1200)
![LJ 4bet range](https://assets.st-note.com/img/1717252389746-SnewiUw0eK.png?width=1200)
betting sizeの設定は次のようにしました。
![betting sizeの設定](https://assets.st-note.com/img/1717252389237-IAUIl9t2CN.png?width=1200)
次に、PioSolverを用いて、被りのない1755flop全てでのゲームツリーを生成し、OOP checkのシチュエーションに関してIPのアクションに関する集合分析ファイルを生成しました(下記の2種類)。
![各ボードにおける、平均なアクション頻度・EVなどをまとめた表](https://assets.st-note.com/img/1717252388959-kNk2IOAp3N.png?width=1200)
![各ボードと各ハンドにおけるアクション頻度・EVなどをまとめた表](https://assets.st-note.com/img/1717252388700-MGYct3P7v0.png?width=1200)
XGBoostの学習
Pythonを用いて実装します。
データ準備にて準備した表から、以下の入力を新たに作成しました。
high: flopの1番大きな数字
middle: flopの2番目に大きな数字
low: flopの3番目に大きな数字
highcardness: high+middle+low(ボードに出ている数字の合計)
paired: ペアボードなら1、そうでないなら0
trips: ボードトリップスなら1、そうでないなら0
suited: suitedなら1、そうでないなら0
monotone: monotoneボードなら1、そうでないなら0
connectivity: high-low(ボードの一番大きな数字-ボードの一番小さな数字)
EQB: equity bucket, 25%刻み。考えているプレイヤーのハンドの、相手のレンジに対するエクイティのヒストグラム。 詳細はこちらの動画などが詳しいです(英語)。また、0-25%のEQBは、他の3つのEQBから再現できる(つまり実質的に追加の情報をもたない)ため、入力の特徴量からは外しています。
これらを入力にし、IPの25%CBの頻度を予測するよう学習を進めました(注4)。
実験結果
1755flopにおけるアクション頻度の予測精度をroot mean squared error (RMSE)で測ったところ6.16程度でした。また次に予測値の一部を示します(順序は特に関係ありません)。
![予測値](https://assets.st-note.com/img/1717252388496-I47qAsr5TK.png)
pred_yがモデルの予測、test_yが真の値です。ここから、おおむね±10%程度の精度になっていることがわかります。
今後はこのモデルは予測する上で一定の質が担保されているだろう、ということを認めたうえで次回のnote以降の解析を進めていきます。
まとめ
本noteでは機械学習の概要を説明し、次に機械学習とポーカーとの親和性について述べました。そして、ボード・ハンドなどの与えられた情報からアクションの頻度を予測することが十分に可能であることを実験を通して確認しました。
Part IIでは、Permutation Feature Importance (PFI)という指標を用いて、入力特徴量のうちどの特徴量が出力を精度よく予測するのに重要か?ということを検証していきます。
質問・コメントなどは@Yuck_PCPまでお願いします。
フォローやスキ(いいね)してくれると大変嬉しいです。
このnoteはhyugaさんおよびたこあげまつりさんの協力で制作されました。
私が探した範囲ではWagon_manさんのこちらのnote や、GTO WizardのAI機能以外には英語の記事を含めあまり見かける印象はありません。多少範囲を広げると、こちらのnoteなども非常にプリミティブな機械学習の応用例といえます。 なお、研究されている結果が内輪で共有されており、外部に情報が出回っていない可能性はあるだろうとは考えています。↩︎
AIと機械学習はしばしば混同されがちですが、機械学習はAIのsubsetです(人工的な知能の表現方法の一つです)。しかし本noteにはあまり関係のないことなので、これ以降、AIと機械学習を明確には区別せず、しばしば混同して説明を進めていきます。↩︎
3 million poker club (3MPC)配布のこちらのレンジを使用。↩︎
専門的な話をするとtrain、valid、testに分割し、その分割の仕方をいろいろ変えながら学習を行う通常のデータ分析の手続きをしていますが、詳細は省きます。↩︎
この記事が気に入ったらサポートをしてみませんか?