見出し画像

るなすぺ楽屋裏Σ①-「強い打ち手はひどい牌を打たない」を科学する

思えば、チームを引き継いでもうあっという間に2ヵ月が経とうとしている。時の流れが速過ぎて全く筆が追いつかないが、このシリーズも出来る限り継続していきたいと思っている。

さて、今回のテーマは「強い打ち手はひどい牌を打たない」である。このフレーズでピンと来た人も多いと思うが、原典は片山まさゆき先生のオバカミーコである。我々麻雀打ちの聖典だ。未読の人は全員読もう。

なぜこのフレーズを取り上げたのかと言えば、それは今期のるなすぺ育成枠、げんぶくんに押し引きの基準の話をしている時にふと脳裏に過ったからである。

「リャンシャンテンで明確な後手を踏んだら状況に関わらず降りられるなら降りよう」

「東場で両面テンパイしている形からの放銃は、打点に関わらず赤点になることはほとんど無いと思っていいよ」

「配牌がどんなに良く見えても、巡目と共に自分の手の価値は下がるから、終盤は1牌も甘えないのが大事」

こんな話をしながら、ひとつのアイデアが降ってきた。

「放銃にスコア付けすることは出来ないだろうか?」

麻雀におけるスタッツは、正直色んな要素が合算され過ぎていてわかりにくいところがある。その中でも、「放銃率」を考えるのはとりわけ難しい。例えば相手の打点読みが精確で、局進行考慮で安手の放銃が増えがちな人もいるだろうし、持ち点的に放銃が許される時、許されない時など置かれてるシチュエーションに左右されることも多い。典型的なのはオーラスで、鳳凰卓の観戦をしていると、「そこまでやるか」という頻度でハイレベルな差し込みが飛び交っていることがわかる。すなわち、放銃という行為にはマイナスどころかプラス評価になる場面も存在し得るにも関わらず、現状の一般的な麻雀界におけるスタッツでは全てをひとくくりにして「放銃」として扱ってしまっているのが現状なのだ。もしかしたら様々な条件付けを行った上で、より実力をはっきり表すことが出来る放銃の定義が作れるかもしれないと考え、今回は「強い打ち手はひどい牌を打たない」の数理的な説明にチャレンジしてみようと思う。

さて、チャレンジするとは言ったものの、まずは材料が必要だ。私自身は大きなデータベースから必要な材料を切り取ってきて意味ありげなグラフを生成するという仕事を生業としているので、それなりに知見はあるつもりだが、データベース自体が無ければ無力である。なんとか使える大きなデータの塊はないか、ということで白羽の矢を立てたのがようこさん(@Yohko_Arimura)だ。
ようこさんは数年目のOLを名乗りながら、凡そ一般人の範囲とは思えないレベルのネット麻雀データの集積を趣味(?)としており、約10年分の天鳳東南戦の対局情報を保持していることを知っていた。
そこで今回はこのテーマで研究をするためにデータベースを貸していただけないだろうか、という依頼をしてみたところ快諾していただき、結果的にこの記事を発表出来るまでに至ったという経緯もあり、ここで感謝を述べておきたい。

さて、使えるデータベースの目途は立ったものの、まずは切り口が必要だ。視覚的に違いが分かるようなグラフをゴールにする、というのが私のようなペテン…もといデータサイエンティストの定石なので、まずはゴールをイメージする。

イメージに必要なのは「ひどい牌」の定義付けだ。これはまず典型的な例を考えて見るとよいだろう。

「どっから打ってんだてめえ!」

古風(※主観に拠る)な風情を残した雀荘に通ったことがある人なら、もしかしたらこのフレーズを聞いたことがあるかもしれない。これは、雀荘に通い始めた大学デビューのルーキーたちが常連のオッサンに浴びせられる怒声のテンプレートであり、それこそ誰から見ても「ひどい牌」で放銃した時には、勝手に自分の手を倒されたりしたものである。

「イーシャンテンじゃねえか!」

開けた後には決まってこう言われる。仕方ないじゃないか。跳満チャンスだったんだ。当時はそんなことを思って聞いていたが、今考えれば確かにオッサンが勝手にこちらの手を倒してくる時の放銃は絵に書いたようなひどい放銃だった。

「深い巡目に」×「自分の手がテンパイしていない状態で」×「安牌があるのに押して放銃する」

これは明快な「ひどい放銃」のテンプレートと呼べるだろう

しかし早速ここで一つ問題がある。「安牌があるのに」は非常にデータとしての取得が難しい。というのも、何軒に対して受けていたか、のようなデータは牌譜の詳細を見なければ分からないし、究極私のレベルでは鳳凰卓の牌譜は見ても理解できないものが多分に含まれていそうな気がしてならない。

というわけで、今回は安牌の有無を大胆に捨象する。そもそも軸が多くなり過ぎると図示が難しいということもあるが、明確に数理的な区分が可能な「巡目」と「自手のシャンテン数」だけでもそこそこの情報になるだろうと踏んでそう決断した次第である。

というわけで、改めて今回の「ひどい放銃」のテンプレートはこちらになる。

「深い巡目に」×「自分の手がテンパイしていない状態で」放銃すること

テンプレートが決まれば調査することは自ずと定まる。まずは、放銃巡目と自手のシャンテン数別の放銃数を引っ張ってくれば良い。

「強い打ち手」の基準は段位とレーティングが選べるが、段位を採用した。これはレーティングを選んでしまうとシームレスなチャートを作るというやや複雑な処理をせねばならず、MySQLと手元のExcelだけで済ませようと考えている私には少し扱いづらかったというシンプルな理由からである。

取得データは以下の通りとする。
・局
・巡目
・放銃者の段位
・放銃者のシャンテン数
・和了役
・放銃者の持ち点

主要なKPIとなる巡目とシャンテン数、ラベルとなる段位を除いた項目についての解説をしておく。

まず「局」は差し込みを除外したいという意図で加えた。クエリ上は未加工で全てを持ってくるには持ってくるが、基本的に南4局以降(西入含む)の放銃はノイズが多そうなので除外して計算することとする。

「和了役」を加えたのは、一旦今回についてはリーチに対しての放銃に絞って数値を出して、それでも特徴量的に微妙そうだったら次、というアプローチにしようと考えたからである。というのも、リーチ以外への放銃だとそもそも「押してる」かどうかが微妙で、「ひどい」放銃にはなりづらいのではないか、という勝手なイメージからだ。もし「高段位はリーチ以外への対応こそ差が出るのだ!」みたいな説があったら教えてほしい。

最後に放銃者の持ち点を加えたのは、持ち点が少ない状況で押さざるを得ない、みたいなパターンでどうしても無理押しが増えるのは段位をあまり問わないのではないか、と考えたからである。

というわけで、ようこさんの天鳳DBから拝借する情報のクエリはこちらとした。

SELECT
c.kyoku,
c.jun,
c.fromDan,
c.fromShan,
c.STATUS,
COUNT(c.kyoku)
from
(select
a.kyoku as kyoku,
concat(a.jun,"jun") as jun,
concat(a.fromDan,"dan") as fromDan,
concat(a.fromShan,"shanten") as fromShan,
If(b.ten > 499,"A",if(b.ten > 399,"B", if(b.ten > 299,"C",if(b.ten >199,"D","E")))) as status
from
hoora a
inner join
init b
on
a.logfile = b.logfile 
and 
a.kyoku = b.kyoku 
and 
a.honba = b.honba 
and 
a.fromWho = b.player 
where 
a.yakuStr 
REGEXP
'.立'
AND
fromDan > 9
AND
fromShan != -1
LIMIT 10000000

) c

GROUP BY
kyoku,
jun,
fromDan,
fromShan,
STATUS

1000万放銃でLIMITを切ってるのは、全データ拝借しようとしたら2時間ほどで接続がロストしてしまったという物理的な理由による。ようこさんは自宅にサーバを立てているみたいな特殊環境ではなく、ガチで一般の人なのでここは仕方ない。
また、対象段位は初段以上とした。級位までは降級が無いため実質的に放銃の内容が段位と相関しづらく、打ってる数によってしまうというデータの歪みがありそう、と推測したためである。

兎にも角にも、まずはデータが手に入った。必要なデータを加工した上でまずは適当にマトリクスを作ってみよう。シンプルに、段位別で放銃巡目×シャンテン数のマトリクスを作るだけでも、そこそこ良い感じの分布になったりしないかな、と思って最初に作ったのがこちら

縦軸がシャンテン数、横軸が放銃巡目のマトリクス

大失敗である。仕事でやってたらデータの取り方から見直すレベルで何もわからない、というくらいに、全ての段位で同じようなマトリクスが出て来た。しかし今回は自由研究のような形でやっているのでせっかくならもう少しこのデータの塊をこすってみることにする。

次に考えたのは、「シンプルに、高段位になればなるほど局の後半の対リーチ放銃はテンパイから打ってるってことはないだろうか?」という切り口である。これも引っ張っても仕方ないのでもう答えを出そう。

一応相関らしい相関はした。が、面白くない。七段と八段が在籍数比で考えると狂人としか思えない数打ってるという事実の方が面白いくらいだ。というかこんなに打数に差が出るわけなかろう、と思って後追いで確認したら、ようこさんDB自体が鳳凰卓と技能戦のデータの混成であるという特殊なものであることを知った(割合的にはほとんどが鳳凰卓)。なるほど。データを改めて切り分けた方がいいかなとも思ったが、最初に作ったマトリクスを見る限り割とそのままいけそうなのでそのまま突っ切ることにする。技能戦はむしろ終盤で発生する差し込みのような概念を気にしなくてもいい分、綺麗な数値が出るはずだ。
さて、話を戻して何が面白くないのかと言えば、六段~天鳳位くらいまで思ったほどの差が無いことだ。そもそも終盤のリーチ放銃時に自身のテンパイ率が4割を割ったら特上卓にいるのも厳しい、というくらいのことは見えて来るが、高段位間での差はわかりづらいように思える。

と、ここまで集計して思い付いたのが、「リャンシャンテンから押して放銃はいついかなる時も大罪だが、イーシャンテンだとそこそこ許されることが多くなる」という「新科学する麻雀」の押し引きのチャートだ。もしかすると、もう少しシャンテン数に重み付けをして、巡目と合わせて計算すれば、一番最初に出したグラフよりはくっきりしたものが出て来るかもしれない。

ということで、ペテン師ならではの勘を最大限に働かせて生み出した数式がこちらだ。

クソプッシュスコア=(自分の手のシャンテン数+1)の二乗×放銃巡目

シャンテン数がひとつ増えると飛躍的にクソ度が増す計算になっている。また、テンパイ時とはいえド終盤にリーチに打ち込んだらスコアが悪化するようにゼロシャンテン(テンパイ)でも1を加算してから乗じている。これを元にRough Push Ratio(放銃におけるクソプッシュ割合)を導けば、もしかしたら段位との相関がより強く出て来るかもしれない。

というわけで練り出したチャートがこちら。

どうだろうか。「正当な放銃」と言えそうなクソプッシュスコア0~30と、ちょっと怪しいものが含まれてきそうな40~70の比率。これは鳳凰卓の住人が、いかに自手の価値判断を正確にやっているかを端的に示していると思えないだろうか。しかもこのRPR、その段位における「全リーチ放銃に対して」の比率を示しているので、そもそも放銃数自体が段位が上がるにつれて減っていくという傾向を加味すればなおさらクソプッシュの割合はくっきりするはずだ。
なお、110を超えるスコアに関してだが、ここに位置する放銃の大半はいわゆる終盤の「詰み」から発生しているのではないかと予測している。手を壊して安牌を抜いた後、最後に逃げ切れずに捕まるとスコア的には酷い数値になってしまう。これを踏まえ今回は「平均値」を取ることはしなかったが、それでも七段から天鳳位に掛けては頻度が綺麗に漸減している。これは安牌が切れた時の安全度比較能力の差かもしれない。

多少雑にはなったが、これを以て「強い打ち手はひどい牌を打たない」の数理的な調査はある程度成功した、ということにする。ちなみに放銃時の持ち点別でより強い相関が出ないかな、と持ち点別の集計もやってみたが、思ったほどうまくいかないどころかむしろ「点を持っていない時でも押せないもんは押せない」という傾向が高段位の方が強く出てるような面白い結果だったので、これはまた別の機会に時間を取って研究に回したいと思った次第である。

さて、そろそろ結びとしたいのだが、実は私は今回の解析はかなり思い切ってディティールを端折ったりしていることもあり、本質的な意義がそこまであるとは思っていない。論旨は実は別のところにある。

統計上の数値だけではわからないことはたくさんあるが、複数のデータを組み合わせることでより鮮明になる事象もある。仮に導出式があまり一般的ではなくわかりにくい論拠だったとしても、強者と強い相関がある計算指標が生み出せればそれは価値があるものだ。この考え方は私はセイバーメトリクスに教わった。

細かい指標を複数用いた複雑な計算式を使って、より精度の高い評価指標を作る、という現代野球のムーブメントは元々産業として始まったものではない。例えば失点するかどうかまでいくのは運ゲーになりがちだから、投手を正しく評価する指標はERAよりWHIPの方が正に近いのではないか、といった野球オタクやライターの議論の延長線上に今のセイバーメトリクスは花開いている(礎になったのは一人の統計家兼ライターだが、その着想は読者との議論の末に生まれたものだ)。

アメリカでは既にOPSやWHIPのような割と日本でも認知が進んだメジャーな指標だけではなく、もう一般人には記憶もしきれないくらいに多くの指標が生み出されている。それはただのオタクの余興に留まらず、例えば「ノーアウト2塁で確実に右方向に打てる能力」のような、雑なサマリデータでは拾い切れないような価値を可視化することで、それまで脚光が当たらなかったような選手が正当に評価され、活躍の場を得ることに繋がっている。

私は端的に言えば、同じことを麻雀でやりたいのだ。

麻雀の技術は、もっと細かく、正しく、定量化出来るのではないか。これだけデータが細かく取れるようになった世の中であれば、野球同様に、麻雀の分析の専門家が出てきても良さそうに思える。私は一人のプレイヤーとしてもっと成長したいという思いと同じくらい、こうした数理的なアプローチで麻雀の世界を広げていく一助となれるような、そんな存在になりたいと思っている。

現状で言えば、大変残念なことにまだまだ勉強不足であり、何を隠そう私自身が数学が大の苦手であるという致命的な弱点を抱えているため個人で出来ることに限界はあるものの、加工前のデータ抽出や前処理の能力と知見はもしかしたら何かの役に立てられるかもしれない。

それに、別に私じゃない誰かでも全く構わない話なのだ。この記事を目に止めた誰かが、詳細な牌譜データを活かしてより進歩した麻雀の技術の可視化に興味を持ってくれることがあれば、それだけで書いた甲斐があると言える。どんな形でもいい。麻雀を数理的なアプローチで分析するという土壌に貢献したい、その一心である。

今回協力してくれたようこさんは、今現在は雀魂の膨大な牌譜データのデータベース化に挑戦中である。ざっくり概要を聞いているだけでもかなりの障壁がありそうな高難度タスクではあるが、きっといつか完成させて、また一緒に何か共同研究が出来たらいいなと考えている。この記事に興味を持ってくれた皆さんにも、是非一緒にエールを送ってほしい。

最後にもうひとつだけ追記しておきたい。ようこさんにこちらの原稿チェックをお願いしたところ、「わたしが集計し、天鳳が権利を持っているが、そもそも鳳凰卓牌譜というものは、鳳卓民の技術と涙の結晶なので、打ち手への感謝とリスペクトを忘れてないこと」という素晴らしい言葉をいただいたので、改めて天鳳をプレーする皆さんへの敬意を込めて、結びとしたい。

スキだけでもとても喜びますが、サポートしていただけると執筆時に私が飲むコーヒーのクオリティが上がる仕組みになっています。