【統計の問題・将棋ソフトは羽生より強い?】


「将棋のプロ棋士は将棋ソフトに勝てない?情報処理学会が勝利を宣言」
http://matome.naver.jp/odai/2144461135407442101?page=2
に、以下のような記述がありました。

「現役プロで最も将棋ソフトに詳しいといわれる千田翔太でさえ、特別な対策をせずに電王戦に出場するような強豪ソフトと真っ向から戦った場合で『勝率は7パーセント』」

「羽生善治らトップ棋士でも千田を相手に90パーセント以上勝つことは難しいため、『ソフトは既に人間を超えている』との推論が出てもおかしくない」

そこで統計の問題。

[1] ソフト対人間でも、人間対人間でも、1回の対局は(互いに分散が等しい)正規分布をしたくじを、自分の壺から1つ引き、数が大きいほうが勝つようなものとする。もちろん壺は各自で異なり、強者ほど平均値の大きい壺を持っている。

[2] [1]のルールで多数回の試行を行ったところ、千田のソフトXへの勝率は7%で、羽生の千田への勝率は90%だった

という前提から、「ソフトXが羽生より有意に強い」と言えるか、ざっくりとした計算経過とともに答えてください。
よろしくお願いいたします。

回答の条件
  • 1人1回まで
  • 13歳以上
  • 登録:2015/10/14 18:47:36
  • 終了:2015/10/15 23:18:09

ベストアンサー

id:a-kuma3 No.2

a-kuma3回答回数4546ベストアンサー獲得回数18962015/10/14 21:57:17

ポイント100pt

計算できたっぽい


カードを引いてその大小で勝ち負けを決めるということは、カードの数字の差がゼロよりも大きい確率が勝つ確率ということになります。

独立した正規分布からの標本の差の分布は、平均が ¥mu_1-¥mu_2 、分散が {¥sigma_1}^2+{¥sigma_2}^2 の正規分布に従う、を使います。
http://lbm.ab.a.u-tokyo.ac.jp/~omori/meiji2/sec4/sec4.html

強豪ソフト X_x と千田 X_c の差の分布、
X_x - X_c ¥sim N ( ¥mu_x-¥mu_c ¥hspace{5}, ¥hspace{5}{¥sigma_x}^2+{¥sigma_c}^2 )
は、分散が同じなので、こうなります。
X_x - X_c ¥sim N ( ¥mu_x-¥mu_c ¥hspace{5}, ¥hspace{5}{2 ¥sigma}^2 )

千田が強豪ソフトに勝つ確率が 7% ということは、確率分布で 0 以下が 7% ということです。
f:id:a-kuma3:20151014212654j:image

標準正規分布表を持ち出します。
http://www.koka.ac.jp/morigiwa/sjs/standard_normal_distribution.htm

表で 43% のところは Z = 1.475 くらいです。
なので、以下となります。
¥mu_x-¥mu_c ¥hspace{5} = ¥hspace{5} 1.475 ¥sqrt{2} ¥sigma


同様に、羽生 X_h と千田 X_c の差の分布、
X_h - X_c ¥sim N ( ¥mu_h-¥mu_c ¥hspace{5}, ¥hspace{5}{2 ¥sigma}^2 )
では、表から 40% は Z = 1.280 くらいです。
先と同様に、
¥mu_h-¥mu_c ¥hspace{5} = ¥hspace{5} 1.280 ¥sqrt{2} ¥sigma


問題の、強豪ソフト X_x と羽生 X_h の差の分布を考えます。
X_x - X_h ¥sim N ( ¥mu_x-¥mu_h ¥hspace{5}, ¥hspace{5}{2 ¥sigma}^2 )

先の式から、
¥mu_x-¥mu_h
= ¥mu_c + ¥hspace{5} 1.475 ¥sqrt{2} ¥sigma - (¥mu_c + ¥hspace{5} 1.280 ¥sqrt{2} ¥sigma )
= ¥hspace{5} 1.475 ¥sqrt{2} ¥sigma - ¥hspace{5} 1.280 ¥sqrt{2} ¥sigma
= ¥hspace{5} 0.125 ¥sqrt{2} ¥sigma
= ¥hspace{5} 0.17678 ¥sigma

標準正規分布表から Z = 0.17678 のときは、面積が 0.0701 くらいです。
つまり、0 以上になる確率が 57% 、つまり強豪ソフトが勝つ確率が 57% ということです。



後は、これが有意な差かどうかを検定します。

適合度検定を使います。
先に求めた強豪ソフトと羽生の勝率通りに対戦結果 57 : 43 が得られたとして、勝ち負けがどっこいどっこいの 50 : 50 と有意な差があるかどうか、です。

統計検定の説明は端折ります。
http://next1.msi.sk.shibaura-it.ac.jp/MULTIMEDIA/statistics/node21.html

H_0:強豪ソフトと羽生の勝率は等しい
有意水準:¥alpha = 0.05
統計量:
¥chi_0^2 = ¥frac{57^2}{50} + ¥frac{43^2}{50} - 100
¥hspace{20}= 1.96

カイ二乗分布表 http://www.biwako.shiga-u.ac.jp/sensei/mnaka/ut/chi2disttab.html より
¥chi_{0.05,2-1}^2 = 3.8416

よって帰無仮説は棄却できず、H_0 を容認。
つまり、強豪ソフトと羽生の勝ち負けには有意な差はない、ということになります。



追記です。

お話しの結末が気に入らない方がいらっしゃるようなので、別の結末を。

確率分布関数が手に入っているので、回数を繰り返せば強豪ソフトX が平均的に勝っちゃうというのは分かってます。
では、無類の勝率を誇るかどうか、という話。

将棋のタイトル戦は、年7回。
その7回全てに、決勝の番手勝負に羽生と強豪ソフトが勝ち残ったとして、7回のタイトル戦を勝ち越すことができる確率を求めてみます。

計算でも行けそうな気もしますが、プログラムでやってみました。

class CompX_Habu_Simulator

    def initialize
        @random = Random.new
    end

    def win_one_play?
        @random.rand <= 0.57
    end

    def win_one_title? n
        cond = n / 2.0
        win = 0
        lose = 0
        n.times {
            if win_one_play? then
                win += 1
            else
                lose += 1
            end
            break       if win > cond or lose > cond
        }
        win > cond
    end

    def win_one_year?
        win = 0
        4.times {
            win += 1    if win_one_title? 7
        }
        3.times {
            win += 1    if win_one_title? 5
        }
        win >= 4
    end

    def try number
        n = 0
        win = 0
        number.times {
            n += 1
            win += 1    if win_one_year?
        }
        puts "#{win} / #{n} --- #{win / (n * 1.0)}"
    end

end

s = CompX_Habu_Simulator.new
5.times {
    s.try 50000
}

七タイトル戦のうち、七番勝負が四回、五番勝負が三回です。
対戦の勝率 57% で、七タイトルのうち何勝取ったかをカウントします。
50,000回の試行を 5回繰り返しました。

#   4勝以上
39356 / 50000 --- 0.78712
39438 / 50000 --- 0.78876
39222 / 50000 --- 0.78444
39307 / 50000 --- 0.78614
39214 / 50000 --- 0.78428

#   5勝以上
25781 / 50000 --- 0.51562
25670 / 50000 --- 0.5134
25571 / 50000 --- 0.51142
25606 / 50000 --- 0.51212
25803 / 50000 --- 0.51606

#   6勝以上
10857 / 50000 --- 0.21714
10971 / 50000 --- 0.21942
10974 / 50000 --- 0.21948
10844 / 50000 --- 0.21688
10955 / 50000 --- 0.2191

勝ち越すかどうかでいうと、勝ち越す確率は 78~79% くらい。
圧倒的と言える 1回取りこぼすかどうかという確率は、22% くらいです。

まあ、試行回数が多くなるとこうなります。

ちょっと視点を変えて、一生の間にこの対戦をするのは多くても6回くらいだろう、と想定して、延べ6年 年に7回のタイトル戦を戦って強豪ソフトX が獲得したタイトルの数の度数分布を取ってみました。

タイトル数度数
00
10
224
393
4263
5387
6233

グラフにすると、こんな感じ。
f:id:a-kuma3:20151015210958p:image

6年の対戦で、タイトルを多くとった年が 4年以下が 38% の確率。
観戦する立場でいうと、サンプリングは一回だけですから、どっこいどっこいか 6年のうち 2年はタイトル数が負けているのが 5回に2回くらいの確率であります。

強豪ソフトX が圧倒的に強いというには、微妙なところです。

他6件のコメントを見る
id:a-kuma3

「有意な」というのをどう扱おうかは迷ったんですよね。
実際の勝負は別にして、モデルを限定した話なので、確率分布は分かってるわけだし。
最初の回答は、統計検定っぽい締めにしました。
モデルを限定している条件で実際にサンプリングをできるわけでもない話で統計検定にこだわっている方がいらっしゃるようなので、統計検定なんて関係ないじゃんというスタンスが追記の分です。

あと、もう1つ気になるのが各正規分布を独立とみなしていることですね。

その前に引っかかったのは、各人のカードの引き当て方の分散を同一だ、としているところでした。
計算機の方が体調などによるブレがなさそうなので分散は小さいだろうから数字が残りそうで面倒だなあと思ってたら、分散は同じと見なすと書いてあった(最初は見落としてた)ので、相性(つまりは相関)もバッサリと切りました。
わざわざ「分散が同じ」と書いているくらいなので、lionfan2 さんも想定していることだと思います。
# と、思って回答を書きました

2015/10/15 23:18:48
id:lionfan2

ありがとうございます。
自分の質問の仕方がまずかったですが、趣旨としては、本当に自分が知りたかったこととしては、a-kuma3さんの答えで完全に満足しています。

2015/10/15 23:19:09

その他の回答(1件)

id:MIYADO No.1

みやど回答回数374ベストアンサー獲得回数772015/10/14 19:42:44

ポイント30pt

試行回数が分からなければどうにもなりません。

> [1] ソフト対人間でも、人間対人間でも、1回の対局は(互いに分散が等しい)正規分布をしたくじを、自分の壺から1つ引き、数が大きいほうが勝つようなものとする。もちろん壺は各自で異なり、強者ほど平均値の大きい壺を持っている。

このような大胆なモデルを設定しても、くじの数値自体を観測するわけではなく、観測するのはあくまで勝敗です。ですから、羽生が勝つのをコインで表が出ると解釈して、コインが表が出る確率が1/2と言えるかどうかを検定する問題とみるべきです。それだと、n回実験した場合は、両側検定であれば、
|勝率-1/2|>1.96√{(1/2)(1/2)/n}=0.98/√n
で有意水準5%で棄却です。

片側検定であれば、1.96でなく1.645にして片側に棄却域を設けますが、ただし注意しなければならないのは、結果を見てから片側検定を選んではいけません。

id:MIYADO

ちょっと早とちりしていました。羽生と千田とソフトの三者がいるわけですね。すると単純ではありませんが、施行回数が分からなければ検定としてはどうにもならないことは確かです。

2015/10/14 21:42:51
id:lionfan2

みやど様、ご回答ありがとうございました。了解です。

2015/10/14 23:14:53
id:a-kuma3 No.2

a-kuma3回答回数4546ベストアンサー獲得回数18962015/10/14 21:57:17ここでベストアンサー

ポイント100pt

計算できたっぽい


カードを引いてその大小で勝ち負けを決めるということは、カードの数字の差がゼロよりも大きい確率が勝つ確率ということになります。

独立した正規分布からの標本の差の分布は、平均が ¥mu_1-¥mu_2 、分散が {¥sigma_1}^2+{¥sigma_2}^2 の正規分布に従う、を使います。
http://lbm.ab.a.u-tokyo.ac.jp/~omori/meiji2/sec4/sec4.html

強豪ソフト X_x と千田 X_c の差の分布、
X_x - X_c ¥sim N ( ¥mu_x-¥mu_c ¥hspace{5}, ¥hspace{5}{¥sigma_x}^2+{¥sigma_c}^2 )
は、分散が同じなので、こうなります。
X_x - X_c ¥sim N ( ¥mu_x-¥mu_c ¥hspace{5}, ¥hspace{5}{2 ¥sigma}^2 )

千田が強豪ソフトに勝つ確率が 7% ということは、確率分布で 0 以下が 7% ということです。
f:id:a-kuma3:20151014212654j:image

標準正規分布表を持ち出します。
http://www.koka.ac.jp/morigiwa/sjs/standard_normal_distribution.htm

表で 43% のところは Z = 1.475 くらいです。
なので、以下となります。
¥mu_x-¥mu_c ¥hspace{5} = ¥hspace{5} 1.475 ¥sqrt{2} ¥sigma


同様に、羽生 X_h と千田 X_c の差の分布、
X_h - X_c ¥sim N ( ¥mu_h-¥mu_c ¥hspace{5}, ¥hspace{5}{2 ¥sigma}^2 )
では、表から 40% は Z = 1.280 くらいです。
先と同様に、
¥mu_h-¥mu_c ¥hspace{5} = ¥hspace{5} 1.280 ¥sqrt{2} ¥sigma


問題の、強豪ソフト X_x と羽生 X_h の差の分布を考えます。
X_x - X_h ¥sim N ( ¥mu_x-¥mu_h ¥hspace{5}, ¥hspace{5}{2 ¥sigma}^2 )

先の式から、
¥mu_x-¥mu_h
= ¥mu_c + ¥hspace{5} 1.475 ¥sqrt{2} ¥sigma - (¥mu_c + ¥hspace{5} 1.280 ¥sqrt{2} ¥sigma )
= ¥hspace{5} 1.475 ¥sqrt{2} ¥sigma - ¥hspace{5} 1.280 ¥sqrt{2} ¥sigma
= ¥hspace{5} 0.125 ¥sqrt{2} ¥sigma
= ¥hspace{5} 0.17678 ¥sigma

標準正規分布表から Z = 0.17678 のときは、面積が 0.0701 くらいです。
つまり、0 以上になる確率が 57% 、つまり強豪ソフトが勝つ確率が 57% ということです。



後は、これが有意な差かどうかを検定します。

適合度検定を使います。
先に求めた強豪ソフトと羽生の勝率通りに対戦結果 57 : 43 が得られたとして、勝ち負けがどっこいどっこいの 50 : 50 と有意な差があるかどうか、です。

統計検定の説明は端折ります。
http://next1.msi.sk.shibaura-it.ac.jp/MULTIMEDIA/statistics/node21.html

H_0:強豪ソフトと羽生の勝率は等しい
有意水準:¥alpha = 0.05
統計量:
¥chi_0^2 = ¥frac{57^2}{50} + ¥frac{43^2}{50} - 100
¥hspace{20}= 1.96

カイ二乗分布表 http://www.biwako.shiga-u.ac.jp/sensei/mnaka/ut/chi2disttab.html より
¥chi_{0.05,2-1}^2 = 3.8416

よって帰無仮説は棄却できず、H_0 を容認。
つまり、強豪ソフトと羽生の勝ち負けには有意な差はない、ということになります。



追記です。

お話しの結末が気に入らない方がいらっしゃるようなので、別の結末を。

確率分布関数が手に入っているので、回数を繰り返せば強豪ソフトX が平均的に勝っちゃうというのは分かってます。
では、無類の勝率を誇るかどうか、という話。

将棋のタイトル戦は、年7回。
その7回全てに、決勝の番手勝負に羽生と強豪ソフトが勝ち残ったとして、7回のタイトル戦を勝ち越すことができる確率を求めてみます。

計算でも行けそうな気もしますが、プログラムでやってみました。

class CompX_Habu_Simulator

    def initialize
        @random = Random.new
    end

    def win_one_play?
        @random.rand <= 0.57
    end

    def win_one_title? n
        cond = n / 2.0
        win = 0
        lose = 0
        n.times {
            if win_one_play? then
                win += 1
            else
                lose += 1
            end
            break       if win > cond or lose > cond
        }
        win > cond
    end

    def win_one_year?
        win = 0
        4.times {
            win += 1    if win_one_title? 7
        }
        3.times {
            win += 1    if win_one_title? 5
        }
        win >= 4
    end

    def try number
        n = 0
        win = 0
        number.times {
            n += 1
            win += 1    if win_one_year?
        }
        puts "#{win} / #{n} --- #{win / (n * 1.0)}"
    end

end

s = CompX_Habu_Simulator.new
5.times {
    s.try 50000
}

七タイトル戦のうち、七番勝負が四回、五番勝負が三回です。
対戦の勝率 57% で、七タイトルのうち何勝取ったかをカウントします。
50,000回の試行を 5回繰り返しました。

#   4勝以上
39356 / 50000 --- 0.78712
39438 / 50000 --- 0.78876
39222 / 50000 --- 0.78444
39307 / 50000 --- 0.78614
39214 / 50000 --- 0.78428

#   5勝以上
25781 / 50000 --- 0.51562
25670 / 50000 --- 0.5134
25571 / 50000 --- 0.51142
25606 / 50000 --- 0.51212
25803 / 50000 --- 0.51606

#   6勝以上
10857 / 50000 --- 0.21714
10971 / 50000 --- 0.21942
10974 / 50000 --- 0.21948
10844 / 50000 --- 0.21688
10955 / 50000 --- 0.2191

勝ち越すかどうかでいうと、勝ち越す確率は 78~79% くらい。
圧倒的と言える 1回取りこぼすかどうかという確率は、22% くらいです。

まあ、試行回数が多くなるとこうなります。

ちょっと視点を変えて、一生の間にこの対戦をするのは多くても6回くらいだろう、と想定して、延べ6年 年に7回のタイトル戦を戦って強豪ソフトX が獲得したタイトルの数の度数分布を取ってみました。

タイトル数度数
00
10
224
393
4263
5387
6233

グラフにすると、こんな感じ。
f:id:a-kuma3:20151015210958p:image

6年の対戦で、タイトルを多くとった年が 4年以下が 38% の確率。
観戦する立場でいうと、サンプリングは一回だけですから、どっこいどっこいか 6年のうち 2年はタイトル数が負けているのが 5回に2回くらいの確率であります。

強豪ソフトX が圧倒的に強いというには、微妙なところです。

他6件のコメントを見る
id:a-kuma3

「有意な」というのをどう扱おうかは迷ったんですよね。
実際の勝負は別にして、モデルを限定した話なので、確率分布は分かってるわけだし。
最初の回答は、統計検定っぽい締めにしました。
モデルを限定している条件で実際にサンプリングをできるわけでもない話で統計検定にこだわっている方がいらっしゃるようなので、統計検定なんて関係ないじゃんというスタンスが追記の分です。

あと、もう1つ気になるのが各正規分布を独立とみなしていることですね。

その前に引っかかったのは、各人のカードの引き当て方の分散を同一だ、としているところでした。
計算機の方が体調などによるブレがなさそうなので分散は小さいだろうから数字が残りそうで面倒だなあと思ってたら、分散は同じと見なすと書いてあった(最初は見落としてた)ので、相性(つまりは相関)もバッサリと切りました。
わざわざ「分散が同じ」と書いているくらいなので、lionfan2 さんも想定していることだと思います。
# と、思って回答を書きました

2015/10/15 23:18:48
id:lionfan2

ありがとうございます。
自分の質問の仕方がまずかったですが、趣旨としては、本当に自分が知りたかったこととしては、a-kuma3さんの答えで完全に満足しています。

2015/10/15 23:19:09
id:lionfan2

質問文を編集しました。詳細はこちら

  • id:takejin
    人間が対戦する回数程度では、有意な判定はできないと言うことですね。
  • id:MIYADO
    そういうことではなく、試行回数が分からなければ検定のしようがないということです。

    コインを投げて60%が表が出た場合に、何回投げたのか分からなければ検定のしようがないのと同じことです。
  • id:rsc96074
    羽生さんらトップ棋士も将棋ソフトは持っているだろうから、彼らは、実際の自分の勝率を知っているはず。(^_^;
    統計的には何も言えないのに、勝利宣言してるってことは、非公開で直接本人に聞いているのかも。(^_^;
  • id:a-kuma3
    rsc さんも、あれ (http://www.ipsj.or.jp/50anv/shogi/20151011.html) を「勝利宣言」と取っちゃうのか...
    あれは字面通りに、「*終了* 宣言」だと思うんですけどね。

    「オセロは勝てるけど、将棋は無理だ」みたいなことが言われていた当初は、人間に勝てる将棋ソフトを作ることは、
    - ゲーム理論のステップアップ
    - もしかしたら、その先に人工知能が...
    みたいなことがあったと思うんです。

    実際には、CPU パワーの進歩に助けられたうえで、枝刈りと終盤の総当たり以外は、人間の試行をコードに置き換える程度のことしかできなくて(詳しいことを知らずに書いてます)、学者さんにとっては「もう、つまらん」ってなったんじゃないかと。


    もう、電王戦はないですかね。
    いわゆるトッププロ棋士との対戦は見てみたかったという気はしてます。
    でも、棋士側のメリットが少なすぎますよね。
    その辺りはプロモーションの問題だと思いますが、あまり儲かりそうもないので仕方ないか。


    テニスなんかのチャレンジなんかみたいに、将棋ソフトを実際の対戦で使えるようになったら面白いのに、と思ったりしました。
    対局に一回だけ将棋ソフトを使うチャンスがある。
    一回「使う」と宣言したら、その後は人間が指せない。
    終盤のミスを期待できないから、局面をどう有利にするかというところがとても大切になる。
    時間の節約になるという言い方はちょっと違うかもしれませんが、対局数を増やせると思うと、すそ野が広がって一部のトップ以外にもいろいろとチャンスができたりするのではないかなあ、などと思います。



  • id:rsc96074
    質問の先頭の方に「勝利を宣言」と書いてあったので、それを真に受けてしまいました。(^_^;
    最近の将棋ソフトは本当に強くなりました。次の課題は、自然な弱さの演出かな。(^_^;

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません