【連載企画:統計学による定石選択方法】
・第一回:レーティングのベイズ推定(今回)
・第二回:定石選択と多腕バンディット問題

こんにちは。今回はいつもの方針(分岐数などを参考にする)とは少し趣向を変えて統計学的なアプローチから序盤を考えてみたいと思います。第一回の今回ではまず、こういう風に定石を選ぶといいよという結論を述べます。そして次回の第二回で、その選び方が数学的に優れているという説明をします。

今回考えたいのはこういう問題です:
【問題】
Aさんは兎定石を愛用しており、その成績は2100勝1100敗、オセクエの定石レートで2210であった。一方、虎大量の成績は29勝15敗、レート2090(おそらくまだ収束していない)であった。長期的に見たときAさんはどちらの定石を練習したほうがいいだろうか?
※ちなみに将棋や囲碁にも適用できると思う

【Bさんのアドバイス】
「虎大量はサンプル数が少なく、勝てる(自分に合う)進行かどうかわからないので、もう少し試してみるといいのでは?」
この場合、
・ではどのくらい勝てれば兎定石から虎大量に乗り換えるか?
・逆に、どのくらい負けが込めば虎大量を切るか?
が不明確です。では、
「虎大量を100回くらい打って、そのときのレート(多分収束してる)を兎定石と比べればいいのでは?」
となると思います。実はこれは90点の解答で、かなりうまくいきます。この戦略で唯一上手くいかないケースは、「虎大量で負け続けている(例:70戦時点で32勝38敗)場合でも100回は試さないといけないので機会損失をしてしまう」場合です。(極端な例を言うと、暴走牛を100回も試したいと思いますか?)今回の趣旨は、ここを数学的に最適化して90点から100点を目指すことです。

【良い戦略】
先に結論を書きます。
①兎定石と虎大量のレーティングの95%信頼区間を出す(手法はベイズ推定:後述)
②信頼区間の上限が高い進行を採用する。(下限でもメディアンでもない。ここがポイント)
③高いほうを打っていって負けた結果、信頼区間の上限の大小が入れ替わったなら打つ進行を変える。
とやるとうまくいきます。

※この方針、多腕バンディット問題におけるUCB戦略と一致します。本記事では長くなりすぎるので第二回の記事で解説を書きます。

【信頼区間の復習】
大学の教養レベル?高校では習わないと思う。
明日の最高気温の90%信頼区間は[23度~28度]である
⇒明日の最高気温は9割くらいの確率で23度~28度の範囲に収まる。
という意味です。詳しくはggって

【具体例】
0019

※レートの95%信頼区間の表示機能はバージョン0.41以降の機能です(現在未公開)。
右上の方の文字を見ると、兎定石の信頼区間は  2176~2315

0020

虎大量は2055~2357
2315<2357なので、しばらくは虎大量を打つ方がいい。虎大量で負けが込んで上限が2315を割るようであれば兎(か別の進行)に戻す。

95%信頼区間の何がいいかというと、対局数の少なさを理論に組み込めていること。レートの最尤値(さいゆうち:最も可能性が高い値)で言えば虎<兎ではあるのだけど、虎の対局数が少ないため、信頼区間の幅が広くなっている。(感覚的にも対局が少ないほど実力が推し量りにくいのであっている。)幅が広くなった結果、上限で比べるとレートが逆転して兎<虎になる。

【95%信頼区間の具体例】
0021

・裏こうもりからの最善。実は自分はこの進行の経験が浅く、9勝7敗1分。
情報量が少ないため信頼区間は広くなる。1994~2454。

0022

・Fローズの進行で相手がミスって黒+10の勝勢になった盤面。102勝10敗0分。
信頼区間は2341~2670。この盤面になれば、自分の実力は最低でも2341くらいはある非常に得意な進行であることがわかる。
※強い人相手ではそもそもこの盤面にならないことに注意。

0023

黒もちのヘビ定石。基本的に自分は使わないがたま~に遊びで打ったことがある。11勝13敗0分。
信頼区間は1737~2100。自分の対斜め取りのレートが2155とかなので、2100<2155で有意に苦手な進行だとわかる(サンプルが24戦と非常に少ないにもかかわらずこの時点で判断が付くのがすごい!!!)。がっつり暗記を増やした場合は別として、このまま無対策でヘビを打つのは避けた方がいい。そもそも飛び出し(上限2208)、牛(上限2224)なので圧倒的にそっちがいい。

■■■■以下ちょっと難しい話。

【95%信頼区間の算出方法】
普通のベイズ推定です。読者も再現できるようにポイントだけ列挙します。

・ベイズの事前確率はどうするの?
⇒始めは、ベイズでよく取られる方法である1000~3000の間で等重率にしていたが、それだと5連勝しただけで信頼区間が2350~3000とかになってしまい不適当であった。そもそもレートが1500の確率と3000である確率が同じとする仮定はおかしい。ベイズの初期状態は大幅に違っていない限り割と何でもいいので、例えば2000を最大値とするべき分布に変えたら改善した。これを採用。

・事後確率の計算方法
⇒ベイズの式そのもの。イロレーティングの勝率の式を使って対戦数の分だけ確率分布の更新を行う。自分は引き分けと相手が仮レートの場合は計算対象から除外しています。

・事前確率から事後確率を求める際に試合結果(レートいくつの相手に勝ったか負けたか)と棋譜(盤面ごとの確率分布を計算する場合)が必要だが、そのデータってどうしている?
⇒独自の手法で全対局データと棋譜を収集しています。やりかたは非常に面倒なので教えられません。やりたい人はBlueStacks(PCからandroidアプリを使えるツール)とWireShark(アプリが通信している内容を覗き見られるツール)使って頑張ってください。もしくはオセクエ公式に信頼区間の表示機能か棋譜のダウンロード機能が実装されるよう祈ってください。それか手動でメモするw

・ベイズの確率分布のシミュレーション、幅が1刻みだと計算量多くない?bin数(3000-1000=2000)×対局数(1万ちょい)×60手の計算を毎回行っているの?
⇒ベイズの確率分布はレート50刻みで計算していて間を(対数空間上で)線形補間しています。なのでbin数は2000/50で40です。無視できるくらいの誤差はあります。

・時間がたつと、その定石の強さって変化する(例:暗記が増える)と思うけどその影響は考慮している?
⇒一部考慮しています。具体的に言うと事後確率分布を(対数空間上で)一回の更新当たり1/200ずつ減衰させています。ずっと昔の対局の影響がだんだん薄れていくイメージ。数学的に正しいかは知りませんw