SPSP 理論編 2: 評価

SPSP は精度をデータで確認しながら設計している。 本ページでは精度の測り方、パラメータ調整、既存ランキングとの比較を扱う。

1. ランキング精度とは

ランキングの仕事は「大会の参加者がどの順位になるかを開催前に当てる」こと。 精度評価は、対象大会の出場者をランキング順に並べたものと実際の最終順位のズレの大きさを数える。 ズレが小さいほど精度が高い。

ただしトーナメント結果には毎回それなりの運の要素が乗っかる。 1 回のミス、当日の調子、対戦カードのめぐり合わせなどが揺らぎを生む。 1 大会の結果で「当たった/外れた」と判断すると、揺らぎに振り回される。 そのため精度評価は 必ず複数の大会で測って平均を見る

1.1 評価に使う対象大会 (期間を 2 つに分ける)

対象大会は 調整用最終評価用 の 2 つの期間に分ける:

共通条件:

1.2 なぜ期間を分けるのか (オーバーフィット対策)

期間を分けるのは オーバーフィット (= 過適合) 対策。 特定のデータでパラメータを調整するとそのデータでは精度が高く出るが、他のデータでは精度が落ちる現象。

たとえば「篝火#14〜#15 の精度が最大になるようパラメータを決めた」とすると、 その期間に活躍した特定プレイヤーや時期特有のメタに過剰に合わせ込まれている可能性がある。 その上で「#14〜#15 で精度が高かった」と言っても、未来の大会の予測精度は保証しない。

SPSP の手順:

  1. 調整用期間 (#11〜#13) でパラメータを決める。最終評価用は触らない。
  2. パラメータを固定したあと、初めて最終評価用期間 (#14〜#15) で精度を測る。

最終評価用期間を調整中に覗くと、無意識でもパラメータの判断にバイアスが入る。

2. 学習リークを防ぐ時系列順評価

最も気をつけるのは「未来の情報を使った予測になっていないか」。 たとえば 2025-12 月の大会 T を予測するのに 2026 年の結果を含むランキングを使うと、 「この人が優勝した」と知った上でシードを並べているのと同じになる。これが 学習リーク

SPSP は大会を時系列順に処理してリークを排除する:

  1. 大会 T の開始日時を取得。
  2. T 開始より前のデータだけで全プレイヤーのレートを再計算。
  3. そのレートから T 参加者の予測順位を作る。
  4. T の実際の最終順位と比較して精度を測る。
  5. 次の大会 T+1 へ。

3. 評価指標

順位予測のズレを 3 系統で測る:

3.1 上位 K 件に限定した指標 (top-K)

上の 3 指標を「全参加者」だけでなく 上位 K 件に限定したバージョン でも観察する。 実順位が上位 K 位以内のプレイヤーだけで同じ計算をすることで、どの帯で精度が出ているかが分かる。

K は 8, 16, 32, 64, 128, 256, 512, 1024 を一通り並べて見る。 K = 8 は「強い人同士の試合の質」、K = 256 は「どの帯にいるか」、K = 1024 は「全体の並び」と、K ごとに見ている情報が違う。 パラメータを変えた時にどこかの K だけ良くなって別の K で悪化することがよく起きるので、全 K を並べないと副作用に気づけない。

4. パラメータ調整の方法

調整は §1.1 の調整用期間 (篝火#11〜#13) でのみ行う (§1.2 のオーバーフィット対策)。 パラメータを 1 つ取り上げて値を振り、各値の精度を測る。 影響の大きいパラメータから順に、他は固定したまま変化させる。

採用判断:

5. パラメータ調整の例

代表例として総合評価の重み比を取り上げる。それ以外の調整は付録 §8 にまとめる。

調整用期間で順位評価と直対評価の重み比を変えて PairAcc を K 別に測った結果:

重み比 (順位 : 直対) K=8K=16K=32K=64 K=128K=256K=512K=1024
1.0 : 0.0 (順位のみ).6781.6907.7358.8040.8279.8386.8418.8422
0.5 : 0.5 (採用).6639.7073.7470.8139.8374.8480.8510.8514
0.4 : 0.6.6673.7064.7458.8144.8378.8483.8514.8518
0.2 : 0.8.6765.7071.7463.8150.8379.8483.8513.8517
0.0 : 1.0 (直対のみ).6762.7065.7462.8152.8371.8473.8503.8506

6. 既存ランキングとの比較

パラメータをすべて固定したあと、最終評価用期間 (篝火#14〜#15、N=37) で SPSP を既存ランキングおよび代表的なレーティング手法と比較した。 各大会の開始直前のランキングを予測順位とし、実際の最終順位と照合する。 未ランクのプレイヤーは予測順位の末尾に置く。

手法 PairAcc ↑Spearman ρ ↑ |SPR| ↓
SPSP (順位評価 + 直対評価の総合評価).8787.84710.9757
SPSP 直対評価 単体 (Glicko2 + LVゲート学習).8777.84570.9785
Glicko2 単体 (素のレート).8755.84250.9970
OpenSkill BT 単体 (素のレート).8739.83921.0037
SPSP 順位評価 単体 (5 層カスケード).8700.83391.0138
Elo 単体 (素のレート).8686.83201.0269
JJPR v3.8406.78241.1311
対象 37 大会の一覧

篝火#14 (1520名, 11/02), 極冠#11 (101名, 11/15), 煌竜祭#1 (148名, 11/22), FlyHigh!!#20 (192名, 11/24), 第64回スマバトSP (223名, 11/24), IMPACT MAJOR#2 (192名, 11/29), 第2回 錦祭 (122名, 11/29), ユニブラ#6 (127名, 11/30), りぷぶらSP12 (104名, 12/06), 極冠#12 (110名, 12/13), Vertex Style (128名, 12/20), 桜梅桃李 第参幕 (240名, 12/21), FlyHigh!!#21 (191名, 12/27), 第18回グランドスラム (284名, 12/28), 第50回クロブラ (142名, 12/28), 第2回スマフェス (128名, 01/04), しずトナ#12 (110名, 01/10), 第65回スマバトSP (242名, 01/11), 兵庫大対戦会#5 (106名, 01/18), マエスマ'TOP#2 (572名, 01/31), 第66回スマバトSP (307名, 02/07), IMPACT MAJOR#2.5 (128名, 02/11), スマパ #220[拡大版] (128名, 02/15), 第5回あのあのブラザーズ (254名, 02/22), りぷぶらSP13 (105名, 02/28), 第67回スマバトSP (373名, 03/14), 銀工杯#2 (196名, 03/21), カリスマSP23 (192名, 03/22), 極冠#13 (112名, 03/28), 桜梅桃李 第肆幕 (208名, 04/04), LEADD+3 (115名, 04/04), Vertex Style #2 (128名, 04/05), 第68回スマバトSP (316名, 04/12), DELTA×西武撃 Open (545名, 04/18), Gen 4.0 (192名, 04/25), 池スマ#4 (256名, 04/29), 篝火#15 (2814名, 05/03)。

6.1 何が分かるか

6.2 UltRank との比較

UltRank は日本のカバー人数が約 200 名と限定的なので、100 人規模以上の大会では大部分が未ランクになる。 そこで UltRank がランクしている 200 名どうしのペアだけに絞り、UltRank に有利な条件で各手法を比較した (§6 と同じ 37 大会、各大会で UltRank ランカーが 2 名以上参加):

手法 PairAcc ↑Spearman ρ ↑ |SPR| ↓
SPSP (総合評価).7464.61671.9329
JJPR v3.7460.60131.9424
SPSP 順位評価 単体 (5 層カスケード).7440.60271.9728
SPSP 直対評価 単体 (Glicko2 + LVゲート学習).7429.61351.8943
Glicko2 単体 (素のレート).7416.60651.8906
OpenSkill BT 単体 (素のレート).7405.60951.9176
Elo 単体 (素のレート).7348.59781.9378
UltRank 2025 Japan.7292.57182.1215

UltRank に有利な条件下でも SPSP が PairAcc で +0.017、|SPR| で −0.189 良い結果。 JJPR v3 / Glicko2 単体も UltRank を上回っており、UltRank の年 1 回更新ペースでは 直近半年のメタや勢いを反映しきれていない。

7. (付録) 採用パラメータ一覧

本番運用で採用している主要パラメータを再現性のために列挙する。

7.1 直対評価 (Glicko2)

パラメータ意味
初期レート $\rho_0$1500新規プレイヤーのレート初期値
初期不確実性 $\text{RD}_0$350新規プレイヤーの不確実性初期値 (Glicko2 既定)
初期変動性 $\nu_0$0.06レート変動の初期値 (Glicko2 既定)
$\tau$ (系統定数)0.5変動性の制約パラメータ (Glicko2 既定)
復帰加算の上限 $\text{RD}_{\text{infl}}$128不参加期間で膨らませる不確実性の上限
$D_{\text{mid}}$ (sigmoid 中央)540 日復帰加算カーブの中央点 (1.5 年)
$D_{\text{scale}}$ (sigmoid 幅)180 日復帰加算カーブの幅
$D_{\text{grace}}$30 日復帰加算の猶予日数
LVゲート学習LV1: 5 名以上 / LV2: 9 名以上 / LV3: 25 名以上 + 休日 / LV4: 33 名以上 + 休日 / LV5: 49 名以上 + 休日プレイヤー LV と大会属性で学習対象を切替
表示 Elo$\rho$Glicko2 内部レートをそのまま表示 (= Elo 空間、1500 が新規プレイヤーの基準値)

7.2 順位評価

パラメータ意味
最少参加人数 (Lv1)5集計対象とする大会の最少参加人数
最少参加人数 (Lv2)9Lv2 母集団は参加者 9 名以上の大会のみ
休日必須 (Lv3, Lv4, Lv5)有効平日大会は LV3 以上の母集団候補から外す (プレ大会も平日扱い)
最少参加人数 (Lv3)25参加者 25 名以上の休日大会のみ LV3 の母集団候補
最少参加人数 (Lv4)33参加者 33 名以上の休日大会のみ LV4 の母集団候補
最少参加人数 (Lv5)49参加者 49 名以上の休日大会のみ LV5 の母集団候補
母集団上位 N 名 (Lv2)2048Lv1 で上位 2048 名に絞ったうえで再計算
母集団上位 N 名 (Lv3)1024Lv2 で上位 1024 名 → Lv3
母集団上位 N 名 (Lv4)512Lv3 で上位 512 名 → Lv4
母集団上位 N 名 (Lv5)256Lv4 で上位 256 名 → Lv5
Lv1 (基準値, 下限, フル上位件数, 位置減衰)(1700, 350, 1, 0.3)gain 関数の基準値 / 下限、フル評価上位件数、それ以降の減衰率
Lv2-5 (基準値, 下限, フル上位件数, 位置減衰)(1900, 700, 3, 0.3)Lv2 以降は基準値・下限を上げ、フル評価件数も 3 に拡張
時間減衰0.96d/30大会開催日からの経過日数 d による減衰 (= 毎月 4% 減衰)
ε (零回避項)0.01ラウンドポイントの零回避項
表示 Elo (順位評価)$S \times 17.5$順位評価スコアを線形変換した表示用数値 (順位に影響しない)

7.3 総合評価

パラメータ意味
方式ランク平均順位評価ランクと直対評価ランクの単純平均
重み1 : 1順位評価:直対評価 = 1:1 (= §5 で決定)
片側未ランク補完全プレイヤー数 + 1片方の評価にしか出てこない人は、欠けている側を「全プレイヤー数+1」で穴埋め
同順位タイブレーク直対評価ランク優先平均順位が並んだ場合は直対評価ランクの低い (= 上位の) 方を優先

8. (付録) その他の検証

§5 で取り上げなかった調整・比較もここで一覧にしておく (すべて調整用期間で検証)。

試したこと結果採否
序盤補強モード (累計大会数 20 以下のプレイヤーを全大会で学習) 素の LVゲート学習のほうが上位帯で精度が高い 不採用
ハイブリッドゲート (累計大会数ゲートと LV ゲートの和集合) 素の LVゲート学習と同水準だが、設計の純度が下がる 不採用
LV4 の参加者数しきい値を 24 / 32 / 48 で比較 33 名以上がバランス良し。24 名以上だと中規模大会の揺らぎが乗る 33 名以上を採用
LV3 で休日必須にする / しない 休日必須のほうが上位帯の安定性が高い 休日必須を採用
Glicko2 復帰加算あり / なし ありのほうが全 K で PairAcc がわずかに改善 採用
時間減衰の比率を月 3%/4%/5% で sweep 月 4% (0.96) が反復46 の 4 シーズン検証で平均 τ 最良。月 3% / 5% は劣る 月 4% を採用
JJPR を加えた 3 ランキングのランク平均 精度向上なし、複雑性だけ増える 不採用
RRF (Reciprocal Rank Fusion) でランク統合 単純ランク平均と差が出ず 不採用
順位評価の位置減衰を 0.1〜1.0 で振る 0.1〜0.6 でほぼ同水準。1.0 のみ大幅劣化 0.3 採用

各パラメータを動かしたときの精度はおおむね飽和域にあり、これ以上削る/足すとどこかが崩れる位置に落ち着いた。

もっと知りたい人へ

正式な数式は次の「理論編・数式」で。
概念から復習したい場合は前の「理論編・概念」で。