pystanによる将棋プロ棋士の実力値モデリング【先手と後手での実力差可視化】

## こんな人におすすめ

- 将棋が好きな人
- pystanによる統計モデリングに興味がある人
- 藤井聡太二冠の実力がすごいのかを知りたい人 

## この記事でやったこと
- 棋士ごとに先手、後手で実力値がどの程度違うかを検討
- pystanを用いて将棋のプロ棋士の実力値をモデリング
- 棋士の実力は対局ごとにばらつきのある正規分布としてモデリング
- 将棋レーティングサイトから対局結果をスクレイピングした結果を使用

## はじめに

藤井聡太二冠、強いですよね。テレビで取り上げられたりするなど将棋の露出度がましています。

プロの将棋でよく取り上げられる議題は、**後手番は本当に不利なのか？**というもの。普通に考えたら一手先にさせる分先手が有利そうです。事実としてプロの将棋では先手番の勝率の方がやや高くなっているそうです。(先手番勝率が53%程度)

しかし、それは将棋界全体でみた場合のはなし。実際は、棋士ごとに先手、後手どちらが得意かというのは異なるはず。
一般に棋士の実力値を数値化したものとして棋士のレーティングがあげられます。このレーティングサイトでは、棋士の実力値が数値化されています。しかし、先手後手ごとの数値化はなされていません。また、棋士の実力の安定感もレーティングからのみではわかりません。

そこで、本記事ではpystanを用いたベイズ統計モデリングによって
- **棋士ごとに先手、後手でどの程度の実力値の違いがでるか**
- **勝負ムラが大きい棋士、小さい棋士は誰か**
を検討したいと思います。

ちなみに、筆者は振り飛車党で好きな戦型は四間飛車です。

## 使用したデータ

- レーティングサイトからスクレイピング :http://kishibetsu.com/rating.html
- 2017年1月～2020年9月までの対局結果を使用
- 対局数が先手、後手それぞれ10局以上ある棋士の結果のみを使用(外れ値が生成されるのを防ぐため)
- 使用した対局数は7733局、棋士数は166人

下記の図のように先手(f列)、後手(s列)、対局結果(result列、trueだと先手勝ち)が保存されているdataframeを作成しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/533584/7a1eaa23-f471-9f22-ea88-f6d009f8cd34.png)


## 実力値のモデリング手法
参考文献の「StanとRでベイズ統計モデリング」にのっている手法を参考にしました。詳細は「ベイズモデリングで男子プロテニスの強さを分析してみた」にも記載されています。

概要を記すと
**- 棋士の実力値を$\mu$、実力ムラを$\sigma$として、対局時の実力は$normal(\mu,\sigma)$で表される
- 対局時の実力が高いほうが対局に勝利する**
とモデリングしています。
つまり棋士の真の実力に対して対局ごとにばらつきがある、とモデリングしているということになります。
このモデリングをすることで、**レーティングのみではわからなかった、勝負ムラが明らかになる**というメリットもあります。

先手、後手の実力をどうやってモデリングするか、ですが今回は先手と後手が全く別人だとしてモデリングを行いました。つまり、先手の実力値は先手の対局結果のみから推定され、後手の実力値は後手の対局結果のみから推定されます。

pystanでは勝者の列、敗者の列の二列を対局結果として与えます。そのため下記のようにwの勝者列、lの敗者列作成しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/533584/df6f605b-51b5-12cb-cd6f-eccccc5da833.png)

``` python:
df["w"] = np.where(df["result"],df["f_ID"],df["s_ID"])
df["l"] = np.where(df["result"],df["s_ID"],df["f_ID"])
```

## モデリング結果
計算はNUTSで行い1時間程度かかりました。

### 先手実力値が高い棋士TOP20
まずは計算結果の妥当性を確かめる上で先手版での実力値が高い棋士TOP20を抜き出します。
縦軸が実力値となっています。

またプロットしているのはモデリングされた実力の平均値を示しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/533584/04cc2621-72cc-f380-dc1d-74c5f5724af7.png)


この結果をみると、現在四強といわれている「藤井聡太、永瀬拓矢、豊島将之、渡辺明」の4人がtop4人となっており妥当性の高そうな結果が得られています。実力値の4分位点をみても有意性の
ある結果となっていそうです。

次に後手番top20の結果を示します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/533584/1b71d92a-d735-9ba1-126f-627fbc8eca9d.png)


やはり、「藤井聡太、永瀬拓矢、豊島将之、渡辺明」の4人がtop4人となっています。ただし、先程と比べるとそれ以外の方は入れ替わりがありますね。このことから先手とは違う実力値がモデリングされていることがわかります。**というより後手番藤井聡太圧倒的強さ...**

以上の結果、よりモデリングは妥当性の高そうな結果が得られていると考えられます。次に先手番と後手番でどの程度違いがあるかを検討していきます。

### 先手と後手番の差

先手番の上位の棋士の実力値を先手後手で比較してみます。下記の図において青が先手、オレンジが後手を表しています。箱ひげ図の箱が4分位点を表しており、この箱が重なってない場合有意差がありそうと考えることができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/533584/cf147a7c-c25c-3500-d30f-a67e5be6fa13.png)

上の図より以下のことがわかります。
- 多くの棋士は後手番のほうがやや実力値が低い
- 特に実力値に違いがあるのが斎藤慎太郎、渡辺明、菅井竜也
- 藤井聡太、羽生善治は後手番と先手番の実力差が少ない

この結果は感覚的にも正しそうです。藤井二冠は後手番でも勝率が高いですし、渡辺二冠は数年前後手番で特に苦戦していた印象があります。
これらのことから、**棋士により先手と後手の実力差には大きな違いがあることがわかりました**。

## 先手後手の実力差が大きい棋士

次は、先手後手の実力差が大きい/小さい棋士について可視化します。上位棋士39名に絞って実力差の違いを可視化しました。

まずは後手番のほうが強い棋士top10。
値が小さいほど、後手番のほうが強いことを示しています。際立っているのは糸谷哲郎、高見泰地、阿部健治郎の三人ですね。
あまり自分的には後手番のほうが強い印象がないので有識者の意見を聞いてみたいところです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/533584/efa58974-eb05-3739-ba26-b18f101cc5e2.png)

次に先手番のほうが強い棋士10人。値が大きいほど先手のほうが強いことを示しています。
際立っているのは斎藤慎太郎。これもそういう印象はないので意見求む。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/533584/ed89d511-bf4e-b66a-6270-d2406e7256fb.png)


## 勝負ムラの大きい棋士
次に勝負ムラの大きい棋士の結果です。分析したところ、勝負ムラは先手、後手で大きな違いがない棋士が多かったのでここでは先手の分析結果のみを使いました。

下記が勝負ムラの大きいとモデリングされた棋士10人です。注目は木村一基や菅井竜也。この二人は2017年から考えるとタイトル獲得歴もある棋士であり、そのときの爆発力が勝負ムラとしてモデリングされたと考えられます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/533584/2b89b083-fd11-0222-a049-f7cbbc8eef9c.png)


次に勝負ムラの少ない棋士10人。ここで藤井聡太、渡辺明の二名が入っているのが面白いところです。
この二人は実力値が高い上に、勝負ムラも少ない。
なのでこの二名は勝負の取りこぼしが少なく、安定して勝っているといえます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/533584/56886349-d612-6765-4c42-f3f3b81d44f9.png)

## 終わりに

- ベイズ統計モデリングを行って将棋棋士の実力値をモデリング
- 先手、後手の実力差の違いが明らかになった。多くの棋士は後手のほうが実力が低い。
- 後手番のほうが特に強いのは糸谷哲郎、高見泰地、阿部健治郎の三人。
- 先手番のほうが特に強いのは斎藤慎太郎。
- 渡辺明、藤井聡太は実力値が高いうえに勝負ムラも小さい。安定して勝っているといえる。

もし面白いと思ったらLGTMよろしくお願いします。

## その他解析したいこと
- 振り飛車党の棋士の後手番解析

## 

## 参考文献
StanとRでベイズ統計モデリング
https://www.amazon.co.jp/Stan%E3%81%A8R%E3%81%A7%E3%83%99%E3%82%A4%E3%82%BA%E7%B5%B1%E8%A8%88%E3%83%A2%E3%83%87%E3%83%AA%E3%83%B3%E3%82%B0-Wonderful-R-2-%E6%9D%BE%E6%B5%A6-%E5%81%A5%E5%A4%AA%E9%83%8E-ebook/dp/B07M8LWLS1/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&dchild=1&keywords=stan%E3%81%A8R&qid=1602217801&sr=8-1
ベイズモデルで大相撲力士の強さを判定してみた
https://qiita.com/a0082273/items/670ccafff23c3c576371
ベイズモデリングで男子プロテニスの強さを分析してみた
http://www.ie110704.net/2018/05/24/%E3%83%99%E3%82%A4%E3%82%BA%E3%83%A2%E3%83%87%E3%83%AA%E3%83%B3%E3%82%B0%E3%81%A7%E7%94%B7%E5%AD%90%E3%83%97%E3%83%AD%E3%83%86%E3%83%8B%E3%82%B9%E3%81%AE%E5%BC%B7%E3%81%95%E3%82%92%E5%88%86%E6%9E%90/