
将棋ウォーズ: 棋力レーダーチャートと達成率の相関関係
#将棋 #将棋ウォーズ #データ分析
将棋ウォーズで出てくる棋力を定量化した数値って実際達成率と相関関係あるの?ってのを調べてみた。
前置き
将棋ウォーズで10切れ初段になって早1年
ようやっと初段までたどり着いた\(^o^)/#将棋ウォーズ #shogiwars pic.twitter.com/DtiqNYoFKE
— しろくま (@sirteabear) April 27, 2021
そろそろ二段になりたいなと思いつつなかなかたどり着けないw
という話はさておき、初段になってちょっとしてからちゃんと対局履歴を付け始めました。振り返り大切。
データ
こんな感じ
import pandas as pd
df = pd.read_csv("~/Downloads/対局履歴.csv")
df = df.sort_values(by="日付", ascending=False)
df.shape
>> (971, 19)
df.head()

無課金なので1日3局。320日分くらい。
達成率の推移
達成率が100%になると昇段できる。
最初は20%切ったりして苦しかったけど、最近ようやく二段が見えてきた感じがすることがわかる。
import seaborn as sns
df["rolling"] = df["達成率"].rolling(90).mean().shift(-90)
sns.lineplot(data=df.rename(columns={"日付": "date", "達成率": "per"}).sort_values(by="date"), x="date", y="per")
sns.lineplot(data=df.rename(columns={"日付": "date", "達成率": "per"}).sort_values(by="date"), x="date", y="rolling")

オレンジ: 90対局(=30日)移動平均
85%まで行ったときは来たか!?って思ったけどその後ボロ負けして凹んだ。。
将棋ウォーズは20%を境とする内部レーティングがあるそうなので、多分80%にも境があって対局相手のレベルが変わるんじゃないかなぁと勝手に思ってる)
達成率については0%から20%の間と、20%から100%の間で、見た目の上昇率が異なります。
一言で説明すると、2級の100%=1級の20%=初段の0%となります。
将棋ウォーズで定量化されているデータ(+α)
以下が数値として見れる


攻撃力
このパラメータは序盤から中盤にかけての仕掛けを見ています
守備力
このパラメータは攻撃力とは逆に、序盤から中盤にかけて相手からの仕掛けを待つような棋風の人は高い数値が出ると思われます
芸術力
定跡を外すような手を多く指すと高くなります
早指力
1手当たりにかける時間が短いと高い数値が出ます
戦術力
定跡に沿った指し手が多いと高い数値が出るそうです
終盤力
終盤力の数値は段位(級位)と達成率によって決まるそうです
攻撃力 <-> 守備力、芸術力 <-> 戦術力は対みたい。
得意囲い、得意戦法は勝ち負けで項目名が変わるけど、私はゴキゲン中飛車しか指さないのでとりあえず気にしない(一時期中飛車左穴熊とか居飛車穴熊とかになってた気はする)
あと毎回AIで棋譜を解析して一致率・疑問手率・悪手率も記録してる。
使っているAIは昔は振電改、水匠4が出てからそっちに切り替えた。
どこでAI切り替えたか忘れたので気にしない。
どちらもたややんさん(htts://twitter.com/tayayan_ts)が公開しているもの。
本当にありがとうございます!
達成率との相関関係
本題。
各種定量化した数値は達成率と相関関係あるの?
例えば攻撃力と相関関係があれば今後攻撃を意識して指していったほう が良いよね?
コード
# なんかseabornの日本語フォントが死んでたので、ゲームっぽいパラメータ名に切り替え
df = df.rename(columns={
"達成率": "target",
"攻撃力": "str",
"守備力": "vit",
"芸術力": "dex",
"戦術力": "int",
"早指力": "agi",
"終盤力": "luk",
"得意戦法級・段": "atk",
"得意囲い級・段": "def",
"一致率": "hit",
"悪手率": "bad",
"疑問手率": "miss"
})[["target", "str", "vit", "dex", "int", "agi", "luk", "atk", "def", "hit", "bad", "miss"]]
# 級を正・段を負の値で管理していたので逆にした
df["atk"] = df["atk"] * -1
df["def"] = df["def"] * -1
結果
pd.DataFrame(df.corr()["target"]).sort_values(by="target", ascending=False).drop("target")

終盤力(luk)は達成率とほぼ完全に相関関係。これは前情報通り。
得意戦法(atk)と得意囲い(def)も達成率との相関関係が高い。その戦法で勝つと数値が上がるからまあ確かにそうなりそう。
攻撃力(str)と戦術力(int)が達成率との相関が高い。
つまり定跡を守りつつ先に仕掛けていくのが達成率を上げる方法。
早指力(agi)は…上げたいんだけど苦手なのよね。。。
逆に達成率と逆相関の関係にあるのが悪手率(bad)や疑問手率(miss)。
まあそりゃそうだ。
あんまり影響しないのが守備力(vit)、芸術力(dex)、一致率(hit)。
一致率はちょっと意外。いくら一致しても一発悪手でだめになっちゃうってことかな?
守備力と芸術力は攻撃力と戦術力の対なのでまあ納得。
ヒートマップ的にはこんな感じ。

攻撃力 <-> 守備力、芸術力 <-> 戦術力は逆相関に近い。
一方終盤力と早指力にはあまり関係がなさそう。
結論
自分から積極的に仕掛けましょう
定跡の勉強がんばりましょう
当たり前のことだなww