実データでの方式比較

2026-09-07 · 技術版 · 簡易版は 「SPSP のランキングはどれくらい当たっているか」

「評価指標の評価と整理」 で決めた指標と運用規則を、篝火 4 シーズン 180 大会の実データに当てた結果です。方式の比較、UltRank との比較、来季の設定変更の採点、実力帯別の判定を、大会単位の対応付き検定の数値つきで書きます。指標の定義と記号はその記事の 2 節のとおりです。

概要
目次
  1. 方式の比較
  2. UltRank との比較は、集計期間で分ける
  3. 来季の設定変更を採点し直す
  4. 実力帯別
  5. 再現手順

対象は篝火 #11〜#15 で区切った 4 季 (2023 年 10 月〜2026 年 5 月) の 100 人以上の大会 180 件です。各大会の直前時点のランキングからシードを作り、比べたい 2 つの並びを同じ大会で採点して、大会単位の対応付き \(t\) を出します。以下の \(t\) は特に断らない限り「正 = 前者が良い」に揃えてあります。

対象は篝火 #11〜#15 で区切った 4 季 (2023 年 10 月〜2026 年 5 月) の 100 人以上の大会 180 件です。各大会の直前時点のランキングからシードを作り、設定を変えた版と基準版を同じ大会で採点して、大会単位の対応付き \(t\) を出します。以下の \(t\) はすべて「正 = 変えた版が良い」に揃えてあります。

1. 方式の比較

素の Glicko-2 などは過去データを見ていない状態から学習するので、学習が浅い最初の季を除いた 3 季で比べます。

方式PAFWRULG (低いほど良い)MASPR (低いほど良い)
SPSP (ens)0.8600.7840.1730.988
直対単体 (bt)0.8540.7850.1690.996
順位単体 (tj)0.8550.7720.1871.020
Glicko-2 (素)0.8330.7650.1901.059
JJPR (参考)0.8310.7450.2251.145
Elo (素)0.8200.7520.2081.111
Bradley-Terry 最尤 (一括)0.7960.7320.2371.230

SPSP の組み合わせ方式は、歪まない指標でも他の方式に有意に勝ちます (ULG の大会単位の対応付き \(t\): Glicko-2 で 7.4)。JJPR は参考値です。試合を学習しない方式であり、実際のシードの基準でもあるので、PA は 指標の記事 4.4 節 の仕組みで高めに出ます。13 種類の指標で方式を並べると、11 種類で同じ順 (bt ≈ ens > tj > Glicko-2 > Elo > 最尤) になり、ずれたのは順位系だけでした。

2. UltRank との比較は、集計期間で分ける

UltRank 2025 Japan は 200 人の順位表で、2024 年 12 月 17 日から 2025 年 12 月 15 日の結果をもとに後から作られています。掲載選手同士に絞ってシードを振り直し、期間の前・中・後で分けました (PA / FWR / ULG)。

期間前 (69 大会)期間中 (56 大会)期間後 (23 大会)
SPSP0.774 / 0.674 / 0.3270.723 / 0.661 / 0.3800.741 / 0.678 / 0.380
UltRank0.701 / 0.660 / 0.3690.722 / 0.659 / 0.3500.714 / 0.651 / 0.401

期間中だけ UltRank が SPSP と同程度に見えます。評価している結果そのものを見て作られたランキングだからです。純粋な予想になる期間後では、PA と FWR で 2.7 ポイント下、ULG も 0.02 悪い値でした。シーズン別に分けても同じです (PA / FWR / ULG)。

シーズン (期間との関係)大会数SPSPUltRank
11_12 期間前300.781 / 0.677 / 0.3050.692 / 0.659 / 0.375
12_13 期間前390.768 / 0.672 / 0.3420.707 / 0.660 / 0.365
12_13 期間内250.721 / 0.657 / 0.3930.715 / 0.645 / 0.365
13_14 期間内240.721 / 0.668 / 0.3640.722 / 0.677 / 0.342
14_15 期間内70.736 / 0.650 / 0.3950.743 / 0.633 / 0.331
14_15 期間後230.741 / 0.678 / 0.3800.714 / 0.651 / 0.401

UltRank は 1 年間の実績を集計する順位表であって、次の大会を予想する道具として作られてはいません。集計期間内の結果に対しては SPSP と同程度の説明精度があります (ULG では上回る) が、期間外の大会では季を問わず 3 指標とも SPSP を下回ります。予測ランキングとして、つまりシーディングの基準としては不向きです。逆に、逐次予測の SPSP が後知恵の UltRank と期間内で同程度だったことは、SPSP 側の好材料です。

3. 来季の設定変更を採点し直す

来季に入れる予定だった 4 つの変更を、1 つずつ基準と比べました。

変更内容ULGFWRPA (参考)読み
FFIXGlicko-2 ライブラリがレーティングの 2 乗を誤って使う箇所を直す−0.96+1.02−0.14精度は変わらない (正しさのための修正)
dk3直対評価の 180 日ピークを古いほど減らす+0.72−0.77+2.52多くの指標で良い方向 (FWR だけはほぼ変わらず)。4 つの中で一番筋が良い
lv3wdレベル 3 の順位評価に平日大会を含める+1.47−0.15+0.80季によって良かったり悪かったり
bo5k3 本先取の試合の変動量を 1.25 倍−0.32−0.11+2.62順位系だけが良い (要注意の形)

bo5k は「順位系だけ改善」の形だったので、倍率 K を変えて調べました。基準 (K=1) との ULG の \(t\) は、K=0.8 で −0.40、1.1 で +1.27、1.25 で −0.32、1.5 で −1.79、1.75 で −2.61、2.0 で −3.51 でした。山は 1.1 付近で、1.5 以上は歪まない指標で単調に悪くなります。予定の 1.25 は山を過ぎていたので 1.1 に下げます。

lv3wd は、平日大会の順位ポイントに係数 W (1 未満) を掛ける形に変えました。W=0.5 で ULG +1.63 (4 季すべて正)、FWR +0.59 となり、W=1 (そのまま含める) にあった季依存が消えました。W=0.25 と 0.75 も試しましたが 0.25〜0.75 の範囲では差がなく平らで、180 大会では優劣を付けられません。0.5 は「平日は半分」という解釈のしやすさで選びました。

直対評価側でも、レベル 3 の選手の平日試合を 0.5 倍の変動量で学習する変更を試しました。単独では上位層でわずかに悪くなりましたが、他の変更と組み合わせると効果が上乗せされました。

組み合わせ (現行との差)ULGFWRPA
当初案 (4 変更をそのまま)+1.67+0.58+3.24
改訂 (K=1.1, W=0.5)+2.54−0.08+4.49
改訂 + 平日の直対を 0.5 倍+3.89+1.32+6.19

最終案は ULG の季別が +1.55 / +2.12 / +2.15 / +1.95 と 4 季すべてで \(t \approx 2\)、改訂前との直接比較でも ULG +2.67、FWR +2.24 と、歪まない 2 指標で有意でした。指標を見直したことで、当初案より良い設定にたどり着けたことになります。

4. 実力帯別

最終順位の帯 (1〜8 位、9〜16 位、…、2 のべき乗幅で 1025 位以下まで) ごとに、帯内の PA と、帯内の選手同士の試合の FWR / ULG を比べました。結論を先に書くと、トップは直対単体、中間はどっこい、裾野は組み合わせ寄り、です。

帯を 1〜16 / 17〜64 / 65〜1024 / 1025 位以下の 4 つにまとめ、直対単体と SPSP を 4 つの判定で突き合わせました (experiments/metrics/seed_metrics_band_boundary.py)。勝敗系 2 本は、両者の予想の勝者が食い違った帯内試合だけでどちらが当たったかの二項 \(z\) と、帯内試合 ULG の大会単位の対応付き \(t\)。順位系 2 本は、上下の予想が食い違った帯内ペアの二項 \(z\) と、帯の選手の MASPR の対応付き \(t\) です。符号は正 = 直対単体が良い、括弧は 3 季の符号です。

帯食い違い試合 \(z\)ULG \(t\)食い違いペア \(z\)MASPR \(t\)判定 (勝敗系)
1〜16+2.0 (+++)+3.1 (+++)+3.4 (+++)+2.7 (+++)直対単体
17〜64+1.2 (+−−)+3.5 (+++)+0.7 (−++)+0.8 (+++)どっこい〜直対単体
65〜1024+1.0 (+−+)−0.6 (−+−)−43.1 (−−−)−3.0 (−−−)どっこい〜SPSP
1025 以下−1.1 (−−−)−2.1 (−−−、5 大会)−74.2 (−−−)−2.2 (−−−、5 大会)どっこい〜SPSP

補足 (65〜512 位の差の出所): SPSP がシードに使われていない初期の季から +0.2 ポイント前後で一定だったので、SPSP 自身が表を組んだ効果ではありません。JJPR のシード列を実際のシードの代わりにして、SPSP と直対単体が逆の予想をした 7.9 万組を調べると、「JJPR と同じ側に付いた方が勝つ」構造 (SPSP が JJPR 側のとき 54.3%、直対単体が JJPR 側のとき 52.6%) でした。つまりこの帯の差は「JJPR に似た並びをする頻度の差」でほぼ説明できます。

5. 再現手順

# 標準評価 (篝火 4 季) のシードダンプ。設定を変えた版は環境変数を付けて同じ手順
SPSP_EVAL_DUMP_SEEDS=~/spsp-eval-dumps/seeds_14_15.jsonl python3 experiments/harness/eval_v4_ultrank_pertour.py 14_15.txt on
# 変えた版と基準の対応付き比較 (全指標の t)
python3 experiments/metrics/seed_metrics_arm.py --base ~/spsp-eval-dumps/seeds_1*.jsonl --arm ~/spsp-eval-dumps/seeds_arm_dk3_*.jsonl --label dk3 --out arm_dk3.json
# 方式比較 (jjpr / Glicko-2 / Elo / 最尤を時系列で学習)
python3 experiments/metrics/seed_metrics_methods.py --dump ... --phase jjpr ; ... --phase replay --ckpt ... --max-sec 240
# UltRank の期間分割 (--group both で季×期間)
python3 experiments/metrics/seed_metrics_ult_window.py --dump ... --jjpr-cache ... --seeds ... --group both
# 帯別の指標値と、帯ごとの 4 判定 (不一致試合 z / ULG t / 不一致ペア z / MASPR t、符号検定と Wilcoxon つき)
python3 experiments/metrics/seed_metrics_bands.py --dump ... --seeds ... --bands 1-16,17-64,65-1024,1025+
python3 experiments/metrics/seed_metrics_band_boundary.py --dump ... --seeds ... --bands 1-16,17-64,65-1024,1025+

レポート本体は experiments/metrics/reports/validated_metrics_202608/REPORT.md です (現在は非公開)。識別子との対応は 指標の記事の再現手順 を参照してください。