Elo-rating System이란?
Elo-rating의 기원은 체스에서 자신의 실력과 비슷한 상대를 골라
경기를 하기 위해서 Elo-rating이 시작되었다고 합니다.
현재 스포츠경기나 게임 등에서 Ranking 관련해서 많이 사용되고 있습니다.

전적누계방식(승/패에 따른 승률과 총전적을 고려하여 랭크를 산정하는 방법)의 경우보다
실력위주의 랭킹을 산정할 수 있어, 플레이어의 실력을 수치화 할 수 있는 시스템 입니다.
하지만 전적누계방식을 베재하고 Elo-rating방식만 사용하기엔 밋밋한 감이 있고,
우리에게 좀 더 친숙하고 목표와 만족을 줄 수 있는 전적누계방식과 혼용되어 주로 사용됩니다.

현재까지 '실력'위주의 랭크관리 시스템으로서 Elo-rating을 뛰어넘는 방식이 없다고 합니다.

Elo-rating 계산법
각각의 플레이어가 대전을 하게되면 각 플레이어간의 승률을 구하게됩니다.
각 플레이어를 A, B라고 할때, 그에 대응되는 승률 E은 다음과 같은 공식으로 구하게됩니다.


Eb = 1/(1+10^((Ra-Rb)/400)) ,                           Ea = 1/(1+10^((Rb-Ra)/400))

R은 현재 플레이어의 레이팅 점수입니다.
레이팅 점수는 플레이어의 '실력'을 나타낸다고 볼 수 있으며, 처음 시작하는 사람의 수준은
임의값으로 나타냅니다. 보통 1000이나 1200이 되겠습니다.

만약 위의 공식을 적용해서 계산해보면,
만약 A플레이어가 B플레이어의 Rating점수가 같다면 승률은 50% 즉 0.5가 됩니다.
A가 B보다 레이팅이 400점 높다면, Ea는 약 0.9090, Eb는 약 0.0909가 나옵니다.
A플레이어가 이길 확률이 약 90%, B플레이어가 이길 확률이 약 10%정도 됩니다.

두 승률을 합치면 (Ea+Eb = 1) 100%가 됩니다.

이것으로 승률을 구하면, 승점변수 S와 환경변수 K를 이용하여 다음과 같은 공식으로 실제 레이팅의 변화량을 구합니다.

Ratingnew = Ratingold + K * (Sa − Ea)

승점변수S는 간단합니다.
이겼다면 1, 졌다면 0, 비겼다면 0.5입니다.

환경변수K는 레이팅 점수에 영향을 줄 수 있는 요인들을 숫자로 나타낸것입니다.
일반적으로 체스라면, 레이팅 점수가 올라가면 올라갈수록 K가 작아집니다.
덕분에 2500점 정도에서 레이팅은 정지한다고 하네요.

축구의 경우 경기의 비중을 고려해서 K가 결정된다고 합니다.
친선경기라면 10점, 월드컵 결승은 60점 이런식으로 주어지는데,
실제로는 거기다 골 득실차를 적용해서 정하기 때문에 조금 더 복잡하다고 합니다.
게임의 경우 해당 게임에 맞추어 이 환경변수K에 변화를 주어 특성에 맞추면 될 것 같습니다.
다른 식을 바꾸게 되면 여러가지 문제점이 생긴다고 하네요 (인플레이션과 같은...)

잘 이해가 안간다면 대입을 해 보겠습니다.
새로운 유저(기본값 1200)레이팅1600유저와 친선경기(K=10)를 하여 승리(S=1)를 했다고 가정하면

먼저 승률 Ea를 구해야 하기 때문에 1/(1+10^((Rb-Ra)/400))에 대입을 합니다.
Ea = 1/(1+10^((Rb-Ra)/400))
Ea = 1/(1+10^((1600-1200)/400)) = 0.0909....

Ea값을 구했으면 Rating 공식에 대입을 하여
Rating.new = Rating.old + K * (Sa − Ea) 공식에 따라
갱신될 레이팅 점수 = 1200 + 10 x (1 - 0.09) 가 되겠습니다.
이를 계산해본다면 새로운 유저의 갱신된 레이팅점수는 1209.091 이 나옵니다.

승률이 90%(0.9)인 사람은 이겼을 때 K의 10%(0.1)을 획득하고.
반대로 승률이 적은 사람이 이겼다면, 레이팅 점수가 많이 오른다는것을 알 수 있습니다.


ELO rating system의 약점
자신보다 레이팅이 높은 사람과 싸워서 이기면 레이팅이 많이 오르고, 만약 진다고 해도
조금 밖에 떨어지지 않습니다. 그렇기 때문에 게임에 익숙해져 어느정도 Rating점수에 도달한
유저들은 Rating점수를 관리하기 위해 대전 상대를 선택 가능한 경우, 자신보다 레이팅이 높은 사람 하고만 싸우려고 합니다.

게다가, 게임이 오랫동안 거듭될수록 상위층의 레이팅은 그 아래 있는 사람들과 격차가 벌어지며 레이팅 인플레이션 현상이 벌어집니다.
유저의 실력이 전체적으로 올라가서 생기는 문제이기도 하지만 격차가 벌어질수록 후발주자가 초기진입유저를 이기고 더 높은랭크에 오르기는 점점 어려워 지게 됩니다.
따라서 LOL같은 경우 이러한 인플레이션을 없애기 위해서 시즌별로 Rating점수를 초기화 하는 식으로 해결하고 있습니다.

'#창고 > 게임과 설정' 카테고리의 다른 글

[스크랩] 은하철도999  (0) 2011.07.13
[잡동사니] ELO-RATING 계산기  (0) 2011.07.01
[모바일] Plants vs Zombie  (2) 2011.06.25
[스크랩] 지옥에 관련된 설정 자료집  (0) 2011.06.18
[소셜게임] 메이플스토리 어드벤처  (0) 2011.06.13
AOS 장르의 기원  (10) 2011.06.12
[Mobile] Rule the sky  (0) 2011.06.06

+ Recent posts