algo-rank-trueskill について
algo-rank-trueskillは、プレイヤーのスキルを不確実性付きのガウス分布で表すTrueSkill評価システムのスキルです。チーム戦や多人戦に対応し、スキル推定値と不確実性を更新して保守的な順位を算出します。
主な機能
- 01ガウス分布でスキルと不確実性を表現
- 02チーム戦と多人戦に対応
- 03試合結果に基づきレーティングを更新
- 04μ − 3σの保守的スコアで順位付け
活用シーン
- 01チームゲームのプレイヤーを評価
- 02多人対戦でプレイヤーをマッチング
- 03順位にスキル推定の不確実性を反映
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ asgard-ai-platform/ skills --skill algo-rank-trueskillインストール後、Claude Code で/algo-rank-trueskillを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
examples/sample_scenario.mdreferences/factor-graph.mdmatchmaking.md詳細
TrueSkill レーティングシステム
概要
TrueSkill(Microsoft Research)は、各プレイヤーのスキルをガウス分布 N(μ, σ²) としてモデル化します。μ は推定スキル、σ は不確実性です。チーム戦やマルチプレイヤー戦(1 対 1 だけではありません)に対応します。保守的レーティング = μ - 3σ です。試合数が増えるほど不確実性は低下します。メッセージパッシングによるベイズ推論を使用します。
使用する場面
適用条件:
- チーム戦またはマルチプレイヤー(参加者 3 人以上)ゲームでプレイヤーをレーティングする場合
- 試合の質のバランスを取るマッチメイキングシステムを構築する場合
- スキルレーティングとあわせて不確実性の推定値が必要な場合
使用しない場面:
- 不確実性を考慮しないシンプルな 1 対 1 のランキングの場合(Elo のほうがシンプルです)
- 競争を伴わないランキングの場合(製品評価には Wilson Score を使用してください)
アルゴリズム
IRON LAW: Skill Rating Has TWO Components — Mean AND Uncertainty
TrueSkill represents skill as N(μ, σ²). New players have high σ
(uncertain). After many games, σ shrinks (confident). The conservative
rating μ - 3σ ensures players are ranked by their LIKELY MINIMUM
skill, not their estimated average. Never use μ alone for ranking.
フェーズ 1:入力の検証
初期化:μ₀ = 25、σ₀ = 25/3(デフォルト)。チーム構成と最終順位を含む試合結果を収集します。 ゲート: 有効な試合結果があり、チーム構成が定義されていること。
フェーズ 2:コアアルゴリズム
- 各試合について、チームのスキル分布から結果の期待値を計算します
- 実際の結果と期待値を比較します
- ベイズ更新を使用して各プレイヤーの (μ, σ) を更新します:
- μ は実際のパフォーマンスに近づきます(勝者は上昇し、敗者は下降します)
- σ は低下します(結果を観測したことで不確実性が下がります)
- 更新量は σ に比例します(不確実性の高いプレイヤーほど大きく変化します)
- 保守的ランク = μ - 3σ
フェーズ 3:検証
確認事項:アクティブなプレイヤーの σ が時間とともに低下すること。保守的レーティングで上位のプレイヤーが、期待値を上回る頻度で勝つこと。試合の質の指標(引き分け確率)が妥当であること。 ゲート: レーティングシステムが直感的なランキングを生成し、σ が収束すること。
フェーズ 4:出力
不確実性の範囲を含むプレイヤーのレーティングを返します。
出力形式
{
"ratings": [{"player": "P1", "mu": 32.5, "sigma": 2.1, "conservative": 26.2, "games_played": 50}],
"metadata": {"initial_mu": 25, "initial_sigma": 8.33, "beta": 4.17, "tau": 0.083}
}
例
入出力例
入力: チーム [A(25,8.3), B(25,8.3)] がチーム [C(25,8.3), D(25,8.3)] に勝利 期待される結果: A、B の μ は約 2~3 ポイント上昇し、σ は約 0.5 低下します。C、D の μ は低下し、σ も低下します。保守的レーティングも調整されます。
エッジケース
| 入力 | 期待される結果 | 理由 |
|---|---|---|
| 新規プレイヤー対ベテランプレイヤー | 新規プレイヤーの μ がより大きく変化 | σ が大きいほど不確実性が高く、更新幅も大きくなります |
| 1 対 1 の試合 | Elo に似た動作に帰着 | TrueSkill は 1 対 1 の場合、シンプルなケースに還元されます |
| フリーフォーオール(8 人) | すべてのプレイヤーの組み合わせを比較 | Elo と異なり、マルチプレイヤーにネイティブ対応しています |
注意点
- 計算コスト: 因子グラフでのメッセージパッシングは Elo より計算コストが高くなります。数百万人のプレイヤーを扱う場合は、近似手法(EP の打ち切り)を使用してください。
- チームスキルの集約: TrueSkill は個々のガウス分布を合計してチームスキルを求めます。これは独立性を仮定するため、相関のあるプレイヤースキル(練習を重ねたチーム)は過小評価されます。
- スキルの変動: σ は低下する一方です。プレイヤーのスキルが実際に変化する(向上または低下する)場合は、期間ごとに小さなドリフト項 τ を追加し、σ を徐々に増加させてください。
- 途中参加・退出: プレイヤーが試合途中に参加したり、早期に退出したりした場合、その貢献度は曖昧になります。途中参加・退出に対応する重みの拡張が必要です。
- 特許の状況: TrueSkill は Microsoft の特許対象でした(2024 年に失効)。TrueSkill 2 は機能が追加されていますが、ライセンスを確認してください。
参考資料
- TrueSkill の因子グラフの導出については、
references/factor-graph.mdを参照してください - マッチメイキングの質の指標については、
references/matchmaking.mdを参照してください