SPSP 理論編 1: 概念

順位評価・直対評価・総合評価のアルゴリズムを言葉で説明する。 厳密な検証は 評価、数式は 数式 を参照。

1. 直対評価の仕組み

直対評価はスマメイトのようなレーティングと同じ系統で、 試合の勝敗ごとに両プレイヤーのレートを更新する。

1.1 「期待勝率」と「実結果」のズレを反映

両者のレートから 期待勝率 を算出し、実結果とのズレを見て、ズレた分だけレートを動かす。

つまり「強い相手に勝てば大きく上がる、格下に勝っても小幅、格下に負けると痛い」。 総当たりしなくてもランダムな試合を積み重ねるだけで正しい序列に収束していく。

SPSP は Glicko2 を採用。Elo に「不確実性 (RD)」と「変動性 (volatility)」を加えたモデルで、 Elo より収束が速く覚醒選手の追従が良い。

1.2 不確実性 (RD)

Glicko2 はレートに加えて RD (Rating Deviation、不確実性) をプレイヤーごとに持つ。 RD が大きいほど 1 試合の結果でレートが大きく動く。

さらに Glicko2 は 変動性 (volatility) という 3 つ目の状態量を持ち、 実力変化が激しい時期には RD の縮みが抑えられて覚醒の追従性が上がる。

1.3 復帰加算 (長期離脱者の RD を膨らませる)

長期間試合をしていないプレイヤーは復帰時の本当の実力が分からない。 そこで一定期間出ていないプレイヤーは RD を膨らませて、復帰戦の結果がより柔軟にレートへ反映されるようにする。

増加カーブは sigmoid で滑らか。RD を下げる方向には作用しない。

2. レベルシステム

SPSP は LV1〜LV5 の 5 段階のレベルを持ち、順位評価と直対評価がこの同じレベルシステムを共有する。 プレイヤーは自分が到達した最高 Lv のスコアでランクづけされる。 Lv が上がるにつれて対象大会が厳しくなり、上位帯では本気度の高い大会だけで評価される。

2.1 LV ごとの対象大会

プレイヤーの現 LV により、直対評価の学習対象 (と順位評価の集計対象) が変わる:

2.2 なぜ上位帯ほど制限を厳しく?

上位プレイヤーは平日のスマコミ・スマパなどで「ガチ大会前の練習」「キャラ調整」目的で参加することが多く、 本来の実力どおりの結果が出ないことが多い。こうした試合を上位プレイヤーのレートに反映すると、本気の試合のレートが歪む。 休日大会は参加者がスケジュールを空けて本気で出ているので、実力差が結果に出やすい。

また小規模大会は母集団が偏りやすくノイズが大きいので、上位帯ほど参加者数しきい値を厳しくする。

プレ大会: 大会名に「プレ大会」「プレオフ」等を含む大会は土日でも平日扱い。
下位クラス (Bクラスなど) と 制限大会: LV1 / LV2 では学習対象、LV3 以降では直対評価・順位評価ともに除外。

2.3 カスケードの流れ

LV は順位評価の 5 段階の絞り込み計算 (= カスケード) で決まる。 各段で順位評価のスコアを計算し、上位 N 名だけを次の Lv の母集団に残す:

各段の昇格判定は、順位評価のランクと直対評価のランクを平均したもので行う (= ランク平均カスケード)。 片方だけ突出するプレイヤーよりも、両方バランス良く高いプレイヤーが昇格しやすい。

2.4 「混在」する試合の扱い

LV が違うプレイヤー同士で「片方は学習対象、もう片方は対象外」の大会で当たった場合は、 学習対象側だけがレートを更新する。 たとえば LV1 と LV4 のプレイヤーが平日大会で当たれば、LV1 側だけ動き、LV4 側は据え置き。

2.5 DQ (棄権) の扱い

DQ となったプレイヤーの試合・順位はスコア計算から除外する。プレイヤーページの大会履歴では SPR の代わりに DQ と表示される。

実装上、DQ 判定は 2 種類。 (1) 途中 DQ: start.gg の試合データで dq=True が立っている試合。 その試合は直対評価の学習や順位評価の計算から取り除かれ、敗者がその大会で DQ 認定される。 (2) no-show DQ: 大会の試合データはあるのに、参加者一覧に名前があるプレイヤーが 1 試合も記録されていない場合 (wins = 0 かつ losses = 0、placement > 2 が条件)。 データ欠損による誤判定を避けるための保守的な判定。 メイン + クラスブラケット構成の大会では、メイン側と class 側の DQ をそれぞれ別に記録する。

3. 順位評価の核心アイデア

順位評価は、各大会の最終順位をベースにポイントを配るが、固定の配点テーブルは使わない。 その大会の参加者の強さに応じて配点を動的に決める。

順位評価の性質:

3.1 順位 = 敗者復活で何ラウンド勝ち上がったか

SPSP は大会の順位を 敗者復活ブラケットの構造に当てはめて解釈する。 優勝者は全ラウンド勝ち抜け、最下位はラウンドゼロで終わり。

最終順位を聞けば「どのラウンドまで勝ち上がったか」が機械的に決まる。 実際にダブルエリミでなくても、シングルエリミ・スイス・リーグでも最終順位を敗者復活ブラケットに換算できる。

3.2 ラウンドの難しさ = そのラウンドの場の強さ

各ラウンドの難しさは、仮想ダブルイリミの敗者ブラケットに参加者をシード順に並べて、 そのラウンドに居る 相手 1 人ずつに勝つことの価値を平均したもので測る。 強い相手で構成されるラウンドほど難しさが大きい。 実際の大会の進行は見ない。シードどおりに進めば居るはずの参加者だけで、大会開始前にラウンドの難しさを確定させる。

8 人ダブルイリミの敗者ブラケットを模式化すると下のようになる (5 ラウンド構造):

WB R1 敗者 4 人 WB R2 敗者 2 人 WB 決勝敗者 1 人 WB 優勝者 1 人 Round 1 4 人 Round 2 4 人 Round 3 2 人 Round 4 LB 決勝 · 2 人 Round 5 Grand Final · 2 人 7位 / 8位 5位 / 6位 4位 3位 2位 が敗退 が敗退 が敗退 が敗退 が敗退 → 1位 青破線 = 勝者ブラケット側からの落下 · 赤破線 = そのラウンドで敗退する順位 · 矢印 = 勝者の進行

各ラウンドの「場」には、そのラウンドで敗退する人とそこを勝ち抜けて次のラウンドへ進む人の両方が含まれる。 場にいる相手それぞれに勝つことの価値を平均することで、そのラウンドの難しさを表現する。

「強い相手だらけのラウンドを勝ち抜けた = 1 試合あたりの価値が高い」がポイントに反映される。

勝つことの価値は、Lv ごとに決められた 固定の基準レート から見た相手のレートで決まる (Lv1 は控えめ、Lv2 以降は高め)。 これにより、レートが高い人と低い人で不公平な差が出ないようにする。

厳密には、各相手に勝つことの情報量 ($-\log_2(1-g)$、g = Elo の勝率) の平均をラウンドの難しさとして使う。 厳密な定義は 数式編 §3

3.3 大会のポイント = 勝ち上がったラウンドの難しさの合計

ラウンド k まで勝ち上がったプレイヤーが大会で稼ぐポイントは、ラウンド 1 から k までの難しさポイントの合計。 上位入賞ほど合計が大きい。強豪が集まる大会のほうがラウンドの難しさが大きくなる。

さらに 大会規模が大きいほどポイントがスケール される。 具体的には、参加者数 $n$ のとき $\sqrt{\log_2 n}$ 倍 (= 8 人で約 ×1.7、32 人で約 ×2.2、128 人で約 ×2.6、512 人で約 ×3.0、2000 人で約 ×3.3)。 たとえば 30 人規模の大会と 2000 人規模の大会では、同じラウンドぶん勝ち抜いても約 1.5 倍のポイント差がつく。

3.4 具体例 (8 人の大会)

架空の 8 人大会で順位評価のポイントがどう決まるかを見てみる。各ラウンドに居る相手 1 人ずつに勝つことの価値を平均したものが、場の強さ (= ラウンドの難しさ):

ラウンド場にいるシード場の強さ (= ラウンドの難しさ)
Round 15・6・7・8 位シード低 (0.2)
Round 23〜6 位シード中 (0.6)
Round 33・4 位シード高め (0.8)
Round 4 (LB Final)2・3 位シード高 (0.9)
Round 5 (Grand Final)1・2 位シード高 (1.0)

プレイヤーは 自分が勝ち上がったラウンドぶんの難しさを足し合わせる:

最終順位稼ぐラウンド合計ポイント
1 位R1 + R2 + R3 + R4 + R50.2 + 0.6 + 0.8 + 0.9 + 1.0 = 3.5
2 位R1 + R2 + R3 + R40.2 + 0.6 + 0.8 + 0.9 = 2.5
3 位R1 + R2 + R30.2 + 0.6 + 0.8 = 1.6
4 位R1 + R20.2 + 0.6 = 0.8
5・6 位R1 のみ0.2
7・8 位なし0

上位ほど大きく稼ぐ階段ができ、その段差は 大会の参加者層の厚さ で決まる。 強豪が集まる大会では各ラウンドの難しさが上がり、上位ほど大きく稼げる。

3.5 Lv ごとに基準値を変える

Elo 系の「勝った時のレート増加量」は、両者のレートが大きく離れると差が飽和して見えなくなる。 上位帯にとって格下相手はほぼ 0、格上相手はほぼ満額に張り付く。

SPSP は自分側のレートを Lv ごとの固定値で評価するが、固定値を一通りにすると中堅層と上位層のどちらかの解像度が潰れる:

そこで Lv ごとに基準値を変える。Lv1 は広い層向けの中庸設定 (基準 1700)、Lv2 以降は上位帯向けに上げる (基準 1900)。 これにより、ピラミッドのどの段にいるプレイヤーも自分の帯に合った解像度で評価される。

あわせて Lv ごとに 勝利ポイントの最低保証 も変える (Lv1: 350、Lv2 以降: 700)。 どんなにレートの低い相手でも、この値のレートを持つ相手に勝った場合と同じ最低限の勝利ポイントは保証される。 極端にレートの低い相手が場の難しさを過剰に下げないための仕組み。

3.6 自己強化を防ぐ

放っておくと、各大会の最強プレイヤーが他より高い点数を稼ぎやすい偏りが出る。 場の難しさを参加者の平均レートで計算しているため、自分の高いレートが場の難しさを引き上げて自分のポイントも持ち上げる自己強化が起きる。 実際に 1 位を取った人ほど影響を受けやすい。

たとえばあcola選手が優勝する大会では、ラウンドの難しさにあcola選手自身のレートが含まれて、 「あcola選手があcola選手に勝った」かのようにポイントが膨らんでしまう。

そこで場の難しさを計算するとき、出場者の中で一番レートが高い人を場にいなかったものとして扱う。 あcola選手の大会では、あcola選手を除いた残りの参加者層で難しさが決まる。 全プレイヤーが同じ「最強除外後」の場で計算されるので、「同じ大会の同じ順位なら同じポイント」は保たれる。

別案として「各プレイヤーが計算するとき自分自身を場から外す」方式も検証したが、精度はほぼ同じで、 同じ大会の同じ順位でも人によってポイントが変わってしまうため採用しなかった。

4. 集計の重みづけ

プレイヤーの最終スコアは、出場した全大会のポイントを 2 種類の重みを掛けて足したもの。

4.1 時間減衰

毎月およそ 4% 減衰する。半年前のポイントは約 78%、1 年前は約 61%、2 年前は約 38%。

4.2 位置減衰 (上位 3 件はそのまま、4 件目以降は減衰)

プレイヤーの大会ポイントを時間減衰後の値で多い順にソートし、上位 3 件 (Lv1 は上位 1 件) はそのまま、4 件目以降は 0.3, 0.09, 0.027, ... と急激に減衰させてから足す。

たとえば 100 pt の大会も 4 件目なら 30 pt、5 件目なら 9 pt、6 件目なら 3 pt になる。 短期間に強い結果を集中させた人のほうが、薄い結果を長期間続けた人より評価される。

5. 総合評価 (順位評価 + 直対評価)

総合評価は順位評価のランクと直対評価のランクの単純平均。 スコアではなくランクを平均することで、両方式のスコアのスケール差に依存しない。

たとえば順位評価 15 位・直対評価 9 位なら、暫定値は (15 + 9) / 2 = 12。これでソートし直したものが SPSP 順位。

平均順位が並んだ場合のタイブレークは、直対評価の順位が上の方を優先する。

もっと知りたい人へ