TrueSkillでスキルのレーティング

TrueSkillとは?

TrueSkillは、Microsoftが開発したレーティングシステムで、特にオンラインマルチプレイヤーゲームでプレイヤーのスキルを評価するために使用されます。このシステムは、各プレイヤーのスキルをベイズ推定に基づいて数値化し、試合結果に基づいてそのスキルを更新します。

TrueSkillは、各プレイヤーのスキルを平均 (μ) と不確実性 (σ) という2つのパラメータで表します。試合結果に基づいてこれらのパラメータを更新します。

  • μ (ミュー): スキルの平均値。プレイヤーの実際のスキルの期待値。

  • σ (シグマ): スキルの不確実性。プレイヤーのスキルに対する信頼区間の広さ。

実際にPythonでTrueSkillによるスキルのレーティングを行ってみたいと思います。
環境はGoogle Corabです。

インストール

まずはTrueSkillのライブラリをインストールします。

!pip install trueskill

環境設定とプレイヤーの初期スキルレーティング

import trueskill

env = trueskill.TrueSkill(draw_probability=0.1)

TrueSkill()で環境設定を行なっています。またここではdraw_probabilityというパラメーター設定しています。

draw_probabilityは引き分けの確率を設定するためのパラメータで、このパラメータを設定することで、試合が引き分けになる可能性を考慮してスキルレーティングを更新することができます。ゲームの性質やルールに応じて設定するパラメータになります。野球やテニスのように引き分けがルール上存在しないゲームでは、draw_probabilityを0に設定します。

今回は引き分けが10%の確率で発生するゲームを想定し、設定しています。

player1 = env.create_rating()
player2 = env.create_rating()

env.create_rating() は、TrueSkillの環境 (env) を使用して、新しいプレイヤーのスキルレーティングを作成します。これにより、プレイヤーの初期スキル値 (μ) とその不確実性 (σ) が設定されます。

各プレイヤーのレーティングを確認してみます。

print(f"Player 1: {player1}")
print(f"Player 2: {player2}")

Player 1: trueskill.Rating(mu=25.000, sigma=8.333)
Player 2: trueskill.Rating(mu=25.000, sigma=8.333)

平均25、標準偏差約8.333の初期パラメーターが設定されていることが確認できます。

試合結果のシミュレーション

試合結果のシミュレーションを行ってみます。

player1, player2 = env.rate_1vs1(player1, player2)

rate_1vs1()は1対1の試合結果に基づいてプレイヤーのスキルレーティングを更新するために使用されます。第1引数に勝者のレーティング、第2引数に敗者のレーティングを指定します。
この場合は、player1が勝利しています。

TrueSkillでは1対1以外にも、チームマッチや全員が敵となるバトルロイヤル形式のマッチにも対応しています。

この試合を経た後のレーティングを確認してみます。

print(f"Player 1: {player1}")
print(f"Player 2: {player2}")

Player 1: trueskill.Rating(mu=29.396, sigma=7.171)
Player 2: trueskill.Rating(mu=20.604, sigma=7.171)

player1の平均スキルレーティング(μ)は29.396であり、player2の20.604よりも高いため、player1の方が強いと評価されています。

不確実性(σ)についても8.333から7.171へ減少しました。これはプレイヤーのスキルに対する確信度が増していることを示しています。
さらに試合を重ねることで、スキルレーティングに対する確信度が高まります。