実データでの方式比較
「評価指標の評価と整理」 で決めた指標と運用規則を、篝火 4 シーズン 180 大会の実データに当てた結果です。方式の比較、UltRank との比較、来季の設定変更の採点、実力帯別の判定を、大会単位の対応付き検定の数値つきで書きます。指標の定義と記号はその記事の 2 節のとおりです。
- SPSP の組み合わせ方式 (ens) は、シードバイアスのない指標でも Glicko-2、Elo、最尤に有意に勝ちます。直対単体 (bt) とは全体では互角です。
- UltRank 2025 は、集計期間内の結果に対しては SPSP と同程度の説明精度がありますが、期間外の大会では季を問わず 3 指標とも SPSP を下回ります。予測ランキングとしては不向きです。
- 来季の設定案は基準に対して ULG +3.9、FWR +1.3 です。
- 実力帯別では、1〜16 位は直対単体、17〜64 位はどっこいから直対単体寄り、65〜1024 位はどっこいから SPSP 寄り、1025 位以下は SPSP 寄り (大会数 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 季で比べます。
| 方式 | PA | FWR | ULG (低いほど良い) | MASPR (低いほど良い) |
|---|---|---|---|---|
| SPSP (ens) | 0.860 | 0.784 | 0.173 | 0.988 |
| 直対単体 (bt) | 0.854 | 0.785 | 0.169 | 0.996 |
| 順位単体 (tj) | 0.855 | 0.772 | 0.187 | 1.020 |
| Glicko-2 (素) | 0.833 | 0.765 | 0.190 | 1.059 |
| JJPR (参考) | 0.831 | 0.745 | 0.225 | 1.145 |
| Elo (素) | 0.820 | 0.752 | 0.208 | 1.111 |
| Bradley-Terry 最尤 (一括) | 0.796 | 0.732 | 0.237 | 1.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 大会) | |
|---|---|---|---|
| SPSP | 0.774 / 0.674 / 0.327 | 0.723 / 0.661 / 0.380 | 0.741 / 0.678 / 0.380 |
| UltRank | 0.701 / 0.660 / 0.369 | 0.722 / 0.659 / 0.350 | 0.714 / 0.651 / 0.401 |
期間中だけ UltRank が SPSP と同程度に見えます。評価している結果そのものを見て作られたランキングだからです。純粋な予想になる期間後では、PA と FWR で 2.7 ポイント下、ULG も 0.02 悪い値でした。シーズン別に分けても同じです (PA / FWR / ULG)。
| シーズン (期間との関係) | 大会数 | SPSP | UltRank |
|---|---|---|---|
| 11_12 期間前 | 30 | 0.781 / 0.677 / 0.305 | 0.692 / 0.659 / 0.375 |
| 12_13 期間前 | 39 | 0.768 / 0.672 / 0.342 | 0.707 / 0.660 / 0.365 |
| 12_13 期間内 | 25 | 0.721 / 0.657 / 0.393 | 0.715 / 0.645 / 0.365 |
| 13_14 期間内 | 24 | 0.721 / 0.668 / 0.364 | 0.722 / 0.677 / 0.342 |
| 14_15 期間内 | 7 | 0.736 / 0.650 / 0.395 | 0.743 / 0.633 / 0.331 |
| 14_15 期間後 | 23 | 0.741 / 0.678 / 0.380 | 0.714 / 0.651 / 0.401 |
UltRank は 1 年間の実績を集計する順位表であって、次の大会を予想する道具として作られてはいません。集計期間内の結果に対しては SPSP と同程度の説明精度があります (ULG では上回る) が、期間外の大会では季を問わず 3 指標とも SPSP を下回ります。予測ランキングとして、つまりシーディングの基準としては不向きです。逆に、逐次予測の SPSP が後知恵の UltRank と期間内で同程度だったことは、SPSP 側の好材料です。
3. 来季の設定変更を採点し直す
来季に入れる予定だった 4 つの変更を、1 つずつ基準と比べました。
| 変更 | 内容 | ULG | FWR | PA (参考) | 読み |
|---|---|---|---|---|---|
| FFIX | Glicko-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 | 季によって良かったり悪かったり |
| bo5k | 3 本先取の試合の変動量を 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 倍の変動量で学習する変更を試しました。単独では上位層でわずかに悪くなりましたが、他の変更と組み合わせると効果が上乗せされました。
| 組み合わせ (現行との差) | ULG | FWR | PA |
|---|---|---|---|
| 当初案 (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 |
- 1〜16 位: 4 本すべて直対単体で、3 季とも同じ向き。
- 17〜64 位: ULG だけ直対単体が有意 (\(t\) 3.5、3 季同方向) で、他の 3 本は差なし。どっこいから直対単体寄り。
- 65〜1024 位: 勝敗系は差なし、順位系は SPSP。順位系の差は 指標の記事 4.4 節 の歪みと同じ向きなので割り引くが、SPSP が下回る指標はない。どっこいから SPSP 寄り。細分すると 513〜1024 位は食い違い試合で SPSP (\(z\) −2.3、3 季同方向)、ULG は直対寄り (\(t\) +1.1、符号は季でばらつく) と割れる移行帯です。
- 1025 位以下: 4 本とも SPSP で 3 季同方向。ただし 1025 人以上の大会は 5 つしかなく、ULG の \(t\) −2.1 は自由度 4 で \(p = 0.10\)、勝敗系単独では有意に届かない。513 位以下をまとめると食い違い試合で有意 (\(z\) −3.1、3 季同方向)。
- 検定の前提について: 大会単位の差は平均なので正規に近いはずだが、裾の重い帯もある (差の尖度が 65〜1024 位の ULG で +5、+6)。分布を仮定しない符号検定と Wilcoxon の符号付き順位検定を同じ差に当てたところ、有意性の判定は上の表とすべて一致した (Glicko-2 対 SPSP の 17〜64 位 ULG だけ \(p\) 0.03 対 0.10 の境界)。数値は
band_boundary_robust.json。 - 9〜16 位の帯は、どの方式でも一番当てにくい帯でした。
補足 (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 です (現在は非公開)。識別子との対応は 指標の記事の再現手順 を参照してください。