Math World Lab

ゲームのレーティングシステムの数学(Eloレーティング)

ロジスティック関数で「勝てる確率」を予測し、番狂わせを大きく評価する自己調整型スコアリング

この単元の発見をシェア
3行要約(Key Takeaways / AIOサマリー)
1
Eloレーティングは、2人のプレイヤーのレーティング差をロジスティック関数に入れることで「勝率の期待値」を予測する数理モデル
2
対局後は「実際の結果 − 期待された勝率」の差(予測誤差)に比例してレーティングを増減させる、シンプルな自己修正アルゴリズム
3
格上が格下に勝っても期待通りなのでレーティングはほぼ動かないが、格下が格上に勝つ「番狂わせ」は期待からのズレが大きいためレーティングが大きく動く

なぜこれを学ぶのか? — 現実社会とテクノロジーでの価値

Purpose & Motivation

なぜ生まれたのか?

Eloレーティングは、2人のプレイヤーのレーティング差をロジスティック関数に入れることで「勝率の期待値」を予測する数理モデル

身につく武器・思考力

対局後は「実際の結果 − 期待された勝率」の差(予測誤差)に比例してレーティングを増減させる、シンプルな自己修正アルゴリズム

実社会・ITでの活躍現場

  • •オンライン対戦ゲームにおけるレーティング更新とマッチメイキング
  • •ITシステム・アルゴリズム実装における論理設計
  • •データ分析やシミュレーションにおける数理モデリング

Layer 1 — 直感・シミュレーター

2人のプレイヤーのレーティングをスライダーで調整すると、ロジスティック関数によって計算される「期待勝率」がリアルタイムに表示される。「対戦結果を入力」ボタンで勝敗(または引き分け)を確定させると、Eloの更新式に従って両者のレーティングが変化する。格上が順当に勝った場合と、格下が「番狂わせ」を起こした場合とで、レーティングの変動幅がどれほど違うかを体感しよう。

プレイヤー A のレーティング1500
プレイヤー B のレーティング1500
期待勝率(ロジスティック関数による予測)EA=11+10(RB−RA)/400E_A = \dfrac{1}{1 + 10^{(R_B - R_A)/400}}
A: 50.0%
B: 50.0%
K因子(更新の感応度)32
対戦結果を入力:

↑ レーティング差が大きい2人を対戦させ、格下が勝つ「番狂わせ」を発生させてみよう。期待勝率が低かった側ほど、勝利時のレーティング上昇幅が大きくなることが確認できる。

直感チェック!ミニクイズ

レーティング差が0(実力がほぼ互角)の2人が対局するとき、Eloモデルが予測する片方の勝率はいくらか?

Layer 2 — 定義・受験・証明

定義

Eloレーティングは、プレイヤー AA のレーティングを RAR_A、プレイヤー BB のレーティングを RBR_B としたとき、両者のレーティング差を「ロジスティック関数(シグモイド関数)」に通すことで、プレイヤー AA が勝つ確率の期待値 EAE_A を次のように定義する。

EA=11+10(RB−RA)/400E_A = \frac{1}{1 + 10^{(R_B - R_A)/400}}

対局後、実際の結果 SAS_A(勝ち=1, 引き分け=0.5, 負け=0)が得られたとき、レーティングは「予測とのズレ」に応じて次式で更新される。

RA′=RA+K(SA−EA)R_A' = R_A + K \left( S_A - E_A \right)

ここで KK は更新の感応度を決める係数(K因子)である。

公式・数理モデル

EA=11+10(RB−RA)/400,RA′=RA+K(SA−EA)E_A = \frac{1}{1 + 10^{(R_B - R_A)/400}}, \quad R_A' = R_A + K(S_A - E_A)

証明・導出

ロジスティック関数が期待勝率のモデルとして妥当である理由:

Eloモデルでは、各プレイヤーの実力を正規分布(またはロジスティック分布)に従う確率変数とみなし、対局結果はその実力値の大小比較で決まると仮定する。実力差 d=RA−RBd = R_A - R_B が大きいほど AA が勝つ確率は1に近づき、d=0d=0 のとき確率はちょうど 0.50.5 になる必要がある。

ロジスティック関数 f(d)=11+10−d/400f(d) = \dfrac{1}{1 + 10^{-d/400}} はこの性質(単調増加・f(0)=0.5f(0)=0.5・d→±∞d \to \pm\infty で 00 または 11 に漸近)を満たし、かつ計算が容易であるため採用されている。

更新式の妥当性は「ゼロサム性」で確認できる。両者のレーティング変化量を見ると、

ΔRA=K(SA−EA),ΔRB=K(SB−EB)\Delta R_A = K(S_A - E_A), \quad \Delta R_B = K(S_B - E_B)

ここで SA+SB=1S_A + S_B = 1(勝敗の合計は必ず1)かつ EA+EB=1E_A + E_B = 1(期待勝率の合計も必ず1、EB=1−EAE_B = 1 - E_A であることは定義式から容易に確認できる)なので、

ΔRA+ΔRB=K((SA+SB)−(EA+EB))=K(1−1)=0\Delta R_A + \Delta R_B = K\big((S_A + S_B) - (E_A + E_B)\big) = K(1 - 1) = 0

すなわちレーティングの総量は対局によって増減せず、勝者から敗者へ「実力の期待とのズレの分だけ」レーティングが移動する保存則が成り立つ。

押さえておきたいポイント

  • 期待勝率が50%に近い「互角の対局」では、勝っても負けてもレーティング変動は小さい
  • 期待勝率が低い格下が勝つ「番狂わせ」では SA−EAS_A - E_A が1に近づくため、レーティング変動が最大化する
  • KK 因子が大きいほどレーティングは直近の結果に敏感になり、小さいほど長期的な実力を安定して反映する(初心者にはKを大きく、熟練者にはKを小さくする運用が一般的)
  • チェス(FIDE)、囲碁・将棋のオンライン対局場、League of LegendsやOverwatchなどの対戦ゲームのマッチメイキング(近い実力同士を組ませる仕組み)にも応用されている
参照基準・学習指導要領との対応

本トピックの内容・数理モデルは、文部科学省学習指導要領(算数・数学・情報)および国際標準カリキュラムに準拠し、エンジニアリング現場の実装事例と照らし合わせてMath World Lab編集部により検証・作成されています。

Layer 3 — 工学応用・現場実装

オンライン対戦ゲームにおけるレーティング更新とマッチメイキング

対局結果が確定するたびにロジスティック関数で期待勝率を計算し、実際の結果とのズレに比例してレーティングを更新する。マッチメイキングでは、レーティングが近いプレイヤー同士(=期待勝率が50%に近いペア)を優先的にマッチさせることで、接戦になりやすい対戦カードを生成する。

1type MatchResult = "win" | "loss" | "draw";
2
3// レーティング差からプレイヤーAの期待勝率を計算(ロジスティック関数)
4function expectedScore(ratingA: number, ratingB: number): number {
5 return 1 / (1 + Math.pow(10, (ratingB - ratingA) / 400));
6}
7
8// 対局結果を受け取り、両者の新レーティングを返す
9function updateElo(
10 ratingA: number,
11 ratingB: number,
12 result: MatchResult,
13 kFactor: number = 32
14): { newRatingA: number; newRatingB: number } {
15 const expectedA = expectedScore(ratingA, ratingB);
16 const expectedB = 1 - expectedA;
17
18 const scoreA = result === "win" ? 1 : result === "loss" ? 0 : 0.5;
19 const scoreB = 1 - scoreA;
20
21 const newRatingA = ratingA + kFactor * (scoreA - expectedA);
22 const newRatingB = ratingB + kFactor * (scoreB - expectedB);
23
24 return { newRatingA: Math.round(newRatingA), newRatingB: Math.round(newRatingB) };
25}
26
27// 例: レーティング1200の挑戦者が、レーティング1800の強豪に「番狂わせ」勝利
28const challenger = 1200;
29const champion = 1800;
30
31const expected = expectedScore(challenger, champion);
32console.log(`挑戦者の予測勝率: ${(expected * 100).toFixed(1)}%`); // 約 3.1%
33
34const { newRatingA, newRatingB } = updateElo(challenger, champion, "win", 32);
35console.log(`挑戦者の新レーティング: ${newRatingA}`); // 大幅上昇(約1231)
36console.log(`強豪の新レーティング: ${newRatingB}`); // 大幅下落(約1769)

次に学ぶならコレ!おすすめトピック

この単元と深い繋がりを持つ、あわせて学ぶと理解が深まるおすすめ単元

数理モデル・概念が近い関連トピック

🤝 協調(3, 3) 報酬🗡️ 裏切り(5, 0) 搾取しっぺ返し (Tit-for-Tat) 最強アクセルロッドの進化トーナメント
関連度高数の不思議・パズル

囚人のジレンマと進化ゲーム理論

利己的な世界で『協力』はどうやって進化するのか?しっぺ返し戦略の奇跡

関連度高工学応用

勾配降下法

谷底を探すAIの基本アルゴリズム

関連度高工学応用

レコメンドの仕組み(コサイン類似度とベクトル検索)

ユーザーの好みと商品の近さを「ベクトルのなす角」で判定するアルゴリズム

同じレベルで次に挑戦したいトピック

同レベル推薦工学応用

ニューラルネットワークの数学(順伝播と活性化関数)

入力に重みを掛けて足し合わせ、非線形関数で発火させるAIの基本素子

"PASS"c=mᵉ%n
同レベル推薦工学応用

RSA暗号と素数の秘密(公開鍵暗号)

「掛け算は簡単だが、素因数分解は極めて困難」という非対称性を利用した現代暗号の金字塔

同レベル推薦工学応用

最短経路探索(ダイクストラ法とA*アルゴリズム)

グラフ上の無数のルートから「最もコストが小さい道」を一瞬で見つけ出す数学

工学・実社会での応用先でつながるトピック

工学・実践連携小学校・算数

円の面積と円周率

半径を変えると、円周と面積はどう変わる?

工学・実践連携小学校・算数

三角形・多角形の面積

頂点を動かして、面積の公式が成り立つ理由を確かめよう

工学・実践連携小学校・算数

単位変換(長さ・面積・体積)

長さが2倍になると、面積・体積は何倍になる?

あなたの数学力をさらに伸ばす

数学の弱点診断や算数パズルに挑戦してみませんか?

簡単な質問に答えてあなたにぴったりの学習ロードマップを発見したり、直感を試すパズルで数の面白さを体験できます。