TadaoYamaokaの開発日記

個人開発しているスマホアプリや将棋AIの開発ネタを中心に書いていきます。

【dlshogi】入玉特徴量 その3

前回入玉宣言に関する特徴量を加えたモデルの強さを測定したが、入玉宣言勝ちした棋譜がなく入玉の精度が測定できていなかった。

NNUE系を相手にして連続対局を行い測定しなおした。

強さ

NNUE系を相手に互角局面から連続対局を行った結果は以下の通り。
NNUE系は持ち時間を調整しているので、参考値。

   # PLAYER          :  RATING  ERROR  POINTS  PLAYED   (%)  CFS(%)    W    D    L  D(%)
   1 nnue-4th        :    29.2   20.9   333.0     600    56      53  313   40  247     7
   2 resnet          :    27.5   40.1    99.5     200    50      92   92   15   93     8
   3 nyugyoku20      :   -22.0   40.7    85.5     200    43      64   79   13  108     6
   4 nyugyoku10      :   -34.6   38.7    82.0     200    41     ---   76   12  112     6

White advantage = 11.90 +/- 13.71
Draw rate (equal opponents) = 6.74 % +/- 1.05

前回と同様に、入玉特徴量なしの通常のResNetが一番強い(信頼度 92%)という結果になった。
入玉特徴量を加えると、詰みによって勝つ将棋には負の影響があることがわかった。

入玉宣言勝ちの精度

入玉宣言勝ちの数をカウントした結果は以下の通り。

モデル 入玉宣言勝ち
入玉特徴量なし 18
入玉特徴量あり(残り点数10点未満) 16
入玉特徴量あり(残り点数20点未満) 24

入玉特徴量あり(残り点数20点未満)の場合が、入玉宣言勝ちの数が最も多かった。

カイ二乗検定で、適合度検定を行うと、帰無仮説=すべてのモデルで入玉宣言勝ちの割合は同じに対して、p値は0.48となり、帰無仮説は棄却されない。
よって、有意差はない。

import numpy as np
import scipy.stats as stats

observed = np.array([18, 16, 24])
total_samples = 200 * 3
expected_prob = sum(observed) / total_samples
expected = np.array([200 * expected_prob] * 3)
chi2_stat, p_value = stats.chisquare(f_obs=observed, f_exp=expected)
print(f"p値: {p_value}")
p値: 0.4079740440452

200回の対局では測定できない程度の違いであり、入玉特徴量は実際の対局では効果はなさそうである。

まとめ

入玉特徴量を加えたモデルで、NNUE系と連続対局を行い強さを比較した。
結果、入玉特徴量がない通常のResNetが一番強いという結果になった。
また、入玉宣言勝ちした数を比較したが、有意差はなかった。
入玉特徴量が効果を発揮するケースは少なく、通常の対局が弱くなるため、今回実験した条件では入玉特徴量を加えることは効果的でないと言える。
ただし、入玉の訓練データを増やした場合など条件を変えれば効果がある可能性はある。