レーティングのしくみ

レーティングのしくみ

レーティングと色・王冠

AtCoderでは、競技プログラミングの実力を示す指標として、独自のレーティングを採用しています。AtCoder公式コンテスト(ABC/ARC/AGCなど)の成績に応じてレーティングが変化し、それによって色や王冠が付与されます。

参考:AtCoderのレーティング変化の一例
参考:AtCoderのレーティング分布

半数以上のユーザが灰色であり、茶色以上になれれば、AtCoderの一般的なユーザよりも強いユーザであることが言えます。レーティングと色の対応は以下のとおりです。(2023/10/21時点)

レーティング アルゴリズム部門の人数の割合 ヒューリスティック部門の人数の割合
1 - 399 灰色 72.42% 57.92%
400-799 茶色 12.10% 13.11%
800-1199 緑色 7.86% 11.58%
1200-1599 水色 4.15% 9.44%
1600-1999 青色 2.01% 4.34%
2000-2399 黄色 1.08% 2.24%
2400-2799 橙色 0.25% 0.98%
2800- 赤色 0.13% 0.39%

王冠は、レーティングの値ではなく、世界ランキングによって獲得できます。世界TOP100のユーザには銅王冠 、世界TOP30のユーザは銀王冠 、世界TOP10のユーザは金王冠 となります。王冠獲得経験ユーザのページでは、レーティング変動ページではなく、世界ランクの変動が表示されます。

AtCoderの色と就職・転職

AtCoderのレーティングを用いて、就職・転職活動を行うことが出来ます。もちろん、そんなことは気にせず、スポーツやゲームとして競技プログラミングを楽しんでもらっても構いません。
関心のある方向けに、別ページでレーティングの価値を説明しております。よければそちらもあわせてご覧ください。 Algorithm部門のレーティングと業務における期待できる活躍

Algorithm系コンテストのレーティングの仕組み

Algorithm系コンテストとは、AtCoder Beginner Contest、AtCoder Regular Contest、AtCoder Grand Contestなどを指し、コンテスト一覧の先頭に「A」と丸付き文字で書かれているものです。

コンテスト一覧でのAlgorithm系コンテスト

厳密な計算式については、以下のページに記載されています。正確な情報はこちらをご確認ください。この項においては、レーティングの簡単な雰囲気だけ説明します。 レーティング計算式

コンテストのパフォーマンス

コンテストには、RatedとUnratedがあります。Rated参加ボタンを押すと、参加者全員の順位からパフォーマンスが計算され、レーティングが変動します。Algorithm系コンテストでは、Rated参加登録をした場合、問題を一切解かなくてもレーティング計算対象となります。

参考:RatedコンテストとUnratedコンテスト、そのパフォーマンス

レーティングの計算

レーティング計算は、参加した全てのコンテストのパフォーマンスから計算されます。最近のパフォーマンスが大きく影響し、古いコンテストは徐々にほぼ影響しなくなります。
左下の図を見ると分かりやすいのですが、過去のパフォーマンスを並べ、その高さの平均がレーティングとなっています。右の方の棒が太いのは、直近のコンテストの影響を大きくするためで、赤・橙の幅が黄色・青の幅より広くなっているのは、高いパフォーマンスを出した際の影響が大きく、低いパフォーマンスを出した際の影響が小さくするためです。

コンテストのたびにレーティングが変化する

参加回数に対する補正

AtCoderの実力は、たくさんのコンテストに参加しないと、正確に測ることが出来ません。ですので、参加回数の少ないうちは、レーティングを低く設定しています。この補正はコンテストに多く出れば出るほど軽減されていきます。コンテストに失敗しても、アカウントの削除などをせず、コンテストに参加し続ける方が、レーティングを上げる上では得になります。

AtCoderコンテストへの参加回数 表示メッセージ 補正されているレーティング
5回未満 推定される実力よりも大幅に低いレーティングとなっています。 400以上
9回未満 推定される実力よりも少し低いレーティングとなっています。 200以上
14回未満 推定される実力よりも若干低いレーティングとなっています。 100以上

なお、AtCoderのレーティングにおいては、400未満のレーティングはさらに補正をかけておりますので、コンテストに出続けることで、補正されたレーティングがそのまま上がることを保証するわけではありません。

Heurisitc系コンテストのレーティングの仕組み

Heuristic系コンテストとは、AtCoder Heuristic Contestなどを指し、コンテスト一覧の先頭に「H」と丸付き文字で書かれているものです。

コンテスト一覧でのHeurisitc系コンテスト

Algorithm系コンテストのレーティングとの大きな違いとして、Heurisitc系コンテストでのレーティングは、以下の理由から、コンテストに参加することによって下がることのない単調非減少な仕組みとなっています。

  • コンテスト期間が長いため、期間中にどの程度の時間取り組むことができるかにバラつきが生じる。このため、Algorithm系コンテストと同じレーティングシステムを用いた場合、時間が取れそうなタイミングに実施されたコンテストのみに参加することがレーティングを上げるための最適な行動となってしまう。
  • ローカル実行で性能を評価することにより、提出前にどの程度の順位が取れそうかをある程度見積もることができる。このため、コンテスト終盤まで提出せずにレートが上がりそうな順位を取れる場合のみ提出することが最善の行動となってしまう。一方で、Rated参加登録をした場合は未提出でもレート対象とするのは、特にコンテスト期間が長い場合において、参加登録をする敷居を大きく上げてしまう。

Heurisitc系コンテストでのレーティングは、平均的に良いパフォーマンスを出すことよりも、ベストパフォーマンスが評価される形式となっています。他のコンテストサイトのシステムを例に挙げると、KaggleのGrand Master/Master/Expertといった称号の数値版だと考えると理解しやすいかもしれません。
厳密な計算式については、以下のページに記載されています。正確な情報はこちらをご確認ください。この項においては、レーティングの簡単な雰囲気だけ説明します。 AHC Rating System

コンテストのパフォーマンス

コンテストには、RatedなものとUnratedなものがあります。Ratedなコンテストにおいて、1回以上提出を行うと、Rated対象となります。参加者全員の順位からパフォーマンスが計算され、レーティングが変動します。Heuristic系コンテストでは、一回も提出を行わなかった場合はレーティング計算対象外となりますが、提出を行ってもレーティングが下がったり、今後のレーティングが上がりにくくなるということはありません。

レーティングの計算

レーティング計算は、参加した全てのコンテストのパフォーマンスから計算されます。
基本的にはこれまで得たパフォーマンスを高い順にソートして上位ほど高い重みを付けて平均することで計算を行いますが、参加回数が足りない分を、これまでに得たパフォーマンスから今後獲得できるであろうパフォーマンスの見積もり値を生成することにより補っています。生成される見積もり値は低めなため、参加回数が少ない場合は実際の実力よりも低めのレーティングが付与されます。
下の図を見ると分かりやすいのですが、パフォーマンスを高い順に並べ、その高さの平均がレーティングとなっています。左側にある高い棒ほど太くなっており、その影響が大きくなっています。①と書かれたパフォーマンスが実際にコンテストで獲得したパフォーマンスで、②以降は生成された仮想的なパフォーマンスとなります。

参加回数に対する補正

AtCoderの実力は、たくさんのコンテストに参加しないと、正確に測ることが出来ません。Heurisitc系コンテストのレーティングでは、参加回数に対する直接の補正はありませんが、レーティング計算において、参加回数が足りない分を仮想的に生成したパフォーマンスで補っているため、参加回数の少ないうちは、同じようなパフォーマンスをより多くの回数獲得した参加者と比べてレーティングが低くなります。この影響はコンテストに多く出れば出るほど軽減されていきます。コンテストに失敗しても、アカウントの削除などをせず、コンテストに参加し続ける方が、レーティングを上げる上では得になります。