SPSP 理論編 2: 評価
SPSP は精度をデータで確認しながら設計している。 本ページでは精度の測り方、パラメータ調整、既存ランキングとの比較を扱う。
1. ランキング精度とは
ランキングの仕事は「大会の参加者がどの順位になるかを開催前に当てる」こと。 精度評価は、対象大会の出場者をランキング順に並べたものと実際の最終順位のズレの大きさを数える。 ズレが小さいほど精度が高い。
ただしトーナメント結果には毎回それなりの運の要素が乗っかる。 1 回のミス、当日の調子、対戦カードのめぐり合わせなどが揺らぎを生む。 1 大会の結果で「当たった/外れた」と判断すると、揺らぎに振り回される。 そのため精度評価は 必ず複数の大会で測って平均を見る。
1.1 評価に使う対象大会 (期間を 2 つに分ける)
対象大会は 調整用 と 最終評価用 の 2 つの期間に分ける:
- 調整用: 篝火#11 (2023-10-07) 〜 篝火#13 (2025-05-04)。§4 / §5 / §8 の検証はこの期間で行う。
- 最終評価用: 篝火#14 (2025-11-02) 〜 篝火#15 (2026-05-03)、N=37。§6 の既存ランキング比較はこの期間でしか行わない。
共通条件:
- 区切り: 国内で最も規模の大きい篝火を両端に置く。
- 参加者下限: 既存ランキング比較は 100 名以上、多数大会が必要なパラメータ調整は 48 名以上。
- 除外: 制限大会 (西武撃 Rising / LIMIT BREAK / RAISE / ビギナー杯 等)、 下位クラス (B〜E クラス、スマパカジュアル 等)、 身内大会 (合宿 / 帝国 / 内輪 等)。
1.2 なぜ期間を分けるのか (オーバーフィット対策)
期間を分けるのは オーバーフィット (= 過適合) 対策。 特定のデータでパラメータを調整するとそのデータでは精度が高く出るが、他のデータでは精度が落ちる現象。
たとえば「篝火#14〜#15 の精度が最大になるようパラメータを決めた」とすると、 その期間に活躍した特定プレイヤーや時期特有のメタに過剰に合わせ込まれている可能性がある。 その上で「#14〜#15 で精度が高かった」と言っても、未来の大会の予測精度は保証しない。
SPSP の手順:
- 調整用期間 (#11〜#13) でパラメータを決める。最終評価用は触らない。
- パラメータを固定したあと、初めて最終評価用期間 (#14〜#15) で精度を測る。
最終評価用期間を調整中に覗くと、無意識でもパラメータの判断にバイアスが入る。
2. 学習リークを防ぐ時系列順評価
最も気をつけるのは「未来の情報を使った予測になっていないか」。 たとえば 2025-12 月の大会 T を予測するのに 2026 年の結果を含むランキングを使うと、 「この人が優勝した」と知った上でシードを並べているのと同じになる。これが 学習リーク。
SPSP は大会を時系列順に処理してリークを排除する:
- 大会 T の開始日時を取得。
- T 開始より前のデータだけで全プレイヤーのレートを再計算。
- そのレートから T 参加者の予測順位を作る。
- T の実際の最終順位と比較して精度を測る。
- 次の大会 T+1 へ。
3. 評価指標
順位予測のズレを 3 系統で測る:
- PairAcc: 全ペアについて「予測順位の前後 = 実順位の前後」が一致した割合。0.5 = ランダム、1.0 = 完全一致。
- |SPR| mean: SPR = W2W(シード) − W2W(実順位)。 W2W は「ダブルイリミでその順位に到達するために必要な勝ち数」 (例: 1 位 = 全勝、最下位 = 0 勝)。 |SPR| はシードと最終順位を勝ち数換算で比べた絶対誤差。 厳密な定義は 理論編・数式 §3.1 参照。
- Spearman ρ: 順位相関 (順位差を二乗して合算)。PairAcc に加えて順位の隔たりも加味する。
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 つ取り上げて値を振り、各値の精度を測る。 影響の大きいパラメータから順に、他は固定したまま変化させる。
採用判断:
- 全 K で動きを確認: PairAcc・|SPR| を K = 8 から 1024 まで並べ、一貫して良くなる値は強い採用候補。間の K = 32〜128 も含めて極端な悪化がないか確認する。
- 差が誤差レベルなら単純な値を採用: 0.5 と 0.6 でほぼ変わらないなら、ハイパラを減らせる 0.5 を選ぶ。
- |SPR| と PairAcc の動きが一致するか: 一致すれば採用しやすい。片方だけ改善する値は副作用を疑って深掘りする。
5. パラメータ調整の例
代表例として総合評価の重み比を取り上げる。それ以外の調整は付録 §8 にまとめる。
調整用期間で順位評価と直対評価の重み比を変えて PairAcc を K 別に測った結果:
| 重み比 (順位 : 直対) | K=8 | K=16 | K=32 | K=64 | K=128 | K=256 | K=512 | K=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 |
- K = 8 では直対評価単体がやや強い (PairAcc +0.013 vs 0.5 : 0.5)。最上位帯は試合の質で決まる。
- K = 16〜1024 ではバランス側が良い (= 0.4 : 0.6 か 0.5 : 0.5 で天井)。
- シンプルさ優先で 0.5 : 0.5 を採用 (0.4 : 0.6 との差は誤差レベル)。
6. 既存ランキングとの比較
パラメータをすべて固定したあと、最終評価用期間 (篝火#14〜#15、N=37) で SPSP を既存ランキングおよび代表的なレーティング手法と比較した。 各大会の開始直前のランキングを予測順位とし、実際の最終順位と照合する。 未ランクのプレイヤーは予測順位の末尾に置く。
| 手法 | PairAcc ↑ | Spearman ρ ↑ | |SPR| ↓ |
|---|---|---|---|
| SPSP (順位評価 + 直対評価の総合評価) | .8787 | .8471 | 0.9757 |
| SPSP 直対評価 単体 (Glicko2 + LVゲート学習) | .8777 | .8457 | 0.9785 |
| Glicko2 単体 (素のレート) | .8755 | .8425 | 0.9970 |
| OpenSkill BT 単体 (素のレート) | .8739 | .8392 | 1.0037 |
| SPSP 順位評価 単体 (5 層カスケード) | .8700 | .8339 | 1.0138 |
| Elo 単体 (素のレート) | .8686 | .8320 | 1.0269 |
| JJPR v3 | .8406 | .7824 | 1.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 何が分かるか
- SPSP は JJPR v3 を PairAcc +0.038、|SPR| −0.155 改善。
- 素のレート系統 (Glicko2 / OpenSkill BT / Elo) はいずれも JJPR v3 を上回る。 これに LVゲート学習を加えた SPSP 直対評価単体で素の Glicko2 から PairAcc +0.002、|SPR| −0.019。 さらに 5 層カスケードの順位評価をランク平均で組み合わせて |SPR| を 0.003 改善。
- 順位評価単体は直対系より精度が劣るが、直対系と独立な情報を持つので組み合わせると |SPR| が縮まる。
6.2 UltRank との比較
UltRank は日本のカバー人数が約 200 名と限定的なので、100 人規模以上の大会では大部分が未ランクになる。 そこで UltRank がランクしている 200 名どうしのペアだけに絞り、UltRank に有利な条件で各手法を比較した (§6 と同じ 37 大会、各大会で UltRank ランカーが 2 名以上参加):
| 手法 | PairAcc ↑ | Spearman ρ ↑ | |SPR| ↓ |
|---|---|---|---|
| SPSP (総合評価) | .7464 | .6167 | 1.9329 |
| JJPR v3 | .7460 | .6013 | 1.9424 |
| SPSP 順位評価 単体 (5 層カスケード) | .7440 | .6027 | 1.9728 |
| SPSP 直対評価 単体 (Glicko2 + LVゲート学習) | .7429 | .6135 | 1.8943 |
| Glicko2 単体 (素のレート) | .7416 | .6065 | 1.8906 |
| OpenSkill BT 単体 (素のレート) | .7405 | .6095 | 1.9176 |
| Elo 単体 (素のレート) | .7348 | .5978 | 1.9378 |
| UltRank 2025 Japan | .7292 | .5718 | 2.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) | 9 | Lv2 母集団は参加者 9 名以上の大会のみ |
| 休日必須 (Lv3, Lv4, Lv5) | 有効 | 平日大会は LV3 以上の母集団候補から外す (プレ大会も平日扱い) |
| 最少参加人数 (Lv3) | 25 | 参加者 25 名以上の休日大会のみ LV3 の母集団候補 |
| 最少参加人数 (Lv4) | 33 | 参加者 33 名以上の休日大会のみ LV4 の母集団候補 |
| 最少参加人数 (Lv5) | 49 | 参加者 49 名以上の休日大会のみ LV5 の母集団候補 |
| 母集団上位 N 名 (Lv2) | 2048 | Lv1 で上位 2048 名に絞ったうえで再計算 |
| 母集団上位 N 名 (Lv3) | 1024 | Lv2 で上位 1024 名 → Lv3 |
| 母集団上位 N 名 (Lv4) | 512 | Lv3 で上位 512 名 → Lv4 |
| 母集団上位 N 名 (Lv5) | 256 | Lv4 で上位 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 採用 |
各パラメータを動かしたときの精度はおおむね飽和域にあり、これ以上削る/足すとどこかが崩れる位置に落ち着いた。
もっと知りたい人へ
正式な数式は次の「理論編・数式」で。
概念から復習したい場合は前の「理論編・概念」で。