見出し画像

(分析家向け)ターンの集合分析におけるボードファクターおよび計算式の設定について

さっそくターンの集合分析を始めています。

今回は、ターンの集合分析におけるExcelの計算式を紹介します。
手探りで試行錯誤しているため、もっとスマートな式ができるよ!など、ご意見をお待ちしてます。

1.シチュエーション

Snowie Preflop Adviserのレンジを使ったBBvsBTN(3bet pot)を想定します。

<Preflop> pot1.5bb
BTN:2.5bb raise
⇒BB:7.75bb raise
⇒BTN:7.75bb Call

<Flop> pot16.0bb
①パターン(Flopがストレート・モノトーン条件のどちらかを満たす場合)
 BB:ALL hand 4bb bet(pot25% bet)
 ⇒BTN:Call 4bb

②パターン(①を除く全てのパターン)
 BB:ALL hand 5.6bb bet(pot35% bet)
 ⇒BTN:Call 5.6bb

<Turn> pot 24.0bb or 27.2bb
 BB:??(35%potBet/70%/100%/120%/150%/Check)

<補足:フロップのパターン①②について>
今回、ターンの集合分析を行うためには、前提として、BBおよびBTNがフロップにおいて概ねGTO通りのアクションを採っていることが前提となります。

そのため、フロップのレンジベッティング戦略については、以前取り扱った「BBvsBTN(3bet)におけるレンジベッティング戦略」記事を基に、単一のレンジベッティング戦略よりもEV_LOSSが少ない「25%or35%の二枚刃レンジベッティング戦略」を使っています。

二枚刃レンジベッティング戦略とは、フロップが「ストレートが作るコンボがあるorモノトーンボードである」に該当する場合、平均よりもコール側のBTNに有利なフロップとなるため、レンジベッティングのベットサイズを25%potと小さく修正し、その他のボードでは35%potとする戦略です。
簡易的ではありますが、ボードに応じてレンジベッティングのBet額を変えることで、全てのボードで単一のベットサイズを使うよりも、BBがよりGTOに近い疑似GTO戦略を採ることができます。

ただ、今回の焦点はあくまでターンであり、フロップの設定については、「GTOからあまりに乖離したフロップ後のターンを集合分析しても仕方ないので、よりGTOに近いフロップのシチュエーションを採用した」くらいの認識で大丈夫です。


2-1.被説明変数:ターンごとのEQ・EV・CB_Ave

ターンの集合分析における被説明変数は、各ターンカードにおけるBB(オリジナル側)のEQ・EV・CB_Ave(CBサイズ加重平均値)について、想定される全てのターンカード49通りの平均値から差し引いたものとします。

この理由として、EQ・EV・CB_Ave(CBサイズ加重平均値)の値は、各フロップのボードにより、そもそもの分布が異なっています。
そのため、複数のフロップにおけるEQ・EV・CB_Aveを絶対値で比較した場合、フロップ時点での値に引っ張られてしまうことが想定されます。

こうした懸念を踏まえ、ターンカードの分析は、「フロップ時点におけるBBのEQ・EV・CB_Aveに対し、ターンカードが各項目をいくら改善(悪化)させたか」に着目することとし、被説明変数は、各ボードにおける平均値との差分と設定しました。

ここでは簡易化のため、被説明変数はCB_Ave(加重平均値)としましたが、加重平均値は、レンジベッティングの多頻度小Bet戦略とポラライズ系の低頻度大Bet戦略の違いを把握しにくいという欠点があります。
前回のターン集合分析導入記事でのご意見を参考に、次回以降の本格的な分析では、度数分布アプローチも試す予定です。

2-2.被説明変数:計算式

まず、I~K列にターンカードの数値を入力します。
フロップと重複するカードは追々数式で消すので、ひとまず52枚のカード全て入れて大丈夫です。

次に、GTO+のTurnReportのテキストを適当なところに貼り付けます。
(この図では、表の右側AB列に貼り付けています。)

これで準備ができたので、被説明変数として図のL~N列を計算させます。

●AVERAGE(3行目の基準値)
・EQ:L3=AVERAGE(AC4:AC52)
・EV::M3=AVERAGE(AD4:AD52)
・CB_Ave:N3=AVERAGE(AE4:AE52)*1.5+AVERAGE(AF4:AF52)*1.2+AVERAGE(AG4:AG52)*1+AVERAGE(AH4:AH52)*0.7+AVERAGE(AI4:AI52)*0.35)/100

●各ターンカードごとの値(4行目以降の個別値)
フロップで出ているカードはターンで落ちないので、ターンカードがフロップと重複する場合には、「-」と返すようにしています。
・EQ:L4=IFERROR(VLOOKUP(I4,AB:AC,2,false)-L$3,"-")
・EV:M4=IFERROR(VLOOKUP(I4,AB:AD,3,false)-M$3,"-")
・CB_Ave:N4=IFERROR((VLOOKUP(I4,AB$4:AJ$52,4,false)*1.5+VLOOKUP(I4,AB$4:AJ$52,5,false)*1.2+VLOOKUP(I4,AB$4:AJ$52,6,false)*1+VLOOKUP(I4,AB$4:AJ$52,7,false)*0.7+VLOOKUP(I4,AB$4:AJ$52,8,false)*0.35)/100,"-")


3-1.説明変数:各ボードファクターの設定

回帰分析のため、ダミー変数(条件を満たした場合に1、満たさない場合に0を出力する説明変数)を設定します。

今回、ダミー変数として設定したボードファクターは、以下の通りです。

①ボードナンバー
全てのターンカードが、以下(1)~(7)のどれかに該当するよう分類します。
 (1) Over…ターンカードがフロップ3枚よりも大きい
 (2) Top…フロップ3枚の1番大きい(1st)と同じ
 (3) Top~Mid…フロップの1st未満2nd超
 (4) Mid…フロップの2ndと同じ
 (5) Mid~Bot…フロップの2nd未満3rd超
 (6) Bot…フロップ3rdと同じ
 (7) Under…フロップの3枚よりも小さい

②コネクション
フロップのカードに近いターンカードを以下の(1)、(2)で判定します。
 (1) Pair…ボードにペアを作る(フロップのどれかと同じナンバー)
 (2) Connect…ボードにコネクタを作る(ペアでないかつフロップ3枚どれかのナンバー±1)

③ストレート
ターンカードによるストレートを判定します。
Straight…フロップから新たなストレートコンボを作る

既にフロップでストレートコンボがある場合でも、ターンカードによって、新しくストレートを作る5枚のコンビネーションがあるときに該当します。
例えば、[AQJ]のフロップでは、K,T,9,8が落ちた場合のみ、ダミー変数は1を出力します。

④フラッシュ
ターンカードによるフラッシュを判定します。
 Flash…ターンカードがボードに新たなフラッシュコンボを作る

ストレートと同様、ターンカードでフラッシュ目が進行する場合のみ該当します。
例えば、フロップでスペードのモノトーンボードだった場合、ターンが4枚目のスペードの場合は1を出力しますが、違うスートの場合には0を出力します。

⑤ラグ
下記の条件を満たす場合に該当します。
・ボードナンバーがMid未満
・ボードにペア、コネクタを作らない
・ボードに新しくストレートまたはフラッシュのコンボを作らない

要するに、各プレイヤーのハンドレンジに対して、一見影響が無さそうなターンカードをざっくり一括りにしています。

もちろん、ラグカードの定義はあくまで一例であり、もし分析することがあれば、好みで設定して頂いて大丈夫です。


3-2.説明変数:各ボードファクターの計算式

上記の各ダミー変数について、Excelおよびスプレッドシートにおける計算式の一例を紹介します。

と、その前に、ダミー変数の計算式をコンパクトにするため、
①フロップを1枚ずつ分解する
②ボードファクターを判定する
という2段階の計算式にしています。

 
①フロップボードの分解(B~G列)

この図では、ボードのテキスト表示をI2部分(表の左上)に貼り付けると、B~G列にフロップの各カードを分解した数値が入るようになっています。

このB~G列について、計算式を作ります。

ちなみに、プチ機能ですが、GTO+では、左のメニューバーのボードを選択し、さらにボード欄をクリックすると、ボードをテキストで出力できます。

でも、普通に手打ちした方が手っ取り早いです。
悲しいね。

また、カードのナンバーを数値に変換するため、VLOOKUP関数用のシートを作っておきます。
(VLOOKUP関数用のシートについては、下の記事の項目4あたりに詳細があります。)

VLOOKUP関数用の"ラベル"シートを作成後、フロップのボードを分解するB~F列・J~K列の計算式は、以下のとおりです。

<フロップボードの分解>
・B列

B4=VLOOKUP(MID(I$2,1,1),'ラベル'!A:B,2,false)
・C列
C4=MID(I$2,2,1)
(D~G列は、B・C列の数式におけるMID関数を(I2,3,1)、(I2,4,1)とそれぞれ変えるだけです。)

<ターンカードの設定>
・J列
J4=VLOOKUP(MID(I4,1,1),'ラベル'!A:B,2,false)
・K列
K4=MID(I4,2,1)

 
②ボードファクターの判定

ターンカードの各要素を分解し、ボードファクターごとに分類します。
全てダミー変数として設定しており、該当するときに「1」、該当しないときに「0」を出力する、スイッチのような計算式となっています。


1.ボードナンバー

ターンカードのナンバーについて、フロップのボードを基準に分類します。

 (1) Over…ターンカードがフロップ3枚よりも大きい
O4=IF(J4>B4,1,0)=IF(J4>B4,1,0)
 (2) Top…フロップ3枚の1番大きい(1st)と同じ
P4=IF(J4=B4,1,0)
 (3) Top~Mid…フロップの1st未満2nd超
Q4=IF(AND(B4>J4,J4>D4),1,0)
 (4) Mid…フロップの2ndと同じ
R4=IF(J4=D4,1,0)
 (5) Mid~Bot…フロップの2nd未満3rd超
S4=IF(AND(D4>J4,J4>F4),1,0)
 (6) Bot…フロップ3rdと同じ
T4=IF(J4=F4,1,0)
 (7) Under…フロップの3枚よりも小さい
U4=IF(J4<F4,1,0)


2.コネクション

ターンカードがボードにもたらすコネクションについて判定します。

 (1) Pair…ターンがボードにペアを作る
V4=IF(OR(J4=B4,J4=D4,J4=F4),1,0)

 (2) Connect…ターンにコネクタを作る
W4=IF(AND(V4=0,OR(ABS(J4-B4)=1,ABS(J4-D4)=1,ABS(J4-F4)=1)),1,0)


3.ストレート
ターンカードが新たにストレートコンボを作るかどうかを判定します。

  Straight…ターンが新たにストレートコンボを作る
=IF(V4=1,0,IF(AND(AND(B4<>D4,D4<>F4,B4<>F4),MAX(B4:G4)-MIN(B4:G4)<5),IF(AND(LARGE(B4:K4,1)-LARGE(B4:K4,3)<5,LARGE(B4:K4,2)-LARGE(B4:K4,4)<5),1,0),IF(OR(B4=D4,D4=F4),IF(MAX(B4:K4)-MIN(B4:K4)<5,1,0),IF(OR(LARGE(B4:K4,1)-LARGE(B4:K4,3)<5,LARGE(B4:K4,2)-LARGE(B4:K4,4)<5),1,0))))

<2019.8.31 数式修正>
フロップがペアボードの場合、一部ストレート判定が不正確に出てしまう事象を修正しました。
ホールデムでストレートという役を作るには、必ずボード上の3枚を使い、かつ1st~3rdまたは2nd~4rdが4以下の差分に収まる必要があります。
判定式は、ターンカードがフロップにペアを作らない(フロップのカードと重複した場合は、新たにストレートを作り得ないため)ことを前提として、
①既にフロップでストレートができている場合
②フロップではストレートコンボが無い場合
にそれぞれ分岐させ、新たな5枚のストレートコンボの有無を確かめています。
なお、A=1とする[A2345]のパターンを含めたストレートコンボを判定するには、VLOOKUP関数用のラベルをA=1としたパターンを作り、同じ数式をもう一度繰り返せば可能です。


4.フラッシュ
ターンカードが新たにフラッシュコンボを作るかどうかを判定します。

 Flush…ボードに新たなフラッシュコンボを作る
Y4=IF(COUNTIF(B4:G4,K4)>=2,1,0)


5.ラグ
ターンカードがざっくり「ラグ」として分類できるかどうかを判定します。

  Rag…以下の条件を満たすカード
・ボードナンバーがMid未満
・ボードにペア、コネクタを作らない
・ボードに新しくストレートまたはフラッシュのコンボを作らない
Z4=IF(SUM(O4,Q4,V4:Y4)=0,1,0)


4.おわりに

長々と計算式を転記してきましたが、Excelおよびスプレッドシートにおけるターン分析用計算式は以上になります。
稚拙な部分が目立ちますが、これから分析をする方々に、なにかしら参考となれば幸いです。

なお、上記の数式は一度設定してしまえば、後はI2セルのボードテクスチャとGTOソフトの出力データを洗い替えるだけで、下図のように量産が可能です。便利ですね。


以上で、シチュエーションとファクターの設定を終えることができました。
次回から、ようやく集合分析に入れそうです。

ちなみに、次回の記事のタイトルは、
「ターンカードは誰のもの?
 ~ レンジベッティング、それからの行方(ゆくえ) ~」
です。

はい、かっこいい!

基本無料・無課金制NOTEです。 ご連絡はTwitter@NENDERS_Pokerまで。